1 #include <ccan/time/time.h>
2 #include <ccan/time/time.c>
3 #include <ccan/tap/tap.h>
7 struct timespec t1, t2, t3, zero = { 0, 0 };
16 t3 = time_sub(t2, t1);
17 ok1(t3.tv_sec > 0 || t3.tv_nsec >= 0);
18 t3 = time_sub(t2, t2);
19 ok1(t3.tv_sec == 0 && t3.tv_nsec == 0);
20 t3 = time_sub(t1, t1);
21 ok1(t3.tv_sec == 0 && t3.tv_nsec == 0);
26 ok1(!time_eq(t1, t3));
27 ok1(!time_eq(t2, t3));
29 /* Make sure t2 > t1. */
32 t2 = time_add(t2, t3);
34 /* Test time_less and time_greater. */
35 ok1(!time_eq(t1, t2));
36 ok1(!time_greater(t1, t2));
37 ok1(time_less(t1, t2));
38 ok1(time_greater(t2, t1));
39 ok1(!time_less(t2, t1));
41 t3.tv_nsec = 999999999;
42 t2 = time_add(t2, t3);
43 ok1(!time_eq(t1, t2));
44 ok1(!time_greater(t1, t2));
45 ok1(time_less(t1, t2));
46 ok1(time_greater(t2, t1));
47 ok1(!time_less(t2, t1));
49 t3 = time_sub(t2, zero);
51 t3 = time_sub(t2, t2);
52 ok1(time_eq(t3, zero));
54 /* time_from_sec / time_to_sec */
55 t3 = time_from_sec(500);
56 ok1(t3.tv_sec == 500);
58 ok1(time_to_sec(t3) == 500);
60 /* time_from_msec / time_to_msec */
61 t3 = time_from_msec(500);
63 ok1(t3.tv_nsec == 500000000);
64 ok1(time_to_msec(t3) == 500);
66 t3 = time_from_msec(1000);
69 ok1(time_to_msec(t3) == 1000);
71 t3 = time_from_msec(1500);
73 ok1(t3.tv_nsec == 500000000);
74 ok1(time_to_msec(t3) == 1500);
77 t3 = time_from_usec(500000);
79 ok1(t3.tv_nsec == 500000000);
80 ok1(time_to_usec(t3) == 500000);
82 t3 = time_from_usec(1000000);
85 ok1(time_to_usec(t3) == 1000000);
87 t3 = time_from_usec(1500000);
89 ok1(t3.tv_nsec == 500000000);
90 ok1(time_to_usec(t3) == 1500000);
93 t3 = time_from_nsec(500000000);
95 ok1(t3.tv_nsec == 500000000);
96 ok1(time_to_nsec(t3) == 500000000);
98 t3 = time_from_nsec(1000000000);
100 ok1(t3.tv_nsec == 0);
101 ok1(time_to_nsec(t3) == 1000000000);
103 t3 = time_from_nsec(1500000000);
105 ok1(t3.tv_nsec == 500000000);
106 ok1(time_to_nsec(t3) == 1500000000);
109 t3 = time_sub(time_sub(t2, time_from_msec(500)), time_from_msec(500));
110 ok1(t3.tv_sec == t2.tv_sec - 1);
111 ok1(t3.tv_nsec == t2.tv_nsec);
113 /* time_divide and time_multiply */
117 t3 = time_divide(t1, 2);
118 ok1(t3.tv_sec == 50);
119 ok1(t3.tv_nsec == 50);
121 t3 = time_divide(t1, 100);
123 ok1(t3.tv_nsec == 1);
125 t3 = time_multiply(t3, 100);
126 ok1(time_eq(t3, t1));
128 t3 = time_divide(t1, 200);
130 ok1(t3.tv_nsec == 500000000);
132 /* Divide by huge number. */
133 t1.tv_sec = (1U << 31) - 1;
134 t1.tv_nsec = 999999999;
135 t2 = time_divide(t1, 1 << 30);
136 /* Allow us to round either way. */
137 ok1((t2.tv_sec == 2 && t2.tv_nsec == 0)
138 || (t2.tv_sec == 1 && t2.tv_nsec == 999999999));
140 /* Multiply by huge number. */
143 t2 = time_multiply(t1, 1UL << 31);
145 ok1(t2.tv_nsec == 147483648);
147 return exit_status();