1/* 2 * Copyright (c) 2024 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/dtoa_helper.h" 17#include "ecmascript/tests/test_helper.h" 18 19using namespace panda::ecmascript; 20using namespace panda::ecmascript::base; 21 22#define TEST_DTOA(d, str, buffer, n, k, e1, e2) \ 23 DtoaHelper::Dtoa(d, buffer, &(n), &(k)); \ 24 EXPECT_STREQ(str, buffer); \ 25 EXPECT_EQ(n, e1); \ 26 EXPECT_EQ(k, e2) 27 28namespace panda::test { 29class DtoaHelperTest : public BaseTestWithScope<false> { 30protected: 31 template <class To, class From> 32 inline To MemoryCast(const From &src) noexcept 33 { 34 static_assert(sizeof(To) == sizeof(From), "size of the types must be equal"); 35 To dst; 36 if (memcpy_s(&dst, sizeof(To), &src, sizeof(From)) != EOK) { 37 LOG_FULL(FATAL) << "memcpy_s failed"; 38 UNREACHABLE(); 39 } 40 return dst; 41 } 42}; 43 44HWTEST_F_L0(DtoaHelperTest, DoubleToAscii) 45{ 46 char buffer1[128] = {}; 47 int n1; //decimal_point 48 int k1; //length 49 TEST_DTOA(1.2345, "12345", buffer1, n1, k1, 1, 5); 50 51 char buffer2[128] = {}; 52 int n2; 53 int k2; 54 TEST_DTOA(1.2345678, "12345678", buffer2, n2, k2, 1, 8); 55 56 char buffer3[128] = {}; 57 int n3; 58 int k3; 59 TEST_DTOA(1e30, "1", buffer3, n3, k3, 31, 1); 60 61 char buffer4[128] = {}; 62 int n4; 63 int k4; 64 TEST_DTOA(79.39773355813419, "7939773355813419", buffer4, n4, k4, 2, 16); 65 66 char buffer5[128] = {}; 67 int n5; 68 int k5; 69 TEST_DTOA(0.0000001, "1", buffer5, n5, k5, -6, 1); 70 71 char buffer6[128] = {}; 72 int n6; 73 int k6; 74 TEST_DTOA(1.234567890123456e30, "1234567890123456", buffer6, n6, k6, 31, 16); 75 76 char buffer7[128] = {}; 77 int n7; 78 int k7; 79 TEST_DTOA(2.225073858507201e-308, "2225073858507201", buffer7, n7, k7, -307, 16); // Max subnormal positive double 80 81 char buffer8[128] = {}; 82 int n8; 83 int k8; 84 TEST_DTOA(2.2250738585072014e-308, "22250738585072014", buffer8, n8, k8, -307, 17); // Min normal positive double 85 86 char buffer9[128] = {}; 87 int n9; 88 int k9; 89 TEST_DTOA(1.7976931348623157e308, "17976931348623157", buffer9, n9, k9, 309, 17); // Max double 90 91 char buffera[128] = {}; 92 int na; 93 int ka; 94 TEST_DTOA(5e-301, "5", buffera, na, ka, -300, 1); 95} 96} // namespace panda::test 97