VirtualBox

source: vbox/trunk/src/VBox/Runtime/testcase/tstTimeSpec.cpp@ 25856

Last change on this file since 25856 was 25856, checked in by vboxsync, 15 years ago

tstTimeSpec.cpp: Converted to RTTest and added conversion tests.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
File size: 17.5 KB
Line 
1/* $Id: tstTimeSpec.cpp 25856 2010-01-15 13:16:29Z vboxsync $ */
2/** @file
3 * IPRT - RTTimeSpec and PRTTIME tests.
4 */
5
6/*
7 * Copyright (C) 2006-2007 Sun Microsystems, Inc.
8 *
9 * This file is part of VirtualBox Open Source Edition (OSE), as
10 * available from http://www.virtualbox.org. This file is free software;
11 * you can redistribute it and/or modify it under the terms of the GNU
12 * General Public License (GPL) as published by the Free Software
13 * Foundation, in version 2 as it comes in the "COPYING" file of the
14 * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
15 * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
16 *
17 * The contents of this file may alternatively be used under the terms
18 * of the Common Development and Distribution License Version 1.0
19 * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
20 * VirtualBox OSE distribution, in which case the provisions of the
21 * CDDL are applicable instead of those of the GPL.
22 *
23 * You may elect to license modified versions of this file under the
24 * terms and conditions of either the GPL or the CDDL or both.
25 *
26 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
27 * Clara, CA 95054 USA or visit http://www.sun.com if you need
28 * additional information or have any questions.
29 */
30
31/*******************************************************************************
32* Header Files *
33*******************************************************************************/
34#if !defined(RT_OS_WINDOWS)
35# define RTTIME_INCL_TIMEVAL
36# define RTTIME_INCL_TIMESPEC
37# include <time.h>
38#endif
39#include <iprt/time.h>
40
41#include <iprt/test.h>
42#include <iprt/string.h>
43
44
45/**
46 * Format the time into a string using a static buffer.
47 */
48char *ToString(PRTTIME pTime)
49{
50 static char szBuf[128];
51 RTStrPrintf(szBuf, sizeof(szBuf), "%04d-%02d-%02dT%02u:%02u:%02u.%09u [YD%u WD%u UO%d F%#x]",
52 pTime->i32Year,
53 pTime->u8Month,
54 pTime->u8MonthDay,
55 pTime->u8Hour,
56 pTime->u8Minute,
57 pTime->u8Second,
58 pTime->u32Nanosecond,
59 pTime->u16YearDay,
60 pTime->u8WeekDay,
61 pTime->offUTC,
62 pTime->fFlags);
63 return szBuf;
64}
65
66#define CHECK_NZ(expr) do { if (!(expr)) { RTTestIFailed("at line %d: %#x\n", __LINE__, #expr); return RTTestSummaryAndDestroy(hTest); } } while (0)
67
68#define TEST_NS(ns) do {\
69 CHECK_NZ(RTTimeExplode(&T1, RTTimeSpecSetNano(&Ts1, ns))); \
70 RTTestIPrintf(RTTESTLVL_ALWAYS, "%RI64 ns - %s\n", ns, ToString(&T1)); \
71 CHECK_NZ(RTTimeImplode(&Ts2, &T1)); \
72 if (!RTTimeSpecIsEqual(&Ts2, &Ts1)) \
73 RTTestIFailed("FAILURE - %RI64 != %RI64, line no. %d\n", \
74 RTTimeSpecGetNano(&Ts2), RTTimeSpecGetNano(&Ts1), __LINE__); \
75 } while (0)
76
77#define TEST_SEC(sec) do {\
78 CHECK_NZ(RTTimeExplode(&T1, RTTimeSpecSetSeconds(&Ts1, sec))); \
79 RTTestIPrintf(RTTESTLVL_ALWAYS, "%RI64 sec - %s\n", sec, ToString(&T1)); \
80 CHECK_NZ(RTTimeImplode(&Ts2, &T1)); \
81 if (!RTTimeSpecIsEqual(&Ts2, &Ts1)) \
82 RTTestIFailed("FAILURE - %RI64 != %RI64, line no. %d\n", \
83 RTTimeSpecGetNano(&Ts2), RTTimeSpecGetNano(&Ts1), __LINE__); \
84 } while (0)
85
86#define CHECK_TIME(pTime, _i32Year, _u8Month, _u8MonthDay, _u8Hour, _u8Minute, _u8Second, _u32Nanosecond, _u16YearDay, _u8WeekDay, _offUTC, _fFlags)\
87 do { \
88 if ( (pTime)->i32Year != (_i32Year) \
89 || (pTime)->u8Month != (_u8Month) \
90 || (pTime)->u8WeekDay != (_u8WeekDay) \
91 || (pTime)->u16YearDay != (_u16YearDay) \
92 || (pTime)->u8MonthDay != (_u8MonthDay) \
93 || (pTime)->u8Hour != (_u8Hour) \
94 || (pTime)->u8Minute != (_u8Minute) \
95 || (pTime)->u8Second != (_u8Second) \
96 || (pTime)->u32Nanosecond != (_u32Nanosecond) \
97 || (pTime)->offUTC != (_offUTC) \
98 || (pTime)->fFlags != (_fFlags) \
99 ) \
100 { \
101 RTTestIFailed(" %s ; line no %d\n" \
102 "!= %04d-%02d-%02dT%02u-%02u-%02u.%09u [YD%u WD%u UO%d F%#x]\n", \
103 ToString(pTime), __LINE__, (_i32Year), (_u8Month), (_u8MonthDay), (_u8Hour), (_u8Minute), \
104 (_u8Second), (_u32Nanosecond), (_u16YearDay), (_u8WeekDay), (_offUTC), (_fFlags)); \
105 } \
106 else \
107 RTTestIPrintf(RTTESTLVL_ALWAYS, "=> %s\n", ToString(pTime)); \
108 } while (0)
109
110#define SET_TIME(pTime, _i32Year, _u8Month, _u8MonthDay, _u8Hour, _u8Minute, _u8Second, _u32Nanosecond, _u16YearDay, _u8WeekDay, _offUTC, _fFlags)\
111 do { \
112 (pTime)->i32Year = (_i32Year); \
113 (pTime)->u8Month = (_u8Month); \
114 (pTime)->u8WeekDay = (_u8WeekDay); \
115 (pTime)->u16YearDay = (_u16YearDay); \
116 (pTime)->u8MonthDay = (_u8MonthDay); \
117 (pTime)->u8Hour = (_u8Hour); \
118 (pTime)->u8Minute = (_u8Minute); \
119 (pTime)->u8Second = (_u8Second); \
120 (pTime)->u32Nanosecond = (_u32Nanosecond); \
121 (pTime)->offUTC = (_offUTC); \
122 (pTime)->fFlags = (_fFlags); \
123 RTTestIPrintf(RTTESTLVL_ALWAYS, " %s\n", ToString(pTime)); \
124 } while (0)
125
126
127int main()
128{
129 RTTIMESPEC Now;
130 RTTIMESPEC Ts1;
131 RTTIMESPEC Ts2;
132 RTTIME T1;
133 RTTIME T2;
134#ifdef RTTIME_INCL_TIMEVAL
135 struct timeval Tv1;
136 struct timeval Tv2;
137 struct timespec Tsp1;
138 struct timespec Tsp2;
139#endif
140 RTTEST hTest;
141
142 int rc = RTTestInitAndCreate("tstRTTimeSpec", &hTest);
143 if (rc)
144 return rc;
145
146 /*
147 * Simple test with current time.
148 */
149 RTTestSub(hTest, "Current time (UTC)");
150 CHECK_NZ(RTTimeNow(&Now));
151 CHECK_NZ(RTTimeExplode(&T1, &Now));
152 RTTestIPrintf(RTTESTLVL_ALWAYS, " %RI64 ns - %s\n", RTTimeSpecGetNano(&Now), ToString(&T1));
153 CHECK_NZ(RTTimeImplode(&Ts1, &T1));
154 if (!RTTimeSpecIsEqual(&Ts1, &Now))
155 RTTestIFailed("%RI64 != %RI64\n", RTTimeSpecGetNano(&Ts1), RTTimeSpecGetNano(&Now));
156
157 /*
158 * Simple test with current local time.
159 */
160 RTTestSub(hTest, "Current time (local)");
161 CHECK_NZ(RTTimeLocalNow(&Now));
162 CHECK_NZ(RTTimeExplode(&T1, &Now));
163 RTTestIPrintf(RTTESTLVL_ALWAYS, " %RI64 ns - %s\n", RTTimeSpecGetNano(&Now), ToString(&T1));
164 CHECK_NZ(RTTimeImplode(&Ts1, &T1));
165 if (!RTTimeSpecIsEqual(&Ts1, &Now))
166 RTTestIFailed("%RI64 != %RI64\n", RTTimeSpecGetNano(&Ts1), RTTimeSpecGetNano(&Now));
167
168 /*
169 * Some simple tests with fixed dates (just checking for smoke).
170 */
171 RTTestSub(hTest, "Smoke");
172 TEST_NS(INT64_C(0));
173 CHECK_TIME(&T1, 1970,01,01, 00,00,00, 0, 1, 3, 0, RTTIME_FLAGS_TYPE_UTC | RTTIME_FLAGS_COMMON_YEAR);
174 TEST_NS(INT64_C(86400000000000));
175 CHECK_TIME(&T1, 1970,01,02, 00,00,00, 0, 2, 4, 0, RTTIME_FLAGS_TYPE_UTC | RTTIME_FLAGS_COMMON_YEAR);
176
177 TEST_NS(INT64_C(1));
178 CHECK_TIME(&T1, 1970,01,01, 00,00,00, 1, 1, 3, 0, RTTIME_FLAGS_TYPE_UTC | RTTIME_FLAGS_COMMON_YEAR);
179 TEST_NS(INT64_C(-1));
180 CHECK_TIME(&T1, 1969,12,31, 23,59,59,999999999, 365, 2, 0, RTTIME_FLAGS_TYPE_UTC | RTTIME_FLAGS_COMMON_YEAR);
181
182 /*
183 * Test the limits.
184 */
185 RTTestSub(hTest, "Extremes");
186 TEST_NS(INT64_MAX);
187 TEST_NS(INT64_MIN);
188 TEST_SEC(1095379198);
189 CHECK_TIME(&T1, 2004, 9,16, 23,59,58, 0, 260, 3, 0, RTTIME_FLAGS_TYPE_UTC | RTTIME_FLAGS_LEAP_YEAR);
190 TEST_SEC(1095379199);
191 CHECK_TIME(&T1, 2004, 9,16, 23,59,59, 0, 260, 3, 0, RTTIME_FLAGS_TYPE_UTC | RTTIME_FLAGS_LEAP_YEAR);
192 TEST_SEC(1095379200);
193 CHECK_TIME(&T1, 2004, 9,17, 00,00,00, 0, 261, 4, 0, RTTIME_FLAGS_TYPE_UTC | RTTIME_FLAGS_LEAP_YEAR);
194 TEST_SEC(1095379201);
195 CHECK_TIME(&T1, 2004, 9,17, 00,00,01, 0, 261, 4, 0, RTTIME_FLAGS_TYPE_UTC | RTTIME_FLAGS_LEAP_YEAR);
196
197
198 /*
199 * Test normalization (UTC).
200 */
201 RTTestSub(hTest, "Normalization (UTC)");
202 /* simple */
203 CHECK_NZ(RTTimeNow(&Now));
204 CHECK_NZ(RTTimeExplode(&T1, &Now));
205 T2 = T1;
206 CHECK_NZ(RTTimeNormalize(&T1));
207 if (memcmp(&T1, &T2, sizeof(T1)))
208 RTTestIFailed("simple normalization failed\n");
209 CHECK_NZ(RTTimeImplode(&Ts1, &T1));
210 CHECK_NZ(RTTimeSpecIsEqual(&Ts1, &Now));
211
212 /* a few partial dates. */
213 memset(&T1, 0, sizeof(T1));
214 SET_TIME( &T1, 1970,01,01, 00,00,00, 0, 0, 0, 0, 0);
215 CHECK_NZ(RTTimeNormalize(&T1));
216 CHECK_TIME(&T1, 1970,01,01, 00,00,00, 0, 1, 3, 0, RTTIME_FLAGS_TYPE_UTC | RTTIME_FLAGS_COMMON_YEAR);
217
218 SET_TIME( &T1, 1970,00,00, 00,00,00, 1, 1, 0, 0, 0);
219 CHECK_NZ(RTTimeNormalize(&T1));
220 CHECK_TIME(&T1, 1970,01,01, 00,00,00, 1, 1, 3, 0, RTTIME_FLAGS_TYPE_UTC | RTTIME_FLAGS_COMMON_YEAR);
221
222 SET_TIME( &T1, 2007,12,06, 02,15,23, 1, 0, 0, 0, 0);
223 CHECK_NZ(RTTimeNormalize(&T1));
224 CHECK_TIME(&T1, 2007,12,06, 02,15,23, 1, 340, 3, 0, RTTIME_FLAGS_TYPE_UTC | RTTIME_FLAGS_COMMON_YEAR);
225
226 SET_TIME( &T1, 1968,01,30, 00,19,24, 5, 0, 0, 0, 0);
227 CHECK_NZ(RTTimeNormalize(&T1));
228 CHECK_TIME(&T1, 1968,01,30, 00,19,24, 5, 30, 1, 0, RTTIME_FLAGS_TYPE_UTC | RTTIME_FLAGS_LEAP_YEAR);
229
230 SET_TIME( &T1, 1969,01,31, 00, 9, 2, 7, 0, 0, 0, 0);
231 CHECK_NZ(RTTimeNormalize(&T1));
232 CHECK_TIME(&T1, 1969,01,31, 00, 9, 2, 7, 31, 4, 0, RTTIME_FLAGS_TYPE_UTC | RTTIME_FLAGS_COMMON_YEAR);
233
234 SET_TIME( &T1, 1969,03,31, 00, 9, 2, 7, 0, 0, 0, 0);
235 CHECK_NZ(RTTimeNormalize(&T1));
236 CHECK_TIME(&T1, 1969,03,31, 00, 9, 2, 7, 90, 0, 0, RTTIME_FLAGS_TYPE_UTC | RTTIME_FLAGS_COMMON_YEAR);
237
238 SET_TIME( &T1, 1969,12,31, 00,00,00, 9, 0, 0, 0, 0);
239 CHECK_NZ(RTTimeNormalize(&T1));
240 CHECK_TIME(&T1, 1969,12,31, 00,00,00, 9, 365, 2, 0, RTTIME_FLAGS_TYPE_UTC | RTTIME_FLAGS_COMMON_YEAR);
241
242 SET_TIME( &T1, 1969,12,30, 00,00,00, 30, 0, 0, 0, 0);
243 CHECK_NZ(RTTimeNormalize(&T1));
244 CHECK_TIME(&T1, 1969,12,30, 00,00,00, 30, 364, 1, 0, RTTIME_FLAGS_TYPE_UTC | RTTIME_FLAGS_COMMON_YEAR);
245
246 SET_TIME( &T1, 1969,00,00, 00,00,00, 30, 363, 0, 0, 0);
247 CHECK_NZ(RTTimeNormalize(&T1));
248 CHECK_TIME(&T1, 1969,12,29, 00,00,00, 30, 363, 0, 0, RTTIME_FLAGS_TYPE_UTC | RTTIME_FLAGS_COMMON_YEAR);
249
250 SET_TIME( &T1, 1969,00,00, 00,00,00, 30, 362, 6, 0, 0);
251 CHECK_NZ(RTTimeNormalize(&T1));
252 CHECK_TIME(&T1, 1969,12,28, 00,00,00, 30, 362, 6, 0, RTTIME_FLAGS_TYPE_UTC | RTTIME_FLAGS_COMMON_YEAR);
253
254 SET_TIME( &T1, 1969,12,27, 00,00,00, 30, 0, 5, 0, 0);
255 CHECK_NZ(RTTimeNormalize(&T1));
256 CHECK_TIME(&T1, 1969,12,27, 00,00,00, 30, 361, 5, 0, RTTIME_FLAGS_TYPE_UTC | RTTIME_FLAGS_COMMON_YEAR);
257
258 SET_TIME( &T1, 1969,00,00, 00,00,00, 30, 360, 0, 0, 0);
259 CHECK_NZ(RTTimeNormalize(&T1));
260 CHECK_TIME(&T1, 1969,12,26, 00,00,00, 30, 360, 4, 0, RTTIME_FLAGS_TYPE_UTC | RTTIME_FLAGS_COMMON_YEAR);
261
262 SET_TIME( &T1, 1969,12,25, 00,00,00, 12, 0, 0, 0, 0);
263 CHECK_NZ(RTTimeNormalize(&T1));
264 CHECK_TIME(&T1, 1969,12,25, 00,00,00, 12, 359, 3, 0, RTTIME_FLAGS_TYPE_UTC | RTTIME_FLAGS_COMMON_YEAR);
265
266 SET_TIME( &T1, 1969,12,24, 00,00,00, 16, 0, 0, 0, 0);
267 CHECK_NZ(RTTimeNormalize(&T1));
268 CHECK_TIME(&T1, 1969,12,24, 00,00,00, 16, 358, 2, 0, RTTIME_FLAGS_TYPE_UTC | RTTIME_FLAGS_COMMON_YEAR);
269
270 /* outside the year table range */
271 SET_TIME( &T1, 1200,01,30, 00,00,00, 2, 0, 0, 0, 0);
272 CHECK_NZ(RTTimeNormalize(&T1));
273 CHECK_TIME(&T1, 1200,01,30, 00,00,00, 2, 30, 6, 0, RTTIME_FLAGS_TYPE_UTC | RTTIME_FLAGS_LEAP_YEAR);
274
275 SET_TIME( &T1, 2555,11,29, 00,00,00, 2, 0, 0, 0, 0);
276 CHECK_NZ(RTTimeNormalize(&T1));
277 CHECK_TIME(&T1, 2555,11,29, 00,00,00, 2, 333, 5, 0, RTTIME_FLAGS_TYPE_UTC | RTTIME_FLAGS_COMMON_YEAR);
278
279 SET_TIME( &T1, 2555,00,00, 00,00,00, 3, 333, 0, 0, 0);
280 CHECK_NZ(RTTimeNormalize(&T1));
281 CHECK_TIME(&T1, 2555,11,29, 00,00,00, 3, 333, 5, 0, RTTIME_FLAGS_TYPE_UTC | RTTIME_FLAGS_COMMON_YEAR);
282
283 /* time overflow */
284 SET_TIME( &T1, 1969,12,30, 255,255,255, UINT32_MAX, 364, 0, 0, 0);
285 CHECK_NZ(RTTimeNormalize(&T1));
286 CHECK_TIME(&T1, 1970,01, 9, 19,19,19,294967295, 9, 4, 0, RTTIME_FLAGS_TYPE_UTC | RTTIME_FLAGS_COMMON_YEAR);
287
288 /* date overflow */
289 SET_TIME( &T1, 2007,11,36, 02,15,23, 1, 0, 0, 0, 0);
290 CHECK_NZ(RTTimeNormalize(&T1));
291 CHECK_TIME(&T1, 2007,12,06, 02,15,23, 1, 340, 3, 0, RTTIME_FLAGS_TYPE_UTC | RTTIME_FLAGS_COMMON_YEAR);
292
293 SET_TIME( &T1, 2007,10,67, 02,15,23, 1, 0, 0, 0, 0);
294 CHECK_NZ(RTTimeNormalize(&T1));
295 CHECK_TIME(&T1, 2007,12,06, 02,15,23, 1, 340, 3, 0, RTTIME_FLAGS_TYPE_UTC | RTTIME_FLAGS_COMMON_YEAR);
296
297 SET_TIME( &T1, 2007,10,98, 02,15,23, 1, 0, 0, 0, 0);
298 CHECK_NZ(RTTimeNormalize(&T1));
299 CHECK_TIME(&T1, 2008,01,06, 02,15,23, 1, 6, 6, 0, RTTIME_FLAGS_TYPE_UTC | RTTIME_FLAGS_LEAP_YEAR);
300
301 SET_TIME( &T1, 2006,24,06, 02,15,23, 1, 0, 0, 0, 0);
302 CHECK_NZ(RTTimeNormalize(&T1));
303 CHECK_TIME(&T1, 2007,12,06, 02,15,23, 1, 340, 3, 0, RTTIME_FLAGS_TYPE_UTC | RTTIME_FLAGS_COMMON_YEAR);
304
305 SET_TIME( &T1, 2003,60,37, 02,15,23, 1, 0, 0, 0, 0);
306 CHECK_NZ(RTTimeNormalize(&T1));
307 CHECK_TIME(&T1, 2008,01,06, 02,15,23, 1, 6, 6, 0, RTTIME_FLAGS_TYPE_UTC | RTTIME_FLAGS_LEAP_YEAR);
308
309 SET_TIME( &T1, 2003,00,00, 02,15,23, 1,1801, 0, 0, 0);
310 CHECK_NZ(RTTimeNormalize(&T1));
311 CHECK_TIME(&T1, 2007,12,06, 02,15,23, 1, 340, 3, 0, RTTIME_FLAGS_TYPE_UTC | RTTIME_FLAGS_COMMON_YEAR);
312
313 /*
314 * Convertsions.
315 */
316#define CHECK_NSEC(Ts1, T2) \
317 do { \
318 RTTIMESPEC TsTmp; \
319 RTTESTI_CHECK_MSG( RTTimeSpecGetNano(&(Ts1)) == RTTimeSpecGetNano(RTTimeImplode(&TsTmp, &(T2))), \
320 ("line %d: %RI64, %RI64\n", __LINE__, \
321 RTTimeSpecGetNano(&(Ts1)), RTTimeSpecGetNano(RTTimeImplode(&TsTmp, &(T2)))) ); \
322 } while (0)
323 RTTestSub(hTest, "Conversions, positive");
324 SET_TIME(&T1, 1980,01,01, 00,00,00, 0, 1, 1, 0, RTTIME_FLAGS_TYPE_UTC | RTTIME_FLAGS_LEAP_YEAR);
325 RTTESTI_CHECK(RTTimeSpecSetDosSeconds(&Ts2, 0) == &Ts2);
326 RTTESTI_CHECK(RTTimeSpecGetDosSeconds(&Ts2) == 0);
327 CHECK_NSEC(Ts2, T1);
328
329 SET_TIME(&T1, 1980,01,01, 00,00,00, 0, 1, 1, 0, RTTIME_FLAGS_TYPE_UTC | RTTIME_FLAGS_LEAP_YEAR);
330 RTTESTI_CHECK(RTTimeSpecSetNtTime(&Ts2, INT64_C(119600064000000000)) == &Ts2);
331 RTTESTI_CHECK(RTTimeSpecGetNtTime(&Ts2) == INT64_C(119600064000000000));
332 CHECK_NSEC(Ts2, T1);
333
334 SET_TIME(&T1, 1970,01,01, 00,00,01, 0, 1, 3, 0, RTTIME_FLAGS_TYPE_UTC | RTTIME_FLAGS_COMMON_YEAR);
335 RTTESTI_CHECK(RTTimeSpecSetSeconds(&Ts2, 1) == &Ts2);
336 RTTESTI_CHECK(RTTimeSpecGetSeconds(&Ts2) == 1);
337 CHECK_NSEC(Ts2, T1);
338
339 SET_TIME(&T1, 1970,01,01, 00,00,01, 0, 1, 3, 0, RTTIME_FLAGS_TYPE_UTC | RTTIME_FLAGS_COMMON_YEAR);
340 RTTESTI_CHECK(RTTimeSpecSetMilli(&Ts2, 1000) == &Ts2);
341 RTTESTI_CHECK(RTTimeSpecGetMilli(&Ts2) == 1000);
342 CHECK_NSEC(Ts2, T1);
343
344 SET_TIME(&T1, 1970,01,01, 00,00,01, 0, 1, 3, 0, RTTIME_FLAGS_TYPE_UTC | RTTIME_FLAGS_COMMON_YEAR);
345 RTTESTI_CHECK(RTTimeSpecSetMicro(&Ts2, 1000000) == &Ts2);
346 RTTESTI_CHECK(RTTimeSpecGetMicro(&Ts2) == 1000000);
347 CHECK_NSEC(Ts2, T1);
348
349 SET_TIME(&T1, 1970,01,01, 00,00,01, 0, 1, 3, 0, RTTIME_FLAGS_TYPE_UTC | RTTIME_FLAGS_COMMON_YEAR);
350 RTTESTI_CHECK(RTTimeSpecSetNano(&Ts2, 1000000000) == &Ts2);
351 RTTESTI_CHECK(RTTimeSpecGetNano(&Ts2) == 1000000000);
352 CHECK_NSEC(Ts2, T1);
353
354#ifdef RTTIME_INCL_TIMEVAL
355 SET_TIME(&T1, 1970,01,01, 00,00,01, 5000, 1, 3, 0, RTTIME_FLAGS_TYPE_UTC | RTTIME_FLAGS_COMMON_YEAR);
356 Tv1.tv_sec = 1;
357 Tv1.tv_usec = 5;
358 RTTESTI_CHECK(RTTimeSpecSetTimeval(&Ts2, &Tv1) == &Ts2);
359 RTTESTI_CHECK(RTTimeSpecGetMicro(&Ts2) == 1000005);
360 CHECK_NSEC(Ts2, T1);
361 RTTESTI_CHECK(RTTimeSpecGetTimeval(&Ts2, &Tv2) == &Tv2);
362 RTTESTI_CHECK(Tv1.tv_sec == Tv2.tv_sec); RTTESTI_CHECK(Tv1.tv_usec == Tv2.tv_usec);
363#endif
364
365#ifdef RTTIME_INCL_TIMESPEC
366 SET_TIME(&T1, 1970,01,01, 00,00,01, 5, 1, 3, 0, RTTIME_FLAGS_TYPE_UTC | RTTIME_FLAGS_COMMON_YEAR);
367 Tsp1.tv_sec = 1;
368 Tsp1.tv_nsec = 5;
369 RTTESTI_CHECK(RTTimeSpecSetTimespec(&Ts2, &Tsp1) == &Ts2);
370 RTTESTI_CHECK(RTTimeSpecGetNano(&Ts2) == 1000000005);
371 CHECK_NSEC(Ts2, T1);
372 RTTESTI_CHECK(RTTimeSpecGetTimespec(&Ts2, &Tsp2) == &Tsp2);
373 RTTESTI_CHECK(Tsp1.tv_sec == Tsp2.tv_sec); RTTESTI_CHECK(Tsp1.tv_nsec == Tsp2.tv_nsec);
374#endif
375
376
377 RTTestSub(hTest, "Conversions, negative");
378
379#ifdef RTTIME_INCL_TIMEVAL
380 SET_TIME(&T1, 1969,12,31, 23,59,58,999995000, 365, 2, 0, RTTIME_FLAGS_TYPE_UTC | RTTIME_FLAGS_COMMON_YEAR);
381 Tv1.tv_sec = -2;
382 Tv1.tv_usec = 999995;
383 RTTESTI_CHECK(RTTimeSpecSetTimeval(&Ts2, &Tv1) == &Ts2);
384 RTTESTI_CHECK_MSG(RTTimeSpecGetMicro(&Ts2) == -1000005, ("%RI64\n", RTTimeSpecGetMicro(&Ts2)));
385 CHECK_NSEC(Ts2, T1);
386 RTTESTI_CHECK(RTTimeSpecGetTimeval(&Ts2, &Tv2) == &Tv2);
387 RTTESTI_CHECK(Tv1.tv_sec == Tv2.tv_sec); RTTESTI_CHECK(Tv1.tv_usec == Tv2.tv_usec);
388#endif
389
390#ifdef RTTIME_INCL_TIMESPEC
391 SET_TIME(&T1, 1969,12,31, 23,59,58,999999995, 365, 2, 0, RTTIME_FLAGS_TYPE_UTC | RTTIME_FLAGS_COMMON_YEAR);
392 Tsp1.tv_sec = -2;
393 Tsp1.tv_nsec = 999999995;
394 RTTESTI_CHECK(RTTimeSpecSetTimespec(&Ts2, &Tsp1) == &Ts2);
395 RTTESTI_CHECK_MSG(RTTimeSpecGetNano(&Ts2) == -1000000005, ("%RI64\n", RTTimeSpecGetMicro(&Ts2)));
396 CHECK_NSEC(Ts2, T1);
397 RTTESTI_CHECK(RTTimeSpecGetTimespec(&Ts2, &Tsp2) == &Tsp2);
398 RTTESTI_CHECK(Tsp1.tv_sec == Tsp2.tv_sec); RTTESTI_CHECK(Tsp1.tv_nsec == Tsp2.tv_nsec);
399#endif
400
401 /*
402 * Summary
403 */
404 return RTTestSummaryAndDestroy(hTest);
405}
406
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette