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