New CV test.

This commit is contained in:
Geoffrey Challen 2016-02-18 16:14:48 -05:00
parent 08fd92507d
commit 00eb1b44fb
4 changed files with 149 additions and 55 deletions

View File

@ -65,6 +65,7 @@ int cvtest(int, char **);
int cvtest2(int, char **); int cvtest2(int, char **);
int cvtest3(int, char **); int cvtest3(int, char **);
int cvtest4(int, char **); int cvtest4(int, char **);
int cvtest5(int, char **);
int rwtest(int, char **); int rwtest(int, char **);
int rwtest2(int, char **); int rwtest2(int, char **);
int rwtest3(int, char **); int rwtest3(int, char **);

View File

@ -495,6 +495,7 @@ static const char *testmenu[] = {
"[cvt2] CV test 2 (1) ", "[cvt2] CV test 2 (1) ",
"[cvt3] CV test 3 (1*) ", "[cvt3] CV test 3 (1*) ",
"[cvt4] CV test 4 (1*) ", "[cvt4] CV test 4 (1*) ",
"[cvt5] CV test 5 (1) ",
"[rwt1] RW lock test (1?) ", "[rwt1] RW lock test (1?) ",
"[rwt2] RW lock test 2 (1?) ", "[rwt2] RW lock test 2 (1?) ",
"[rwt3] RW lock test 3 (1?) ", "[rwt3] RW lock test 3 (1?) ",
@ -641,6 +642,7 @@ static struct {
{ "cvt2", cvtest2 }, { "cvt2", cvtest2 },
{ "cvt3", cvtest3 }, { "cvt3", cvtest3 },
{ "cvt4", cvtest4 }, { "cvt4", cvtest4 },
{ "cvt5", cvtest5 },
{ "rwt1", rwtest }, { "rwt1", rwtest },
{ "rwt2", rwtest2 }, { "rwt2", rwtest2 },
{ "rwt3", rwtest3 }, { "rwt3", rwtest3 },

View File

@ -56,7 +56,9 @@ static volatile unsigned long testval3;
static volatile int32_t testval4; static volatile int32_t testval4;
static struct semaphore *testsem = NULL; static struct semaphore *testsem = NULL;
static struct semaphore *testsem2 = NULL;
static struct lock *testlock = NULL; static struct lock *testlock = NULL;
static struct lock *testlock2 = NULL;
static struct cv *testcv = NULL; static struct cv *testcv = NULL;
static struct semaphore *donesem = NULL; static struct semaphore *donesem = NULL;
@ -292,18 +294,12 @@ locktest2(int nargs, char **args) {
(void)nargs; (void)nargs;
(void)args; (void)args;
int i;
kprintf_n("Starting lt2...\n"); kprintf_n("Starting lt2...\n");
kprintf_n("(This test panics on success!)\n"); kprintf_n("(This test panics on success!)\n");
for (i=0; i<CREATELOOPS; i++) {
testlock = lock_create("testlock"); testlock = lock_create("testlock");
if (testlock == NULL) { if (testlock == NULL) {
panic("lt2: lock_create failed\n"); panic("lt2: lock_create failed\n");
}
if (i != CREATELOOPS - 1) {
lock_destroy(testlock);
}
} }
ksecprintf(SECRET, "Should panic...", "lt2"); ksecprintf(SECRET, "Should panic...", "lt2");
@ -324,18 +320,12 @@ locktest3(int nargs, char **args) {
(void)nargs; (void)nargs;
(void)args; (void)args;
int i;
kprintf_n("Starting lt3...\n"); kprintf_n("Starting lt3...\n");
kprintf_n("(This test panics on success!)\n"); kprintf_n("(This test panics on success!)\n");
for (i=0; i<CREATELOOPS; i++) {
testlock = lock_create("testlock"); testlock = lock_create("testlock");
if (testlock == NULL) { if (testlock == NULL) {
panic("lt3: lock_create failed\n"); panic("lt3: lock_create failed\n");
}
if (i != CREATELOOPS - 1) {
lock_destroy(testlock);
}
} }
ksecprintf(SECRET, "Should panic...", "lt3"); ksecprintf(SECRET, "Should panic...", "lt3");
@ -419,7 +409,7 @@ cvtest(int nargs, char **args)
kprintf_t("."); kprintf_t(".");
testlock = lock_create("testlock"); testlock = lock_create("testlock");
if (testlock == NULL) { if (testlock == NULL) {
panic("lockt1: lock_create failed\n"); panic("cvt1: lock_create failed\n");
} }
testcv = cv_create("testcv"); testcv = cv_create("testcv");
if (testcv == NULL) { if (testcv == NULL) {
@ -607,23 +597,16 @@ cvtest3(int nargs, char **args) {
(void)nargs; (void)nargs;
(void)args; (void)args;
int i;
kprintf_n("Starting cvt3...\n"); kprintf_n("Starting cvt3...\n");
kprintf_n("(This test panics on success!)\n"); kprintf_n("(This test panics on success!)\n");
for (i=0; i<CREATELOOPS; i++) {
testlock = lock_create("testlock"); testlock = lock_create("testlock");
if (testlock == NULL) { if (testlock == NULL) {
panic("lockt1: lock_create failed\n"); panic("cvt3: lock_create failed\n");
} }
testcv = cv_create("testcv"); testcv = cv_create("testcv");
if (testcv == NULL) { if (testcv == NULL) {
panic("cvt1: cv_create failed\n"); panic("cvt3: cv_create failed\n");
}
if (i != CREATELOOPS - 1) {
lock_destroy(testlock);
cv_destroy(testcv);
}
} }
ksecprintf(SECRET, "Should panic...", "cvt3"); ksecprintf(SECRET, "Should panic...", "cvt3");
@ -646,23 +629,16 @@ cvtest4(int nargs, char **args) {
(void)nargs; (void)nargs;
(void)args; (void)args;
int i;
kprintf_n("Starting cvt4...\n"); kprintf_n("Starting cvt4...\n");
kprintf_n("(This test panics on success!)\n"); kprintf_n("(This test panics on success!)\n");
for (i=0; i<CREATELOOPS; i++) {
testlock = lock_create("testlock"); testlock = lock_create("testlock");
if (testlock == NULL) { if (testlock == NULL) {
panic("lockt1: lock_create failed\n"); panic("cvt4: lock_create failed\n");
} }
testcv = cv_create("testcv"); testcv = cv_create("testcv");
if (testcv == NULL) { if (testcv == NULL) {
panic("cvt1: cv_create failed\n"); panic("cvt4: cv_create failed\n");
}
if (i != CREATELOOPS - 1) {
lock_destroy(testlock);
cv_destroy(testcv);
}
} }
ksecprintf(SECRET, "Should panic...", "cvt4"); ksecprintf(SECRET, "Should panic...", "cvt4");
@ -679,3 +655,118 @@ cvtest4(int nargs, char **args) {
return 0; return 0;
} }
static
void
sleeperthread(void *junk1, unsigned long junk2) {
(void)junk1;
(void)junk2;
random_yielder(4);
lock_acquire(testlock);
random_yielder(4);
failif((testval1 != 0));
testval1 = 1;
cv_signal(testcv, testlock);
random_yielder(4);
cv_wait(testcv, testlock);
failif((testval1 != 3));
testval1 = 4;
random_yielder(4);
lock_release(testlock);
random_yielder(4);
V(exitsem);
}
static
void
wakerthread(void *junk1, unsigned long junk2) {
(void)junk1;
(void)junk2;
random_yielder(4);
lock_acquire(testlock2);
failif((testval1 != 2));
testval1 = 3;
random_yielder(4);
cv_signal(testcv, testlock2);
random_yielder(4);
lock_release(testlock2);
random_yielder(4);
V(exitsem);
}
int
cvtest5(int nargs, char **args) {
(void)nargs;
(void)args;
int result;
kprintf_n("Starting cvt5...\n");
testlock = lock_create("testlock");
if (testlock == NULL) {
panic("cvt5: lock_create failed\n");
}
testlock2 = lock_create("testlock2");
if (testlock == NULL) {
panic("cvt5: lock_create failed\n");
}
testcv = cv_create("testcv");
if (testcv == NULL) {
panic("cvt5: cv_create failed\n");
}
exitsem = sem_create("exitsem", 0);
if (exitsem == NULL) {
panic("cvt5: sem_create failed\n");
}
spinlock_init(&status_lock);
test_status = SUCCESS;
testval1 = 0;
lock_acquire(testlock);
lock_acquire(testlock2);
result = thread_fork("cvt5", NULL, sleeperthread, NULL, 0);
if (result) {
panic("cvt5: thread_fork failed\n");
}
result = thread_fork("cvt5", NULL, wakerthread, NULL, 0);
if (result) {
panic("cvt5: thread_fork failed\n");
}
random_yielder(4);
cv_wait(testcv, testlock);
failif((testval1 != 1));
testval1 = 2;
random_yielder(4);
lock_release(testlock);
random_yielder(4);
lock_release(testlock2);
P(exitsem);
P(exitsem);
failif((testval1 != 4));
sem_destroy(exitsem);
cv_destroy(testcv);
lock_destroy(testlock2);
lock_destroy(testlock);
success(test_status, SECRET, "cvt5");
exitsem = NULL;
testcv = NULL;
testlock2 = NULL;
testlock = NULL;
testsem2 = NULL;
testsem = NULL;
return 0;
}

View File

@ -164,8 +164,8 @@ clean:
rm -f *.o *.a tags $(KERNEL) rm -f *.o *.a tags $(KERNEL)
rm -rf includelinks rm -rf includelinks
@ABSTOP=$$(readlink -f $(TOP)) @ABSTOP=$$(readlink -f $(TOP))
unlink $(OSTREE)/.src rm -f $(OSTREE)/.src
unlink $(TOP)/.root rm -f $(TOP)/.root
distclean cleandir: clean distclean cleandir: clean
rm -f .depend rm -f .depend