OLD | NEW |
| (Empty) |
1 // Copyright 2013 the V8 project authors. All rights reserved. | |
2 // Redistribution and use in source and binary forms, with or without | |
3 // modification, are permitted provided that the following conditions are | |
4 // met: | |
5 // | |
6 // * Redistributions of source code must retain the above copyright | |
7 // notice, this list of conditions and the following disclaimer. | |
8 // * Redistributions in binary form must reproduce the above | |
9 // copyright notice, this list of conditions and the following | |
10 // disclaimer in the documentation and/or other materials provided | |
11 // with the distribution. | |
12 // * Neither the name of Google Inc. nor the names of its | |
13 // contributors may be used to endorse or promote products derived | |
14 // from this software without specific prior written permission. | |
15 // | |
16 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | |
17 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | |
18 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | |
19 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | |
20 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |
21 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | |
22 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | |
23 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | |
24 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | |
25 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | |
26 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |
27 | |
28 #include <cstdlib> | |
29 | |
30 #include "v8.h" | |
31 | |
32 #include "cctest.h" | |
33 #if V8_OS_WIN | |
34 #include "win32-headers.h" | |
35 #endif | |
36 | |
37 using namespace v8::internal; | |
38 | |
39 | |
40 TEST(TimeDeltaFromAndIn) { | |
41 CHECK(TimeDelta::FromDays(2) == TimeDelta::FromHours(48)); | |
42 CHECK(TimeDelta::FromHours(3) == TimeDelta::FromMinutes(180)); | |
43 CHECK(TimeDelta::FromMinutes(2) == TimeDelta::FromSeconds(120)); | |
44 CHECK(TimeDelta::FromSeconds(2) == TimeDelta::FromMilliseconds(2000)); | |
45 CHECK(TimeDelta::FromMilliseconds(2) == TimeDelta::FromMicroseconds(2000)); | |
46 CHECK_EQ(static_cast<int>(13), TimeDelta::FromDays(13).InDays()); | |
47 CHECK_EQ(static_cast<int>(13), TimeDelta::FromHours(13).InHours()); | |
48 CHECK_EQ(static_cast<int>(13), TimeDelta::FromMinutes(13).InMinutes()); | |
49 CHECK_EQ(static_cast<int64_t>(13), TimeDelta::FromSeconds(13).InSeconds()); | |
50 CHECK_EQ(13.0, TimeDelta::FromSeconds(13).InSecondsF()); | |
51 CHECK_EQ(static_cast<int64_t>(13), | |
52 TimeDelta::FromMilliseconds(13).InMilliseconds()); | |
53 CHECK_EQ(13.0, TimeDelta::FromMilliseconds(13).InMillisecondsF()); | |
54 CHECK_EQ(static_cast<int64_t>(13), | |
55 TimeDelta::FromMicroseconds(13).InMicroseconds()); | |
56 } | |
57 | |
58 | |
59 TEST(TimeJsTime) { | |
60 Time t = Time::FromJsTime(700000.3); | |
61 CHECK_EQ(700000.3, t.ToJsTime()); | |
62 } | |
63 | |
64 | |
65 #if V8_OS_POSIX | |
66 TEST(TimeFromTimeVal) { | |
67 Time null; | |
68 CHECK(null.IsNull()); | |
69 CHECK(null == Time::FromTimeval(null.ToTimeval())); | |
70 Time now = Time::Now(); | |
71 CHECK(now == Time::FromTimeval(now.ToTimeval())); | |
72 Time now_sys = Time::NowFromSystemTime(); | |
73 CHECK(now_sys == Time::FromTimeval(now_sys.ToTimeval())); | |
74 Time unix_epoch = Time::UnixEpoch(); | |
75 CHECK(unix_epoch == Time::FromTimeval(unix_epoch.ToTimeval())); | |
76 Time max = Time::Max(); | |
77 CHECK(max.IsMax()); | |
78 CHECK(max == Time::FromTimeval(max.ToTimeval())); | |
79 } | |
80 #endif | |
81 | |
82 | |
83 #if V8_OS_WIN | |
84 TEST(TimeFromFiletime) { | |
85 Time null; | |
86 CHECK(null.IsNull()); | |
87 CHECK(null == Time::FromFiletime(null.ToFiletime())); | |
88 Time now = Time::Now(); | |
89 CHECK(now == Time::FromFiletime(now.ToFiletime())); | |
90 Time now_sys = Time::NowFromSystemTime(); | |
91 CHECK(now_sys == Time::FromFiletime(now_sys.ToFiletime())); | |
92 Time unix_epoch = Time::UnixEpoch(); | |
93 CHECK(unix_epoch == Time::FromFiletime(unix_epoch.ToFiletime())); | |
94 Time max = Time::Max(); | |
95 CHECK(max.IsMax()); | |
96 CHECK(max == Time::FromFiletime(max.ToFiletime())); | |
97 } | |
98 #endif | |
99 | |
100 | |
101 TEST(TimeTicksIsMonotonic) { | |
102 TimeTicks previous_normal_ticks; | |
103 TimeTicks previous_highres_ticks; | |
104 ElapsedTimer timer; | |
105 timer.Start(); | |
106 while (!timer.HasExpired(TimeDelta::FromMilliseconds(100))) { | |
107 TimeTicks normal_ticks = TimeTicks::Now(); | |
108 TimeTicks highres_ticks = TimeTicks::HighResNow(); | |
109 CHECK_GE(normal_ticks, previous_normal_ticks); | |
110 CHECK_GE((normal_ticks - previous_normal_ticks).InMicroseconds(), 0); | |
111 CHECK_GE(highres_ticks, previous_highres_ticks); | |
112 CHECK_GE((highres_ticks - previous_highres_ticks).InMicroseconds(), 0); | |
113 previous_normal_ticks = normal_ticks; | |
114 previous_highres_ticks = highres_ticks; | |
115 } | |
116 } | |
OLD | NEW |