1 /*
2 * Copyright (c) 2022 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
16 #include "ecmascript/base/math_helper.h"
17 #include "ecmascript/tests/test_helper.h"
18
19 using namespace panda::ecmascript;
20 using namespace panda::ecmascript::base;
21
22 namespace panda::test {
23 class MathHelperTest : public BaseTestWithScope<false> {
24 };
25
HWTEST_F_L0(MathHelperTest, GetIntLog2_001)26 HWTEST_F_L0(MathHelperTest, GetIntLog2_001)
27 {
28 const uint32_t commonInput = static_cast<uint32_t>(0b111111111) << 13; // 13 : left shift digit
29 const uint32_t maxInput = std::numeric_limits<uint32_t>::max();
30 EXPECT_EQ(MathHelper::GetIntLog2(commonInput), 13U);
31 EXPECT_EQ(MathHelper::GetIntLog2(maxInput), 0U);
32 }
33
HWTEST_F_L0(MathHelperTest, GetIntLog2_002)34 HWTEST_F_L0(MathHelperTest, GetIntLog2_002)
35 {
36 const uint64_t commonInput = static_cast<uint64_t>(0b111111111) << 53; // 53 : left shift digit
37 const uint64_t maxInput = std::numeric_limits<uint64_t>::max();
38 EXPECT_EQ(MathHelper::GetIntLog2(commonInput), 53U);
39 EXPECT_EQ(MathHelper::GetIntLog2(maxInput), 0U);
40 }
41
HWTEST_F_L0(MathHelperTest, Asinh)42 HWTEST_F_L0(MathHelperTest, Asinh)
43 {
44 EXPECT_EQ(MathHelper::Asinh(1), 0.88137358701954302523260932497979);
45 EXPECT_EQ(MathHelper::Asinh(+0), +0.0);
46 EXPECT_EQ(MathHelper::Asinh(-0), -0.0);
47 EXPECT_EQ(MathHelper::Asinh(-1), -0.88137358701954302523260932497979);
48
49 double nanResult = MathHelper::Asinh(std::numeric_limits<double>::signaling_NaN());
50 EXPECT_TRUE(std::isnan(nanResult));
51 }
52
HWTEST_F_L0(MathHelperTest, Atanh)53 HWTEST_F_L0(MathHelperTest, Atanh)
54 {
55 EXPECT_EQ(MathHelper::Atanh(0), 0);
56 EXPECT_EQ(MathHelper::Atanh(0.5), std::atanh(0.5));
57
58 double infResult = MathHelper::Atanh(-1); // limit value
59 EXPECT_TRUE(std::isinf(infResult));
60
61 double nanResult = MathHelper::Atanh(2); // out of input range
62 EXPECT_TRUE(std::isnan(nanResult));
63 }
64 } // namespace panda::test
65