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