]> git.ozlabs.org Git - ccan/blobdiff - ccan/timer/test/run.c
timer: make timer_del() idempotent, add timer_init().
[ccan] / ccan / timer / test / run.c
index cebc99ce7e5f69544ce89c7f4dedebfa677ea170..51648fb1c7978a5ba51aeb33d03c6b5ea0fb4d74 100644 (file)
@@ -13,7 +13,6 @@ int main(void)
 {
        struct timers timers;
        struct timer t[64];
-       struct list_head expired;
        struct timeabs earliest;
        uint64_t i;
        struct timeabs epoch = { { 0, 0 } };
@@ -25,6 +24,10 @@ int main(void)
        ok1(timers_check(&timers, NULL));
        ok1(!timer_earliest(&timers, &earliest));
 
+       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));
@@ -33,10 +36,15 @@ int main(void)
        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_init(&t[i*2]);
                timer_add(&timers, &t[i*2], timeabs_from_nsec(1ULL << i));
                ok1(timers_check(&timers, NULL));
+               timer_init(&t[i*2+1]);
                timer_add(&timers, &t[i*2+1], timeabs_from_nsec((1ULL << i) + 1));
                ok1(timers_check(&timers, NULL));
        }
@@ -69,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]));