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
29 // Tests for Time constants
TEST(Time,CheckTimeConversionConstants)30 TEST(Time, CheckTimeConversionConstants) {
31 EXPECT_EQ(kOneSecondInNanoseconds, 1e9);
32 EXPECT_EQ(kOneMillisecondInNanoseconds, 1e6);
33 EXPECT_EQ(kOneMicrosecondInNanoseconds, 1e3);
34 }
35
36 // Tests for Seconds
TEST(Time,ConvertSecToNanosec)37 TEST(Time, ConvertSecToNanosec) {
38 Seconds t(5);
39 EXPECT_EQ(t.toRawNanoseconds(), 5 * kOneSecondInNanoseconds);
40 }
41
TEST(Time,ConvertSecToNanosecOverflowIsUint64Max)42 TEST(Time, ConvertSecToNanosecOverflowIsUint64Max) {
43 Seconds t(UINT64_MAX / kOneSecondInNanoseconds + 1);
44 EXPECT_EQ(t.toRawNanoseconds(), UINT64_MAX);
45 }
46
47 // Tests for Milliseconds
TEST(Time,DefaultMillisecIsZero)48 TEST(Time, DefaultMillisecIsZero) {
49 Milliseconds t;
50 EXPECT_EQ(t.getMilliseconds(), 0);
51 }
52
TEST(Time,GetInitialMillisec)53 TEST(Time, GetInitialMillisec) {
54 Milliseconds t(5);
55 EXPECT_EQ(t.getMilliseconds(), 5);
56 }
57
TEST(Time,InitializeMillisecFromNanosec)58 TEST(Time, InitializeMillisecFromNanosec) {
59 Nanoseconds tNano(5 * kOneMillisecondInNanoseconds);
60 Milliseconds tMilli(tNano);
61 EXPECT_EQ(tMilli.getMilliseconds(), 5);
62 }
63
TEST(Time,ConvertMillisecToNanosec)64 TEST(Time, ConvertMillisecToNanosec) {
65 Milliseconds t(5);
66 EXPECT_EQ(t.toRawNanoseconds(), 5 * kOneMillisecondInNanoseconds);
67 }
68
TEST(Time,ConvertMillisecToNanosecOverflowIsUint64Max)69 TEST(Time, ConvertMillisecToNanosecOverflowIsUint64Max) {
70 Milliseconds t(UINT64_MAX / kOneMillisecondInNanoseconds + 1);
71 EXPECT_EQ(t.toRawNanoseconds(), UINT64_MAX);
72 }
73
TEST(Time,TestMillisecEquals)74 TEST(Time, TestMillisecEquals) {
75 Milliseconds t1(5), t2(5), t3(6);
76 EXPECT_TRUE(t1 == t2);
77 EXPECT_FALSE(t1 == t3);
78 }
79
80 // Tests for Microseconds
TEST(Time,GetInitialMicrosec)81 TEST(Time, GetInitialMicrosec) {
82 Microseconds t(5);
83 EXPECT_EQ(t.getMicroseconds(), 5);
84 }
85
TEST(Time,InitializeMicrosecFromNanosec)86 TEST(Time, InitializeMicrosecFromNanosec) {
87 Nanoseconds tNano(5 * kOneMicrosecondInNanoseconds);
88 Microseconds tMicro(tNano);
89 EXPECT_EQ(tMicro.getMicroseconds(), 5);
90 }
91
TEST(Time,ConvertMicrosecToNanosec)92 TEST(Time, ConvertMicrosecToNanosec) {
93 Microseconds t(5);
94 EXPECT_EQ(t.toRawNanoseconds(), 5 * kOneMicrosecondInNanoseconds);
95 }
96
TEST(Time,ConvertMicrosecToNanosecOverflowIsUint64Max)97 TEST(Time, ConvertMicrosecToNanosecOverflowIsUint64Max) {
98 Milliseconds t(UINT64_MAX / kOneMicrosecondInNanoseconds + 1);
99 EXPECT_EQ(t.toRawNanoseconds(), UINT64_MAX);
100 }
101
102 // Tests for Nanoseconds
TEST(Time,DefaultNanosecIsZero)103 TEST(Time, DefaultNanosecIsZero) {
104 Nanoseconds t;
105 EXPECT_EQ(t.toRawNanoseconds(), 0);
106 }
107
TEST(Time,GetInitialNanosec)108 TEST(Time, GetInitialNanosec) {
109 Nanoseconds t(5);
110 EXPECT_EQ(t.toRawNanoseconds(), 5);
111 }
112
TEST(Time,InitializeNanosecFromSec)113 TEST(Time, InitializeNanosecFromSec) {
114 Seconds tSec(5);
115 Nanoseconds tNano(tSec);
116 EXPECT_EQ(tNano.toRawNanoseconds(), 5 * kOneSecondInNanoseconds);
117 }
118
TEST(Time,InitializeNanosecFromMillisec)119 TEST(Time, InitializeNanosecFromMillisec) {
120 Milliseconds tMilli(5);
121 Nanoseconds tNano(tMilli);
122 EXPECT_EQ(tNano.toRawNanoseconds(), 5 * kOneMillisecondInNanoseconds);
123 }
124
TEST(Time,InitializeNanosecFromMicrosec)125 TEST(Time, InitializeNanosecFromMicrosec) {
126 Microseconds tMicro(5);
127 Nanoseconds tNano(tMicro);
128 EXPECT_EQ(tNano.toRawNanoseconds(), 5 * kOneMicrosecondInNanoseconds);
129 }
130
TEST(Time,NanosecEquals)131 TEST(Time, NanosecEquals) {
132 Nanoseconds t1(5), t2(5), t3(6);
133 EXPECT_TRUE(t1 == t2);
134 EXPECT_FALSE(t1 == t3);
135 }
136
TEST(Time,NanosecNotEquals)137 TEST(Time, NanosecNotEquals) {
138 Nanoseconds t1(5), t2(5), t3(6);
139 EXPECT_FALSE(t1 != t2);
140 EXPECT_TRUE(t1 != t3);
141 }
142
TEST(Time,AddSecToNanosec)143 TEST(Time, AddSecToNanosec) {
144 Nanoseconds t = Seconds(5) + Nanoseconds(6);
145 EXPECT_EQ(t.toRawNanoseconds(), 5 * kOneSecondInNanoseconds + 6);
146 }
147
TEST(Time,AddSecToNanosecOverflow)148 TEST(Time, AddSecToNanosecOverflow) {
149 Nanoseconds t = Seconds(5) + Nanoseconds(UINT64_MAX);
150 EXPECT_EQ(t.toRawNanoseconds(), 5 * kOneSecondInNanoseconds - 1);
151 }
152
TEST(Time,AddNanosecToNanosec)153 TEST(Time, AddNanosecToNanosec) {
154 Nanoseconds t = Nanoseconds(6) + Nanoseconds(5);
155 EXPECT_EQ(t.toRawNanoseconds(), 11);
156 }
157
TEST(Time,AddNanosecToNanosecOverflow)158 TEST(Time, AddNanosecToNanosecOverflow) {
159 Nanoseconds t = Nanoseconds(6) + Nanoseconds(UINT64_MAX);
160 EXPECT_EQ(t.toRawNanoseconds(), 5);
161 }
162
TEST(Time,SubtractNanosecFromNanosec)163 TEST(Time, SubtractNanosecFromNanosec) {
164 Nanoseconds t = Nanoseconds(11) - Nanoseconds(5);
165 EXPECT_EQ(t.toRawNanoseconds(), 6);
166 }
167
TEST(Time,SubtractNanosecFromNanosecOverflow)168 TEST(Time, SubtractNanosecFromNanosecOverflow) {
169 Nanoseconds t = Nanoseconds(5) - Nanoseconds(11);
170 EXPECT_EQ(t.toRawNanoseconds(), UINT64_MAX - 5);
171 }
172
TEST(Time,NanosecGreaterThanEqual)173 TEST(Time, NanosecGreaterThanEqual) {
174 Nanoseconds t1(5), t2(5), t3(6);
175 EXPECT_TRUE(t2 >= t1);
176 EXPECT_TRUE(t3 >= t1);
177 EXPECT_FALSE(t1 >= t3);
178 }
179
TEST(Time,NanosecLessThan)180 TEST(Time, NanosecLessThan) {
181 Nanoseconds t1(5), t2(5), t3(6);
182 EXPECT_FALSE(t2 < t1);
183 EXPECT_FALSE(t3 < t1);
184 EXPECT_TRUE(t1 < t3);
185 }
186
TEST(Time,NanosecGreaterThan)187 TEST(Time, NanosecGreaterThan) {
188 Nanoseconds t1(5), t2(5), t3(6);
189 EXPECT_FALSE(t2 > t1);
190 EXPECT_TRUE(t3 > t1);
191 EXPECT_FALSE(t1 > t3);
192 }
193