2 #include <ccan/time/time.h>
3 #include <ccan/time/time.c>
4 #include <ccan/tap/tap.h>
11 /* If we really abort, we don't get coverage info! */
19 struct timespec t1, t2, t3, zero = { 0, 0 };
29 t3 = time_sub(t2, t1);
30 ok1(t3.tv_sec > 0 || t3.tv_nsec >= 0);
31 t3 = time_sub(t2, t2);
32 ok1(t3.tv_sec == 0 && t3.tv_nsec == 0);
33 t3 = time_sub(t1, t1);
34 ok1(t3.tv_sec == 0 && t3.tv_nsec == 0);
39 ok1(!time_eq(t1, t3));
40 ok1(!time_eq(t2, t3));
42 /* Make sure t2 > t1. */
45 t2 = time_add(t2, t3);
47 /* Test time_less and time_greater. */
48 ok1(!time_eq(t1, t2));
49 ok1(!time_greater(t1, t2));
50 ok1(time_less(t1, t2));
51 ok1(time_greater(t2, t1));
52 ok1(!time_less(t2, t1));
54 t3.tv_nsec = 999999999;
55 t2 = time_add(t2, t3);
56 ok1(!time_eq(t1, t2));
57 ok1(!time_greater(t1, t2));
58 ok1(time_less(t1, t2));
59 ok1(time_greater(t2, t1));
60 ok1(!time_less(t2, t1));
62 t3 = time_sub(t2, zero);
64 t3 = time_sub(t2, t2);
65 ok1(time_eq(t3, zero));
67 /* time_from_msec / time_to_msec */
68 t3 = time_from_msec(500);
70 ok1(t3.tv_nsec == 500000000);
71 ok1(time_to_msec(t3) == 500);
73 t3 = time_from_msec(1000);
76 ok1(time_to_msec(t3) == 1000);
78 t3 = time_from_msec(1500);
80 ok1(t3.tv_nsec == 500000000);
81 ok1(time_to_msec(t3) == 1500);
84 t3 = time_from_usec(500000);
86 ok1(t3.tv_nsec == 500000000);
87 ok1(time_to_usec(t3) == 500000);
89 t3 = time_from_usec(1000000);
92 ok1(time_to_usec(t3) == 1000000);
94 t3 = time_from_usec(1500000);
96 ok1(t3.tv_nsec == 500000000);
97 ok1(time_to_usec(t3) == 1500000);
100 t3 = time_from_nsec(500000000);
102 ok1(t3.tv_nsec == 500000000);
103 ok1(time_to_nsec(t3) == 500000000);
105 t3 = time_from_nsec(1000000000);
107 ok1(t3.tv_nsec == 0);
108 ok1(time_to_nsec(t3) == 1000000000);
110 t3 = time_from_nsec(1500000000);
112 ok1(t3.tv_nsec == 500000000);
113 ok1(time_to_nsec(t3) == 1500000000);
116 t3 = time_sub(time_sub(t2, time_from_msec(500)), time_from_msec(500));
117 ok1(t3.tv_sec == t2.tv_sec - 1);
118 ok1(t3.tv_nsec == t2.tv_nsec);
120 /* time_divide and time_multiply */
124 t3 = time_divide(t1, 2);
125 ok1(t3.tv_sec == 50);
126 ok1(t3.tv_nsec == 50);
128 t3 = time_divide(t1, 100);
130 ok1(t3.tv_nsec == 1);
132 t3 = time_multiply(t3, 100);
133 ok1(time_eq(t3, t1));
135 t3 = time_divide(t1, 200);
137 ok1(t3.tv_nsec == 500000000);
139 /* Divide by huge number. */
140 t1.tv_sec = (1U << 31) - 1;
141 t1.tv_nsec = 999999999;
142 t2 = time_divide(t1, 1 << 30);
143 /* Allow us to round either way. */
144 ok1((t2.tv_sec == 2 && t2.tv_nsec == 0)
145 || (t2.tv_sec == 1 && t2.tv_nsec == 999999999));
147 /* Multiply by huge number. */
150 t2 = time_multiply(t1, 1UL << 31);
152 ok1(t2.tv_nsec == 147483648);
163 t1.tv_nsec = 1000000001;
164 t2 = time_check(t1, NULL);
165 if (t2.tv_sec != 8 || t2.tv_nsec != 1)
169 t2 = time_check(t1, NULL);
170 if (t2.tv_sec != 0 || t2.tv_nsec != 5)
173 t1.tv_nsec = 1000000002;
174 /* We expect this to abort! */
175 t2 = time_check(t1, "abortstr");
183 while ((r = read(fds[0], readbuf + len, 1023 - len)) > 0)
187 "WARNING: malformed time"
188 " 7 seconds 1000000001 ns converted to 8.000000001.\n"
189 "WARNING: malformed time"
190 " -1 seconds 5 ns converted to 0.000000005.\n"
191 "abortstr: malformed time 8.1000000002\n") == 0);
194 ok1(WEXITSTATUS(r) == 7);
198 return exit_status();