18bf80f4bSopenharmony_ci/*
28bf80f4bSopenharmony_ci * Copyright (C) 2024 Huawei Device Co., Ltd.
38bf80f4bSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
48bf80f4bSopenharmony_ci * you may not use this file except in compliance with the License.
58bf80f4bSopenharmony_ci * You may obtain a copy of the License at
68bf80f4bSopenharmony_ci *
78bf80f4bSopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
88bf80f4bSopenharmony_ci *
98bf80f4bSopenharmony_ci * Unless required by applicable law or agreed to in writing, software
108bf80f4bSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
118bf80f4bSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
128bf80f4bSopenharmony_ci * See the License for the specific language governing permissions and
138bf80f4bSopenharmony_ci * limitations under the License.
148bf80f4bSopenharmony_ci */
158bf80f4bSopenharmony_ci
168bf80f4bSopenharmony_ci#include <gtest/gtest.h>
178bf80f4bSopenharmony_ci
188bf80f4bSopenharmony_ci#include <meta/base/time_span.h>
198bf80f4bSopenharmony_ci
208bf80f4bSopenharmony_ci#include "src/test_runner.h"
218bf80f4bSopenharmony_ci#include "src/test_utils.h"
228bf80f4bSopenharmony_ci
238bf80f4bSopenharmony_ciusing namespace testing::ext;
248bf80f4bSopenharmony_ci
258bf80f4bSopenharmony_ciMETA_BEGIN_NAMESPACE()
268bf80f4bSopenharmony_ci
278bf80f4bSopenharmony_ciclass TimeSpanTest : public testing::Test {
288bf80f4bSopenharmony_cipublic:
298bf80f4bSopenharmony_ci    static void SetUpTestSuite()
308bf80f4bSopenharmony_ci    {
318bf80f4bSopenharmony_ci        SetTest();
328bf80f4bSopenharmony_ci    }
338bf80f4bSopenharmony_ci    static void TearDownTestSuite()
348bf80f4bSopenharmony_ci    {
358bf80f4bSopenharmony_ci        ResetTest();
368bf80f4bSopenharmony_ci    }
378bf80f4bSopenharmony_ci    void SetUp() override {}
388bf80f4bSopenharmony_ci    void TearDown() override {}
398bf80f4bSopenharmony_ci};
408bf80f4bSopenharmony_ci
418bf80f4bSopenharmony_ciusing namespace META_NS::TimeSpanLiterals;
428bf80f4bSopenharmony_ci
438bf80f4bSopenharmony_ci/**
448bf80f4bSopenharmony_ci * @tc.name: TimeSpanTest
458bf80f4bSopenharmony_ci * @tc.desc: test InitMethods function
468bf80f4bSopenharmony_ci * @tc.type: FUNC
478bf80f4bSopenharmony_ci * @tc.require: I7DMS1
488bf80f4bSopenharmony_ci */
498bf80f4bSopenharmony_ciHWTEST_F(TimeSpanTest, InitMethods, TestSize.Level1)
508bf80f4bSopenharmony_ci{
518bf80f4bSopenharmony_ci    constexpr auto v1 = TimeSpan::Milliseconds(2000);
528bf80f4bSopenharmony_ci    constexpr auto v2 = TimeSpan::Microseconds(2000000);
538bf80f4bSopenharmony_ci    constexpr auto v3 = TimeSpan::Seconds(2);
548bf80f4bSopenharmony_ci    constexpr TimeSpan v4 = 2_s;
558bf80f4bSopenharmony_ci    constexpr auto v5 = 2000_ms;
568bf80f4bSopenharmony_ci    constexpr auto v6 = 2000000_us;
578bf80f4bSopenharmony_ci
588bf80f4bSopenharmony_ci    EXPECT_EQ(v1, v2);
598bf80f4bSopenharmony_ci    EXPECT_EQ(v2, v3);
608bf80f4bSopenharmony_ci    EXPECT_EQ(v4, v5);
618bf80f4bSopenharmony_ci    EXPECT_EQ(v5, v6);
628bf80f4bSopenharmony_ci    EXPECT_EQ(v6, v1);
638bf80f4bSopenharmony_ci}
648bf80f4bSopenharmony_ci
658bf80f4bSopenharmony_ci/**
668bf80f4bSopenharmony_ci * @tc.name: TimeSpanTest
678bf80f4bSopenharmony_ci * @tc.desc: test Addition function
688bf80f4bSopenharmony_ci * @tc.type: FUNC
698bf80f4bSopenharmony_ci * @tc.require: I7DMS1
708bf80f4bSopenharmony_ci */
718bf80f4bSopenharmony_ciHWTEST_F(TimeSpanTest, Addition, TestSize.Level1)
728bf80f4bSopenharmony_ci{
738bf80f4bSopenharmony_ci    constexpr auto v1 = TimeSpan::Milliseconds(400);
748bf80f4bSopenharmony_ci    constexpr auto v2 = TimeSpan::Microseconds(2000);
758bf80f4bSopenharmony_ci
768bf80f4bSopenharmony_ci    constexpr auto v3 = v1 + v2;
778bf80f4bSopenharmony_ci
788bf80f4bSopenharmony_ci    EXPECT_EQ(TimeSpan::Milliseconds(402), v3);
798bf80f4bSopenharmony_ci
808bf80f4bSopenharmony_ci    EXPECT_EQ(TimeSpan::Milliseconds(400), v1);
818bf80f4bSopenharmony_ci    EXPECT_EQ(TimeSpan::Microseconds(2000), v2);
828bf80f4bSopenharmony_ci}
838bf80f4bSopenharmony_ci
848bf80f4bSopenharmony_ci/**
858bf80f4bSopenharmony_ci * @tc.name: TimeSpanTest
868bf80f4bSopenharmony_ci * @tc.desc: test Subtraction function
878bf80f4bSopenharmony_ci * @tc.type: FUNC
888bf80f4bSopenharmony_ci * @tc.require: I7DMS1
898bf80f4bSopenharmony_ci */
908bf80f4bSopenharmony_ciHWTEST_F(TimeSpanTest, Subtraction, TestSize.Level1)
918bf80f4bSopenharmony_ci{
928bf80f4bSopenharmony_ci    constexpr auto v1 = TimeSpan::Milliseconds(400);
938bf80f4bSopenharmony_ci    constexpr auto v2 = TimeSpan::Microseconds(2000);
948bf80f4bSopenharmony_ci
958bf80f4bSopenharmony_ci    constexpr auto v3 = v1 - v2;
968bf80f4bSopenharmony_ci
978bf80f4bSopenharmony_ci    EXPECT_EQ(TimeSpan::Milliseconds(398), v3);
988bf80f4bSopenharmony_ci
998bf80f4bSopenharmony_ci    EXPECT_EQ(TimeSpan::Milliseconds(400), v1);
1008bf80f4bSopenharmony_ci    EXPECT_EQ(TimeSpan::Microseconds(2000), v2);
1018bf80f4bSopenharmony_ci}
1028bf80f4bSopenharmony_ci
1038bf80f4bSopenharmony_ci/**
1048bf80f4bSopenharmony_ci * @tc.name: TimeSpanTest
1058bf80f4bSopenharmony_ci * @tc.desc: test Negation function
1068bf80f4bSopenharmony_ci * @tc.type: FUNC
1078bf80f4bSopenharmony_ci * @tc.require: I7DMS1
1088bf80f4bSopenharmony_ci */
1098bf80f4bSopenharmony_ciHWTEST_F(TimeSpanTest, Negation, TestSize.Level1)
1108bf80f4bSopenharmony_ci{
1118bf80f4bSopenharmony_ci    constexpr auto v1 = -TimeSpan::Milliseconds(200);
1128bf80f4bSopenharmony_ci    constexpr auto v2 = -200_ms;
1138bf80f4bSopenharmony_ci
1148bf80f4bSopenharmony_ci    EXPECT_EQ(v1, v2);
1158bf80f4bSopenharmony_ci    EXPECT_EQ(v1, TimeSpan::Milliseconds(-200));
1168bf80f4bSopenharmony_ci    EXPECT_EQ(v2, TimeSpan::Milliseconds(-200));
1178bf80f4bSopenharmony_ci}
1188bf80f4bSopenharmony_ci
1198bf80f4bSopenharmony_ci/**
1208bf80f4bSopenharmony_ci * @tc.name: TimeSpanTest
1218bf80f4bSopenharmony_ci * @tc.desc: test Infinities function
1228bf80f4bSopenharmony_ci * @tc.type: FUNC
1238bf80f4bSopenharmony_ci * @tc.require: I7DMS1
1248bf80f4bSopenharmony_ci */
1258bf80f4bSopenharmony_ciHWTEST_F(TimeSpanTest, Infinities, TestSize.Level1)
1268bf80f4bSopenharmony_ci{
1278bf80f4bSopenharmony_ci    EXPECT_EQ(TimeSpan::Infinite(), TimeSpan::Infinite() + TimeSpan::Infinite());
1288bf80f4bSopenharmony_ci    EXPECT_EQ(-TimeSpan::Infinite(), -TimeSpan::Infinite() - TimeSpan::Infinite());
1298bf80f4bSopenharmony_ci    EXPECT_EQ(TimeSpan::Infinite(), 3 * TimeSpan::Infinite());
1308bf80f4bSopenharmony_ci    EXPECT_EQ(-TimeSpan::Infinite(), -1 * TimeSpan::Infinite());
1318bf80f4bSopenharmony_ci    EXPECT_EQ(TimeSpan::Infinite(), -1 * -TimeSpan::Infinite());
1328bf80f4bSopenharmony_ci    EXPECT_EQ(TimeSpan::Zero(), 0 * TimeSpan::Infinite());
1338bf80f4bSopenharmony_ci    EXPECT_EQ(TimeSpan::Zero(), 0 * -TimeSpan::Infinite());
1348bf80f4bSopenharmony_ci
1358bf80f4bSopenharmony_ci    EXPECT_EQ(TimeSpan::Infinite(), TimeSpan::Infinite() + TimeSpan::Microseconds(10));
1368bf80f4bSopenharmony_ci    EXPECT_EQ(TimeSpan::Infinite(), TimeSpan::Infinite() - TimeSpan::Microseconds(10));
1378bf80f4bSopenharmony_ci    EXPECT_EQ(-TimeSpan::Infinite(), -TimeSpan::Infinite() + TimeSpan::Microseconds(10));
1388bf80f4bSopenharmony_ci    EXPECT_EQ(-TimeSpan::Infinite(), -TimeSpan::Infinite() - TimeSpan::Microseconds(10));
1398bf80f4bSopenharmony_ci
1408bf80f4bSopenharmony_ci    auto v1 = TimeSpan::Infinite();
1418bf80f4bSopenharmony_ci    v1 += TimeSpan::Milliseconds(10);
1428bf80f4bSopenharmony_ci
1438bf80f4bSopenharmony_ci    EXPECT_EQ(TimeSpan::Infinite(), v1);
1448bf80f4bSopenharmony_ci
1458bf80f4bSopenharmony_ci    auto v2 = TimeSpan::Infinite();
1468bf80f4bSopenharmony_ci    v2 -= TimeSpan::Milliseconds(10);
1478bf80f4bSopenharmony_ci
1488bf80f4bSopenharmony_ci    EXPECT_EQ(TimeSpan::Infinite(), v2);
1498bf80f4bSopenharmony_ci}
1508bf80f4bSopenharmony_ci
1518bf80f4bSopenharmony_ci/**
1528bf80f4bSopenharmony_ci * @tc.name: TimeSpanTest
1538bf80f4bSopenharmony_ci * @tc.desc: test TimeIsRoundedToMicroseconds function
1548bf80f4bSopenharmony_ci * @tc.type: FUNC
1558bf80f4bSopenharmony_ci * @tc.require: I7DMS1
1568bf80f4bSopenharmony_ci */
1578bf80f4bSopenharmony_ciHWTEST_F(TimeSpanTest, TimeIsRoundedToMicroseconds, TestSize.Level1)
1588bf80f4bSopenharmony_ci{
1598bf80f4bSopenharmony_ci    EXPECT_EQ(TimeSpan::Microseconds(1), TimeSpan::Seconds(1e-6));
1608bf80f4bSopenharmony_ci    EXPECT_EQ(TimeSpan::Microseconds(0), TimeSpan::Seconds(0.4e-6));
1618bf80f4bSopenharmony_ci    EXPECT_EQ(TimeSpan::Microseconds(1), TimeSpan::Seconds(0.5e-6));
1628bf80f4bSopenharmony_ci
1638bf80f4bSopenharmony_ci    auto timeSpan = TimeSpan::Microseconds(1);
1648bf80f4bSopenharmony_ci    timeSpan.SetSeconds(0.4e-6);
1658bf80f4bSopenharmony_ci    EXPECT_EQ(TimeSpan::Microseconds(0), timeSpan);
1668bf80f4bSopenharmony_ci
1678bf80f4bSopenharmony_ci    timeSpan.SetSeconds(0.5e-6);
1688bf80f4bSopenharmony_ci    EXPECT_EQ(TimeSpan::Microseconds(1), timeSpan);
1698bf80f4bSopenharmony_ci}
1708bf80f4bSopenharmony_ci
1718bf80f4bSopenharmony_ci/**
1728bf80f4bSopenharmony_ci * @tc.name: TimeSpanTest
1738bf80f4bSopenharmony_ci * @tc.desc: test MultiplicationResultIsRoundedToMicroseconds function
1748bf80f4bSopenharmony_ci * @tc.type: FUNC
1758bf80f4bSopenharmony_ci * @tc.require: I7DMS1
1768bf80f4bSopenharmony_ci */
1778bf80f4bSopenharmony_ciHWTEST_F(TimeSpanTest, MultiplicationResultIsRoundedToMicroseconds, TestSize.Level1)
1788bf80f4bSopenharmony_ci{
1798bf80f4bSopenharmony_ci    EXPECT_EQ(TimeSpan::Microseconds(1), TimeSpan::Microseconds(1) * 0.5f);
1808bf80f4bSopenharmony_ci    EXPECT_EQ(TimeSpan::Microseconds(0), TimeSpan::Microseconds(1) * 0.1f);
1818bf80f4bSopenharmony_ci}
1828bf80f4bSopenharmony_ci
1838bf80f4bSopenharmony_ci/**
1848bf80f4bSopenharmony_ci * @tc.name: TimeSpanTest
1858bf80f4bSopenharmony_ci * @tc.desc: test MultiplicationResultIsRoundedToMicroseconds function
1868bf80f4bSopenharmony_ci * @tc.type: FUNC
1878bf80f4bSopenharmony_ci * @tc.require: I7DMS1
1888bf80f4bSopenharmony_ci */
1898bf80f4bSopenharmony_ciHWTEST_F(TimeSpanTest, DivisionResultIsRoundedToMicroseconds, TestSize.Level1)
1908bf80f4bSopenharmony_ci{
1918bf80f4bSopenharmony_ci    EXPECT_EQ(TimeSpan::Microseconds(1), TimeSpan::Microseconds(1) / 2);
1928bf80f4bSopenharmony_ci    EXPECT_EQ(TimeSpan::Microseconds(0), TimeSpan::Microseconds(1) / 10);
1938bf80f4bSopenharmony_ci    EXPECT_EQ(TimeSpan::Microseconds(1), TimeSpan::Microseconds(1) / 2.f);
1948bf80f4bSopenharmony_ci    EXPECT_EQ(TimeSpan::Microseconds(0), TimeSpan::Microseconds(1) / 10.f);
1958bf80f4bSopenharmony_ci}
1968bf80f4bSopenharmony_ci
1978bf80f4bSopenharmony_ciMETA_END_NAMESPACE()