Changeset 25856 in vbox
- Timestamp:
- Jan 15, 2010 1:16:29 PM (15 years ago)
- svn:sync-xref-src-repo-rev:
- 56654
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Runtime/testcase/tstTimeSpec.cpp
r8245 r25856 32 32 * Header Files * 33 33 *******************************************************************************/ 34 #if !defined(RT_OS_WINDOWS) 35 # define RTTIME_INCL_TIMEVAL 36 # define RTTIME_INCL_TIMESPEC 37 # include <time.h> 38 #endif 34 39 #include <iprt/time.h> 35 #include <iprt/stream.h> 40 41 #include <iprt/test.h> 36 42 #include <iprt/string.h> 37 43 … … 58 64 } 59 65 60 #define CHECK_NZ(expr) do { if (!(expr)) { RTPrintf("tstTimeSpec: FAILURE at line %d: %#x\n", __LINE__, #expr); return 1; } } while (0)66 #define CHECK_NZ(expr) do { if (!(expr)) { RTTestIFailed("at line %d: %#x\n", __LINE__, #expr); return RTTestSummaryAndDestroy(hTest); } } while (0) 61 67 62 68 #define TEST_NS(ns) do {\ 63 69 CHECK_NZ(RTTimeExplode(&T1, RTTimeSpecSetNano(&Ts1, ns))); \ 64 RT Printf("tstTimeSpec:%RI64 ns - %s\n", ns, ToString(&T1)); \70 RTTestIPrintf(RTTESTLVL_ALWAYS, "%RI64 ns - %s\n", ns, ToString(&T1)); \ 65 71 CHECK_NZ(RTTimeImplode(&Ts2, &T1)); \ 66 72 if (!RTTimeSpecIsEqual(&Ts2, &Ts1)) \ 67 { \ 68 RTPrintf("tstTimeSpec: FAILURE - %RI64 != %RI64\n", RTTimeSpecGetNano(&Ts2), RTTimeSpecGetNano(&Ts1)); \ 69 RTPrintf(" line no %d\n", __LINE__); \ 70 cErrors++; \ 71 } \ 73 RTTestIFailed("FAILURE - %RI64 != %RI64, line no. %d\n", \ 74 RTTimeSpecGetNano(&Ts2), RTTimeSpecGetNano(&Ts1), __LINE__); \ 72 75 } while (0) 73 76 74 77 #define TEST_SEC(sec) do {\ 75 78 CHECK_NZ(RTTimeExplode(&T1, RTTimeSpecSetSeconds(&Ts1, sec))); \ 76 RT Printf("tstTimeSpec:%RI64 sec - %s\n", sec, ToString(&T1)); \79 RTTestIPrintf(RTTESTLVL_ALWAYS, "%RI64 sec - %s\n", sec, ToString(&T1)); \ 77 80 CHECK_NZ(RTTimeImplode(&Ts2, &T1)); \ 78 81 if (!RTTimeSpecIsEqual(&Ts2, &Ts1)) \ 79 { \ 80 RTPrintf("tstTimeSpec: FAILURE - %RI64 != %RI64\n", RTTimeSpecGetNano(&Ts2), RTTimeSpecGetNano(&Ts1)); \ 81 RTPrintf(" line no %d\n", __LINE__); \ 82 cErrors++; \ 83 } \ 82 RTTestIFailed("FAILURE - %RI64 != %RI64, line no. %d\n", \ 83 RTTimeSpecGetNano(&Ts2), RTTimeSpecGetNano(&Ts1), __LINE__); \ 84 84 } while (0) 85 85 … … 99 99 ) \ 100 100 { \ 101 RTPrintf("tstTimeSpec: FAILURE - %s\n" \ 102 " != %04d-%02d-%02dT%02u-%02u-%02u.%09u [YD%u WD%u UO%d F%#x]\n", \ 103 ToString(pTime), (_i32Year), (_u8Month), (_u8MonthDay), (_u8Hour), (_u8Minute), \ 104 (_u8Second), (_u32Nanosecond), (_u16YearDay), (_u8WeekDay), (_offUTC), (_fFlags)); \ 105 RTPrintf(" line no %d\n", __LINE__); \ 106 cErrors++; \ 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)); \ 107 105 } \ 108 106 else \ 109 RT Printf("=> %s\n", ToString(pTime)); \107 RTTestIPrintf(RTTESTLVL_ALWAYS, "=> %s\n", ToString(pTime)); \ 110 108 } while (0) 111 109 … … 123 121 (pTime)->offUTC = (_offUTC); \ 124 122 (pTime)->fFlags = (_fFlags); \ 125 RT Printf("tstTimeSpec:%s\n", ToString(pTime)); \123 RTTestIPrintf(RTTESTLVL_ALWAYS, " %s\n", ToString(pTime)); \ 126 124 } while (0) 127 125 … … 129 127 int main() 130 128 { 131 unsigned cErrors = 0; 132 RTTIMESPEC Now; 133 RTTIMESPEC Ts1; 134 RTTIMESPEC Ts2; 135 RTTIME T1; 136 RTTIME T2; 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; 137 145 138 146 /* 139 147 * Simple test with current time. 140 148 */ 149 RTTestSub(hTest, "Current time (UTC)"); 141 150 CHECK_NZ(RTTimeNow(&Now)); 142 151 CHECK_NZ(RTTimeExplode(&T1, &Now)); 143 RT Printf("tstTimeSpec:%RI64 ns - %s\n", RTTimeSpecGetNano(&Now), ToString(&T1));152 RTTestIPrintf(RTTESTLVL_ALWAYS, " %RI64 ns - %s\n", RTTimeSpecGetNano(&Now), ToString(&T1)); 144 153 CHECK_NZ(RTTimeImplode(&Ts1, &T1)); 145 154 if (!RTTimeSpecIsEqual(&Ts1, &Now)) 146 { 147 RTPrintf("tstTimeSpec: FAILURE - %RI64 != %RI64\n", RTTimeSpecGetNano(&Ts1), RTTimeSpecGetNano(&Now)); 148 cErrors++; 149 } 155 RTTestIFailed("%RI64 != %RI64\n", RTTimeSpecGetNano(&Ts1), RTTimeSpecGetNano(&Now)); 150 156 151 157 /* 152 158 * Simple test with current local time. 153 159 */ 160 RTTestSub(hTest, "Current time (local)"); 154 161 CHECK_NZ(RTTimeLocalNow(&Now)); 155 162 CHECK_NZ(RTTimeExplode(&T1, &Now)); 156 RT Printf("tstTimeSpec:%RI64 ns - %s\n", RTTimeSpecGetNano(&Now), ToString(&T1));163 RTTestIPrintf(RTTESTLVL_ALWAYS, " %RI64 ns - %s\n", RTTimeSpecGetNano(&Now), ToString(&T1)); 157 164 CHECK_NZ(RTTimeImplode(&Ts1, &T1)); 158 165 if (!RTTimeSpecIsEqual(&Ts1, &Now)) 159 { 160 RTPrintf("tstTimeSpec: FAILURE - %RI64 != %RI64\n", RTTimeSpecGetNano(&Ts1), RTTimeSpecGetNano(&Now)); 161 cErrors++; 162 } 166 RTTestIFailed("%RI64 != %RI64\n", RTTimeSpecGetNano(&Ts1), RTTimeSpecGetNano(&Now)); 163 167 164 168 /* 165 169 * Some simple tests with fixed dates (just checking for smoke). 166 170 */ 171 RTTestSub(hTest, "Smoke"); 167 172 TEST_NS(INT64_C(0)); 168 173 CHECK_TIME(&T1, 1970,01,01, 00,00,00, 0, 1, 3, 0, RTTIME_FLAGS_TYPE_UTC | RTTIME_FLAGS_COMMON_YEAR); … … 178 183 * Test the limits. 179 184 */ 185 RTTestSub(hTest, "Extremes"); 180 186 TEST_NS(INT64_MAX); 181 187 TEST_NS(INT64_MIN); … … 193 199 * Test normalization (UTC). 194 200 */ 201 RTTestSub(hTest, "Normalization (UTC)"); 195 202 /* simple */ 196 203 CHECK_NZ(RTTimeNow(&Now)); … … 199 206 CHECK_NZ(RTTimeNormalize(&T1)); 200 207 if (memcmp(&T1, &T2, sizeof(T1))) 201 { 202 RTPrintf("tstTimeSpec: FAILURE - simple normalization failed\n"); 203 cErrors++; 204 } 208 RTTestIFailed("simple normalization failed\n"); 205 209 CHECK_NZ(RTTimeImplode(&Ts1, &T1)); 206 210 CHECK_NZ(RTTimeSpecIsEqual(&Ts1, &Now)); … … 308 312 309 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 /* 310 402 * Summary 311 403 */ 312 if (!cErrors) 313 RTPrintf("tstTimeSpec: SUCCESS\n"); 314 else 315 RTPrintf("tstTimeSpec: FAILURE - %d errors\n", cErrors); 316 return cErrors ? 1 : 0; 404 return RTTestSummaryAndDestroy(hTest); 317 405 } 318 406
Note:
See TracChangeset
for help on using the changeset viewer.