xpcom/tests/TestTimeStamp.cpp

changeset 0
6474c204b198
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/xpcom/tests/TestTimeStamp.cpp	Wed Dec 31 06:09:35 2014 +0100
     1.3 @@ -0,0 +1,96 @@
     1.4 +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
     1.5 +/* This Source Code Form is subject to the terms of the Mozilla Public
     1.6 + * License, v. 2.0. If a copy of the MPL was not distributed with this
     1.7 + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
     1.8 +
     1.9 +#include "mozilla/TimeStamp.h"
    1.10 +
    1.11 +#include "TestHarness.h"
    1.12 +
    1.13 +#include "prinrval.h"
    1.14 +#include "prthread.h"
    1.15 +
    1.16 +using mozilla::TimeStamp;
    1.17 +using mozilla::TimeDuration;
    1.18 +
    1.19 +static void Assert(bool aCond, const char* aMsg)
    1.20 +{
    1.21 +    if (aCond) {
    1.22 +        passed(aMsg);
    1.23 +    } else {
    1.24 +        fail("%s", aMsg);
    1.25 +    }
    1.26 +}
    1.27 +
    1.28 +int main(int argc, char** argv)
    1.29 +{
    1.30 +    ScopedXPCOM xpcom("nsTimeStamp");
    1.31 +    if (xpcom.failed())
    1.32 +        return 1;
    1.33 +
    1.34 +    TimeDuration td;
    1.35 +    Assert(td.ToSeconds() == 0.0, "TimeDuration default value 0");
    1.36 +    Assert(TimeDuration::FromSeconds(5).ToSeconds() == 5.0,
    1.37 +           "TimeDuration FromSeconds/ToSeconds round-trip");
    1.38 +    Assert(TimeDuration::FromMilliseconds(5000).ToSeconds() == 5.0,
    1.39 +           "TimeDuration FromMilliseconds/ToSeconds round-trip");
    1.40 +    Assert(TimeDuration::FromSeconds(1) < TimeDuration::FromSeconds(2),
    1.41 +           "TimeDuration < operator works");
    1.42 +    Assert(!(TimeDuration::FromSeconds(1) < TimeDuration::FromSeconds(1)),
    1.43 +           "TimeDuration < operator works");
    1.44 +    Assert(TimeDuration::FromSeconds(2) > TimeDuration::FromSeconds(1),
    1.45 +           "TimeDuration > operator works");
    1.46 +    Assert(!(TimeDuration::FromSeconds(1) > TimeDuration::FromSeconds(1)),
    1.47 +           "TimeDuration > operator works");
    1.48 +    Assert(TimeDuration::FromSeconds(1) <= TimeDuration::FromSeconds(2),
    1.49 +           "TimeDuration <= operator works");
    1.50 +    Assert(TimeDuration::FromSeconds(1) <= TimeDuration::FromSeconds(1),
    1.51 +           "TimeDuration <= operator works");
    1.52 +    Assert(!(TimeDuration::FromSeconds(2) <= TimeDuration::FromSeconds(1)),
    1.53 +           "TimeDuration <= operator works");
    1.54 +    Assert(TimeDuration::FromSeconds(2) >= TimeDuration::FromSeconds(1),
    1.55 +           "TimeDuration >= operator works");
    1.56 +    Assert(TimeDuration::FromSeconds(1) >= TimeDuration::FromSeconds(1),
    1.57 +           "TimeDuration >= operator works");
    1.58 +    Assert(!(TimeDuration::FromSeconds(1) >= TimeDuration::FromSeconds(2)),
    1.59 +           "TimeDuration >= operator works");
    1.60 +
    1.61 +    TimeStamp ts;
    1.62 +    Assert(ts.IsNull(), "Default TimeStamp value null");
    1.63 +    
    1.64 +    ts = TimeStamp::Now();
    1.65 +    Assert(!ts.IsNull(), "TimeStamp time value non-null");
    1.66 +    Assert((ts - ts).ToSeconds() == 0.0, "TimeStamp zero-length duration");
    1.67 +
    1.68 +    PR_Sleep(PR_SecondsToInterval(2));
    1.69 +
    1.70 +    TimeStamp ts2(TimeStamp::Now());
    1.71 +    Assert(ts2 > ts, "TimeStamp > comparison");
    1.72 +    Assert(!(ts > ts), "TimeStamp > comparison");
    1.73 +    Assert(ts < ts2, "TimeStamp < comparison");
    1.74 +    Assert(!(ts < ts), "TimeStamp < comparison");
    1.75 +    Assert(ts <= ts2, "TimeStamp <= comparison");
    1.76 +    Assert(ts <= ts, "TimeStamp <= comparison");
    1.77 +    Assert(!(ts2 <= ts), "TimeStamp <= comparison");
    1.78 +    Assert(ts2 >= ts, "TimeStamp >= comparison");
    1.79 +    Assert(ts2 >= ts, "TimeStamp >= comparison");
    1.80 +    Assert(!(ts >= ts2), "TimeStamp >= comparison");
    1.81 +
    1.82 +    // We can't be sure exactly how long PR_Sleep slept for. It should have
    1.83 +    // slept for at least one second. We might have slept a lot longer due
    1.84 +    // to process scheduling, but hopefully not more than 10 seconds.
    1.85 +    td = ts2 - ts;
    1.86 +    Assert(td.ToSeconds() > 1.0, "TimeStamp difference lower bound");
    1.87 +    Assert(td.ToSeconds() < 20.0, "TimeStamp difference upper bound");
    1.88 +    td = ts - ts2;
    1.89 +    Assert(td.ToSeconds() < -1.0, "TimeStamp negative difference lower bound");
    1.90 +    Assert(td.ToSeconds() > -20.0, "TimeStamp negative difference upper bound");
    1.91 +
    1.92 +    double resolution = TimeDuration::Resolution().ToSecondsSigDigits();
    1.93 +    printf(" (platform timer resolution is ~%g s)\n", resolution);
    1.94 +    Assert(0.000000001 < resolution, "Time resolution is sane");
    1.95 +    // Don't upper-bound sanity check ... although NSPR reports 1ms
    1.96 +    // resolution, it might be lying, so we shouldn't compare with it
    1.97 +
    1.98 +    return gFailCount > 0;
    1.99 +}

mercurial