1 /* 2 * Copyright (c) 2025 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 #include <gtest/gtest.h> 16 17 #include <meta/base/time_span.h> 18 19 #include "TestRunner.h" 20 #include "src/test_utils.h" 21 22 using namespace testing::ext; 23 24 META_BEGIN_NAMESPACE() 25 26 class TimeSpanTest : public testing::Test { 27 public: SetUpTestSuite()28 static void SetUpTestSuite() 29 { 30 SetTest(); 31 } TearDownTestSuite()32 static void TearDownTestSuite() 33 { 34 TearDownTest(); 35 } SetUp()36 void SetUp() {} TearDown()37 void TearDown() {} 38 }; 39 40 using namespace META_NS::TimeSpanLiterals; 41 42 HWTEST_F(TimeSpanTest, InitMethods, TestSize.Level1) 43 { 44 constexpr auto v1 = TimeSpan::Milliseconds(2000); 45 constexpr auto v2 = TimeSpan::Microseconds(2000000); 46 constexpr auto v3 = TimeSpan::Seconds(2); 47 constexpr TimeSpan v4 = 2_s; 48 constexpr auto v5 = 2000_ms; 49 constexpr auto v6 = 2000000_us; 50 51 // Should be same regardless of initialization method 52 EXPECT_EQ(v1, v2); 53 EXPECT_EQ(v2, v3); 54 EXPECT_EQ(v4, v5); 55 EXPECT_EQ(v5, v6); 56 EXPECT_EQ(v6, v1); 57 } 58 59 HWTEST_F(TimeSpanTest, Addition, TestSize.Level1) 60 { 61 constexpr auto v1 = TimeSpan::Milliseconds(400); 62 constexpr auto v2 = TimeSpan::Microseconds(2000); 63 64 constexpr auto v3 = v1 + v2; 65 66 EXPECT_EQ(TimeSpan::Milliseconds(402), v3); 67 68 // Check that v1 and v2 haven't changed 69 EXPECT_EQ(TimeSpan::Milliseconds(400), v1); 70 EXPECT_EQ(TimeSpan::Microseconds(2000), v2); 71 } 72 73 HWTEST_F(TimeSpanTest, Subtraction, TestSize.Level1) 74 { 75 constexpr auto v1 = TimeSpan::Milliseconds(400); 76 constexpr auto v2 = TimeSpan::Microseconds(2000); 77 78 constexpr auto v3 = v1 - v2; 79 80 EXPECT_EQ(TimeSpan::Milliseconds(398), v3); 81 82 // Check that v1 and v2 haven't changed 83 EXPECT_EQ(TimeSpan::Milliseconds(400), v1); 84 EXPECT_EQ(TimeSpan::Microseconds(2000), v2); 85 } 86 87 HWTEST_F(TimeSpanTest, Negation, TestSize.Level1) 88 { 89 constexpr auto v1 = -TimeSpan::Milliseconds(200); 90 constexpr auto v2 = -200_ms; 91 92 EXPECT_EQ(v1, v2); 93 EXPECT_EQ(v1, TimeSpan::Milliseconds(-200)); 94 EXPECT_EQ(v2, TimeSpan::Milliseconds(-200)); 95 } 96 97 HWTEST_F(TimeSpanTest, Infinities, TestSize.Level1) 98 { 99 EXPECT_EQ(TimeSpan::Infinite(), TimeSpan::Infinite() + TimeSpan::Infinite()); 100 EXPECT_EQ(-TimeSpan::Infinite(), -TimeSpan::Infinite() - TimeSpan::Infinite()); 101 EXPECT_EQ(TimeSpan::Infinite(), 3 * TimeSpan::Infinite()); 102 EXPECT_EQ(-TimeSpan::Infinite(), -1 * TimeSpan::Infinite()); 103 EXPECT_EQ(TimeSpan::Infinite(), -1 * -TimeSpan::Infinite()); 104 EXPECT_EQ(TimeSpan::Zero(), 0 * TimeSpan::Infinite()); 105 EXPECT_EQ(TimeSpan::Zero(), 0 * -TimeSpan::Infinite()); 106 107 EXPECT_EQ(TimeSpan::Infinite(), TimeSpan::Infinite() + TimeSpan::Microseconds(10)); 108 EXPECT_EQ(TimeSpan::Infinite(), TimeSpan::Infinite() - TimeSpan::Microseconds(10)); 109 EXPECT_EQ(-TimeSpan::Infinite(), -TimeSpan::Infinite() + TimeSpan::Microseconds(10)); 110 EXPECT_EQ(-TimeSpan::Infinite(), -TimeSpan::Infinite() - TimeSpan::Microseconds(10)); 111 112 auto v1 = TimeSpan::Infinite(); 113 v1 += TimeSpan::Milliseconds(10); 114 115 EXPECT_EQ(TimeSpan::Infinite(), v1); 116 117 auto v2 = TimeSpan::Infinite(); 118 v2 -= TimeSpan::Milliseconds(10); 119 120 EXPECT_EQ(TimeSpan::Infinite(), v2); 121 } 122 123 HWTEST_F(TimeSpanTest, TimeIsRoundedToMicroseconds, TestSize.Level1) 124 { 125 EXPECT_EQ(TimeSpan::Microseconds(1), TimeSpan::Seconds(1e-6)); 126 EXPECT_EQ(TimeSpan::Microseconds(0), TimeSpan::Seconds(0.4e-6)); 127 EXPECT_EQ(TimeSpan::Microseconds(1), TimeSpan::Seconds(0.5e-6)); 128 129 auto timeSpan = TimeSpan::Microseconds(1); 130 timeSpan.SetSeconds(0.4e-6); 131 EXPECT_EQ(TimeSpan::Microseconds(0), timeSpan); 132 133 timeSpan.SetSeconds(0.5e-6); 134 EXPECT_EQ(TimeSpan::Microseconds(1), timeSpan); 135 } 136 137 HWTEST_F(TimeSpanTest, MultiplicationResultIsRoundedToMicroseconds, TestSize.Level1) 138 { 139 EXPECT_EQ(TimeSpan::Microseconds(1), TimeSpan::Microseconds(1) * 0.5f); 140 EXPECT_EQ(TimeSpan::Microseconds(0), TimeSpan::Microseconds(1) * 0.1f); 141 } 142 143 HWTEST_F(TimeSpanTest, DivisionResultIsRoundedToMicroseconds, TestSize.Level1) 144 { 145 EXPECT_EQ(TimeSpan::Microseconds(1), TimeSpan::Microseconds(1) / 2); 146 EXPECT_EQ(TimeSpan::Microseconds(0), TimeSpan::Microseconds(1) / 10); 147 EXPECT_EQ(TimeSpan::Microseconds(1), TimeSpan::Microseconds(1) / 2.f); 148 EXPECT_EQ(TimeSpan::Microseconds(0), TimeSpan::Microseconds(1) / 10.f); 149 } 150 151 META_END_NAMESPACE() 152