VirtualBox

Changeset 25856 in vbox


Ignore:
Timestamp:
Jan 15, 2010 1:16:29 PM (15 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
56654
Message:

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

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Runtime/testcase/tstTimeSpec.cpp

    r8245 r25856  
    3232*   Header Files                                                               *
    3333*******************************************************************************/
     34#if !defined(RT_OS_WINDOWS)
     35# define RTTIME_INCL_TIMEVAL
     36# define RTTIME_INCL_TIMESPEC
     37# include <time.h>
     38#endif
    3439#include <iprt/time.h>
    35 #include <iprt/stream.h>
     40
     41#include <iprt/test.h>
    3642#include <iprt/string.h>
    3743
     
    5864}
    5965
    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)
    6167
    6268#define TEST_NS(ns) do {\
    6369        CHECK_NZ(RTTimeExplode(&T1, RTTimeSpecSetNano(&Ts1, ns))); \
    64         RTPrintf("tstTimeSpec: %RI64 ns - %s\n", ns, ToString(&T1)); \
     70        RTTestIPrintf(RTTESTLVL_ALWAYS, "%RI64 ns - %s\n", ns, ToString(&T1)); \
    6571        CHECK_NZ(RTTimeImplode(&Ts2, &T1)); \
    6672        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__); \
    7275    } while (0)
    7376
    7477#define TEST_SEC(sec) do {\
    7578        CHECK_NZ(RTTimeExplode(&T1, RTTimeSpecSetSeconds(&Ts1, sec))); \
    76         RTPrintf("tstTimeSpec: %RI64 sec - %s\n", sec, ToString(&T1)); \
     79        RTTestIPrintf(RTTESTLVL_ALWAYS, "%RI64 sec - %s\n", sec, ToString(&T1)); \
    7780        CHECK_NZ(RTTimeImplode(&Ts2, &T1)); \
    7881        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__); \
    8484    } while (0)
    8585
     
    9999            ) \
    100100        { \
    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)); \
    107105        } \
    108106        else \
    109             RTPrintf("          => %s\n", ToString(pTime)); \
     107            RTTestIPrintf(RTTESTLVL_ALWAYS, "=> %s\n", ToString(pTime)); \
    110108    } while (0)
    111109
     
    123121        (pTime)->offUTC = (_offUTC); \
    124122        (pTime)->fFlags = (_fFlags); \
    125         RTPrintf("tstTimeSpec: %s\n", ToString(pTime)); \
     123        RTTestIPrintf(RTTESTLVL_ALWAYS, "  %s\n", ToString(pTime)); \
    126124    } while (0)
    127125
     
    129127int main()
    130128{
    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;
    137145
    138146    /*
    139147     * Simple test with current time.
    140148     */
     149    RTTestSub(hTest, "Current time (UTC)");
    141150    CHECK_NZ(RTTimeNow(&Now));
    142151    CHECK_NZ(RTTimeExplode(&T1, &Now));
    143     RTPrintf("tstTimeSpec: %RI64 ns - %s\n", RTTimeSpecGetNano(&Now), ToString(&T1));
     152    RTTestIPrintf(RTTESTLVL_ALWAYS, "  %RI64 ns - %s\n", RTTimeSpecGetNano(&Now), ToString(&T1));
    144153    CHECK_NZ(RTTimeImplode(&Ts1, &T1));
    145154    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));
    150156
    151157    /*
    152158     * Simple test with current local time.
    153159     */
     160    RTTestSub(hTest, "Current time (local)");
    154161    CHECK_NZ(RTTimeLocalNow(&Now));
    155162    CHECK_NZ(RTTimeExplode(&T1, &Now));
    156     RTPrintf("tstTimeSpec: %RI64 ns - %s\n", RTTimeSpecGetNano(&Now), ToString(&T1));
     163    RTTestIPrintf(RTTESTLVL_ALWAYS, "  %RI64 ns - %s\n", RTTimeSpecGetNano(&Now), ToString(&T1));
    157164    CHECK_NZ(RTTimeImplode(&Ts1, &T1));
    158165    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));
    163167
    164168    /*
    165169     * Some simple tests with fixed dates (just checking for smoke).
    166170     */
     171    RTTestSub(hTest, "Smoke");
    167172    TEST_NS(INT64_C(0));
    168173    CHECK_TIME(&T1, 1970,01,01, 00,00,00,        0,   1, 3, 0, RTTIME_FLAGS_TYPE_UTC | RTTIME_FLAGS_COMMON_YEAR);
     
    178183     * Test the limits.
    179184     */
     185    RTTestSub(hTest, "Extremes");
    180186    TEST_NS(INT64_MAX);
    181187    TEST_NS(INT64_MIN);
     
    193199     * Test normalization (UTC).
    194200     */
     201    RTTestSub(hTest, "Normalization (UTC)");
    195202    /* simple */
    196203    CHECK_NZ(RTTimeNow(&Now));
     
    199206    CHECK_NZ(RTTimeNormalize(&T1));
    200207    if (memcmp(&T1, &T2, sizeof(T1)))
    201     {
    202         RTPrintf("tstTimeSpec: FAILURE - simple normalization failed\n");
    203         cErrors++;
    204     }
     208        RTTestIFailed("simple normalization failed\n");
    205209    CHECK_NZ(RTTimeImplode(&Ts1, &T1));
    206210    CHECK_NZ(RTTimeSpecIsEqual(&Ts1, &Now));
     
    308312
    309313    /*
     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    /*
    310402     * Summary
    311403     */
    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);
    317405}
    318406
Note: See TracChangeset for help on using the changeset viewer.

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