X-Git-Url: http://git.ozlabs.org/?p=ccan;a=blobdiff_plain;f=ccan%2Ftimer%2Ftest%2Frun.c;h=51648fb1c7978a5ba51aeb33d03c6b5ea0fb4d74;hp=2946ba10d653b8a1b9731d6bbed04dc8ace61d56;hb=a9d42b8d3bf2b37f47caa428e869fceb4bb33082;hpb=606cca7b0ed5236d1df1c4436ca79db6e3fd5321 diff --git a/ccan/timer/test/run.c b/ccan/timer/test/run.c index 2946ba10..51648fb1 100644 --- a/ccan/timer/test/run.c +++ b/ccan/timer/test/run.c @@ -3,34 +3,49 @@ #include #include +static struct timeabs timeabs_from_nsec(unsigned long long nsec) +{ + struct timeabs epoch = { { 0, 0 } }; + return timeabs_add(epoch, time_from_nsec(nsec)); +} + int main(void) { struct timers timers; struct timer t[64]; - struct list_head expired; - struct timespec earliest; + struct timeabs earliest; uint64_t i; + struct timeabs epoch = { { 0, 0 } }; /* This is how many tests you plan to run */ plan_tests(488); - timers_init(&timers, time_from_nsec(0)); + timers_init(&timers, epoch); ok1(timers_check(&timers, NULL)); ok1(!timer_earliest(&timers, &earliest)); - timer_add(&timers, &t[0], time_from_nsec(1)); + timer_init(&t[0]); + /* timer_del can be called immediately after init. */ + timer_del(&timers, &t[0]); + + timer_add(&timers, &t[0], timeabs_from_nsec(1)); ok1(timers_check(&timers, NULL)); ok1(timer_earliest(&timers, &earliest)); - ok1(time_eq(earliest, grains_to_time(t[0].time))); + ok1(timeabs_eq(earliest, grains_to_time(t[0].time))); timer_del(&timers, &t[0]); ok1(timers_check(&timers, NULL)); ok1(!timer_earliest(&timers, &earliest)); + /* timer_del can be called twice, no problems. */ + timer_del(&timers, &t[0]); + /* Check timer ordering. */ for (i = 0; i < 32; i++) { - timer_add(&timers, &t[i*2], time_from_nsec(1ULL << i)); + timer_init(&t[i*2]); + timer_add(&timers, &t[i*2], timeabs_from_nsec(1ULL << i)); ok1(timers_check(&timers, NULL)); - timer_add(&timers, &t[i*2+1], time_from_nsec((1ULL << i) + 1)); + timer_init(&t[i*2+1]); + timer_add(&timers, &t[i*2+1], timeabs_from_nsec((1ULL << i) + 1)); ok1(timers_check(&timers, NULL)); } @@ -52,9 +67,9 @@ int main(void) for (i = 0; i < 32; i++) { uint64_t exp = (uint64_t)TIMER_GRANULARITY << i; - timer_add(&timers, &t[i*2], time_from_nsec(exp)); + timer_add(&timers, &t[i*2], timeabs_from_nsec(exp)); ok1(timers_check(&timers, NULL)); - timer_add(&timers, &t[i*2+1], time_from_nsec(exp + 1)); + timer_add(&timers, &t[i*2+1], timeabs_from_nsec(exp + 1)); ok1(timers_check(&timers, NULL)); } @@ -62,13 +77,11 @@ int main(void) struct timer *t1, *t2; ok1(timer_earliest(&timers, &earliest)); - timers_expire(&timers, earliest, &expired); - - t1 = list_pop(&expired, struct timer, list); + t1 = timers_expire(&timers, earliest); ok1(t1); - t2 = list_pop(&expired, struct timer, list); + t2 = timers_expire(&timers, earliest); ok1(t2); - ok1(list_empty(&expired)); + ok1(!timers_expire(&timers, earliest)); ok1(t1 == &t[i*2] || t1 == &t[i*2+1]); ok1(t2 != t1 && (t2 == &t[i*2] || t2 == &t[i*2+1]));