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