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