1
/* $Id: tstRTTimeSpec.cpp $ */
3
* IPRT - RTTimeSpec and PRTTIME tests.
7
* Copyright (C) 2006-2010 Oracle Corporation
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.
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.
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.
27
/*******************************************************************************
29
*******************************************************************************/
30
#if !defined(RT_OS_WINDOWS)
31
# define RTTIME_INCL_TIMEVAL
32
# define RTTIME_INCL_TIMESPEC
34
# include <sys/time.h>
36
#include <iprt/time.h>
38
#include <iprt/test.h>
39
#include <iprt/string.h>
43
* Format the time into a string using a static buffer.
45
char *ToString(PRTTIME pTime)
47
static char szBuf[128];
48
RTStrPrintf(szBuf, sizeof(szBuf), "%04d-%02d-%02dT%02u:%02u:%02u.%09u [YD%u WD%u UO%d F%#x]",
63
#define CHECK_NZ(expr) do { if (!(expr)) { RTTestIFailed("at line %d: %#x\n", __LINE__, #expr); return RTTestSummaryAndDestroy(hTest); } } while (0)
65
#define TEST_NS(ns) do {\
66
CHECK_NZ(RTTimeExplode(&T1, RTTimeSpecSetNano(&Ts1, ns))); \
67
RTTestIPrintf(RTTESTLVL_ALWAYS, "%RI64 ns - %s\n", ns, ToString(&T1)); \
68
CHECK_NZ(RTTimeImplode(&Ts2, &T1)); \
69
if (!RTTimeSpecIsEqual(&Ts2, &Ts1)) \
70
RTTestIFailed("FAILURE - %RI64 != %RI64, line no. %d\n", \
71
RTTimeSpecGetNano(&Ts2), RTTimeSpecGetNano(&Ts1), __LINE__); \
74
#define TEST_SEC(sec) do {\
75
CHECK_NZ(RTTimeExplode(&T1, RTTimeSpecSetSeconds(&Ts1, sec))); \
76
RTTestIPrintf(RTTESTLVL_ALWAYS, "%RI64 sec - %s\n", sec, ToString(&T1)); \
77
CHECK_NZ(RTTimeImplode(&Ts2, &T1)); \
78
if (!RTTimeSpecIsEqual(&Ts2, &Ts1)) \
79
RTTestIFailed("FAILURE - %RI64 != %RI64, line no. %d\n", \
80
RTTimeSpecGetNano(&Ts2), RTTimeSpecGetNano(&Ts1), __LINE__); \
83
#define CHECK_TIME(pTime, _i32Year, _u8Month, _u8MonthDay, _u8Hour, _u8Minute, _u8Second, _u32Nanosecond, _u16YearDay, _u8WeekDay, _offUTC, _fFlags)\
85
if ( (pTime)->i32Year != (_i32Year) \
86
|| (pTime)->u8Month != (_u8Month) \
87
|| (pTime)->u8WeekDay != (_u8WeekDay) \
88
|| (pTime)->u16YearDay != (_u16YearDay) \
89
|| (pTime)->u8MonthDay != (_u8MonthDay) \
90
|| (pTime)->u8Hour != (_u8Hour) \
91
|| (pTime)->u8Minute != (_u8Minute) \
92
|| (pTime)->u8Second != (_u8Second) \
93
|| (pTime)->u32Nanosecond != (_u32Nanosecond) \
94
|| (pTime)->offUTC != (_offUTC) \
95
|| (pTime)->fFlags != (_fFlags) \
98
RTTestIFailed(" %s ; line no %d\n" \
99
"!= %04d-%02d-%02dT%02u-%02u-%02u.%09u [YD%u WD%u UO%d F%#x]\n", \
100
ToString(pTime), __LINE__, (_i32Year), (_u8Month), (_u8MonthDay), (_u8Hour), (_u8Minute), \
101
(_u8Second), (_u32Nanosecond), (_u16YearDay), (_u8WeekDay), (_offUTC), (_fFlags)); \
104
RTTestIPrintf(RTTESTLVL_ALWAYS, "=> %s\n", ToString(pTime)); \
107
#define SET_TIME(pTime, _i32Year, _u8Month, _u8MonthDay, _u8Hour, _u8Minute, _u8Second, _u32Nanosecond, _u16YearDay, _u8WeekDay, _offUTC, _fFlags)\
109
(pTime)->i32Year = (_i32Year); \
110
(pTime)->u8Month = (_u8Month); \
111
(pTime)->u8WeekDay = (_u8WeekDay); \
112
(pTime)->u16YearDay = (_u16YearDay); \
113
(pTime)->u8MonthDay = (_u8MonthDay); \
114
(pTime)->u8Hour = (_u8Hour); \
115
(pTime)->u8Minute = (_u8Minute); \
116
(pTime)->u8Second = (_u8Second); \
117
(pTime)->u32Nanosecond = (_u32Nanosecond); \
118
(pTime)->offUTC = (_offUTC); \
119
(pTime)->fFlags = (_fFlags); \
120
RTTestIPrintf(RTTESTLVL_ALWAYS, " %s\n", ToString(pTime)); \
131
#ifdef RTTIME_INCL_TIMEVAL
134
struct timespec Tsp1;
135
struct timespec Tsp2;
139
int rc = RTTestInitAndCreate("tstRTTimeSpec", &hTest);
144
* Simple test with current time.
146
RTTestSub(hTest, "Current time (UTC)");
147
CHECK_NZ(RTTimeNow(&Now));
148
CHECK_NZ(RTTimeExplode(&T1, &Now));
149
RTTestIPrintf(RTTESTLVL_ALWAYS, " %RI64 ns - %s\n", RTTimeSpecGetNano(&Now), ToString(&T1));
150
CHECK_NZ(RTTimeImplode(&Ts1, &T1));
151
if (!RTTimeSpecIsEqual(&Ts1, &Now))
152
RTTestIFailed("%RI64 != %RI64\n", RTTimeSpecGetNano(&Ts1), RTTimeSpecGetNano(&Now));
155
* Simple test with current local time.
157
RTTestSub(hTest, "Current time (local)");
158
CHECK_NZ(RTTimeLocalNow(&Now));
159
CHECK_NZ(RTTimeExplode(&T1, &Now));
160
RTTestIPrintf(RTTESTLVL_ALWAYS, " %RI64 ns - %s\n", RTTimeSpecGetNano(&Now), ToString(&T1));
161
CHECK_NZ(RTTimeImplode(&Ts1, &T1));
162
if (!RTTimeSpecIsEqual(&Ts1, &Now))
163
RTTestIFailed("%RI64 != %RI64\n", RTTimeSpecGetNano(&Ts1), RTTimeSpecGetNano(&Now));
166
* Some simple tests with fixed dates (just checking for smoke).
168
RTTestSub(hTest, "Smoke");
170
CHECK_TIME(&T1, 1970,01,01, 00,00,00, 0, 1, 3, 0, RTTIME_FLAGS_TYPE_UTC | RTTIME_FLAGS_COMMON_YEAR);
171
TEST_NS(INT64_C(86400000000000));
172
CHECK_TIME(&T1, 1970,01,02, 00,00,00, 0, 2, 4, 0, RTTIME_FLAGS_TYPE_UTC | RTTIME_FLAGS_COMMON_YEAR);
175
CHECK_TIME(&T1, 1970,01,01, 00,00,00, 1, 1, 3, 0, RTTIME_FLAGS_TYPE_UTC | RTTIME_FLAGS_COMMON_YEAR);
176
TEST_NS(INT64_C(-1));
177
CHECK_TIME(&T1, 1969,12,31, 23,59,59,999999999, 365, 2, 0, RTTIME_FLAGS_TYPE_UTC | RTTIME_FLAGS_COMMON_YEAR);
182
RTTestSub(hTest, "Extremes");
185
TEST_SEC(1095379198);
186
CHECK_TIME(&T1, 2004, 9,16, 23,59,58, 0, 260, 3, 0, RTTIME_FLAGS_TYPE_UTC | RTTIME_FLAGS_LEAP_YEAR);
187
TEST_SEC(1095379199);
188
CHECK_TIME(&T1, 2004, 9,16, 23,59,59, 0, 260, 3, 0, RTTIME_FLAGS_TYPE_UTC | RTTIME_FLAGS_LEAP_YEAR);
189
TEST_SEC(1095379200);
190
CHECK_TIME(&T1, 2004, 9,17, 00,00,00, 0, 261, 4, 0, RTTIME_FLAGS_TYPE_UTC | RTTIME_FLAGS_LEAP_YEAR);
191
TEST_SEC(1095379201);
192
CHECK_TIME(&T1, 2004, 9,17, 00,00,01, 0, 261, 4, 0, RTTIME_FLAGS_TYPE_UTC | RTTIME_FLAGS_LEAP_YEAR);
196
* Test normalization (UTC).
198
RTTestSub(hTest, "Normalization (UTC)");
200
CHECK_NZ(RTTimeNow(&Now));
201
CHECK_NZ(RTTimeExplode(&T1, &Now));
203
CHECK_NZ(RTTimeNormalize(&T1));
204
if (memcmp(&T1, &T2, sizeof(T1)))
205
RTTestIFailed("simple normalization failed\n");
206
CHECK_NZ(RTTimeImplode(&Ts1, &T1));
207
CHECK_NZ(RTTimeSpecIsEqual(&Ts1, &Now));
209
/* a few partial dates. */
210
memset(&T1, 0, sizeof(T1));
211
SET_TIME( &T1, 1970,01,01, 00,00,00, 0, 0, 0, 0, 0);
212
CHECK_NZ(RTTimeNormalize(&T1));
213
CHECK_TIME(&T1, 1970,01,01, 00,00,00, 0, 1, 3, 0, RTTIME_FLAGS_TYPE_UTC | RTTIME_FLAGS_COMMON_YEAR);
215
SET_TIME( &T1, 1970,00,00, 00,00,00, 1, 1, 0, 0, 0);
216
CHECK_NZ(RTTimeNormalize(&T1));
217
CHECK_TIME(&T1, 1970,01,01, 00,00,00, 1, 1, 3, 0, RTTIME_FLAGS_TYPE_UTC | RTTIME_FLAGS_COMMON_YEAR);
219
SET_TIME( &T1, 2007,12,06, 02,15,23, 1, 0, 0, 0, 0);
220
CHECK_NZ(RTTimeNormalize(&T1));
221
CHECK_TIME(&T1, 2007,12,06, 02,15,23, 1, 340, 3, 0, RTTIME_FLAGS_TYPE_UTC | RTTIME_FLAGS_COMMON_YEAR);
223
SET_TIME( &T1, 1968,01,30, 00,19,24, 5, 0, 0, 0, 0);
224
CHECK_NZ(RTTimeNormalize(&T1));
225
CHECK_TIME(&T1, 1968,01,30, 00,19,24, 5, 30, 1, 0, RTTIME_FLAGS_TYPE_UTC | RTTIME_FLAGS_LEAP_YEAR);
227
SET_TIME( &T1, 1969,01,31, 00, 9, 2, 7, 0, 0, 0, 0);
228
CHECK_NZ(RTTimeNormalize(&T1));
229
CHECK_TIME(&T1, 1969,01,31, 00, 9, 2, 7, 31, 4, 0, RTTIME_FLAGS_TYPE_UTC | RTTIME_FLAGS_COMMON_YEAR);
231
SET_TIME( &T1, 1969,03,31, 00, 9, 2, 7, 0, 0, 0, 0);
232
CHECK_NZ(RTTimeNormalize(&T1));
233
CHECK_TIME(&T1, 1969,03,31, 00, 9, 2, 7, 90, 0, 0, RTTIME_FLAGS_TYPE_UTC | RTTIME_FLAGS_COMMON_YEAR);
235
SET_TIME( &T1, 1969,12,31, 00,00,00, 9, 0, 0, 0, 0);
236
CHECK_NZ(RTTimeNormalize(&T1));
237
CHECK_TIME(&T1, 1969,12,31, 00,00,00, 9, 365, 2, 0, RTTIME_FLAGS_TYPE_UTC | RTTIME_FLAGS_COMMON_YEAR);
239
SET_TIME( &T1, 1969,12,30, 00,00,00, 30, 0, 0, 0, 0);
240
CHECK_NZ(RTTimeNormalize(&T1));
241
CHECK_TIME(&T1, 1969,12,30, 00,00,00, 30, 364, 1, 0, RTTIME_FLAGS_TYPE_UTC | RTTIME_FLAGS_COMMON_YEAR);
243
SET_TIME( &T1, 1969,00,00, 00,00,00, 30, 363, 0, 0, 0);
244
CHECK_NZ(RTTimeNormalize(&T1));
245
CHECK_TIME(&T1, 1969,12,29, 00,00,00, 30, 363, 0, 0, RTTIME_FLAGS_TYPE_UTC | RTTIME_FLAGS_COMMON_YEAR);
247
SET_TIME( &T1, 1969,00,00, 00,00,00, 30, 362, 6, 0, 0);
248
CHECK_NZ(RTTimeNormalize(&T1));
249
CHECK_TIME(&T1, 1969,12,28, 00,00,00, 30, 362, 6, 0, RTTIME_FLAGS_TYPE_UTC | RTTIME_FLAGS_COMMON_YEAR);
251
SET_TIME( &T1, 1969,12,27, 00,00,00, 30, 0, 5, 0, 0);
252
CHECK_NZ(RTTimeNormalize(&T1));
253
CHECK_TIME(&T1, 1969,12,27, 00,00,00, 30, 361, 5, 0, RTTIME_FLAGS_TYPE_UTC | RTTIME_FLAGS_COMMON_YEAR);
255
SET_TIME( &T1, 1969,00,00, 00,00,00, 30, 360, 0, 0, 0);
256
CHECK_NZ(RTTimeNormalize(&T1));
257
CHECK_TIME(&T1, 1969,12,26, 00,00,00, 30, 360, 4, 0, RTTIME_FLAGS_TYPE_UTC | RTTIME_FLAGS_COMMON_YEAR);
259
SET_TIME( &T1, 1969,12,25, 00,00,00, 12, 0, 0, 0, 0);
260
CHECK_NZ(RTTimeNormalize(&T1));
261
CHECK_TIME(&T1, 1969,12,25, 00,00,00, 12, 359, 3, 0, RTTIME_FLAGS_TYPE_UTC | RTTIME_FLAGS_COMMON_YEAR);
263
SET_TIME( &T1, 1969,12,24, 00,00,00, 16, 0, 0, 0, 0);
264
CHECK_NZ(RTTimeNormalize(&T1));
265
CHECK_TIME(&T1, 1969,12,24, 00,00,00, 16, 358, 2, 0, RTTIME_FLAGS_TYPE_UTC | RTTIME_FLAGS_COMMON_YEAR);
267
/* outside the year table range */
268
SET_TIME( &T1, 1200,01,30, 00,00,00, 2, 0, 0, 0, 0);
269
CHECK_NZ(RTTimeNormalize(&T1));
270
CHECK_TIME(&T1, 1200,01,30, 00,00,00, 2, 30, 6, 0, RTTIME_FLAGS_TYPE_UTC | RTTIME_FLAGS_LEAP_YEAR);
272
SET_TIME( &T1, 2555,11,29, 00,00,00, 2, 0, 0, 0, 0);
273
CHECK_NZ(RTTimeNormalize(&T1));
274
CHECK_TIME(&T1, 2555,11,29, 00,00,00, 2, 333, 5, 0, RTTIME_FLAGS_TYPE_UTC | RTTIME_FLAGS_COMMON_YEAR);
276
SET_TIME( &T1, 2555,00,00, 00,00,00, 3, 333, 0, 0, 0);
277
CHECK_NZ(RTTimeNormalize(&T1));
278
CHECK_TIME(&T1, 2555,11,29, 00,00,00, 3, 333, 5, 0, RTTIME_FLAGS_TYPE_UTC | RTTIME_FLAGS_COMMON_YEAR);
281
SET_TIME( &T1, 1969,12,30, 255,255,255, UINT32_MAX, 364, 0, 0, 0);
282
CHECK_NZ(RTTimeNormalize(&T1));
283
CHECK_TIME(&T1, 1970,01, 9, 19,19,19,294967295, 9, 4, 0, RTTIME_FLAGS_TYPE_UTC | RTTIME_FLAGS_COMMON_YEAR);
286
SET_TIME( &T1, 2007,11,36, 02,15,23, 1, 0, 0, 0, 0);
287
CHECK_NZ(RTTimeNormalize(&T1));
288
CHECK_TIME(&T1, 2007,12,06, 02,15,23, 1, 340, 3, 0, RTTIME_FLAGS_TYPE_UTC | RTTIME_FLAGS_COMMON_YEAR);
290
SET_TIME( &T1, 2007,10,67, 02,15,23, 1, 0, 0, 0, 0);
291
CHECK_NZ(RTTimeNormalize(&T1));
292
CHECK_TIME(&T1, 2007,12,06, 02,15,23, 1, 340, 3, 0, RTTIME_FLAGS_TYPE_UTC | RTTIME_FLAGS_COMMON_YEAR);
294
SET_TIME( &T1, 2007,10,98, 02,15,23, 1, 0, 0, 0, 0);
295
CHECK_NZ(RTTimeNormalize(&T1));
296
CHECK_TIME(&T1, 2008,01,06, 02,15,23, 1, 6, 6, 0, RTTIME_FLAGS_TYPE_UTC | RTTIME_FLAGS_LEAP_YEAR);
298
SET_TIME( &T1, 2006,24,06, 02,15,23, 1, 0, 0, 0, 0);
299
CHECK_NZ(RTTimeNormalize(&T1));
300
CHECK_TIME(&T1, 2007,12,06, 02,15,23, 1, 340, 3, 0, RTTIME_FLAGS_TYPE_UTC | RTTIME_FLAGS_COMMON_YEAR);
302
SET_TIME( &T1, 2003,60,37, 02,15,23, 1, 0, 0, 0, 0);
303
CHECK_NZ(RTTimeNormalize(&T1));
304
CHECK_TIME(&T1, 2008,01,06, 02,15,23, 1, 6, 6, 0, RTTIME_FLAGS_TYPE_UTC | RTTIME_FLAGS_LEAP_YEAR);
306
SET_TIME( &T1, 2003,00,00, 02,15,23, 1,1801, 0, 0, 0);
307
CHECK_NZ(RTTimeNormalize(&T1));
308
CHECK_TIME(&T1, 2007,12,06, 02,15,23, 1, 340, 3, 0, RTTIME_FLAGS_TYPE_UTC | RTTIME_FLAGS_COMMON_YEAR);
313
#define CHECK_NSEC(Ts1, T2) \
316
RTTESTI_CHECK_MSG( RTTimeSpecGetNano(&(Ts1)) == RTTimeSpecGetNano(RTTimeImplode(&TsTmp, &(T2))), \
317
("line %d: %RI64, %RI64\n", __LINE__, \
318
RTTimeSpecGetNano(&(Ts1)), RTTimeSpecGetNano(RTTimeImplode(&TsTmp, &(T2)))) ); \
320
RTTestSub(hTest, "Conversions, positive");
321
SET_TIME(&T1, 1980,01,01, 00,00,00, 0, 1, 1, 0, RTTIME_FLAGS_TYPE_UTC | RTTIME_FLAGS_LEAP_YEAR);
322
RTTESTI_CHECK(RTTimeSpecSetDosSeconds(&Ts2, 0) == &Ts2);
323
RTTESTI_CHECK(RTTimeSpecGetDosSeconds(&Ts2) == 0);
326
SET_TIME(&T1, 1980,01,01, 00,00,00, 0, 1, 1, 0, RTTIME_FLAGS_TYPE_UTC | RTTIME_FLAGS_LEAP_YEAR);
327
RTTESTI_CHECK(RTTimeSpecSetNtTime(&Ts2, INT64_C(119600064000000000)) == &Ts2);
328
RTTESTI_CHECK(RTTimeSpecGetNtTime(&Ts2) == INT64_C(119600064000000000));
331
SET_TIME(&T1, 1970,01,01, 00,00,01, 0, 1, 3, 0, RTTIME_FLAGS_TYPE_UTC | RTTIME_FLAGS_COMMON_YEAR);
332
RTTESTI_CHECK(RTTimeSpecSetSeconds(&Ts2, 1) == &Ts2);
333
RTTESTI_CHECK(RTTimeSpecGetSeconds(&Ts2) == 1);
336
SET_TIME(&T1, 1970,01,01, 00,00,01, 0, 1, 3, 0, RTTIME_FLAGS_TYPE_UTC | RTTIME_FLAGS_COMMON_YEAR);
337
RTTESTI_CHECK(RTTimeSpecSetMilli(&Ts2, 1000) == &Ts2);
338
RTTESTI_CHECK(RTTimeSpecGetMilli(&Ts2) == 1000);
341
SET_TIME(&T1, 1970,01,01, 00,00,01, 0, 1, 3, 0, RTTIME_FLAGS_TYPE_UTC | RTTIME_FLAGS_COMMON_YEAR);
342
RTTESTI_CHECK(RTTimeSpecSetMicro(&Ts2, 1000000) == &Ts2);
343
RTTESTI_CHECK(RTTimeSpecGetMicro(&Ts2) == 1000000);
346
SET_TIME(&T1, 1970,01,01, 00,00,01, 0, 1, 3, 0, RTTIME_FLAGS_TYPE_UTC | RTTIME_FLAGS_COMMON_YEAR);
347
RTTESTI_CHECK(RTTimeSpecSetNano(&Ts2, 1000000000) == &Ts2);
348
RTTESTI_CHECK(RTTimeSpecGetNano(&Ts2) == 1000000000);
351
#ifdef RTTIME_INCL_TIMEVAL
352
SET_TIME(&T1, 1970,01,01, 00,00,01, 5000, 1, 3, 0, RTTIME_FLAGS_TYPE_UTC | RTTIME_FLAGS_COMMON_YEAR);
355
RTTESTI_CHECK(RTTimeSpecSetTimeval(&Ts2, &Tv1) == &Ts2);
356
RTTESTI_CHECK(RTTimeSpecGetMicro(&Ts2) == 1000005);
358
RTTESTI_CHECK(RTTimeSpecGetTimeval(&Ts2, &Tv2) == &Tv2);
359
RTTESTI_CHECK(Tv1.tv_sec == Tv2.tv_sec); RTTESTI_CHECK(Tv1.tv_usec == Tv2.tv_usec);
362
#ifdef RTTIME_INCL_TIMESPEC
363
SET_TIME(&T1, 1970,01,01, 00,00,01, 5, 1, 3, 0, RTTIME_FLAGS_TYPE_UTC | RTTIME_FLAGS_COMMON_YEAR);
366
RTTESTI_CHECK(RTTimeSpecSetTimespec(&Ts2, &Tsp1) == &Ts2);
367
RTTESTI_CHECK(RTTimeSpecGetNano(&Ts2) == 1000000005);
369
RTTESTI_CHECK(RTTimeSpecGetTimespec(&Ts2, &Tsp2) == &Tsp2);
370
RTTESTI_CHECK(Tsp1.tv_sec == Tsp2.tv_sec); RTTESTI_CHECK(Tsp1.tv_nsec == Tsp2.tv_nsec);
374
RTTestSub(hTest, "Conversions, negative");
376
#ifdef RTTIME_INCL_TIMEVAL
377
SET_TIME(&T1, 1969,12,31, 23,59,58,999995000, 365, 2, 0, RTTIME_FLAGS_TYPE_UTC | RTTIME_FLAGS_COMMON_YEAR);
379
Tv1.tv_usec = 999995;
380
RTTESTI_CHECK(RTTimeSpecSetTimeval(&Ts2, &Tv1) == &Ts2);
381
RTTESTI_CHECK_MSG(RTTimeSpecGetMicro(&Ts2) == -1000005, ("%RI64\n", RTTimeSpecGetMicro(&Ts2)));
383
RTTESTI_CHECK(RTTimeSpecGetTimeval(&Ts2, &Tv2) == &Tv2);
384
RTTESTI_CHECK(Tv1.tv_sec == Tv2.tv_sec); RTTESTI_CHECK(Tv1.tv_usec == Tv2.tv_usec);
387
#ifdef RTTIME_INCL_TIMESPEC
388
SET_TIME(&T1, 1969,12,31, 23,59,58,999999995, 365, 2, 0, RTTIME_FLAGS_TYPE_UTC | RTTIME_FLAGS_COMMON_YEAR);
390
Tsp1.tv_nsec = 999999995;
391
RTTESTI_CHECK(RTTimeSpecSetTimespec(&Ts2, &Tsp1) == &Ts2);
392
RTTESTI_CHECK_MSG(RTTimeSpecGetNano(&Ts2) == -1000000005, ("%RI64\n", RTTimeSpecGetMicro(&Ts2)));
394
RTTESTI_CHECK(RTTimeSpecGetTimespec(&Ts2, &Tsp2) == &Tsp2);
395
RTTESTI_CHECK(Tsp1.tv_sec == Tsp2.tv_sec); RTTESTI_CHECK(Tsp1.tv_nsec == Tsp2.tv_nsec);
401
return RTTestSummaryAndDestroy(hTest);