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_msec / time_to_msec */
55 t3 = time_from_msec(500);
57 ok1(t3.tv_nsec == 500000000);
58 ok1(time_to_msec(t3) == 500);
60 t3 = time_from_msec(1000);
63 ok1(time_to_msec(t3) == 1000);
65 t3 = time_from_msec(1500);
67 ok1(t3.tv_nsec == 500000000);
68 ok1(time_to_msec(t3) == 1500);
71 t3 = time_from_usec(500000);
73 ok1(t3.tv_nsec == 500000000);
74 ok1(time_to_usec(t3) == 500000);
76 t3 = time_from_usec(1000000);
79 ok1(time_to_usec(t3) == 1000000);
81 t3 = time_from_usec(1500000);
83 ok1(t3.tv_nsec == 500000000);
84 ok1(time_to_usec(t3) == 1500000);
87 t3 = time_from_nsec(500000000);
89 ok1(t3.tv_nsec == 500000000);
90 ok1(time_to_nsec(t3) == 500000000);
92 t3 = time_from_nsec(1000000000);
95 ok1(time_to_nsec(t3) == 1000000000);
97 t3 = time_from_nsec(1500000000);
99 ok1(t3.tv_nsec == 500000000);
100 ok1(time_to_nsec(t3) == 1500000000);
103 t3 = time_sub(time_sub(t2, time_from_msec(500)), time_from_msec(500));
104 ok1(t3.tv_sec == t2.tv_sec - 1);
105 ok1(t3.tv_nsec == t2.tv_nsec);
107 /* time_divide and time_multiply */
111 t3 = time_divide(t1, 2);
112 ok1(t3.tv_sec == 50);
113 ok1(t3.tv_nsec == 50);
115 t3 = time_divide(t1, 100);
117 ok1(t3.tv_nsec == 1);
119 t3 = time_multiply(t3, 100);
120 ok1(time_eq(t3, t1));
122 t3 = time_divide(t1, 200);
124 ok1(t3.tv_nsec == 500000000);
126 /* Divide by huge number. */
127 t1.tv_sec = (1U << 31) - 1;
128 t1.tv_nsec = 999999999;
129 t2 = time_divide(t1, 1 << 30);
130 /* Allow us to round either way. */
131 ok1((t2.tv_sec == 2 && t2.tv_nsec == 0)
132 || (t2.tv_sec == 1 && t2.tv_nsec == 999999999));
134 /* Multiply by huge number. */
137 t2 = time_multiply(t1, 1UL << 31);
139 ok1(t2.tv_nsec == 147483648);
141 return exit_status();