• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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