1 /*
2 * Copyright (C) 2017 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17 #include "gtest/gtest.h"
18
19 #include "chre/util/time.h"
20
21 using chre::Seconds;
22 using chre::Milliseconds;
23 using chre::Microseconds;
24 using chre::Nanoseconds;
25 using chre::kOneSecondInNanoseconds;
26 using chre::kOneMillisecondInNanoseconds;
27 using chre::kOneMicrosecondInNanoseconds;
28 using chre::kOneMillisecondInMicroseconds;
29
30 // Tests for Time constants
TEST(Time,CheckTimeConversionConstants)31 TEST(Time, CheckTimeConversionConstants) {
32 EXPECT_EQ(kOneSecondInNanoseconds, 1e9);
33 EXPECT_EQ(kOneMillisecondInNanoseconds, 1e6);
34 EXPECT_EQ(kOneMicrosecondInNanoseconds, 1e3);
35 EXPECT_EQ(kOneMillisecondInMicroseconds, 1e3);
36 }
37
38 // Tests for Seconds
TEST(Time,ConvertSecToNanosec)39 TEST(Time, ConvertSecToNanosec) {
40 Seconds t(5);
41 EXPECT_EQ(t.toRawNanoseconds(), 5 * kOneSecondInNanoseconds);
42 }
43
TEST(Time,ConvertSecToNanosecOverflowIsUint64Max)44 TEST(Time, ConvertSecToNanosecOverflowIsUint64Max) {
45 Seconds t(UINT64_MAX / kOneSecondInNanoseconds + 1);
46 EXPECT_EQ(t.toRawNanoseconds(), UINT64_MAX);
47 }
48
49 // Tests for Milliseconds
TEST(Time,DefaultMillisecIsZero)50 TEST(Time, DefaultMillisecIsZero) {
51 Milliseconds t;
52 EXPECT_EQ(t.getMilliseconds(), 0);
53 }
54
TEST(Time,GetInitialMillisec)55 TEST(Time, GetInitialMillisec) {
56 Milliseconds t(5);
57 EXPECT_EQ(t.getMilliseconds(), 5);
58 }
59
TEST(Time,InitializeMillisecFromNanosec)60 TEST(Time, InitializeMillisecFromNanosec) {
61 Nanoseconds tNano(5 * kOneMillisecondInNanoseconds);
62 Milliseconds tMilli(tNano);
63 EXPECT_EQ(tMilli.getMilliseconds(), 5);
64 }
65
TEST(Time,ConcertMillisecToMicrosec)66 TEST(Time, ConcertMillisecToMicrosec) {
67 Milliseconds t(5);
68 EXPECT_EQ(t.getMicroseconds(), 5 * kOneMillisecondInMicroseconds);
69 }
70
TEST(Time,ConvertMillisecToNanosec)71 TEST(Time, ConvertMillisecToNanosec) {
72 Milliseconds t(5);
73 EXPECT_EQ(t.toRawNanoseconds(), 5 * kOneMillisecondInNanoseconds);
74 }
75
TEST(Time,ConvertMillisecToNanosecOverflowIsUint64Max)76 TEST(Time, ConvertMillisecToNanosecOverflowIsUint64Max) {
77 Milliseconds t(UINT64_MAX / kOneMillisecondInNanoseconds + 1);
78 EXPECT_EQ(t.toRawNanoseconds(), UINT64_MAX);
79 }
80
TEST(Time,TestMillisecEquals)81 TEST(Time, TestMillisecEquals) {
82 Milliseconds t1(5), t2(5), t3(6);
83 EXPECT_TRUE(t1 == t2);
84 EXPECT_FALSE(t1 == t3);
85 }
86
87 // Tests for Microseconds
TEST(Time,GetInitialMicrosec)88 TEST(Time, GetInitialMicrosec) {
89 Microseconds t(5);
90 EXPECT_EQ(t.getMicroseconds(), 5);
91 }
92
TEST(Time,InitializeMicrosecFromNanosec)93 TEST(Time, InitializeMicrosecFromNanosec) {
94 Nanoseconds tNano(5 * kOneMicrosecondInNanoseconds);
95 Microseconds tMicro(tNano);
96 EXPECT_EQ(tMicro.getMicroseconds(), 5);
97 }
98
TEST(Time,ConvertMicrosecToNanosec)99 TEST(Time, ConvertMicrosecToNanosec) {
100 Microseconds t(5);
101 EXPECT_EQ(t.toRawNanoseconds(), 5 * kOneMicrosecondInNanoseconds);
102 }
103
TEST(Time,ConvertMicrosecToNanosecOverflowIsUint64Max)104 TEST(Time, ConvertMicrosecToNanosecOverflowIsUint64Max) {
105 Milliseconds t(UINT64_MAX / kOneMicrosecondInNanoseconds + 1);
106 EXPECT_EQ(t.toRawNanoseconds(), UINT64_MAX);
107 }
108
TEST(Time,ConvertMicrosecToMillisec)109 TEST(Time, ConvertMicrosecToMillisec) {
110 Microseconds t(5120);
111 EXPECT_EQ(t.getMilliseconds(), 5);
112 }
113
114 // Tests for Nanoseconds
TEST(Time,DefaultNanosecIsZero)115 TEST(Time, DefaultNanosecIsZero) {
116 Nanoseconds t;
117 EXPECT_EQ(t.toRawNanoseconds(), 0);
118 }
119
TEST(Time,GetInitialNanosec)120 TEST(Time, GetInitialNanosec) {
121 Nanoseconds t(5);
122 EXPECT_EQ(t.toRawNanoseconds(), 5);
123 }
124
TEST(Time,InitializeNanosecFromSec)125 TEST(Time, InitializeNanosecFromSec) {
126 Seconds tSec(5);
127 Nanoseconds tNano(tSec);
128 EXPECT_EQ(tNano.toRawNanoseconds(), 5 * kOneSecondInNanoseconds);
129 }
130
TEST(Time,InitializeNanosecFromMillisec)131 TEST(Time, InitializeNanosecFromMillisec) {
132 Milliseconds tMilli(5);
133 Nanoseconds tNano(tMilli);
134 EXPECT_EQ(tNano.toRawNanoseconds(), 5 * kOneMillisecondInNanoseconds);
135 }
136
TEST(Time,InitializeNanosecFromMicrosec)137 TEST(Time, InitializeNanosecFromMicrosec) {
138 Microseconds tMicro(5);
139 Nanoseconds tNano(tMicro);
140 EXPECT_EQ(tNano.toRawNanoseconds(), 5 * kOneMicrosecondInNanoseconds);
141 }
142
TEST(Time,NanosecEquals)143 TEST(Time, NanosecEquals) {
144 Nanoseconds t1(5), t2(5), t3(6);
145 EXPECT_TRUE(t1 == t2);
146 EXPECT_FALSE(t1 == t3);
147 }
148
TEST(Time,NanosecNotEquals)149 TEST(Time, NanosecNotEquals) {
150 Nanoseconds t1(5), t2(5), t3(6);
151 EXPECT_FALSE(t1 != t2);
152 EXPECT_TRUE(t1 != t3);
153 }
154
TEST(Time,AddSecToNanosec)155 TEST(Time, AddSecToNanosec) {
156 Nanoseconds t = Seconds(5) + Nanoseconds(6);
157 EXPECT_EQ(t.toRawNanoseconds(), 5 * kOneSecondInNanoseconds + 6);
158 }
159
TEST(Time,AddSecToNanosecOverflow)160 TEST(Time, AddSecToNanosecOverflow) {
161 Nanoseconds t = Seconds(5) + Nanoseconds(UINT64_MAX);
162 EXPECT_EQ(t.toRawNanoseconds(), 5 * kOneSecondInNanoseconds - 1);
163 }
164
TEST(Time,AddNanosecToNanosec)165 TEST(Time, AddNanosecToNanosec) {
166 Nanoseconds t = Nanoseconds(6) + Nanoseconds(5);
167 EXPECT_EQ(t.toRawNanoseconds(), 11);
168 }
169
TEST(Time,AddNanosecToNanosecOverflow)170 TEST(Time, AddNanosecToNanosecOverflow) {
171 Nanoseconds t = Nanoseconds(6) + Nanoseconds(UINT64_MAX);
172 EXPECT_EQ(t.toRawNanoseconds(), 5);
173 }
174
TEST(Time,SubtractNanosecFromNanosec)175 TEST(Time, SubtractNanosecFromNanosec) {
176 Nanoseconds t = Nanoseconds(11) - Nanoseconds(5);
177 EXPECT_EQ(t.toRawNanoseconds(), 6);
178 }
179
TEST(Time,SubtractNanosecFromNanosecOverflow)180 TEST(Time, SubtractNanosecFromNanosecOverflow) {
181 Nanoseconds t = Nanoseconds(5) - Nanoseconds(11);
182 EXPECT_EQ(t.toRawNanoseconds(), UINT64_MAX - 5);
183 }
184
TEST(Time,NanosecGreaterThanEqual)185 TEST(Time, NanosecGreaterThanEqual) {
186 Nanoseconds t1(5), t2(5), t3(6);
187 EXPECT_TRUE(t2 >= t1);
188 EXPECT_TRUE(t3 >= t1);
189 EXPECT_FALSE(t1 >= t3);
190 }
191
TEST(Time,NanosecLessThanEqual)192 TEST(Time, NanosecLessThanEqual) {
193 Nanoseconds t1(5), t2(5), t3(6);
194 EXPECT_TRUE(t2 <= t1);
195 EXPECT_TRUE(t1 <= t3);
196 EXPECT_FALSE(t3 <= t1);
197 }
198
TEST(Time,NanosecLessThan)199 TEST(Time, NanosecLessThan) {
200 Nanoseconds t1(5), t2(5), t3(6);
201 EXPECT_FALSE(t2 < t1);
202 EXPECT_FALSE(t3 < t1);
203 EXPECT_TRUE(t1 < t3);
204 }
205
TEST(Time,NanosecGreaterThan)206 TEST(Time, NanosecGreaterThan) {
207 Nanoseconds t1(5), t2(5), t3(6);
208 EXPECT_FALSE(t2 > t1);
209 EXPECT_TRUE(t3 > t1);
210 EXPECT_FALSE(t1 > t3);
211 }
212