xref: /aosp_15_r20/external/mesa3d/src/util/tests/timespec_test.cpp (revision 6104692788411f58d303aa86923a9ff6ecaded22)
1*61046927SAndroid Build Coastguard Worker /*
2*61046927SAndroid Build Coastguard Worker  * Copyright © 2016 Collabora, Ltd.
3*61046927SAndroid Build Coastguard Worker  *
4*61046927SAndroid Build Coastguard Worker  * Permission is hereby granted, free of charge, to any person obtaining
5*61046927SAndroid Build Coastguard Worker  * a copy of this software and associated documentation files (the
6*61046927SAndroid Build Coastguard Worker  * "Software"), to deal in the Software without restriction, including
7*61046927SAndroid Build Coastguard Worker  * without limitation the rights to use, copy, modify, merge, publish,
8*61046927SAndroid Build Coastguard Worker  * distribute, sublicense, and/or sell copies of the Software, and to
9*61046927SAndroid Build Coastguard Worker  * permit persons to whom the Software is furnished to do so, subject to
10*61046927SAndroid Build Coastguard Worker  * the following conditions:
11*61046927SAndroid Build Coastguard Worker  *
12*61046927SAndroid Build Coastguard Worker  * The above copyright notice and this permission notice (including the
13*61046927SAndroid Build Coastguard Worker  * next paragraph) shall be included in all copies or substantial
14*61046927SAndroid Build Coastguard Worker  * portions of the Software.
15*61046927SAndroid Build Coastguard Worker  *
16*61046927SAndroid Build Coastguard Worker  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17*61046927SAndroid Build Coastguard Worker  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18*61046927SAndroid Build Coastguard Worker  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19*61046927SAndroid Build Coastguard Worker  * NONINFRINGEMENT.  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
20*61046927SAndroid Build Coastguard Worker  * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
21*61046927SAndroid Build Coastguard Worker  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
22*61046927SAndroid Build Coastguard Worker  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23*61046927SAndroid Build Coastguard Worker  * SOFTWARE.
24*61046927SAndroid Build Coastguard Worker  */
25*61046927SAndroid Build Coastguard Worker 
26*61046927SAndroid Build Coastguard Worker #include <gtest/gtest.h>
27*61046927SAndroid Build Coastguard Worker 
28*61046927SAndroid Build Coastguard Worker #include "c11/time.h"
29*61046927SAndroid Build Coastguard Worker #include "util/timespec.h"
30*61046927SAndroid Build Coastguard Worker 
31*61046927SAndroid Build Coastguard Worker #include <limits>
32*61046927SAndroid Build Coastguard Worker 
TEST(timespec_test,timespec_add)33*61046927SAndroid Build Coastguard Worker TEST(timespec_test, timespec_add)
34*61046927SAndroid Build Coastguard Worker {
35*61046927SAndroid Build Coastguard Worker    struct timespec a, b, r;
36*61046927SAndroid Build Coastguard Worker 
37*61046927SAndroid Build Coastguard Worker    a.tv_sec = 1;
38*61046927SAndroid Build Coastguard Worker    a.tv_nsec = NSEC_PER_SEC - 1;
39*61046927SAndroid Build Coastguard Worker    b.tv_sec = 1;
40*61046927SAndroid Build Coastguard Worker    b.tv_nsec = 2;
41*61046927SAndroid Build Coastguard Worker    timespec_add(&r, &a, &b);
42*61046927SAndroid Build Coastguard Worker    EXPECT_EQ(r.tv_sec, 3);
43*61046927SAndroid Build Coastguard Worker    EXPECT_EQ(r.tv_nsec, 1);
44*61046927SAndroid Build Coastguard Worker }
45*61046927SAndroid Build Coastguard Worker 
TEST(timespec_test,timespec_sub)46*61046927SAndroid Build Coastguard Worker TEST(timespec_test, timespec_sub)
47*61046927SAndroid Build Coastguard Worker {
48*61046927SAndroid Build Coastguard Worker    struct timespec a, b, r;
49*61046927SAndroid Build Coastguard Worker 
50*61046927SAndroid Build Coastguard Worker    a.tv_sec = 1;
51*61046927SAndroid Build Coastguard Worker    a.tv_nsec = 1;
52*61046927SAndroid Build Coastguard Worker    b.tv_sec = 0;
53*61046927SAndroid Build Coastguard Worker    b.tv_nsec = 2;
54*61046927SAndroid Build Coastguard Worker    timespec_sub(&r, &a, &b);
55*61046927SAndroid Build Coastguard Worker    EXPECT_EQ(r.tv_sec, 0);
56*61046927SAndroid Build Coastguard Worker    EXPECT_EQ(r.tv_nsec, NSEC_PER_SEC - 1);
57*61046927SAndroid Build Coastguard Worker }
58*61046927SAndroid Build Coastguard Worker 
TEST(timespec_test,timespec_to_nsec)59*61046927SAndroid Build Coastguard Worker TEST(timespec_test, timespec_to_nsec)
60*61046927SAndroid Build Coastguard Worker {
61*61046927SAndroid Build Coastguard Worker    struct timespec a;
62*61046927SAndroid Build Coastguard Worker 
63*61046927SAndroid Build Coastguard Worker    a.tv_sec = 4;
64*61046927SAndroid Build Coastguard Worker    a.tv_nsec = 4;
65*61046927SAndroid Build Coastguard Worker    EXPECT_EQ(timespec_to_nsec(&a), (NSEC_PER_SEC * 4ULL) + 4);
66*61046927SAndroid Build Coastguard Worker }
67*61046927SAndroid Build Coastguard Worker 
TEST(timespec_test,timespec_to_usec)68*61046927SAndroid Build Coastguard Worker TEST(timespec_test, timespec_to_usec)
69*61046927SAndroid Build Coastguard Worker {
70*61046927SAndroid Build Coastguard Worker    struct timespec a;
71*61046927SAndroid Build Coastguard Worker 
72*61046927SAndroid Build Coastguard Worker    a.tv_sec = 4;
73*61046927SAndroid Build Coastguard Worker    a.tv_nsec = 4000;
74*61046927SAndroid Build Coastguard Worker    EXPECT_EQ(timespec_to_usec(&a), (4000000ULL) + 4);
75*61046927SAndroid Build Coastguard Worker }
76*61046927SAndroid Build Coastguard Worker 
TEST(timespec_test,timespec_to_msec)77*61046927SAndroid Build Coastguard Worker TEST(timespec_test, timespec_to_msec)
78*61046927SAndroid Build Coastguard Worker {
79*61046927SAndroid Build Coastguard Worker    struct timespec a;
80*61046927SAndroid Build Coastguard Worker 
81*61046927SAndroid Build Coastguard Worker    a.tv_sec = 4;
82*61046927SAndroid Build Coastguard Worker    a.tv_nsec = 4000000;
83*61046927SAndroid Build Coastguard Worker    EXPECT_EQ(timespec_to_msec(&a), (4000ULL) + 4);
84*61046927SAndroid Build Coastguard Worker }
85*61046927SAndroid Build Coastguard Worker 
TEST(timespec_test,timespec_to_proto)86*61046927SAndroid Build Coastguard Worker TEST(timespec_test, timespec_to_proto)
87*61046927SAndroid Build Coastguard Worker {
88*61046927SAndroid Build Coastguard Worker    struct timespec a;
89*61046927SAndroid Build Coastguard Worker    uint32_t tv_sec_hi;
90*61046927SAndroid Build Coastguard Worker    uint32_t tv_sec_lo;
91*61046927SAndroid Build Coastguard Worker    uint32_t tv_nsec;
92*61046927SAndroid Build Coastguard Worker 
93*61046927SAndroid Build Coastguard Worker    a.tv_sec = 0;
94*61046927SAndroid Build Coastguard Worker    a.tv_nsec = 0;
95*61046927SAndroid Build Coastguard Worker    timespec_to_proto(&a, &tv_sec_hi, &tv_sec_lo, &tv_nsec);
96*61046927SAndroid Build Coastguard Worker    EXPECT_EQ(0, tv_sec_hi);
97*61046927SAndroid Build Coastguard Worker    EXPECT_EQ(0, tv_sec_lo);
98*61046927SAndroid Build Coastguard Worker    EXPECT_EQ(0, tv_nsec);
99*61046927SAndroid Build Coastguard Worker 
100*61046927SAndroid Build Coastguard Worker    a.tv_sec = 1234;
101*61046927SAndroid Build Coastguard Worker    a.tv_nsec = NSEC_PER_SEC - 1;
102*61046927SAndroid Build Coastguard Worker    timespec_to_proto(&a, &tv_sec_hi, &tv_sec_lo, &tv_nsec);
103*61046927SAndroid Build Coastguard Worker    EXPECT_EQ(0, tv_sec_hi);
104*61046927SAndroid Build Coastguard Worker    EXPECT_EQ(1234, tv_sec_lo);
105*61046927SAndroid Build Coastguard Worker    EXPECT_EQ(NSEC_PER_SEC - 1, tv_nsec);
106*61046927SAndroid Build Coastguard Worker 
107*61046927SAndroid Build Coastguard Worker    a.tv_sec = (time_t)0x7000123470005678LL;
108*61046927SAndroid Build Coastguard Worker    a.tv_nsec = 1;
109*61046927SAndroid Build Coastguard Worker    timespec_to_proto(&a, &tv_sec_hi, &tv_sec_lo, &tv_nsec);
110*61046927SAndroid Build Coastguard Worker    EXPECT_EQ((uint64_t)a.tv_sec >> 32, tv_sec_hi);
111*61046927SAndroid Build Coastguard Worker    EXPECT_EQ(0x70005678, tv_sec_lo);
112*61046927SAndroid Build Coastguard Worker    EXPECT_EQ(1, tv_nsec);
113*61046927SAndroid Build Coastguard Worker }
114*61046927SAndroid Build Coastguard Worker 
TEST(timespec_test,millihz_to_nsec)115*61046927SAndroid Build Coastguard Worker TEST(timespec_test, millihz_to_nsec)
116*61046927SAndroid Build Coastguard Worker {
117*61046927SAndroid Build Coastguard Worker    EXPECT_EQ(millihz_to_nsec(60000), 16666666);
118*61046927SAndroid Build Coastguard Worker }
119*61046927SAndroid Build Coastguard Worker 
TEST(timespec_test,time_t_max)120*61046927SAndroid Build Coastguard Worker TEST(timespec_test, time_t_max)
121*61046927SAndroid Build Coastguard Worker {
122*61046927SAndroid Build Coastguard Worker    /* The TIME_T_MAX macro assumes it's no more than 64 bits */
123*61046927SAndroid Build Coastguard Worker    EXPECT_LE(sizeof(time_t), sizeof(uint64_t));
124*61046927SAndroid Build Coastguard Worker 
125*61046927SAndroid Build Coastguard Worker    time_t t = TIME_T_MAX;
126*61046927SAndroid Build Coastguard Worker    EXPECT_EQ((uint64_t)t, (uint64_t)TIME_T_MAX);
127*61046927SAndroid Build Coastguard Worker 
128*61046927SAndroid Build Coastguard Worker    /* Since the tests are C++ code, we have std::numeric_limits */
129*61046927SAndroid Build Coastguard Worker    EXPECT_EQ(std::numeric_limits<time_t>::max(), TIME_T_MAX);
130*61046927SAndroid Build Coastguard Worker }
131*61046927SAndroid Build Coastguard Worker 
TEST(timespec_test,timespec_add_nsec)132*61046927SAndroid Build Coastguard Worker TEST(timespec_test, timespec_add_nsec)
133*61046927SAndroid Build Coastguard Worker {
134*61046927SAndroid Build Coastguard Worker    struct timespec a, r;
135*61046927SAndroid Build Coastguard Worker 
136*61046927SAndroid Build Coastguard Worker    a.tv_sec = 0;
137*61046927SAndroid Build Coastguard Worker    a.tv_nsec = NSEC_PER_SEC - 1;
138*61046927SAndroid Build Coastguard Worker    EXPECT_FALSE(timespec_add_nsec(&r, &a, 1));
139*61046927SAndroid Build Coastguard Worker    EXPECT_EQ(1, r.tv_sec);
140*61046927SAndroid Build Coastguard Worker    EXPECT_EQ(0, r.tv_nsec);
141*61046927SAndroid Build Coastguard Worker 
142*61046927SAndroid Build Coastguard Worker    EXPECT_FALSE(timespec_add_nsec(&r, &a, 2));
143*61046927SAndroid Build Coastguard Worker    EXPECT_EQ(1, r.tv_sec);
144*61046927SAndroid Build Coastguard Worker    EXPECT_EQ(1, r.tv_nsec);
145*61046927SAndroid Build Coastguard Worker 
146*61046927SAndroid Build Coastguard Worker    EXPECT_FALSE(timespec_add_nsec(&r, &a, (NSEC_PER_SEC * 2ULL)));
147*61046927SAndroid Build Coastguard Worker    EXPECT_EQ(2, r.tv_sec);
148*61046927SAndroid Build Coastguard Worker    EXPECT_EQ(NSEC_PER_SEC - 1, r.tv_nsec);
149*61046927SAndroid Build Coastguard Worker 
150*61046927SAndroid Build Coastguard Worker    EXPECT_FALSE(timespec_add_nsec(&r, &a, (NSEC_PER_SEC * 2ULL) + 2));
151*61046927SAndroid Build Coastguard Worker    EXPECT_EQ(r.tv_sec, 3);
152*61046927SAndroid Build Coastguard Worker    EXPECT_EQ(r.tv_nsec, 1);
153*61046927SAndroid Build Coastguard Worker 
154*61046927SAndroid Build Coastguard Worker    r.tv_sec = 4;
155*61046927SAndroid Build Coastguard Worker    r.tv_nsec = 0;
156*61046927SAndroid Build Coastguard Worker    EXPECT_FALSE(timespec_add_nsec(&r, &r, NSEC_PER_SEC + 10ULL));
157*61046927SAndroid Build Coastguard Worker    EXPECT_EQ(5, r.tv_sec);
158*61046927SAndroid Build Coastguard Worker    EXPECT_EQ(10, r.tv_nsec);
159*61046927SAndroid Build Coastguard Worker 
160*61046927SAndroid Build Coastguard Worker    EXPECT_FALSE(timespec_add_nsec(&r, &r, (NSEC_PER_SEC * 3ULL) - 9ULL));
161*61046927SAndroid Build Coastguard Worker    EXPECT_EQ(8, r.tv_sec);
162*61046927SAndroid Build Coastguard Worker    EXPECT_EQ(1, r.tv_nsec);
163*61046927SAndroid Build Coastguard Worker 
164*61046927SAndroid Build Coastguard Worker    EXPECT_FALSE(timespec_add_nsec(&r, &r, (NSEC_PER_SEC * 7ULL) +
165*61046927SAndroid Build Coastguard Worker                                           (NSEC_PER_SEC - 1ULL)));
166*61046927SAndroid Build Coastguard Worker    EXPECT_EQ(16, r.tv_sec);
167*61046927SAndroid Build Coastguard Worker    EXPECT_EQ(0, r.tv_nsec);
168*61046927SAndroid Build Coastguard Worker 
169*61046927SAndroid Build Coastguard Worker    a.tv_sec = TIME_T_MAX;
170*61046927SAndroid Build Coastguard Worker    a.tv_nsec = 0;
171*61046927SAndroid Build Coastguard Worker    EXPECT_TRUE(timespec_add_nsec(&r, &a, UINT64_MAX));
172*61046927SAndroid Build Coastguard Worker 
173*61046927SAndroid Build Coastguard Worker    a.tv_sec = TIME_T_MAX;
174*61046927SAndroid Build Coastguard Worker    a.tv_nsec = 0;
175*61046927SAndroid Build Coastguard Worker    EXPECT_TRUE(timespec_add_nsec(&r, &a, NSEC_PER_SEC));
176*61046927SAndroid Build Coastguard Worker 
177*61046927SAndroid Build Coastguard Worker    a.tv_sec = TIME_T_MAX;
178*61046927SAndroid Build Coastguard Worker    a.tv_nsec = NSEC_PER_SEC / 2;
179*61046927SAndroid Build Coastguard Worker    EXPECT_TRUE(timespec_add_nsec(&r, &a, NSEC_PER_SEC / 2));
180*61046927SAndroid Build Coastguard Worker }
181*61046927SAndroid Build Coastguard Worker 
TEST(timespec_test,timespec_add_msec)182*61046927SAndroid Build Coastguard Worker TEST(timespec_test, timespec_add_msec)
183*61046927SAndroid Build Coastguard Worker {
184*61046927SAndroid Build Coastguard Worker    struct timespec a, r;
185*61046927SAndroid Build Coastguard Worker 
186*61046927SAndroid Build Coastguard Worker    a.tv_sec = 1000;
187*61046927SAndroid Build Coastguard Worker    a.tv_nsec = 1;
188*61046927SAndroid Build Coastguard Worker    timespec_add_msec(&r, &a, 2002);
189*61046927SAndroid Build Coastguard Worker    EXPECT_EQ(1002, r.tv_sec);
190*61046927SAndroid Build Coastguard Worker    EXPECT_EQ(2000001, r.tv_nsec);
191*61046927SAndroid Build Coastguard Worker }
192*61046927SAndroid Build Coastguard Worker 
TEST(timespec_test,timespec_sub_to_nsec)193*61046927SAndroid Build Coastguard Worker TEST(timespec_test, timespec_sub_to_nsec)
194*61046927SAndroid Build Coastguard Worker {
195*61046927SAndroid Build Coastguard Worker    struct timespec a, b;
196*61046927SAndroid Build Coastguard Worker 
197*61046927SAndroid Build Coastguard Worker    a.tv_sec = 1000;
198*61046927SAndroid Build Coastguard Worker    a.tv_nsec = 1;
199*61046927SAndroid Build Coastguard Worker    b.tv_sec = 1;
200*61046927SAndroid Build Coastguard Worker    b.tv_nsec = 2;
201*61046927SAndroid Build Coastguard Worker    EXPECT_EQ((999LL * NSEC_PER_SEC) - 1, timespec_sub_to_nsec(&a, &b));
202*61046927SAndroid Build Coastguard Worker }
203*61046927SAndroid Build Coastguard Worker 
TEST(timespec_test,timespec_sub_to_msec)204*61046927SAndroid Build Coastguard Worker TEST(timespec_test, timespec_sub_to_msec)
205*61046927SAndroid Build Coastguard Worker {
206*61046927SAndroid Build Coastguard Worker    struct timespec a, b;
207*61046927SAndroid Build Coastguard Worker 
208*61046927SAndroid Build Coastguard Worker    a.tv_sec = 1000;
209*61046927SAndroid Build Coastguard Worker    a.tv_nsec = 2000000L;
210*61046927SAndroid Build Coastguard Worker    b.tv_sec = 2;
211*61046927SAndroid Build Coastguard Worker    b.tv_nsec = 1000000L;
212*61046927SAndroid Build Coastguard Worker    EXPECT_EQ((998 * 1000) + 1, timespec_sub_to_msec(&a, &b));
213*61046927SAndroid Build Coastguard Worker }
214*61046927SAndroid Build Coastguard Worker 
TEST(timespec_test,timespec_from_nsec)215*61046927SAndroid Build Coastguard Worker TEST(timespec_test, timespec_from_nsec)
216*61046927SAndroid Build Coastguard Worker {
217*61046927SAndroid Build Coastguard Worker    struct timespec a;
218*61046927SAndroid Build Coastguard Worker 
219*61046927SAndroid Build Coastguard Worker    timespec_from_nsec(&a, 0);
220*61046927SAndroid Build Coastguard Worker    EXPECT_EQ(0, a.tv_sec);
221*61046927SAndroid Build Coastguard Worker    EXPECT_EQ(0, a.tv_nsec);
222*61046927SAndroid Build Coastguard Worker 
223*61046927SAndroid Build Coastguard Worker    timespec_from_nsec(&a, NSEC_PER_SEC - 1);
224*61046927SAndroid Build Coastguard Worker    EXPECT_EQ(0, a.tv_sec);
225*61046927SAndroid Build Coastguard Worker    EXPECT_EQ(NSEC_PER_SEC - 1, a.tv_nsec);
226*61046927SAndroid Build Coastguard Worker 
227*61046927SAndroid Build Coastguard Worker    timespec_from_nsec(&a, NSEC_PER_SEC);
228*61046927SAndroid Build Coastguard Worker    EXPECT_EQ(1, a.tv_sec);
229*61046927SAndroid Build Coastguard Worker    EXPECT_EQ(0, a.tv_nsec);
230*61046927SAndroid Build Coastguard Worker 
231*61046927SAndroid Build Coastguard Worker    timespec_from_nsec(&a, (5LL * NSEC_PER_SEC) + 1);
232*61046927SAndroid Build Coastguard Worker    EXPECT_EQ(5, a.tv_sec);
233*61046927SAndroid Build Coastguard Worker    EXPECT_EQ(1, a.tv_nsec);
234*61046927SAndroid Build Coastguard Worker 
235*61046927SAndroid Build Coastguard Worker    timespec_from_nsec(&a, UINT64_MAX);
236*61046927SAndroid Build Coastguard Worker    EXPECT_EQ(a.tv_nsec, UINT64_MAX % NSEC_PER_SEC);
237*61046927SAndroid Build Coastguard Worker    EXPECT_EQ(a.tv_sec, (time_t)(UINT64_MAX / NSEC_PER_SEC));
238*61046927SAndroid Build Coastguard Worker }
239*61046927SAndroid Build Coastguard Worker 
TEST(timespec_test,timespec_from_usec)240*61046927SAndroid Build Coastguard Worker TEST(timespec_test, timespec_from_usec)
241*61046927SAndroid Build Coastguard Worker {
242*61046927SAndroid Build Coastguard Worker    struct timespec a;
243*61046927SAndroid Build Coastguard Worker 
244*61046927SAndroid Build Coastguard Worker    timespec_from_usec(&a, 0);
245*61046927SAndroid Build Coastguard Worker    EXPECT_EQ(0, a.tv_sec);
246*61046927SAndroid Build Coastguard Worker    EXPECT_EQ(0, a.tv_nsec);
247*61046927SAndroid Build Coastguard Worker 
248*61046927SAndroid Build Coastguard Worker    timespec_from_usec(&a, 999999);
249*61046927SAndroid Build Coastguard Worker    EXPECT_EQ(0, a.tv_sec);
250*61046927SAndroid Build Coastguard Worker    EXPECT_EQ(999999 * 1000, a.tv_nsec);
251*61046927SAndroid Build Coastguard Worker 
252*61046927SAndroid Build Coastguard Worker    timespec_from_usec(&a, 1000000);
253*61046927SAndroid Build Coastguard Worker    EXPECT_EQ(1, a.tv_sec);
254*61046927SAndroid Build Coastguard Worker    EXPECT_EQ(0, a.tv_nsec);
255*61046927SAndroid Build Coastguard Worker 
256*61046927SAndroid Build Coastguard Worker    timespec_from_usec(&a, 5000001);
257*61046927SAndroid Build Coastguard Worker    EXPECT_EQ(5, a.tv_sec);
258*61046927SAndroid Build Coastguard Worker    EXPECT_EQ(1000, a.tv_nsec);
259*61046927SAndroid Build Coastguard Worker }
260*61046927SAndroid Build Coastguard Worker 
TEST(timespec_test,timespec_from_msec)261*61046927SAndroid Build Coastguard Worker TEST(timespec_test, timespec_from_msec)
262*61046927SAndroid Build Coastguard Worker {
263*61046927SAndroid Build Coastguard Worker    struct timespec a;
264*61046927SAndroid Build Coastguard Worker 
265*61046927SAndroid Build Coastguard Worker    timespec_from_msec(&a, 0);
266*61046927SAndroid Build Coastguard Worker    EXPECT_EQ(0, a.tv_sec);
267*61046927SAndroid Build Coastguard Worker    EXPECT_EQ(0, a.tv_nsec);
268*61046927SAndroid Build Coastguard Worker 
269*61046927SAndroid Build Coastguard Worker    timespec_from_msec(&a, 999);
270*61046927SAndroid Build Coastguard Worker    EXPECT_EQ(0, a.tv_sec);
271*61046927SAndroid Build Coastguard Worker    EXPECT_EQ(999 * 1000000, a.tv_nsec);
272*61046927SAndroid Build Coastguard Worker 
273*61046927SAndroid Build Coastguard Worker    timespec_from_msec(&a, 1000);
274*61046927SAndroid Build Coastguard Worker    EXPECT_EQ(1, a.tv_sec);
275*61046927SAndroid Build Coastguard Worker    EXPECT_EQ(0, a.tv_nsec);
276*61046927SAndroid Build Coastguard Worker 
277*61046927SAndroid Build Coastguard Worker    timespec_from_msec(&a, 5001);
278*61046927SAndroid Build Coastguard Worker    EXPECT_EQ(5, a.tv_sec);
279*61046927SAndroid Build Coastguard Worker    EXPECT_EQ(1000000, a.tv_nsec);
280*61046927SAndroid Build Coastguard Worker }
281*61046927SAndroid Build Coastguard Worker 
TEST(timespec_test,timespec_from_proto)282*61046927SAndroid Build Coastguard Worker TEST(timespec_test, timespec_from_proto)
283*61046927SAndroid Build Coastguard Worker {
284*61046927SAndroid Build Coastguard Worker    struct timespec a;
285*61046927SAndroid Build Coastguard Worker 
286*61046927SAndroid Build Coastguard Worker    timespec_from_proto(&a, 0, 0, 0);
287*61046927SAndroid Build Coastguard Worker    EXPECT_EQ(0, a.tv_sec);
288*61046927SAndroid Build Coastguard Worker    EXPECT_EQ(0, a.tv_nsec);
289*61046927SAndroid Build Coastguard Worker 
290*61046927SAndroid Build Coastguard Worker    timespec_from_proto(&a, 0, 1234, 9999);
291*61046927SAndroid Build Coastguard Worker    EXPECT_EQ(1234, a.tv_sec);
292*61046927SAndroid Build Coastguard Worker    EXPECT_EQ(9999, a.tv_nsec);
293*61046927SAndroid Build Coastguard Worker 
294*61046927SAndroid Build Coastguard Worker    timespec_from_proto(&a, 0x1234, 0x5678, 1);
295*61046927SAndroid Build Coastguard Worker    EXPECT_EQ((time_t)0x0000123400005678LL, a.tv_sec);
296*61046927SAndroid Build Coastguard Worker    EXPECT_EQ(1, a.tv_nsec);
297*61046927SAndroid Build Coastguard Worker }
298*61046927SAndroid Build Coastguard Worker 
TEST(timespec_test,timespec_is_zero)299*61046927SAndroid Build Coastguard Worker TEST(timespec_test, timespec_is_zero)
300*61046927SAndroid Build Coastguard Worker {
301*61046927SAndroid Build Coastguard Worker    struct timespec zero = { 0 };
302*61046927SAndroid Build Coastguard Worker    struct timespec non_zero_sec = { 1, 0 };
303*61046927SAndroid Build Coastguard Worker    struct timespec non_zero_nsec = { 0, 1 };
304*61046927SAndroid Build Coastguard Worker 
305*61046927SAndroid Build Coastguard Worker    EXPECT_TRUE(timespec_is_zero(&zero));
306*61046927SAndroid Build Coastguard Worker    EXPECT_FALSE(timespec_is_zero(&non_zero_nsec));
307*61046927SAndroid Build Coastguard Worker    EXPECT_FALSE(timespec_is_zero(&non_zero_sec));
308*61046927SAndroid Build Coastguard Worker }
309*61046927SAndroid Build Coastguard Worker 
TEST(timespec_test,timespec_eq)310*61046927SAndroid Build Coastguard Worker TEST(timespec_test, timespec_eq)
311*61046927SAndroid Build Coastguard Worker {
312*61046927SAndroid Build Coastguard Worker    struct timespec a = { 2, 1 };
313*61046927SAndroid Build Coastguard Worker    struct timespec b = { -1, 2 };
314*61046927SAndroid Build Coastguard Worker 
315*61046927SAndroid Build Coastguard Worker    EXPECT_TRUE(timespec_eq(&a, &a));
316*61046927SAndroid Build Coastguard Worker    EXPECT_TRUE(timespec_eq(&b, &b));
317*61046927SAndroid Build Coastguard Worker 
318*61046927SAndroid Build Coastguard Worker    EXPECT_FALSE(timespec_eq(&a, &b));
319*61046927SAndroid Build Coastguard Worker    EXPECT_FALSE(timespec_eq(&b, &a));
320*61046927SAndroid Build Coastguard Worker }
321*61046927SAndroid Build Coastguard Worker 
TEST(timespec_test,timespec_get)322*61046927SAndroid Build Coastguard Worker TEST(timespec_test, timespec_get)
323*61046927SAndroid Build Coastguard Worker {
324*61046927SAndroid Build Coastguard Worker    struct timespec a;
325*61046927SAndroid Build Coastguard Worker    struct timespec b;
326*61046927SAndroid Build Coastguard Worker    time_t t;
327*61046927SAndroid Build Coastguard Worker    timespec_get(&a, TIME_UTC);
328*61046927SAndroid Build Coastguard Worker    time(&t);
329*61046927SAndroid Build Coastguard Worker    timespec_get(&b, TIME_UTC);
330*61046927SAndroid Build Coastguard Worker    /* `t + 1` and `t - 1` are used intentionally for avoid flakes */
331*61046927SAndroid Build Coastguard Worker    EXPECT_LE(a.tv_sec, t + 1);
332*61046927SAndroid Build Coastguard Worker    EXPECT_LE(t - 1, b.tv_sec);
333*61046927SAndroid Build Coastguard Worker }
334