1/* 2 * Copyright (c) 2021 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/builtins/builtins_math.h" 17 18#include "ecmascript/base/number_helper.h" 19#include "ecmascript/ecma_runtime_call_info.h" 20#include "ecmascript/ecma_vm.h" 21#include "ecmascript/js_tagged_value-inl.h" 22#include "ecmascript/js_tagged_value.h" 23#include "ecmascript/js_thread.h" 24#include "ecmascript/object_factory.h" 25#include "ecmascript/tests/test_helper.h" 26 27using namespace panda::ecmascript; 28using namespace panda::ecmascript::builtins; 29using namespace panda::ecmascript::base; 30 31namespace panda::test { 32class BuiltinsMathTest : public testing::Test { 33public: 34 // Workaround: Avoid thread local leak [F/runtime: cannot create thread specific key for __cxa_get_globals()] 35 static void SetUpTestCase() 36 { 37 TestHelper::CreateEcmaVMWithScope(instance_, thread_, scope_); 38 } 39 40 static void TearDownTestCase() 41 { 42 TestHelper::DestroyEcmaVMWithScope(instance_, scope_); 43 } 44 45 static EcmaVM *instance_; 46 static EcmaHandleScope *scope_; 47 static JSThread *thread_; 48}; 49EcmaVM *BuiltinsMathTest::instance_ = nullptr; 50EcmaHandleScope *BuiltinsMathTest::scope_ = nullptr; 51JSThread *BuiltinsMathTest::thread_ = nullptr; 52 53// Math.abs(-10) 54HWTEST_F_L0(BuiltinsMathTest, Abs) 55{ 56 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 57 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 58 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 59 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(static_cast<int32_t>(-10))); 60 61 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 62 JSTaggedValue result = BuiltinsMath::Abs(ecmaRuntimeCallInfo); 63 TestHelper::TearDownFrame(thread_, prev); 64 JSTaggedValue expect = BuiltinsBase::GetTaggedInt(10); 65 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 66} 67 68// Math.abs(10) 69HWTEST_F_L0(BuiltinsMathTest, Abs_1) 70{ 71 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 72 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 73 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 74 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(static_cast<int32_t>(10))); 75 76 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 77 JSTaggedValue result = BuiltinsMath::Abs(ecmaRuntimeCallInfo); 78 TestHelper::TearDownFrame(thread_, prev); 79 JSTaggedValue expect = BuiltinsBase::GetTaggedInt(10); 80 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 81} 82 83// Math.abs(0) 84HWTEST_F_L0(BuiltinsMathTest, Abs_2) 85{ 86 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 87 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 88 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 89 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(static_cast<int32_t>(0))); 90 91 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 92 JSTaggedValue result = BuiltinsMath::Abs(ecmaRuntimeCallInfo); 93 TestHelper::TearDownFrame(thread_, prev); 94 JSTaggedValue expect = BuiltinsBase::GetTaggedInt(0); 95 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 96} 97 98// Math.abs(null) 99HWTEST_F_L0(BuiltinsMathTest, Abs_3) 100{ 101 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 102 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 103 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 104 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue::Null()); 105 106 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 107 JSTaggedValue result = BuiltinsMath::Abs(ecmaRuntimeCallInfo); 108 TestHelper::TearDownFrame(thread_, prev); 109 JSTaggedValue expect = BuiltinsBase::GetTaggedInt(0); 110 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 111} 112 113// Math.abs("hello") 114HWTEST_F_L0(BuiltinsMathTest, Abs_4) 115{ 116 JSHandle<EcmaString> test = thread_->GetEcmaVM()->GetFactory()->NewFromASCII("helloworld"); 117 118 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 119 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 120 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 121 ecmaRuntimeCallInfo->SetCallArg(0, test.GetTaggedValue()); 122 123 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 124 JSTaggedValue result = BuiltinsMath::Abs(ecmaRuntimeCallInfo); 125 TestHelper::TearDownFrame(thread_, prev); 126 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(base::NAN_VALUE); 127 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 128} 129 130// Math.abs(Number.MAX_VALUE + 1) 131HWTEST_F_L0(BuiltinsMathTest, Abs_5) 132{ 133 const double testValue = base::MAX_VALUE + 1; 134 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 135 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 136 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 137 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(testValue)); 138 139 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 140 JSTaggedValue result = BuiltinsMath::Abs(ecmaRuntimeCallInfo); 141 TestHelper::TearDownFrame(thread_, prev); 142 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(base::MAX_VALUE); 143 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 144} 145 146// Math.abs(Number.MIN_VALUE) 147HWTEST_F_L0(BuiltinsMathTest, Abs_6) 148{ 149 const double testValue = base::MIN_VALUE + 1; 150 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 151 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 152 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 153 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(testValue)); 154 155 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 156 JSTaggedValue result = BuiltinsMath::Abs(ecmaRuntimeCallInfo); 157 TestHelper::TearDownFrame(thread_, prev); 158 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(1.0); 159 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 160} 161 162// Math.abs(Number.POSITIVE_INFINITY + 1) 163HWTEST_F_L0(BuiltinsMathTest, Abs_7) 164{ 165 const double testValue = base::POSITIVE_INFINITY + 1; 166 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 167 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 168 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 169 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(testValue)); 170 171 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 172 JSTaggedValue result = BuiltinsMath::Abs(ecmaRuntimeCallInfo); 173 TestHelper::TearDownFrame(thread_, prev); 174 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(base::POSITIVE_INFINITY); 175 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 176} 177 178// Math.abs(Number.NEGATIVE_INFINITY - 1) 179HWTEST_F_L0(BuiltinsMathTest, Abs_8) 180{ 181 const double testValue = -base::POSITIVE_INFINITY - 1; 182 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 183 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 184 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 185 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(testValue)); 186 187 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 188 JSTaggedValue result = BuiltinsMath::Abs(ecmaRuntimeCallInfo); 189 TestHelper::TearDownFrame(thread_, prev); 190 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(base::POSITIVE_INFINITY); 191 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 192} 193 194// Math.abs(Number.NAN_VALUE) 195HWTEST_F_L0(BuiltinsMathTest, Abs_9) 196{ 197 const double testValue = base::NAN_VALUE; 198 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 199 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 200 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 201 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(testValue)); 202 203 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 204 JSTaggedValue result = BuiltinsMath::Abs(ecmaRuntimeCallInfo); 205 TestHelper::TearDownFrame(thread_, prev); 206 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(base::NAN_VALUE); 207 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 208} 209 210// Math.abs(VALUE_UNDEFINED) 211HWTEST_F_L0(BuiltinsMathTest, Abs_10) 212{ 213 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 214 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 215 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 216 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue::Undefined()); 217 218 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 219 JSTaggedValue result = BuiltinsMath::Abs(ecmaRuntimeCallInfo); 220 TestHelper::TearDownFrame(thread_, prev); 221 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(base::NAN_VALUE); 222 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 223} 224 225// Math.abs(true) 226HWTEST_F_L0(BuiltinsMathTest, Abs_11) 227{ 228 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 229 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 230 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 231 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue::True()); 232 233 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 234 JSTaggedValue result = BuiltinsMath::Abs(ecmaRuntimeCallInfo); 235 TestHelper::TearDownFrame(thread_, prev); 236 JSTaggedValue expect = BuiltinsBase::GetTaggedInt(1); 237 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 238} 239 240// Math.abs(false) 241HWTEST_F_L0(BuiltinsMathTest, Abs_12) 242{ 243 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 244 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 245 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 246 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue::False()); 247 248 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 249 JSTaggedValue result = BuiltinsMath::Abs(ecmaRuntimeCallInfo); 250 TestHelper::TearDownFrame(thread_, prev); 251 JSTaggedValue expect = BuiltinsBase::GetTaggedInt(0); 252 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 253} 254 255// Math.abs(hole) 256HWTEST_F_L0(BuiltinsMathTest, Abs_13) 257{ 258 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 259 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 260 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 261 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue::Hole()); 262 263 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 264 JSTaggedValue result = BuiltinsMath::Abs(ecmaRuntimeCallInfo); 265 TestHelper::TearDownFrame(thread_, prev); 266 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(base::NAN_VALUE); 267 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 268} 269 270// Math.abs("100.12") 271HWTEST_F_L0(BuiltinsMathTest, Abs_14) 272{ 273 JSHandle<EcmaString> test = thread_->GetEcmaVM()->GetFactory()->NewFromASCII("100.12"); 274 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 275 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 276 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 277 ecmaRuntimeCallInfo->SetCallArg(0, test.GetTaggedValue()); 278 279 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 280 JSTaggedValue result = BuiltinsMath::Abs(ecmaRuntimeCallInfo); 281 TestHelper::TearDownFrame(thread_, prev); 282 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(100.12); 283 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 284} 285 286// Math.acos(-1) 287HWTEST_F_L0(BuiltinsMathTest, Acos) 288{ 289 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 290 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 291 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 292 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(static_cast<int32_t>(-1))); 293 294 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 295 JSTaggedValue result = BuiltinsMath::Acos(ecmaRuntimeCallInfo); 296 TestHelper::TearDownFrame(thread_, prev); 297 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(BuiltinsMath::PI); 298 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 299} 300 301// Math.acos(1) 302HWTEST_F_L0(BuiltinsMathTest, Acos_1) 303{ 304 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 305 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 306 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 307 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(static_cast<int32_t>(1))); 308 309 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 310 JSTaggedValue result = BuiltinsMath::Acos(ecmaRuntimeCallInfo); 311 TestHelper::TearDownFrame(thread_, prev); 312 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(0); 313 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 314} 315 316// Math.acos(-1.5) 317HWTEST_F_L0(BuiltinsMathTest, Acos_2) 318{ 319 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 320 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 321 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 322 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(-1.5)); 323 324 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 325 JSTaggedValue result = BuiltinsMath::Acos(ecmaRuntimeCallInfo); 326 TestHelper::TearDownFrame(thread_, prev); 327 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(base::NAN_VALUE); 328 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 329} 330 331// Math.acos(null) 332HWTEST_F_L0(BuiltinsMathTest, Acos_3) 333{ 334 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 335 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 336 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 337 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue::Null()); 338 339 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 340 JSTaggedValue result = BuiltinsMath::Acos(ecmaRuntimeCallInfo); 341 TestHelper::TearDownFrame(thread_, prev); 342 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(1.5707963267948966); 343 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 344} 345 346// Math.acos(UNDEFINED) 347HWTEST_F_L0(BuiltinsMathTest, Acos_4) 348{ 349 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 350 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 351 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 352 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue::Undefined()); 353 354 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 355 JSTaggedValue result = BuiltinsMath::Acos(ecmaRuntimeCallInfo); 356 TestHelper::TearDownFrame(thread_, prev); 357 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(base::NAN_VALUE); 358 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 359} 360 361// Math.acos(true) 362HWTEST_F_L0(BuiltinsMathTest, Acos_5) 363{ 364 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 365 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 366 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 367 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue::True()); 368 369 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 370 JSTaggedValue result = BuiltinsMath::Acos(ecmaRuntimeCallInfo); 371 TestHelper::TearDownFrame(thread_, prev); 372 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(0.0); 373 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 374} 375 376// Math.acos(false) 377HWTEST_F_L0(BuiltinsMathTest, Acos_6) 378{ 379 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 380 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 381 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 382 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue::False()); 383 384 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 385 JSTaggedValue result = BuiltinsMath::Acos(ecmaRuntimeCallInfo); 386 TestHelper::TearDownFrame(thread_, prev); 387 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(1.5707963267948966); 388 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 389} 390 391// Math.acos("0.1") 392HWTEST_F_L0(BuiltinsMathTest, Acos_7) 393{ 394 JSHandle<EcmaString> test = thread_->GetEcmaVM()->GetFactory()->NewFromASCII("0.1"); 395 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 396 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 397 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 398 ecmaRuntimeCallInfo->SetCallArg(0, test.GetTaggedValue()); 399 400 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 401 JSTaggedValue result = BuiltinsMath::Acos(ecmaRuntimeCallInfo); 402 TestHelper::TearDownFrame(thread_, prev); 403 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(1.4706289056333368); 404 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 405} 406 407// Math.acos("") 408HWTEST_F_L0(BuiltinsMathTest, Acos_8) 409{ 410 JSHandle<EcmaString> test = thread_->GetEcmaVM()->GetFactory()->NewFromASCII(""); 411 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 412 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 413 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 414 ecmaRuntimeCallInfo->SetCallArg(0, test.GetTaggedValue()); 415 416 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 417 JSTaggedValue result = BuiltinsMath::Acos(ecmaRuntimeCallInfo); 418 TestHelper::TearDownFrame(thread_, prev); 419 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(1.5707963267948966); 420 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 421} 422 423// Math.acos(-NaN) 424HWTEST_F_L0(BuiltinsMathTest, Acos_9) 425{ 426 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 427 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 428 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 429 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(-base::NAN_VALUE)); 430 431 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 432 JSTaggedValue result = BuiltinsMath::Acos(ecmaRuntimeCallInfo); 433 TestHelper::TearDownFrame(thread_, prev); 434 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(base::NAN_VALUE); 435 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 436} 437 438// Math.acosh(1.1) 439HWTEST_F_L0(BuiltinsMathTest, Acosh) 440{ 441 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 442 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 443 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 444 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(1.1)); 445 446 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 447 JSTaggedValue result = BuiltinsMath::Acosh(ecmaRuntimeCallInfo); 448 TestHelper::TearDownFrame(thread_, prev); 449 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(0.4435682543851154); 450 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 451} 452 453// Math.acosh(0.5) 454HWTEST_F_L0(BuiltinsMathTest, Acosh_1) 455{ 456 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 457 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 458 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 459 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(0.5)); 460 461 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 462 JSTaggedValue result = BuiltinsMath::Acosh(ecmaRuntimeCallInfo); 463 TestHelper::TearDownFrame(thread_, prev); 464 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(base::NAN_VALUE); 465 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 466} 467 468// Math.acosh(base::POSITIVE_INFINITY) 469HWTEST_F_L0(BuiltinsMathTest, Acosh_2) 470{ 471 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 472 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 473 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 474 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(base::POSITIVE_INFINITY)); 475 476 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 477 JSTaggedValue result = BuiltinsMath::Acosh(ecmaRuntimeCallInfo); 478 TestHelper::TearDownFrame(thread_, prev); 479 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(base::POSITIVE_INFINITY); 480 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 481} 482 483// Math.acosh(null) 484HWTEST_F_L0(BuiltinsMathTest, Acosh_3) 485{ 486 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 487 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 488 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 489 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue::Null()); 490 491 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 492 JSTaggedValue result = BuiltinsMath::Acosh(ecmaRuntimeCallInfo); 493 TestHelper::TearDownFrame(thread_, prev); 494 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(base::NAN_VALUE); 495 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 496} 497 498// Math.acosh(VALUE_UNDEFINED) 499HWTEST_F_L0(BuiltinsMathTest, Acosh_4) 500{ 501 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 502 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 503 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 504 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue::Undefined()); 505 506 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 507 JSTaggedValue result = BuiltinsMath::Acosh(ecmaRuntimeCallInfo); 508 TestHelper::TearDownFrame(thread_, prev); 509 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(base::NAN_VALUE); 510 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 511} 512 513// Math.acosh(true) 514HWTEST_F_L0(BuiltinsMathTest, Acosh_5) 515{ 516 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 517 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 518 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 519 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue::True()); 520 521 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 522 JSTaggedValue result = BuiltinsMath::Acosh(ecmaRuntimeCallInfo); 523 TestHelper::TearDownFrame(thread_, prev); 524 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(0.0); 525 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 526} 527 528// Math.acosh(false) 529HWTEST_F_L0(BuiltinsMathTest, Acosh_6) 530{ 531 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 532 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 533 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 534 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue::False()); 535 536 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 537 JSTaggedValue result = BuiltinsMath::Acosh(ecmaRuntimeCallInfo); 538 TestHelper::TearDownFrame(thread_, prev); 539 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(base::NAN_VALUE); 540 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 541} 542 543// Math.acosh(hole) 544HWTEST_F_L0(BuiltinsMathTest, Acosh_7) 545{ 546 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 547 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 548 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 549 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue::Hole()); 550 551 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 552 JSTaggedValue result = BuiltinsMath::Acosh(ecmaRuntimeCallInfo); 553 TestHelper::TearDownFrame(thread_, prev); 554 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(base::NAN_VALUE); 555 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 556} 557 558// Math.acosh("1") 559HWTEST_F_L0(BuiltinsMathTest, Acosh_8) 560{ 561 JSHandle<EcmaString> test = thread_->GetEcmaVM()->GetFactory()->NewFromASCII("1"); 562 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 563 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 564 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 565 ecmaRuntimeCallInfo->SetCallArg(0, test.GetTaggedValue()); 566 567 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 568 JSTaggedValue result = BuiltinsMath::Acosh(ecmaRuntimeCallInfo); 569 TestHelper::TearDownFrame(thread_, prev); 570 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(0); 571 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 572} 573 574// Math.acosh("") 575HWTEST_F_L0(BuiltinsMathTest, Acosh_9) 576{ 577 JSHandle<EcmaString> test = thread_->GetEcmaVM()->GetFactory()->NewFromASCII(""); 578 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 579 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 580 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 581 ecmaRuntimeCallInfo->SetCallArg(0, test.GetTaggedValue()); 582 583 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 584 JSTaggedValue result = BuiltinsMath::Acosh(ecmaRuntimeCallInfo); 585 TestHelper::TearDownFrame(thread_, prev); 586 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(base::NAN_VALUE); 587 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 588} 589 590// Math.acosh(-NaN) 591HWTEST_F_L0(BuiltinsMathTest, Acosh_10) 592{ 593 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 594 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 595 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 596 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(-base::NAN_VALUE)); 597 598 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 599 JSTaggedValue result = BuiltinsMath::Acosh(ecmaRuntimeCallInfo); 600 TestHelper::TearDownFrame(thread_, prev); 601 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(base::NAN_VALUE); 602 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 603} 604 605// Math.asin(-1) 606HWTEST_F_L0(BuiltinsMathTest, Asin) 607{ 608 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 609 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 610 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 611 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(static_cast<int32_t>(-1))); 612 613 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 614 JSTaggedValue result = BuiltinsMath::Asin(ecmaRuntimeCallInfo); 615 TestHelper::TearDownFrame(thread_, prev); 616 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(-1.5707963267948966); 617 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 618} 619 620// Math.asin(1) 621HWTEST_F_L0(BuiltinsMathTest, Asin_1) 622{ 623 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 624 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 625 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 626 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(static_cast<int32_t>(1))); 627 628 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 629 JSTaggedValue result = BuiltinsMath::Asin(ecmaRuntimeCallInfo); 630 TestHelper::TearDownFrame(thread_, prev); 631 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(1.5707963267948966); 632 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 633} 634 635// Math.asin(-NaN) 636HWTEST_F_L0(BuiltinsMathTest, Asin_2) 637{ 638 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 639 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 640 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 641 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(-base::NAN_VALUE)); 642 643 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 644 JSTaggedValue result = BuiltinsMath::Asin(ecmaRuntimeCallInfo); 645 TestHelper::TearDownFrame(thread_, prev); 646 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(base::NAN_VALUE); 647 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 648} 649 650// Math.asin(null) 651HWTEST_F_L0(BuiltinsMathTest, Asin_3) 652{ 653 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 654 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 655 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 656 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue::Null()); 657 658 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 659 JSTaggedValue result = BuiltinsMath::Asin(ecmaRuntimeCallInfo); 660 TestHelper::TearDownFrame(thread_, prev); 661 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(0); 662 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 663} 664 665// Math.asin(UNDEFINED) 666HWTEST_F_L0(BuiltinsMathTest, Asin_4) 667{ 668 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 669 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 670 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 671 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue::Undefined()); 672 673 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 674 JSTaggedValue result = BuiltinsMath::Asin(ecmaRuntimeCallInfo); 675 TestHelper::TearDownFrame(thread_, prev); 676 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(base::NAN_VALUE); 677 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 678} 679 680// Math.asin(true) 681HWTEST_F_L0(BuiltinsMathTest, Asin_5) 682{ 683 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 684 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 685 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 686 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue::True()); 687 688 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 689 JSTaggedValue result = BuiltinsMath::Asin(ecmaRuntimeCallInfo); 690 TestHelper::TearDownFrame(thread_, prev); 691 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(1.5707963267948966); 692 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 693} 694 695// Math.asin(false) 696HWTEST_F_L0(BuiltinsMathTest, Asin_6) 697{ 698 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 699 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 700 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 701 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue::False()); 702 703 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 704 JSTaggedValue result = BuiltinsMath::Asin(ecmaRuntimeCallInfo); 705 TestHelper::TearDownFrame(thread_, prev); 706 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(0); 707 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 708} 709 710// Math.asin(""") 711HWTEST_F_L0(BuiltinsMathTest, Asin_7) 712{ 713 JSHandle<EcmaString> test = thread_->GetEcmaVM()->GetFactory()->NewFromASCII(""); 714 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 715 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 716 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 717 ecmaRuntimeCallInfo->SetCallArg(0, test.GetTaggedValue()); 718 719 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 720 JSTaggedValue result = BuiltinsMath::Asin(ecmaRuntimeCallInfo); 721 TestHelper::TearDownFrame(thread_, prev); 722 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(0); 723 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 724} 725 726// Math.asin("1") 727HWTEST_F_L0(BuiltinsMathTest, Asin_8) 728{ 729 JSHandle<EcmaString> test = thread_->GetEcmaVM()->GetFactory()->NewFromASCII("1"); 730 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 731 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 732 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 733 ecmaRuntimeCallInfo->SetCallArg(0, test.GetTaggedValue()); 734 735 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 736 JSTaggedValue result = BuiltinsMath::Asin(ecmaRuntimeCallInfo); 737 TestHelper::TearDownFrame(thread_, prev); 738 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(1.5707963267948966); 739 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 740} 741 742// Math.asinh(-1) 743HWTEST_F_L0(BuiltinsMathTest, Asinh) 744{ 745 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 746 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 747 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 748 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(static_cast<int32_t>(-1))); 749 750 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 751 JSTaggedValue result = BuiltinsMath::Asinh(ecmaRuntimeCallInfo); 752 TestHelper::TearDownFrame(thread_, prev); 753 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(-0.881373587019543); 754 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 755} 756 757// Math.asinh(1) 758HWTEST_F_L0(BuiltinsMathTest, Asinh_1) 759{ 760 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 761 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 762 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 763 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(static_cast<int32_t>(1))); 764 765 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 766 JSTaggedValue result = BuiltinsMath::Asinh(ecmaRuntimeCallInfo); 767 TestHelper::TearDownFrame(thread_, prev); 768 TestHelper::TearDownFrame(thread_, prev); 769 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(0.881373587019543); 770 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 771} 772 773// Math.asinh(null) 774HWTEST_F_L0(BuiltinsMathTest, Asinh_2) 775{ 776 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 777 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 778 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 779 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue::Null()); 780 781 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 782 JSTaggedValue result = BuiltinsMath::Asinh(ecmaRuntimeCallInfo); 783 TestHelper::TearDownFrame(thread_, prev); 784 TestHelper::TearDownFrame(thread_, prev); 785 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(0); 786 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 787} 788 789// Math.asinh(-NaN) 790HWTEST_F_L0(BuiltinsMathTest, Asinh_3) 791{ 792 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 793 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 794 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 795 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(-base::NAN_VALUE)); 796 797 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 798 JSTaggedValue result = BuiltinsMath::Asinh(ecmaRuntimeCallInfo); 799 TestHelper::TearDownFrame(thread_, prev); 800 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(base::NAN_VALUE); 801 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 802} 803 804// Math.asinh(NEGATIVE_INFINITY) 805HWTEST_F_L0(BuiltinsMathTest, Asinh_4) 806{ 807 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 808 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 809 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 810 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(-base::POSITIVE_INFINITY)); 811 812 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 813 JSTaggedValue result = BuiltinsMath::Asinh(ecmaRuntimeCallInfo); 814 TestHelper::TearDownFrame(thread_, prev); 815 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(-base::POSITIVE_INFINITY); 816 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 817} 818 819// Math.asinh(true) 820HWTEST_F_L0(BuiltinsMathTest, Asinh_5) 821{ 822 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 823 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 824 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 825 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue::True()); 826 827 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 828 JSTaggedValue result = BuiltinsMath::Asinh(ecmaRuntimeCallInfo); 829 TestHelper::TearDownFrame(thread_, prev); 830 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(0.881373587019543); 831 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 832} 833 834// Math.asinh(false) 835HWTEST_F_L0(BuiltinsMathTest, Asinh_6) 836{ 837 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 838 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 839 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 840 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue::False()); 841 842 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 843 JSTaggedValue result = BuiltinsMath::Asinh(ecmaRuntimeCallInfo); 844 TestHelper::TearDownFrame(thread_, prev); 845 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(0); 846 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 847} 848 849// Math.asinh("") 850HWTEST_F_L0(BuiltinsMathTest, Asinh_7) 851{ 852 JSHandle<EcmaString> test = thread_->GetEcmaVM()->GetFactory()->NewFromASCII(""); 853 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 854 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 855 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 856 ecmaRuntimeCallInfo->SetCallArg(0, test.GetTaggedValue()); 857 858 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 859 JSTaggedValue result = BuiltinsMath::Asinh(ecmaRuntimeCallInfo); 860 TestHelper::TearDownFrame(thread_, prev); 861 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(0); 862 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 863} 864 865// Math.asinh("-5.7") 866HWTEST_F_L0(BuiltinsMathTest, Asinh_8) 867{ 868 JSHandle<EcmaString> test = thread_->GetEcmaVM()->GetFactory()->NewFromASCII("-5.7"); 869 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 870 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 871 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 872 ecmaRuntimeCallInfo->SetCallArg(0, test.GetTaggedValue()); 873 874 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 875 JSTaggedValue result = BuiltinsMath::Asinh(ecmaRuntimeCallInfo); 876 TestHelper::TearDownFrame(thread_, prev); 877 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(-2.44122070725561); 878 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 879} 880 881// Math.asinh(-0.0) 882HWTEST_F_L0(BuiltinsMathTest, Asinh_9) 883{ 884 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 885 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 886 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 887 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(-0.0)); 888 889 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 890 JSTaggedValue result = BuiltinsMath::Asinh(ecmaRuntimeCallInfo); 891 TestHelper::TearDownFrame(thread_, prev); 892 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(-0.0); 893 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 894} 895 896// Math.asinh(+0.0) 897HWTEST_F_L0(BuiltinsMathTest, Asinh_10) 898{ 899 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 900 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 901 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 902 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(+0.0)); 903 904 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 905 JSTaggedValue result = BuiltinsMath::Asinh(ecmaRuntimeCallInfo); 906 TestHelper::TearDownFrame(thread_, prev); 907 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(+0.0); 908 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 909} 910 911// Math.atan(-1) 912HWTEST_F_L0(BuiltinsMathTest, Atan) 913{ 914 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 915 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 916 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 917 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(static_cast<int32_t>(-1))); 918 919 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 920 JSTaggedValue result = BuiltinsMath::Atan(ecmaRuntimeCallInfo); 921 TestHelper::TearDownFrame(thread_, prev); 922 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(-0.7853981633974483); 923 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 924} 925 926// Math.atan(1) 927HWTEST_F_L0(BuiltinsMathTest, Atan_1) 928{ 929 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 930 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 931 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 932 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(static_cast<int32_t>(1))); 933 934 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 935 JSTaggedValue result = BuiltinsMath::Atan(ecmaRuntimeCallInfo); 936 TestHelper::TearDownFrame(thread_, prev); 937 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(0.7853981633974483); 938 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 939} 940 941// Math.atan(null) 942HWTEST_F_L0(BuiltinsMathTest, Atan_2) 943{ 944 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 945 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 946 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 947 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue::Null()); 948 949 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 950 JSTaggedValue result = BuiltinsMath::Atan(ecmaRuntimeCallInfo); 951 TestHelper::TearDownFrame(thread_, prev); 952 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(0); 953 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 954} 955 956// Math.atan(-NaN) 957HWTEST_F_L0(BuiltinsMathTest, Atan_3) 958{ 959 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 960 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 961 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 962 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(-base::NAN_VALUE)); 963 964 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 965 JSTaggedValue result = BuiltinsMath::Atan(ecmaRuntimeCallInfo); 966 TestHelper::TearDownFrame(thread_, prev); 967 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(base::NAN_VALUE); 968 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 969} 970 971// Math.atan(POSITIVE_INFINITY) 972HWTEST_F_L0(BuiltinsMathTest, Atan_4) 973{ 974 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 975 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 976 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 977 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(base::POSITIVE_INFINITY)); 978 979 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 980 JSTaggedValue result = BuiltinsMath::Atan(ecmaRuntimeCallInfo); 981 TestHelper::TearDownFrame(thread_, prev); 982 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(BuiltinsMath::PI / 2); 983 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 984} 985 986// Math.atan(true) 987HWTEST_F_L0(BuiltinsMathTest, Atan_5) 988{ 989 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 990 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 991 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 992 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue::True()); 993 994 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 995 JSTaggedValue result = BuiltinsMath::Atan(ecmaRuntimeCallInfo); 996 TestHelper::TearDownFrame(thread_, prev); 997 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(0.7853981633974483); 998 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 999} 1000 1001// Math.atan(false) 1002HWTEST_F_L0(BuiltinsMathTest, Atan_6) 1003{ 1004 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 1005 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 1006 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 1007 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue::False()); 1008 1009 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 1010 JSTaggedValue result = BuiltinsMath::Atan(ecmaRuntimeCallInfo); 1011 TestHelper::TearDownFrame(thread_, prev); 1012 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(0); 1013 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 1014} 1015 1016// Math.atan("") 1017HWTEST_F_L0(BuiltinsMathTest, Atan_7) 1018{ 1019 JSHandle<EcmaString> test = thread_->GetEcmaVM()->GetFactory()->NewFromASCII(" "); 1020 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 1021 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 1022 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 1023 ecmaRuntimeCallInfo->SetCallArg(0, test.GetTaggedValue()); 1024 1025 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 1026 JSTaggedValue result = BuiltinsMath::Atan(ecmaRuntimeCallInfo); 1027 TestHelper::TearDownFrame(thread_, prev); 1028 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(0); 1029 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 1030} 1031 1032// Math.atan("-1") 1033HWTEST_F_L0(BuiltinsMathTest, Atan_8) 1034{ 1035 JSHandle<EcmaString> test = thread_->GetEcmaVM()->GetFactory()->NewFromASCII("-1"); 1036 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 1037 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 1038 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 1039 ecmaRuntimeCallInfo->SetCallArg(0, test.GetTaggedValue()); 1040 1041 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 1042 JSTaggedValue result = BuiltinsMath::Atan(ecmaRuntimeCallInfo); 1043 TestHelper::TearDownFrame(thread_, prev); 1044 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(-0.7853981633974483); 1045 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 1046} 1047 1048// Math.atanh(-1) 1049HWTEST_F_L0(BuiltinsMathTest, Atanh) 1050{ 1051 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 1052 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 1053 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 1054 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(static_cast<int32_t>(-1))); 1055 1056 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 1057 JSTaggedValue result = BuiltinsMath::Atanh(ecmaRuntimeCallInfo); 1058 TestHelper::TearDownFrame(thread_, prev); 1059 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(-base::POSITIVE_INFINITY); 1060 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 1061} 1062 1063// Math.atanh(1) 1064HWTEST_F_L0(BuiltinsMathTest, Atanh_1) 1065{ 1066 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 1067 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 1068 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 1069 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(static_cast<int32_t>(1))); 1070 1071 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 1072 JSTaggedValue result = BuiltinsMath::Atanh(ecmaRuntimeCallInfo); 1073 TestHelper::TearDownFrame(thread_, prev); 1074 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(base::POSITIVE_INFINITY); 1075 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 1076} 1077 1078// Math.atanh(null) 1079HWTEST_F_L0(BuiltinsMathTest, Atanh_2) 1080{ 1081 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 1082 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 1083 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 1084 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue::Null()); 1085 1086 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 1087 JSTaggedValue result = BuiltinsMath::Atanh(ecmaRuntimeCallInfo); 1088 TestHelper::TearDownFrame(thread_, prev); 1089 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(0); 1090 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 1091} 1092 1093// Math.atanh(-NaN) 1094HWTEST_F_L0(BuiltinsMathTest, Atanh_3) 1095{ 1096 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 1097 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 1098 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 1099 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(-base::NAN_VALUE)); 1100 1101 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 1102 JSTaggedValue result = BuiltinsMath::Atanh(ecmaRuntimeCallInfo); 1103 TestHelper::TearDownFrame(thread_, prev); 1104 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(base::NAN_VALUE); 1105 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 1106} 1107 1108// Math.atanh(1.5) 1109HWTEST_F_L0(BuiltinsMathTest, Atanh_4) 1110{ 1111 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 1112 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 1113 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 1114 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(1.5)); 1115 1116 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 1117 JSTaggedValue result = BuiltinsMath::Atanh(ecmaRuntimeCallInfo); 1118 TestHelper::TearDownFrame(thread_, prev); 1119 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(base::NAN_VALUE); 1120 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 1121} 1122 1123// Math.atanh(true) 1124HWTEST_F_L0(BuiltinsMathTest, Atanh_5) 1125{ 1126 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 1127 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 1128 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 1129 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue::True()); 1130 1131 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 1132 JSTaggedValue result = BuiltinsMath::Atanh(ecmaRuntimeCallInfo); 1133 TestHelper::TearDownFrame(thread_, prev); 1134 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(base::POSITIVE_INFINITY); 1135 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 1136} 1137 1138// Math.atanh(false) 1139HWTEST_F_L0(BuiltinsMathTest, Atanh_6) 1140{ 1141 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 1142 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 1143 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 1144 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue::False()); 1145 1146 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 1147 JSTaggedValue result = BuiltinsMath::Atanh(ecmaRuntimeCallInfo); 1148 TestHelper::TearDownFrame(thread_, prev); 1149 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(0); 1150 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 1151} 1152 1153// Math.atanh("") 1154HWTEST_F_L0(BuiltinsMathTest, Atanh_7) 1155{ 1156 JSHandle<EcmaString> test = thread_->GetEcmaVM()->GetFactory()->NewFromASCII(" "); 1157 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 1158 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 1159 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 1160 ecmaRuntimeCallInfo->SetCallArg(0, test.GetTaggedValue()); 1161 1162 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 1163 JSTaggedValue result = BuiltinsMath::Atanh(ecmaRuntimeCallInfo); 1164 TestHelper::TearDownFrame(thread_, prev); 1165 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(0); 1166 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 1167} 1168 1169// Math.atanh("-1") 1170HWTEST_F_L0(BuiltinsMathTest, Atanh_8) 1171{ 1172 JSHandle<EcmaString> test = thread_->GetEcmaVM()->GetFactory()->NewFromASCII("-1"); 1173 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 1174 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 1175 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 1176 ecmaRuntimeCallInfo->SetCallArg(0, test.GetTaggedValue()); 1177 1178 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 1179 JSTaggedValue result = BuiltinsMath::Atanh(ecmaRuntimeCallInfo); 1180 TestHelper::TearDownFrame(thread_, prev); 1181 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(-base::POSITIVE_INFINITY); 1182 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 1183} 1184 1185// Math.atanh(-0.0) 1186HWTEST_F_L0(BuiltinsMathTest, Atanh_9) 1187{ 1188 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 1189 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 1190 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 1191 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(-0.0)); 1192 1193 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 1194 JSTaggedValue result = BuiltinsMath::Atanh(ecmaRuntimeCallInfo); 1195 TestHelper::TearDownFrame(thread_, prev); 1196 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(-0.0); 1197 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 1198} 1199 1200// Math.atanh(+0.0) 1201HWTEST_F_L0(BuiltinsMathTest, Atanh_10) 1202{ 1203 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 1204 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 1205 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 1206 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(+0.0)); 1207 1208 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 1209 JSTaggedValue result = BuiltinsMath::Atanh(ecmaRuntimeCallInfo); 1210 TestHelper::TearDownFrame(thread_, prev); 1211 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(+0.0); 1212 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 1213} 1214 1215// Math.atan2(NaN, 1.5) 1216HWTEST_F_L0(BuiltinsMathTest, Atan2) 1217{ 1218 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 8); 1219 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 1220 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 1221 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(base::NAN_VALUE)); 1222 ecmaRuntimeCallInfo->SetCallArg(1, JSTaggedValue(1.5)); 1223 1224 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 1225 JSTaggedValue result = BuiltinsMath::Atan2(ecmaRuntimeCallInfo); 1226 TestHelper::TearDownFrame(thread_, prev); 1227 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(base::NAN_VALUE); 1228 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 1229} 1230 1231// Math.atan2(-1, 1.5) 1232HWTEST_F_L0(BuiltinsMathTest, Atan2_1) 1233{ 1234 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 8); 1235 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 1236 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 1237 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(static_cast<int32_t>(-1))); 1238 ecmaRuntimeCallInfo->SetCallArg(1, JSTaggedValue(1.5)); 1239 1240 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 1241 JSTaggedValue result = BuiltinsMath::Atan2(ecmaRuntimeCallInfo); 1242 TestHelper::TearDownFrame(thread_, prev); 1243 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(-0.5880026035475675); 1244 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 1245} 1246 1247// Math.atan2(1, -0) 1248HWTEST_F_L0(BuiltinsMathTest, Atan2_2) 1249{ 1250 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 8); 1251 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 1252 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 1253 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(static_cast<int32_t>(1))); 1254 ecmaRuntimeCallInfo->SetCallArg(1, JSTaggedValue(-0.0)); 1255 1256 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 1257 JSTaggedValue result = BuiltinsMath::Atan2(ecmaRuntimeCallInfo); 1258 TestHelper::TearDownFrame(thread_, prev); 1259 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(BuiltinsMath::PI / 2); 1260 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 1261} 1262 1263// Math.atan2(0, 1) 1264HWTEST_F_L0(BuiltinsMathTest, Atan2_3) 1265{ 1266 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 8); 1267 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 1268 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 1269 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(static_cast<int32_t>(0))); 1270 ecmaRuntimeCallInfo->SetCallArg(1, JSTaggedValue(static_cast<int32_t>(1))); 1271 1272 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 1273 JSTaggedValue result = BuiltinsMath::Atan2(ecmaRuntimeCallInfo); 1274 TestHelper::TearDownFrame(thread_, prev); 1275 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(0); 1276 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 1277} 1278 1279// Math.atan2(0, -0) 1280HWTEST_F_L0(BuiltinsMathTest, Atan2_4) 1281{ 1282 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 8); 1283 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 1284 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 1285 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(static_cast<int32_t>(0))); 1286 ecmaRuntimeCallInfo->SetCallArg(1, JSTaggedValue(-0.0)); 1287 1288 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 1289 JSTaggedValue result = BuiltinsMath::Atan2(ecmaRuntimeCallInfo); 1290 TestHelper::TearDownFrame(thread_, prev); 1291 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(BuiltinsMath::PI); 1292 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 1293} 1294 1295// Math.atan2(-0, 0) 1296HWTEST_F_L0(BuiltinsMathTest, Atan2_5) 1297{ 1298 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 8); 1299 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 1300 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 1301 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(-0.0)); 1302 ecmaRuntimeCallInfo->SetCallArg(1, JSTaggedValue(static_cast<int32_t>(0))); 1303 1304 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 1305 JSTaggedValue result = BuiltinsMath::Atan2(ecmaRuntimeCallInfo); 1306 TestHelper::TearDownFrame(thread_, prev); 1307 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(-0.0); 1308 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 1309} 1310 1311// Math.atan2(-0, -0) 1312HWTEST_F_L0(BuiltinsMathTest, Atan2_6) 1313{ 1314 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 8); 1315 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 1316 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 1317 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(-0.0)); 1318 ecmaRuntimeCallInfo->SetCallArg(1, JSTaggedValue(-0.0)); 1319 1320 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 1321 JSTaggedValue result = BuiltinsMath::Atan2(ecmaRuntimeCallInfo); 1322 TestHelper::TearDownFrame(thread_, prev); 1323 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(-BuiltinsMath::PI); 1324 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 1325} 1326 1327// Math.atan2(true, false) 1328HWTEST_F_L0(BuiltinsMathTest, Atan2_7) 1329{ 1330 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 8); 1331 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 1332 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 1333 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue::True()); 1334 ecmaRuntimeCallInfo->SetCallArg(1, JSTaggedValue::False()); 1335 1336 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 1337 JSTaggedValue result = BuiltinsMath::Atan2(ecmaRuntimeCallInfo); 1338 TestHelper::TearDownFrame(thread_, prev); 1339 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(1.5707963267948966); 1340 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 1341} 1342 1343// Math.atan2(false, true) 1344HWTEST_F_L0(BuiltinsMathTest, Atan2_8) 1345{ 1346 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 8); 1347 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 1348 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 1349 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue::False()); 1350 ecmaRuntimeCallInfo->SetCallArg(1, JSTaggedValue::True()); 1351 1352 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 1353 JSTaggedValue result = BuiltinsMath::Atan2(ecmaRuntimeCallInfo); 1354 TestHelper::TearDownFrame(thread_, prev); 1355 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(0); 1356 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 1357} 1358 1359// Math.atan2("-1","") 1360HWTEST_F_L0(BuiltinsMathTest, Atan2_9) 1361{ 1362 JSHandle<EcmaString> test_1 = thread_->GetEcmaVM()->GetFactory()->NewFromASCII("-1"); 1363 JSHandle<EcmaString> test_2 = thread_->GetEcmaVM()->GetFactory()->NewFromASCII(""); 1364 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 8); 1365 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 1366 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 1367 ecmaRuntimeCallInfo->SetCallArg(0, test_1.GetTaggedValue()); 1368 ecmaRuntimeCallInfo->SetCallArg(1, test_2.GetTaggedValue()); 1369 1370 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 1371 JSTaggedValue result = BuiltinsMath::Atan2(ecmaRuntimeCallInfo); 1372 TestHelper::TearDownFrame(thread_, prev); 1373 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(-1.5707963267948966); 1374 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 1375} 1376 1377// Math.atan2("0.23","0.72") 1378HWTEST_F_L0(BuiltinsMathTest, Atan2_10) 1379{ 1380 JSHandle<EcmaString> test_1 = thread_->GetEcmaVM()->GetFactory()->NewFromASCII("0.23"); 1381 JSHandle<EcmaString> test_2 = thread_->GetEcmaVM()->GetFactory()->NewFromASCII("0.72"); 1382 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 8); 1383 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 1384 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 1385 ecmaRuntimeCallInfo->SetCallArg(0, test_1.GetTaggedValue()); 1386 ecmaRuntimeCallInfo->SetCallArg(1, test_2.GetTaggedValue()); 1387 1388 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 1389 JSTaggedValue result = BuiltinsMath::Atan2(ecmaRuntimeCallInfo); 1390 TestHelper::TearDownFrame(thread_, prev); 1391 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(0.3091989123270746); 1392 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 1393} 1394 1395// Math.atan2(-NaN, 1.5) 1396HWTEST_F_L0(BuiltinsMathTest, Atan2_11) 1397{ 1398 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 8); 1399 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 1400 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 1401 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(-base::NAN_VALUE)); 1402 ecmaRuntimeCallInfo->SetCallArg(1, JSTaggedValue(-1.5)); 1403 1404 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 1405 JSTaggedValue result = BuiltinsMath::Atan2(ecmaRuntimeCallInfo); 1406 TestHelper::TearDownFrame(thread_, prev); 1407 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(base::NAN_VALUE); 1408 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 1409} 1410 1411// Math.cbrt(0) 1412HWTEST_F_L0(BuiltinsMathTest, Cbrt) 1413{ 1414 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 1415 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 1416 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 1417 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(static_cast<int32_t>(0))); 1418 1419 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 1420 JSTaggedValue result = BuiltinsMath::Cbrt(ecmaRuntimeCallInfo); 1421 TestHelper::TearDownFrame(thread_, prev); 1422 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(0); 1423 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 1424} 1425 1426// Math.cbrt(-0) 1427HWTEST_F_L0(BuiltinsMathTest, Cbrt_1) 1428{ 1429 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 1430 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 1431 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 1432 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(-0.0)); 1433 1434 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 1435 JSTaggedValue result = BuiltinsMath::Cbrt(ecmaRuntimeCallInfo); 1436 TestHelper::TearDownFrame(thread_, prev); 1437 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(-0.0); 1438 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 1439} 1440 1441// Math.cbrt(NEGATIVE_INFINITY) 1442HWTEST_F_L0(BuiltinsMathTest, Cbrt_2) 1443{ 1444 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 1445 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 1446 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 1447 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(-base::POSITIVE_INFINITY)); 1448 1449 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 1450 JSTaggedValue result = BuiltinsMath::Cbrt(ecmaRuntimeCallInfo); 1451 TestHelper::TearDownFrame(thread_, prev); 1452 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(-base::POSITIVE_INFINITY); 1453 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 1454} 1455 1456// Math.cbrt(POSITIVE_INFINITY) 1457HWTEST_F_L0(BuiltinsMathTest, Cbrt_3) 1458{ 1459 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 1460 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 1461 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 1462 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(base::POSITIVE_INFINITY)); 1463 1464 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 1465 JSTaggedValue result = BuiltinsMath::Cbrt(ecmaRuntimeCallInfo); 1466 TestHelper::TearDownFrame(thread_, prev); 1467 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(base::POSITIVE_INFINITY); 1468 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 1469} 1470 1471// Math.cbrt(VALUE_UNDEFINED) 1472HWTEST_F_L0(BuiltinsMathTest, Cbrt_4) 1473{ 1474 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 1475 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 1476 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 1477 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue::Undefined()); 1478 1479 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 1480 JSTaggedValue result = BuiltinsMath::Cbrt(ecmaRuntimeCallInfo); 1481 TestHelper::TearDownFrame(thread_, prev); 1482 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(base::NAN_VALUE); 1483 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 1484} 1485 1486// Math.cbrt(true) 1487HWTEST_F_L0(BuiltinsMathTest, Cbrt_5) 1488{ 1489 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 1490 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 1491 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 1492 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue::True()); 1493 1494 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 1495 JSTaggedValue result = BuiltinsMath::Cbrt(ecmaRuntimeCallInfo); 1496 TestHelper::TearDownFrame(thread_, prev); 1497 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(1.0); 1498 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 1499} 1500 1501// Math.cbrt(false) 1502HWTEST_F_L0(BuiltinsMathTest, Cbrt_6) 1503{ 1504 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 1505 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 1506 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 1507 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue::False()); 1508 1509 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 1510 JSTaggedValue result = BuiltinsMath::Cbrt(ecmaRuntimeCallInfo); 1511 TestHelper::TearDownFrame(thread_, prev); 1512 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(0); 1513 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 1514} 1515 1516// Math.cbrt("") 1517HWTEST_F_L0(BuiltinsMathTest, Cbrt_7) 1518{ 1519 JSHandle<EcmaString> test = thread_->GetEcmaVM()->GetFactory()->NewFromASCII(" "); 1520 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 1521 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 1522 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 1523 ecmaRuntimeCallInfo->SetCallArg(0, test.GetTaggedValue()); 1524 1525 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 1526 JSTaggedValue result = BuiltinsMath::Cbrt(ecmaRuntimeCallInfo); 1527 TestHelper::TearDownFrame(thread_, prev); 1528 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(0); 1529 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 1530} 1531 1532// Math.cbrt("1.23") 1533HWTEST_F_L0(BuiltinsMathTest, Cbrt_8) 1534{ 1535 JSHandle<EcmaString> test = thread_->GetEcmaVM()->GetFactory()->NewFromASCII("1.23"); 1536 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 1537 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 1538 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 1539 ecmaRuntimeCallInfo->SetCallArg(0, test.GetTaggedValue()); 1540 1541 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 1542 JSTaggedValue result = BuiltinsMath::Cbrt(ecmaRuntimeCallInfo); 1543 TestHelper::TearDownFrame(thread_, prev); 1544 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(1.0714412696907731); 1545 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 1546} 1547 1548// Math.cbrt(-NaN) 1549HWTEST_F_L0(BuiltinsMathTest, Cbrt_9) 1550{ 1551 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 1552 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 1553 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 1554 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(-base::NAN_VALUE)); 1555 1556 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 1557 JSTaggedValue result = BuiltinsMath::Cbrt(ecmaRuntimeCallInfo); 1558 TestHelper::TearDownFrame(thread_, prev); 1559 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(base::NAN_VALUE); 1560 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 1561} 1562 1563// Math.ceil(3.25) 1564HWTEST_F_L0(BuiltinsMathTest, Ceil) 1565{ 1566 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 1567 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 1568 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 1569 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(3.25)); 1570 1571 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 1572 JSTaggedValue result = BuiltinsMath::Ceil(ecmaRuntimeCallInfo); 1573 TestHelper::TearDownFrame(thread_, prev); 1574 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(4.0); 1575 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 1576} 1577 1578// Math.ceil(POSITIVE_INFINITY) 1579HWTEST_F_L0(BuiltinsMathTest, Ceil_1) 1580{ 1581 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 1582 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 1583 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 1584 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(base::POSITIVE_INFINITY)); 1585 1586 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 1587 JSTaggedValue result = BuiltinsMath::Ceil(ecmaRuntimeCallInfo); 1588 TestHelper::TearDownFrame(thread_, prev); 1589 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(base::POSITIVE_INFINITY); 1590 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 1591} 1592 1593// Math.ceil(-0.0) 1594HWTEST_F_L0(BuiltinsMathTest, Ceil_2) 1595{ 1596 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 1597 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 1598 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 1599 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(-0.0)); 1600 1601 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 1602 JSTaggedValue result = BuiltinsMath::Ceil(ecmaRuntimeCallInfo); 1603 TestHelper::TearDownFrame(thread_, prev); 1604 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(-0.0); 1605 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 1606} 1607 1608// Math.ceil(null) 1609HWTEST_F_L0(BuiltinsMathTest, Ceil_3) 1610{ 1611 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 1612 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 1613 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 1614 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue::Null()); 1615 1616 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 1617 JSTaggedValue result = BuiltinsMath::Ceil(ecmaRuntimeCallInfo); 1618 TestHelper::TearDownFrame(thread_, prev); 1619 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(0); 1620 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 1621} 1622 1623// Math.ceil(0) 1624HWTEST_F_L0(BuiltinsMathTest, Ceil_4) 1625{ 1626 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 1627 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 1628 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 1629 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(static_cast<int32_t>(0))); 1630 1631 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 1632 JSTaggedValue result = BuiltinsMath::Ceil(ecmaRuntimeCallInfo); 1633 TestHelper::TearDownFrame(thread_, prev); 1634 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(0); 1635 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 1636} 1637 1638// Math.ceil(true) 1639HWTEST_F_L0(BuiltinsMathTest, Ceil_5) 1640{ 1641 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 1642 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 1643 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 1644 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue::True()); 1645 1646 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 1647 JSTaggedValue result = BuiltinsMath::Ceil(ecmaRuntimeCallInfo); 1648 TestHelper::TearDownFrame(thread_, prev); 1649 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(1.0); 1650 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 1651} 1652 1653// Math.ceil(false) 1654HWTEST_F_L0(BuiltinsMathTest, Ceil_6) 1655{ 1656 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 1657 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 1658 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 1659 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue::False()); 1660 1661 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 1662 JSTaggedValue result = BuiltinsMath::Ceil(ecmaRuntimeCallInfo); 1663 TestHelper::TearDownFrame(thread_, prev); 1664 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(0); 1665 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 1666} 1667 1668// Math.ceil("") 1669HWTEST_F_L0(BuiltinsMathTest, Ceil_7) 1670{ 1671 JSHandle<EcmaString> test = thread_->GetEcmaVM()->GetFactory()->NewFromASCII(""); 1672 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 1673 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 1674 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 1675 ecmaRuntimeCallInfo->SetCallArg(0, test.GetTaggedValue()); 1676 1677 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 1678 JSTaggedValue result = BuiltinsMath::Ceil(ecmaRuntimeCallInfo); 1679 TestHelper::TearDownFrame(thread_, prev); 1680 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(0); 1681 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 1682} 1683 1684// Math.ceil("3.23") 1685HWTEST_F_L0(BuiltinsMathTest, Ceil_8) 1686{ 1687 JSHandle<EcmaString> test = thread_->GetEcmaVM()->GetFactory()->NewFromASCII("3.23"); 1688 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 1689 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 1690 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 1691 ecmaRuntimeCallInfo->SetCallArg(0, test.GetTaggedValue()); 1692 1693 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 1694 JSTaggedValue result = BuiltinsMath::Ceil(ecmaRuntimeCallInfo); 1695 TestHelper::TearDownFrame(thread_, prev); 1696 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(4.0); 1697 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 1698} 1699 1700// Math.ceil(-NaN) 1701HWTEST_F_L0(BuiltinsMathTest, Ceil_9) 1702{ 1703 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 1704 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 1705 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 1706 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(-base::NAN_VALUE)); 1707 1708 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 1709 JSTaggedValue result = BuiltinsMath::Ceil(ecmaRuntimeCallInfo); 1710 TestHelper::TearDownFrame(thread_, prev); 1711 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(base::NAN_VALUE); 1712 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 1713} 1714 1715// Math.cos(0) 1716HWTEST_F_L0(BuiltinsMathTest, Cos) 1717{ 1718 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 1719 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 1720 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 1721 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(static_cast<int32_t>(0))); 1722 1723 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 1724 JSTaggedValue result = BuiltinsMath::Cos(ecmaRuntimeCallInfo); 1725 TestHelper::TearDownFrame(thread_, prev); 1726 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(1.0); 1727 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 1728} 1729 1730// Math.cos(-NAN) 1731HWTEST_F_L0(BuiltinsMathTest, Cos_1) 1732{ 1733 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 1734 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 1735 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 1736 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(-base::NAN_VALUE)); 1737 1738 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 1739 JSTaggedValue result = BuiltinsMath::Cos(ecmaRuntimeCallInfo); 1740 TestHelper::TearDownFrame(thread_, prev); 1741 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(base::NAN_VALUE); 1742 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 1743} 1744 1745// Math.cos(POSITIVE_INFINITY) 1746HWTEST_F_L0(BuiltinsMathTest, Cos_2) 1747{ 1748 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 1749 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 1750 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 1751 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(base::POSITIVE_INFINITY)); 1752 1753 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 1754 JSTaggedValue result = BuiltinsMath::Cos(ecmaRuntimeCallInfo); 1755 TestHelper::TearDownFrame(thread_, prev); 1756 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(base::NAN_VALUE); 1757 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 1758} 1759 1760// Math.cos(-POSITIVE_INFINITY) 1761HWTEST_F_L0(BuiltinsMathTest, Cos_3) 1762{ 1763 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 1764 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 1765 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 1766 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(-base::POSITIVE_INFINITY)); 1767 1768 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 1769 JSTaggedValue result = BuiltinsMath::Cos(ecmaRuntimeCallInfo); 1770 TestHelper::TearDownFrame(thread_, prev); 1771 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(base::NAN_VALUE); 1772 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 1773} 1774 1775// Math.cos(true) 1776HWTEST_F_L0(BuiltinsMathTest, Cos_4) 1777{ 1778 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 1779 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 1780 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 1781 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue::True()); 1782 1783 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 1784 JSTaggedValue result = BuiltinsMath::Cos(ecmaRuntimeCallInfo); 1785 TestHelper::TearDownFrame(thread_, prev); 1786 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(0.5403023058681398); 1787 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 1788} 1789 1790// Math.cos(false) 1791HWTEST_F_L0(BuiltinsMathTest, Cos_5) 1792{ 1793 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 1794 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 1795 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 1796 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue::False()); 1797 1798 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 1799 JSTaggedValue result = BuiltinsMath::Cos(ecmaRuntimeCallInfo); 1800 TestHelper::TearDownFrame(thread_, prev); 1801 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(1.0); 1802 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 1803} 1804 1805// Math.cos("") 1806HWTEST_F_L0(BuiltinsMathTest, Cos_6) 1807{ 1808 JSHandle<EcmaString> test = thread_->GetEcmaVM()->GetFactory()->NewFromASCII(""); 1809 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 1810 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 1811 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 1812 ecmaRuntimeCallInfo->SetCallArg(0, test.GetTaggedValue()); 1813 1814 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 1815 JSTaggedValue result = BuiltinsMath::Cos(ecmaRuntimeCallInfo); 1816 TestHelper::TearDownFrame(thread_, prev); 1817 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(1.0); 1818 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 1819} 1820 1821// Math.cos("3.23") 1822HWTEST_F_L0(BuiltinsMathTest, Cos_7) 1823{ 1824 JSHandle<EcmaString> test = thread_->GetEcmaVM()->GetFactory()->NewFromASCII("3.23"); 1825 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 1826 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 1827 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 1828 ecmaRuntimeCallInfo->SetCallArg(0, test.GetTaggedValue()); 1829 1830 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 1831 JSTaggedValue result = BuiltinsMath::Cos(ecmaRuntimeCallInfo); 1832 TestHelper::TearDownFrame(thread_, prev); 1833 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(-0.9960946152060809); 1834 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 1835} 1836 1837// Math.cosh(0) 1838HWTEST_F_L0(BuiltinsMathTest, Cosh) 1839{ 1840 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 1841 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 1842 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 1843 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(static_cast<int32_t>(0))); 1844 1845 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 1846 JSTaggedValue result = BuiltinsMath::Cosh(ecmaRuntimeCallInfo); 1847 TestHelper::TearDownFrame(thread_, prev); 1848 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(1.0); 1849 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 1850} 1851 1852// Math.cosh(-NAN) 1853HWTEST_F_L0(BuiltinsMathTest, Cosh_1) 1854{ 1855 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 1856 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 1857 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 1858 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(-base::NAN_VALUE)); 1859 1860 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 1861 JSTaggedValue result = BuiltinsMath::Cosh(ecmaRuntimeCallInfo); 1862 TestHelper::TearDownFrame(thread_, prev); 1863 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(base::NAN_VALUE); 1864 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 1865} 1866 1867// Math.cosh(POSITIVE_INFINITY) 1868HWTEST_F_L0(BuiltinsMathTest, Cosh_2) 1869{ 1870 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 1871 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 1872 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 1873 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(base::POSITIVE_INFINITY)); 1874 1875 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 1876 JSTaggedValue result = BuiltinsMath::Cosh(ecmaRuntimeCallInfo); 1877 TestHelper::TearDownFrame(thread_, prev); 1878 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(base::POSITIVE_INFINITY); 1879 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 1880} 1881 1882// Math.cosh(-POSITIVE_INFINITY) 1883HWTEST_F_L0(BuiltinsMathTest, Cosh_3) 1884{ 1885 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 1886 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 1887 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 1888 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(-base::POSITIVE_INFINITY)); 1889 1890 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 1891 JSTaggedValue result = BuiltinsMath::Cosh(ecmaRuntimeCallInfo); 1892 TestHelper::TearDownFrame(thread_, prev); 1893 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(base::POSITIVE_INFINITY); 1894 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 1895} 1896 1897// Math.cosh(true) 1898HWTEST_F_L0(BuiltinsMathTest, Cosh_4) 1899{ 1900 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 1901 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 1902 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 1903 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue::True()); 1904 1905 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 1906 JSTaggedValue result = BuiltinsMath::Cosh(ecmaRuntimeCallInfo); 1907 TestHelper::TearDownFrame(thread_, prev); 1908 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(1.5430806348152437); 1909 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 1910} 1911 1912// Math.cosh(false) 1913HWTEST_F_L0(BuiltinsMathTest, Cosh_5) 1914{ 1915 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 1916 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 1917 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 1918 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue::False()); 1919 1920 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 1921 JSTaggedValue result = BuiltinsMath::Cosh(ecmaRuntimeCallInfo); 1922 TestHelper::TearDownFrame(thread_, prev); 1923 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(1.0); 1924 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 1925} 1926 1927// Math.cosh("") 1928HWTEST_F_L0(BuiltinsMathTest, Cosh_6) 1929{ 1930 JSHandle<EcmaString> test = thread_->GetEcmaVM()->GetFactory()->NewFromASCII(" "); 1931 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 1932 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 1933 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 1934 ecmaRuntimeCallInfo->SetCallArg(0, test.GetTaggedValue()); 1935 1936 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 1937 JSTaggedValue result = BuiltinsMath::Cosh(ecmaRuntimeCallInfo); 1938 TestHelper::TearDownFrame(thread_, prev); 1939 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(1.0); 1940 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 1941} 1942 1943// Math.cosh("3.23") 1944HWTEST_F_L0(BuiltinsMathTest, Cosh_7) 1945{ 1946 JSHandle<EcmaString> test = thread_->GetEcmaVM()->GetFactory()->NewFromASCII("3.23"); 1947 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 1948 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 1949 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 1950 ecmaRuntimeCallInfo->SetCallArg(0, test.GetTaggedValue()); 1951 1952 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 1953 JSTaggedValue result = BuiltinsMath::Cosh(ecmaRuntimeCallInfo); 1954 TestHelper::TearDownFrame(thread_, prev); 1955 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(12.659607234875645); 1956 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 1957} 1958 1959// Math.exp(0) 1960HWTEST_F_L0(BuiltinsMathTest, Exp) 1961{ 1962 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 1963 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 1964 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 1965 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(static_cast<int32_t>(0))); 1966 1967 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 1968 JSTaggedValue result = BuiltinsMath::Exp(ecmaRuntimeCallInfo); 1969 TestHelper::TearDownFrame(thread_, prev); 1970 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(1.0); 1971 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 1972} 1973 1974// Math.exp(-NAN) 1975HWTEST_F_L0(BuiltinsMathTest, Exp_1) 1976{ 1977 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 1978 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 1979 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 1980 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(-base::NAN_VALUE)); 1981 1982 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 1983 JSTaggedValue result = BuiltinsMath::Exp(ecmaRuntimeCallInfo); 1984 TestHelper::TearDownFrame(thread_, prev); 1985 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(base::NAN_VALUE); 1986 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 1987} 1988 1989// Math.exp(POSITIVE_INFINITY) 1990HWTEST_F_L0(BuiltinsMathTest, Exp_2) 1991{ 1992 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 1993 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 1994 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 1995 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(base::POSITIVE_INFINITY)); 1996 1997 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 1998 JSTaggedValue result = BuiltinsMath::Exp(ecmaRuntimeCallInfo); 1999 TestHelper::TearDownFrame(thread_, prev); 2000 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(base::POSITIVE_INFINITY); 2001 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 2002} 2003 2004// Math.exp(-POSITIVE_INFINITY) 2005HWTEST_F_L0(BuiltinsMathTest, Exp_3) 2006{ 2007 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 2008 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 2009 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 2010 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(-base::POSITIVE_INFINITY)); 2011 2012 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 2013 JSTaggedValue result = BuiltinsMath::Exp(ecmaRuntimeCallInfo); 2014 TestHelper::TearDownFrame(thread_, prev); 2015 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(0); 2016 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 2017} 2018 2019// Math.exp(true) 2020HWTEST_F_L0(BuiltinsMathTest, Exp_4) 2021{ 2022 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 2023 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 2024 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 2025 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue::True()); 2026 2027 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 2028 JSTaggedValue result = BuiltinsMath::Exp(ecmaRuntimeCallInfo); 2029 TestHelper::TearDownFrame(thread_, prev); 2030 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(2.718281828459045); 2031 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 2032} 2033 2034// Math.exp(false) 2035HWTEST_F_L0(BuiltinsMathTest, Exp_5) 2036{ 2037 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 2038 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 2039 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 2040 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue::False()); 2041 2042 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 2043 JSTaggedValue result = BuiltinsMath::Exp(ecmaRuntimeCallInfo); 2044 TestHelper::TearDownFrame(thread_, prev); 2045 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(1.0); 2046 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 2047} 2048 2049// Math.exp("") 2050HWTEST_F_L0(BuiltinsMathTest, Exp_6) 2051{ 2052 JSHandle<EcmaString> test = thread_->GetEcmaVM()->GetFactory()->NewFromASCII(""); 2053 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 2054 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 2055 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 2056 ecmaRuntimeCallInfo->SetCallArg(0, test.GetTaggedValue()); 2057 2058 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 2059 JSTaggedValue result = BuiltinsMath::Exp(ecmaRuntimeCallInfo); 2060 TestHelper::TearDownFrame(thread_, prev); 2061 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(1.0); 2062 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 2063} 2064 2065// Math.exp("-3.23") 2066HWTEST_F_L0(BuiltinsMathTest, Exp_7) 2067{ 2068 JSHandle<EcmaString> test = thread_->GetEcmaVM()->GetFactory()->NewFromASCII("-3.23"); 2069 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 2070 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 2071 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 2072 ecmaRuntimeCallInfo->SetCallArg(0, test.GetTaggedValue()); 2073 2074 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 2075 JSTaggedValue result = BuiltinsMath::Exp(ecmaRuntimeCallInfo); 2076 TestHelper::TearDownFrame(thread_, prev); 2077 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(0.039557498788398725); 2078 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 2079} 2080 2081// Math.Expm1(0) 2082HWTEST_F_L0(BuiltinsMathTest, Expm1) 2083{ 2084 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 2085 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 2086 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 2087 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(static_cast<int32_t>(0))); 2088 2089 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 2090 JSTaggedValue result = BuiltinsMath::Expm1(ecmaRuntimeCallInfo); 2091 TestHelper::TearDownFrame(thread_, prev); 2092 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(0); 2093 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 2094} 2095 2096// Math.Expm1(-0.0) 2097HWTEST_F_L0(BuiltinsMathTest, Expm1_1) 2098{ 2099 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 2100 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 2101 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 2102 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(-0.0)); 2103 2104 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 2105 JSTaggedValue result = BuiltinsMath::Expm1(ecmaRuntimeCallInfo); 2106 TestHelper::TearDownFrame(thread_, prev); 2107 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(-0.0); 2108 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 2109} 2110 2111// Math.Expm1(-NAN) 2112HWTEST_F_L0(BuiltinsMathTest, Expm1_2) 2113{ 2114 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 2115 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 2116 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 2117 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(-base::NAN_VALUE)); 2118 2119 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 2120 JSTaggedValue result = BuiltinsMath::Expm1(ecmaRuntimeCallInfo); 2121 TestHelper::TearDownFrame(thread_, prev); 2122 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(base::NAN_VALUE); 2123 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 2124} 2125 2126// Math.Expm1(POSITIVE_INFINITY) 2127HWTEST_F_L0(BuiltinsMathTest, Expm1_3) 2128{ 2129 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 2130 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 2131 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 2132 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(base::POSITIVE_INFINITY)); 2133 2134 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 2135 JSTaggedValue result = BuiltinsMath::Expm1(ecmaRuntimeCallInfo); 2136 TestHelper::TearDownFrame(thread_, prev); 2137 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(base::POSITIVE_INFINITY); 2138 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 2139} 2140 2141// Math.Expm1(-POSITIVE_INFINITY) 2142HWTEST_F_L0(BuiltinsMathTest, Expm1_4) 2143{ 2144 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 2145 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 2146 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 2147 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(-base::POSITIVE_INFINITY)); 2148 2149 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 2150 JSTaggedValue result = BuiltinsMath::Expm1(ecmaRuntimeCallInfo); 2151 TestHelper::TearDownFrame(thread_, prev); 2152 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(-1.0); 2153 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 2154} 2155 2156// Math.expm1(true) 2157HWTEST_F_L0(BuiltinsMathTest, Expm1_5) 2158{ 2159 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 2160 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 2161 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 2162 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue::True()); 2163 2164 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 2165 JSTaggedValue result = BuiltinsMath::Expm1(ecmaRuntimeCallInfo); 2166 TestHelper::TearDownFrame(thread_, prev); 2167 double expect = 1.718281828459045; 2168 ASSERT_TRUE(result.IsDouble()); 2169 ASSERT_TRUE(std::abs(result.GetDouble() - expect) < 0.00000001); 2170} 2171 2172// Math.expm1(false) 2173HWTEST_F_L0(BuiltinsMathTest, Expm1_6) 2174{ 2175 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 2176 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 2177 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 2178 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue::False()); 2179 2180 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 2181 JSTaggedValue result = BuiltinsMath::Expm1(ecmaRuntimeCallInfo); 2182 TestHelper::TearDownFrame(thread_, prev); 2183 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(0); 2184 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 2185} 2186 2187// Math.expm1("") 2188HWTEST_F_L0(BuiltinsMathTest, Expm1_7) 2189{ 2190 JSHandle<EcmaString> test = thread_->GetEcmaVM()->GetFactory()->NewFromASCII(" "); 2191 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 2192 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 2193 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 2194 ecmaRuntimeCallInfo->SetCallArg(0, test.GetTaggedValue()); 2195 2196 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 2197 JSTaggedValue result = BuiltinsMath::Expm1(ecmaRuntimeCallInfo); 2198 TestHelper::TearDownFrame(thread_, prev); 2199 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(0); 2200 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 2201} 2202 2203// Math.expm1("-3.23") 2204HWTEST_F_L0(BuiltinsMathTest, Expm1_8) 2205{ 2206 JSHandle<EcmaString> test = thread_->GetEcmaVM()->GetFactory()->NewFromASCII("-3.23"); 2207 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 2208 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 2209 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 2210 ecmaRuntimeCallInfo->SetCallArg(0, test.GetTaggedValue()); 2211 2212 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 2213 JSTaggedValue result = BuiltinsMath::Expm1(ecmaRuntimeCallInfo); 2214 TestHelper::TearDownFrame(thread_, prev); 2215 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(-0.9604425012116012); 2216 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 2217} 2218 2219// Math.expm1("0x12") 2220HWTEST_F_L0(BuiltinsMathTest, Expm1_9) 2221{ 2222 JSHandle<EcmaString> test = thread_->GetEcmaVM()->GetFactory()->NewFromASCII("0x12"); 2223 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 2224 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 2225 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 2226 ecmaRuntimeCallInfo->SetCallArg(0, test.GetTaggedValue()); 2227 2228 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 2229 JSTaggedValue result = BuiltinsMath::Expm1(ecmaRuntimeCallInfo); 2230 TestHelper::TearDownFrame(thread_, prev); 2231 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(65659968.13733051); 2232 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 2233} 2234 2235// Math.floor(-0.0) 2236HWTEST_F_L0(BuiltinsMathTest, Floor) 2237{ 2238 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 2239 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 2240 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 2241 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(-0.0)); 2242 2243 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 2244 JSTaggedValue result = BuiltinsMath::Floor(ecmaRuntimeCallInfo); 2245 TestHelper::TearDownFrame(thread_, prev); 2246 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(-0.0); 2247 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 2248} 2249 2250// Math.floor(-NAN) 2251HWTEST_F_L0(BuiltinsMathTest, Floor_1) 2252{ 2253 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 2254 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 2255 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 2256 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(-base::NAN_VALUE)); 2257 2258 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 2259 JSTaggedValue result = BuiltinsMath::Floor(ecmaRuntimeCallInfo); 2260 TestHelper::TearDownFrame(thread_, prev); 2261 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(base::NAN_VALUE); 2262 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 2263} 2264 2265// Math.floor(POSITIVE_INFINITY) 2266HWTEST_F_L0(BuiltinsMathTest, Floor_2) 2267{ 2268 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 2269 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 2270 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 2271 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(base::POSITIVE_INFINITY)); 2272 2273 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 2274 JSTaggedValue result = BuiltinsMath::Floor(ecmaRuntimeCallInfo); 2275 TestHelper::TearDownFrame(thread_, prev); 2276 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(base::POSITIVE_INFINITY); 2277 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 2278} 2279 2280// Math.floor(true) 2281HWTEST_F_L0(BuiltinsMathTest, Floor_3) 2282{ 2283 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 2284 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 2285 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 2286 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue::True()); 2287 2288 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 2289 JSTaggedValue result = BuiltinsMath::Floor(ecmaRuntimeCallInfo); 2290 TestHelper::TearDownFrame(thread_, prev); 2291 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(1.0); 2292 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 2293} 2294 2295// Math.floor("-3.23") 2296HWTEST_F_L0(BuiltinsMathTest, Floor_4) 2297{ 2298 JSHandle<EcmaString> test = thread_->GetEcmaVM()->GetFactory()->NewFromASCII("-3.23"); 2299 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 2300 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 2301 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 2302 ecmaRuntimeCallInfo->SetCallArg(0, test.GetTaggedValue()); 2303 2304 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 2305 JSTaggedValue result = BuiltinsMath::Floor(ecmaRuntimeCallInfo); 2306 TestHelper::TearDownFrame(thread_, prev); 2307 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(-4.0); 2308 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 2309} 2310 2311// Math.log(-0.0) 2312HWTEST_F_L0(BuiltinsMathTest, Log) 2313{ 2314 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 2315 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 2316 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 2317 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(-0.0)); 2318 2319 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 2320 JSTaggedValue result = BuiltinsMath::Log(ecmaRuntimeCallInfo); 2321 TestHelper::TearDownFrame(thread_, prev); 2322 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(-base::POSITIVE_INFINITY); 2323 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 2324} 2325 2326// Math.log(-NAN) 2327HWTEST_F_L0(BuiltinsMathTest, Log_1) 2328{ 2329 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 2330 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 2331 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 2332 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(-base::NAN_VALUE)); 2333 2334 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 2335 JSTaggedValue result = BuiltinsMath::Log(ecmaRuntimeCallInfo); 2336 TestHelper::TearDownFrame(thread_, prev); 2337 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(base::NAN_VALUE); 2338 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 2339} 2340 2341// Math.log(POSITIVE_INFINITY) 2342HWTEST_F_L0(BuiltinsMathTest, Log_2) 2343{ 2344 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 2345 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 2346 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 2347 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(base::POSITIVE_INFINITY)); 2348 2349 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 2350 JSTaggedValue result = BuiltinsMath::Log(ecmaRuntimeCallInfo); 2351 TestHelper::TearDownFrame(thread_, prev); 2352 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(base::POSITIVE_INFINITY); 2353 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 2354} 2355 2356// Math.log(true) 2357HWTEST_F_L0(BuiltinsMathTest, Log_3) 2358{ 2359 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 2360 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 2361 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 2362 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue::True()); 2363 2364 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 2365 JSTaggedValue result = BuiltinsMath::Log(ecmaRuntimeCallInfo); 2366 TestHelper::TearDownFrame(thread_, prev); 2367 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(0); 2368 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 2369} 2370 2371// Math.log("-3.23") 2372HWTEST_F_L0(BuiltinsMathTest, Log_4) 2373{ 2374 JSHandle<EcmaString> test = thread_->GetEcmaVM()->GetFactory()->NewFromASCII("-3.23"); 2375 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 2376 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 2377 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 2378 ecmaRuntimeCallInfo->SetCallArg(0, test.GetTaggedValue()); 2379 2380 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 2381 JSTaggedValue result = BuiltinsMath::Log(ecmaRuntimeCallInfo); 2382 TestHelper::TearDownFrame(thread_, prev); 2383 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(base::NAN_VALUE); 2384 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 2385} 2386 2387// Math.log(0.12) 2388HWTEST_F_L0(BuiltinsMathTest, Log_5) 2389{ 2390 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 2391 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 2392 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 2393 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(0.12)); 2394 2395 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 2396 JSTaggedValue result = BuiltinsMath::Log(ecmaRuntimeCallInfo); 2397 TestHelper::TearDownFrame(thread_, prev); 2398 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(-2.120263536200091); 2399 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 2400} 2401 2402// Math.log1p(-0.0) 2403HWTEST_F_L0(BuiltinsMathTest, Log1p) 2404{ 2405 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 2406 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 2407 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 2408 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(-0.0)); 2409 2410 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 2411 JSTaggedValue result = BuiltinsMath::Log1p(ecmaRuntimeCallInfo); 2412 TestHelper::TearDownFrame(thread_, prev); 2413 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(-0.0); 2414 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 2415} 2416 2417// Math.log1p(-NAN) 2418HWTEST_F_L0(BuiltinsMathTest, Log1p_1) 2419{ 2420 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 2421 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 2422 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 2423 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(-base::NAN_VALUE)); 2424 2425 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 2426 JSTaggedValue result = BuiltinsMath::Log1p(ecmaRuntimeCallInfo); 2427 TestHelper::TearDownFrame(thread_, prev); 2428 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(base::NAN_VALUE); 2429 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 2430} 2431 2432// Math.log1p(POSITIVE_INFINITY) 2433HWTEST_F_L0(BuiltinsMathTest, Log1p_2) 2434{ 2435 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 2436 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 2437 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 2438 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(base::POSITIVE_INFINITY)); 2439 2440 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 2441 JSTaggedValue result = BuiltinsMath::Log1p(ecmaRuntimeCallInfo); 2442 TestHelper::TearDownFrame(thread_, prev); 2443 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(base::POSITIVE_INFINITY); 2444 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 2445} 2446 2447// Math.log1p(true) 2448HWTEST_F_L0(BuiltinsMathTest, Log1p_3) 2449{ 2450 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 2451 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 2452 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 2453 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue::True()); 2454 2455 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 2456 JSTaggedValue result = BuiltinsMath::Log1p(ecmaRuntimeCallInfo); 2457 TestHelper::TearDownFrame(thread_, prev); 2458 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(0.6931471805599453); 2459 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 2460} 2461 2462// Math.log1p("-3.23") 2463HWTEST_F_L0(BuiltinsMathTest, Log1p_4) 2464{ 2465 JSHandle<EcmaString> test = thread_->GetEcmaVM()->GetFactory()->NewFromASCII("-3.23"); 2466 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 2467 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 2468 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 2469 ecmaRuntimeCallInfo->SetCallArg(0, test.GetTaggedValue()); 2470 2471 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 2472 JSTaggedValue result = BuiltinsMath::Log1p(ecmaRuntimeCallInfo); 2473 TestHelper::TearDownFrame(thread_, prev); 2474 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(base::NAN_VALUE); 2475 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 2476} 2477 2478// Math.log1p(0.12) 2479HWTEST_F_L0(BuiltinsMathTest, Log1p_5) 2480{ 2481 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 2482 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 2483 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 2484 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(0.12)); 2485 2486 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 2487 JSTaggedValue result = BuiltinsMath::Log1p(ecmaRuntimeCallInfo); 2488 TestHelper::TearDownFrame(thread_, prev); 2489 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(0.11332868530700317); 2490 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 2491} 2492 2493// Math.log10(-0.0) 2494HWTEST_F_L0(BuiltinsMathTest, Log10) 2495{ 2496 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 2497 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 2498 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 2499 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(-0.0)); 2500 2501 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 2502 JSTaggedValue result = BuiltinsMath::Log10(ecmaRuntimeCallInfo); 2503 TestHelper::TearDownFrame(thread_, prev); 2504 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(-base::POSITIVE_INFINITY); 2505 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 2506} 2507 2508// Math.Log10(-NAN) 2509HWTEST_F_L0(BuiltinsMathTest, Log10_1) 2510{ 2511 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 2512 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 2513 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 2514 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(-base::NAN_VALUE)); 2515 2516 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 2517 JSTaggedValue result = BuiltinsMath::Log10(ecmaRuntimeCallInfo); 2518 TestHelper::TearDownFrame(thread_, prev); 2519 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(base::NAN_VALUE); 2520 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 2521} 2522 2523// Math.Log10(POSITIVE_INFINITY) 2524HWTEST_F_L0(BuiltinsMathTest, Log10_2) 2525{ 2526 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 2527 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 2528 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 2529 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(base::POSITIVE_INFINITY)); 2530 2531 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 2532 JSTaggedValue result = BuiltinsMath::Log10(ecmaRuntimeCallInfo); 2533 TestHelper::TearDownFrame(thread_, prev); 2534 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(base::POSITIVE_INFINITY); 2535 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 2536} 2537 2538// Math.Log10(true) 2539HWTEST_F_L0(BuiltinsMathTest, Log10_3) 2540{ 2541 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 2542 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 2543 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 2544 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue::True()); 2545 2546 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 2547 JSTaggedValue result = BuiltinsMath::Log10(ecmaRuntimeCallInfo); 2548 TestHelper::TearDownFrame(thread_, prev); 2549 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(0); 2550 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 2551} 2552 2553// Math.Log10("2") 2554HWTEST_F_L0(BuiltinsMathTest, Log10_4) 2555{ 2556 JSHandle<EcmaString> test = thread_->GetEcmaVM()->GetFactory()->NewFromASCII("2"); 2557 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 2558 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 2559 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 2560 ecmaRuntimeCallInfo->SetCallArg(0, test.GetTaggedValue()); 2561 2562 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 2563 JSTaggedValue result = BuiltinsMath::Log10(ecmaRuntimeCallInfo); 2564 TestHelper::TearDownFrame(thread_, prev); 2565 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(0.3010299956639812); 2566 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 2567} 2568 2569// Math.Log10(0.12) 2570HWTEST_F_L0(BuiltinsMathTest, Log10_5) 2571{ 2572 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 2573 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 2574 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 2575 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(0.12)); 2576 2577 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 2578 JSTaggedValue result = BuiltinsMath::Log10(ecmaRuntimeCallInfo); 2579 TestHelper::TearDownFrame(thread_, prev); 2580 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(-0.9208187539523752); 2581 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 2582} 2583 2584// Math.log2(-0.0) 2585HWTEST_F_L0(BuiltinsMathTest, Log2) 2586{ 2587 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 2588 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 2589 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 2590 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(-0.0)); 2591 2592 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 2593 JSTaggedValue result = BuiltinsMath::Log2(ecmaRuntimeCallInfo); 2594 TestHelper::TearDownFrame(thread_, prev); 2595 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(-base::POSITIVE_INFINITY); 2596 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 2597} 2598 2599// Math.log2(-NAN) 2600HWTEST_F_L0(BuiltinsMathTest, Log2_1) 2601{ 2602 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 2603 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 2604 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 2605 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(-base::NAN_VALUE)); 2606 2607 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 2608 JSTaggedValue result = BuiltinsMath::Log2(ecmaRuntimeCallInfo); 2609 TestHelper::TearDownFrame(thread_, prev); 2610 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(base::NAN_VALUE); 2611 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 2612} 2613 2614// Math.log2(POSITIVE_INFINITY) 2615HWTEST_F_L0(BuiltinsMathTest, Log2_2) 2616{ 2617 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 2618 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 2619 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 2620 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(base::POSITIVE_INFINITY)); 2621 2622 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 2623 JSTaggedValue result = BuiltinsMath::Log2(ecmaRuntimeCallInfo); 2624 TestHelper::TearDownFrame(thread_, prev); 2625 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(base::POSITIVE_INFINITY); 2626 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 2627} 2628 2629// Math.log2(true) 2630HWTEST_F_L0(BuiltinsMathTest, Log2_3) 2631{ 2632 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 2633 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 2634 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 2635 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue::True()); 2636 2637 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 2638 JSTaggedValue result = BuiltinsMath::Log2(ecmaRuntimeCallInfo); 2639 TestHelper::TearDownFrame(thread_, prev); 2640 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(0); 2641 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 2642} 2643 2644// Math.log2("2") 2645HWTEST_F_L0(BuiltinsMathTest, Log2_4) 2646{ 2647 JSHandle<EcmaString> test = thread_->GetEcmaVM()->GetFactory()->NewFromASCII("2"); 2648 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 2649 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 2650 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 2651 ecmaRuntimeCallInfo->SetCallArg(0, test.GetTaggedValue()); 2652 2653 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 2654 JSTaggedValue result = BuiltinsMath::Log2(ecmaRuntimeCallInfo); 2655 TestHelper::TearDownFrame(thread_, prev); 2656 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(1.0); 2657 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 2658} 2659 2660// Math.log2(1) 2661HWTEST_F_L0(BuiltinsMathTest, Log2_5) 2662{ 2663 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 2664 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 2665 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 2666 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(static_cast<double>(1))); 2667 2668 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 2669 JSTaggedValue result = BuiltinsMath::Log2(ecmaRuntimeCallInfo); 2670 TestHelper::TearDownFrame(thread_, prev); 2671 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(0); 2672 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 2673} 2674 2675// Math.Max(NaN,1,POSITIVE_INFINITY) 2676HWTEST_F_L0(BuiltinsMathTest, Max) 2677{ 2678 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 10); 2679 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 2680 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 2681 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(base::NAN_VALUE)); 2682 ecmaRuntimeCallInfo->SetCallArg(1, JSTaggedValue(static_cast<int32_t>(1))); 2683 ecmaRuntimeCallInfo->SetCallArg(2, JSTaggedValue(base::POSITIVE_INFINITY)); 2684 2685 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 2686 JSTaggedValue result = BuiltinsMath::Max(ecmaRuntimeCallInfo); 2687 TestHelper::TearDownFrame(thread_, prev); 2688 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(base::NAN_VALUE); 2689 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 2690} 2691 2692// Math.Max() 2693HWTEST_F_L0(BuiltinsMathTest, Max_1) 2694{ 2695 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 4); 2696 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 2697 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 2698 2699 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 2700 JSTaggedValue result = BuiltinsMath::Max(ecmaRuntimeCallInfo); 2701 TestHelper::TearDownFrame(thread_, prev); 2702 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(-base::POSITIVE_INFINITY); 2703 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 2704} 2705 2706// Math.Max("3",100,2.5) 2707HWTEST_F_L0(BuiltinsMathTest, Max_2) 2708{ 2709 JSHandle<EcmaString> test = thread_->GetEcmaVM()->GetFactory()->NewFromASCII("3"); 2710 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 10); 2711 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 2712 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 2713 ecmaRuntimeCallInfo->SetCallArg(0, test.GetTaggedValue()); 2714 ecmaRuntimeCallInfo->SetCallArg(1, JSTaggedValue(static_cast<int32_t>(100))); 2715 ecmaRuntimeCallInfo->SetCallArg(2, JSTaggedValue(2.5)); 2716 2717 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 2718 JSTaggedValue result = BuiltinsMath::Max(ecmaRuntimeCallInfo); 2719 TestHelper::TearDownFrame(thread_, prev); 2720 JSTaggedValue expect = BuiltinsBase::GetTaggedInt(100); 2721 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 2722} 2723 2724// Math.Max(3,"100",-101.5) 2725HWTEST_F_L0(BuiltinsMathTest, Max_3) 2726{ 2727 JSHandle<EcmaString> test = thread_->GetEcmaVM()->GetFactory()->NewFromASCII("100"); 2728 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 10); 2729 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 2730 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 2731 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(static_cast<int32_t>(3))); 2732 ecmaRuntimeCallInfo->SetCallArg(1, test.GetTaggedValue()); 2733 ecmaRuntimeCallInfo->SetCallArg(2, JSTaggedValue(-101.5)); 2734 2735 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 2736 JSTaggedValue result = BuiltinsMath::Max(ecmaRuntimeCallInfo); 2737 TestHelper::TearDownFrame(thread_, prev); 2738 JSTaggedValue expect = BuiltinsBase::GetTaggedInt(100); 2739 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 2740} 2741 2742// Math.Max(-3,"-100",true) 2743HWTEST_F_L0(BuiltinsMathTest, Max_4) 2744{ 2745 JSHandle<EcmaString> test = thread_->GetEcmaVM()->GetFactory()->NewFromASCII("-100"); 2746 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 10); 2747 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 2748 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 2749 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(static_cast<int32_t>(-3))); 2750 ecmaRuntimeCallInfo->SetCallArg(1, test.GetTaggedValue()); 2751 ecmaRuntimeCallInfo->SetCallArg(2, JSTaggedValue::True()); 2752 2753 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 2754 JSTaggedValue result = BuiltinsMath::Max(ecmaRuntimeCallInfo); 2755 TestHelper::TearDownFrame(thread_, prev); 2756 JSTaggedValue expect = BuiltinsBase::GetTaggedInt(1); 2757 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 2758} 2759 2760// Math.min(NaN,1,POSITIVE_INFINITY) 2761HWTEST_F_L0(BuiltinsMathTest, Min) 2762{ 2763 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 10); 2764 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 2765 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 2766 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(base::NAN_VALUE)); 2767 ecmaRuntimeCallInfo->SetCallArg(1, JSTaggedValue(static_cast<int32_t>(1))); 2768 ecmaRuntimeCallInfo->SetCallArg(2, JSTaggedValue(base::POSITIVE_INFINITY)); 2769 2770 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 2771 JSTaggedValue result = BuiltinsMath::Min(ecmaRuntimeCallInfo); 2772 TestHelper::TearDownFrame(thread_, prev); 2773 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(base::NAN_VALUE); 2774 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 2775} 2776 2777// Math.min() 2778HWTEST_F_L0(BuiltinsMathTest, Min_1) 2779{ 2780 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 4); 2781 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 2782 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 2783 2784 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 2785 JSTaggedValue result = BuiltinsMath::Min(ecmaRuntimeCallInfo); 2786 TestHelper::TearDownFrame(thread_, prev); 2787 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(base::POSITIVE_INFINITY); 2788 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 2789} 2790 2791// Math.min("3",100,2.5) 2792HWTEST_F_L0(BuiltinsMathTest, Min_2) 2793{ 2794 JSHandle<EcmaString> test = thread_->GetEcmaVM()->GetFactory()->NewFromASCII("3"); 2795 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 10); 2796 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 2797 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 2798 ecmaRuntimeCallInfo->SetCallArg(0, test.GetTaggedValue()); 2799 ecmaRuntimeCallInfo->SetCallArg(1, JSTaggedValue(static_cast<int32_t>(100))); 2800 ecmaRuntimeCallInfo->SetCallArg(2, JSTaggedValue(2.5)); 2801 2802 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 2803 JSTaggedValue result = BuiltinsMath::Min(ecmaRuntimeCallInfo); 2804 TestHelper::TearDownFrame(thread_, prev); 2805 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(2.5); 2806 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 2807} 2808 2809// Math.min(3,"100",-101.5) 2810HWTEST_F_L0(BuiltinsMathTest, Min_3) 2811{ 2812 JSHandle<EcmaString> test = thread_->GetEcmaVM()->GetFactory()->NewFromASCII("100"); 2813 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 10); 2814 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 2815 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 2816 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(static_cast<int32_t>(3))); 2817 ecmaRuntimeCallInfo->SetCallArg(1, test.GetTaggedValue()); 2818 ecmaRuntimeCallInfo->SetCallArg(2, JSTaggedValue(-101.5)); 2819 2820 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 2821 JSTaggedValue result = BuiltinsMath::Min(ecmaRuntimeCallInfo); 2822 TestHelper::TearDownFrame(thread_, prev); 2823 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(-101.5); 2824 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 2825} 2826 2827// Math.min(3,100,false) 2828HWTEST_F_L0(BuiltinsMathTest, Min_4) 2829{ 2830 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 10); 2831 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 2832 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 2833 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(static_cast<int32_t>(3))); 2834 ecmaRuntimeCallInfo->SetCallArg(1, JSTaggedValue(static_cast<int32_t>(100))); 2835 ecmaRuntimeCallInfo->SetCallArg(2, JSTaggedValue::False()); 2836 2837 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 2838 JSTaggedValue result = BuiltinsMath::Min(ecmaRuntimeCallInfo); 2839 TestHelper::TearDownFrame(thread_, prev); 2840 JSTaggedValue expect = BuiltinsBase::GetTaggedInt(0); 2841 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 2842} 2843 2844// Math.pow(2,"-2") 2845HWTEST_F_L0(BuiltinsMathTest, Pow) 2846{ 2847 JSHandle<EcmaString> test = thread_->GetEcmaVM()->GetFactory()->NewFromASCII("-2"); 2848 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 8); 2849 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 2850 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 2851 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(static_cast<int32_t>(2))); 2852 ecmaRuntimeCallInfo->SetCallArg(1, test.GetTaggedValue()); 2853 2854 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 2855 JSTaggedValue result = BuiltinsMath::Pow(ecmaRuntimeCallInfo); 2856 TestHelper::TearDownFrame(thread_, prev); 2857 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(0.25); 2858 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 2859} 2860 2861// Math.pow(-NaN,-2) 2862HWTEST_F_L0(BuiltinsMathTest, Pow_1) 2863{ 2864 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 8); 2865 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 2866 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 2867 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(-base::NAN_VALUE)); 2868 ecmaRuntimeCallInfo->SetCallArg(1, JSTaggedValue(static_cast<int32_t>(-2))); 2869 2870 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 2871 JSTaggedValue result = BuiltinsMath::Pow(ecmaRuntimeCallInfo); 2872 TestHelper::TearDownFrame(thread_, prev); 2873 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(base::NAN_VALUE); 2874 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 2875} 2876 2877// Math.pow() 2878HWTEST_F_L0(BuiltinsMathTest, Pow_2) 2879{ 2880 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 4); 2881 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 2882 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 2883 2884 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 2885 JSTaggedValue result = BuiltinsMath::Pow(ecmaRuntimeCallInfo); 2886 TestHelper::TearDownFrame(thread_, prev); 2887 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(base::NAN_VALUE); 2888 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 2889} 2890 2891// Math.pow(false,-2) 2892HWTEST_F_L0(BuiltinsMathTest, Pow_3) 2893{ 2894 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 8); 2895 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 2896 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 2897 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue::False()); 2898 ecmaRuntimeCallInfo->SetCallArg(1, JSTaggedValue(static_cast<int32_t>(-2))); 2899 2900 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 2901 JSTaggedValue result = BuiltinsMath::Pow(ecmaRuntimeCallInfo); 2902 TestHelper::TearDownFrame(thread_, prev); 2903 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(base::POSITIVE_INFINITY); 2904 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 2905} 2906 2907// Math.random() 2908HWTEST_F_L0(BuiltinsMathTest, Random) 2909{ 2910 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 4); 2911 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 2912 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 2913 2914 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 2915 JSTaggedValue result1 = BuiltinsMath::Random(ecmaRuntimeCallInfo); 2916 TestHelper::TearDownFrame(thread_, prev); 2917 double value1 = JSTaggedValue(static_cast<JSTaggedType>(result1.GetRawData())).GetDouble(); 2918 ASSERT_TRUE(value1 >= 0); 2919 ASSERT_TRUE(value1 < 1.0); 2920} 2921 2922// Math.random() 2923HWTEST_F_L0(BuiltinsMathTest, Random_1) 2924{ 2925 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 4); 2926 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 2927 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 2928 2929 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 2930 JSTaggedValue result1 = BuiltinsMath::Random(ecmaRuntimeCallInfo); 2931 TestHelper::TearDownFrame(thread_, prev); 2932 JSTaggedValue result2 = BuiltinsMath::Random(ecmaRuntimeCallInfo); 2933 TestHelper::TearDownFrame(thread_, prev); 2934 double value1 = JSTaggedValue(static_cast<JSTaggedType>(result1.GetRawData())).GetDouble(); 2935 double value2 = JSTaggedValue(static_cast<JSTaggedType>(result2.GetRawData())).GetDouble(); 2936 ASSERT_TRUE(value1 >= 0); 2937 ASSERT_TRUE(value1 < 1.0); 2938 ASSERT_TRUE(value2 >= 0); 2939 ASSERT_TRUE(value2 < 1.0); 2940} 2941 2942// Math.round(-NaN) 2943HWTEST_F_L0(BuiltinsMathTest, Round) 2944{ 2945 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 2946 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 2947 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 2948 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(-base::NAN_VALUE)); 2949 2950 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 2951 JSTaggedValue result = BuiltinsMath::Round(ecmaRuntimeCallInfo); 2952 TestHelper::TearDownFrame(thread_, prev); 2953 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(base::NAN_VALUE); 2954 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 2955} 2956 2957// Math.round(1.25) 2958HWTEST_F_L0(BuiltinsMathTest, Round_1) 2959{ 2960 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 2961 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 2962 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 2963 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(1.25)); 2964 2965 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 2966 JSTaggedValue result = BuiltinsMath::Round(ecmaRuntimeCallInfo); 2967 TestHelper::TearDownFrame(thread_, prev); 2968 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(1.0); 2969 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 2970} 2971 2972// Math.round(-0.14) 2973HWTEST_F_L0(BuiltinsMathTest, Round_2) 2974{ 2975 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 2976 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 2977 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 2978 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(-0.14)); 2979 2980 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 2981 JSTaggedValue result = BuiltinsMath::Round(ecmaRuntimeCallInfo); 2982 TestHelper::TearDownFrame(thread_, prev); 2983 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(-0.0); 2984 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 2985} 2986 2987// Math.round(-0.7) 2988HWTEST_F_L0(BuiltinsMathTest, Round_3) 2989{ 2990 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 2991 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 2992 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 2993 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(-0.7)); 2994 2995 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 2996 JSTaggedValue result = BuiltinsMath::Round(ecmaRuntimeCallInfo); 2997 TestHelper::TearDownFrame(thread_, prev); 2998 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(-1.0); 2999 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 3000} 3001 3002// Math.round(POSITIVE_INFINITY) 3003HWTEST_F_L0(BuiltinsMathTest, Round_4) 3004{ 3005 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 3006 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 3007 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 3008 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(base::POSITIVE_INFINITY)); 3009 3010 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 3011 JSTaggedValue result = BuiltinsMath::Round(ecmaRuntimeCallInfo); 3012 TestHelper::TearDownFrame(thread_, prev); 3013 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(base::POSITIVE_INFINITY); 3014 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 3015} 3016 3017// Math.fround(POSITIVE_INFINITY) 3018HWTEST_F_L0(BuiltinsMathTest, Fround) 3019{ 3020 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 3021 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 3022 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 3023 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(base::POSITIVE_INFINITY)); 3024 3025 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 3026 JSTaggedValue result = BuiltinsMath::Fround(ecmaRuntimeCallInfo); 3027 TestHelper::TearDownFrame(thread_, prev); 3028 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(base::POSITIVE_INFINITY); 3029 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 3030} 3031 3032// Math.fround(-NaN) 3033HWTEST_F_L0(BuiltinsMathTest, Fround_1) 3034{ 3035 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 3036 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 3037 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 3038 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(-base::NAN_VALUE)); 3039 3040 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 3041 JSTaggedValue result = BuiltinsMath::Fround(ecmaRuntimeCallInfo); 3042 TestHelper::TearDownFrame(thread_, prev); 3043 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(base::NAN_VALUE); 3044 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 3045} 3046 3047// Math.fround(-0) 3048HWTEST_F_L0(BuiltinsMathTest, Fround_2) 3049{ 3050 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 3051 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 3052 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 3053 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(-0.0)); 3054 3055 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 3056 JSTaggedValue result = BuiltinsMath::Fround(ecmaRuntimeCallInfo); 3057 TestHelper::TearDownFrame(thread_, prev); 3058 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(-0.0); 3059 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 3060} 3061 3062// Math.fround(1.337) 3063HWTEST_F_L0(BuiltinsMathTest, Fround_3) 3064{ 3065 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 3066 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 3067 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 3068 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(1.337)); 3069 3070 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 3071 JSTaggedValue result = BuiltinsMath::Fround(ecmaRuntimeCallInfo); 3072 TestHelper::TearDownFrame(thread_, prev); 3073 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(1.3370000123977661); 3074 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 3075} 3076 3077// Math.fround(-668523145.253485) 3078HWTEST_F_L0(BuiltinsMathTest, Fround_4) 3079{ 3080 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 3081 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 3082 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 3083 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(-668523145.253485)); 3084 3085 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 3086 JSTaggedValue result = BuiltinsMath::Fround(ecmaRuntimeCallInfo); 3087 TestHelper::TearDownFrame(thread_, prev); 3088 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(-668523136.0); 3089 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 3090} 3091 3092// Math.clz32(NaN) 3093HWTEST_F_L0(BuiltinsMathTest, Clz32) 3094{ 3095 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 3096 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 3097 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 3098 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(-base::NAN_VALUE)); 3099 3100 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 3101 JSTaggedValue result = BuiltinsMath::Clz32(ecmaRuntimeCallInfo); 3102 TestHelper::TearDownFrame(thread_, prev); 3103 JSTaggedValue expect = BuiltinsBase::GetTaggedInt(32); 3104 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 3105} 3106 3107// Math.clz32(-0) 3108HWTEST_F_L0(BuiltinsMathTest, Clz32_1) 3109{ 3110 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 3111 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 3112 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 3113 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(-0.0)); 3114 3115 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 3116 JSTaggedValue result = BuiltinsMath::Clz32(ecmaRuntimeCallInfo); 3117 TestHelper::TearDownFrame(thread_, prev); 3118 JSTaggedValue expect = BuiltinsBase::GetTaggedInt(32); 3119 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 3120} 3121 3122// Math.clz32(1) 3123HWTEST_F_L0(BuiltinsMathTest, Clz32_2) 3124{ 3125 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 3126 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 3127 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 3128 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(static_cast<int32_t>(1))); 3129 3130 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 3131 JSTaggedValue result = BuiltinsMath::Clz32(ecmaRuntimeCallInfo); 3132 TestHelper::TearDownFrame(thread_, prev); 3133 JSTaggedValue expect = BuiltinsBase::GetTaggedInt(31); 3134 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 3135} 3136 3137// Math.clz32(568243) 3138HWTEST_F_L0(BuiltinsMathTest, Clz32_3) 3139{ 3140 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 3141 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 3142 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 3143 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(static_cast<int32_t>(568243))); 3144 3145 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 3146 JSTaggedValue result = BuiltinsMath::Clz32(ecmaRuntimeCallInfo); 3147 TestHelper::TearDownFrame(thread_, prev); 3148 JSTaggedValue expect = BuiltinsBase::GetTaggedInt(12); 3149 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 3150} 3151 3152// Math.clz32(4294967295) 3153HWTEST_F_L0(BuiltinsMathTest, Clz32_4) 3154{ 3155 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 3156 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 3157 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 3158 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(static_cast<int32_t>(4294967295))); 3159 3160 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 3161 JSTaggedValue result = BuiltinsMath::Clz32(ecmaRuntimeCallInfo); 3162 TestHelper::TearDownFrame(thread_, prev); 3163 JSTaggedValue expect = BuiltinsBase::GetTaggedInt(0); 3164 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 3165} 3166 3167// Math.clz32(10000000000.123) 3168HWTEST_F_L0(BuiltinsMathTest, Clz32_5) 3169{ 3170 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 3171 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 3172 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 3173 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(10000000000.123)); 3174 3175 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 3176 JSTaggedValue result = BuiltinsMath::Clz32(ecmaRuntimeCallInfo); 3177 TestHelper::TearDownFrame(thread_, prev); 3178 JSTaggedValue expect = BuiltinsBase::GetTaggedInt(1); 3179 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 3180} 3181 3182// Math.clz32() 3183HWTEST_F_L0(BuiltinsMathTest, Clz32_6) 3184{ 3185 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 4); 3186 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 3187 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 3188 3189 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 3190 JSTaggedValue result = BuiltinsMath::Clz32(ecmaRuntimeCallInfo); 3191 TestHelper::TearDownFrame(thread_, prev); 3192 JSTaggedValue expect = BuiltinsBase::GetTaggedInt(32); 3193 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 3194} 3195 3196// Math.hypot() 3197HWTEST_F_L0(BuiltinsMathTest, Hypot) 3198{ 3199 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 4); 3200 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 3201 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 3202 3203 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 3204 JSTaggedValue result = BuiltinsMath::Hypot(ecmaRuntimeCallInfo); 3205 TestHelper::TearDownFrame(thread_, prev); 3206 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(0); 3207 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 3208} 3209 3210// Math.hypot(-2.1) 3211HWTEST_F_L0(BuiltinsMathTest, Hypot_1) 3212{ 3213 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 3214 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 3215 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 3216 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(-2.1)); 3217 3218 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 3219 JSTaggedValue result = BuiltinsMath::Hypot(ecmaRuntimeCallInfo); 3220 TestHelper::TearDownFrame(thread_, prev); 3221 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(2.1); 3222 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 3223} 3224 3225// Math.hypot(-NaN, 1) 3226HWTEST_F_L0(BuiltinsMathTest, Hypot_2) 3227{ 3228 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 3229 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 3230 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 3231 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(-base::NAN_VALUE)); 3232 3233 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 3234 JSTaggedValue result = BuiltinsMath::Hypot(ecmaRuntimeCallInfo); 3235 TestHelper::TearDownFrame(thread_, prev); 3236 ASSERT_TRUE(result.IsDouble()); 3237 ASSERT_TRUE(std::isnan(result.GetDouble())); 3238} 3239 3240// Math.hypot(true, 5, 8, -0.2, 90000) 3241HWTEST_F_L0(BuiltinsMathTest, Hypot_3) 3242{ 3243 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 14); 3244 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 3245 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 3246 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue::True()); 3247 ecmaRuntimeCallInfo->SetCallArg(1, JSTaggedValue(static_cast<int32_t>(5))); 3248 ecmaRuntimeCallInfo->SetCallArg(2, JSTaggedValue(static_cast<int32_t>(8))); 3249 ecmaRuntimeCallInfo->SetCallArg(3, JSTaggedValue(-0.2)); 3250 ecmaRuntimeCallInfo->SetCallArg(4, JSTaggedValue(static_cast<int32_t>(90000))); 3251 3252 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 3253 JSTaggedValue result = BuiltinsMath::Hypot(ecmaRuntimeCallInfo); 3254 TestHelper::TearDownFrame(thread_, prev); 3255 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(90000.00050022222); 3256 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 3257} 3258 3259// Math.Imul() 3260HWTEST_F_L0(BuiltinsMathTest, Imul) 3261{ 3262 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 4); 3263 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 3264 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 3265 3266 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 3267 JSTaggedValue result = BuiltinsMath::Imul(ecmaRuntimeCallInfo); 3268 TestHelper::TearDownFrame(thread_, prev); 3269 JSTaggedValue expect = BuiltinsBase::GetTaggedInt(0); 3270 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 3271} 3272 3273// Math.Imul("-2",9.256) 3274HWTEST_F_L0(BuiltinsMathTest, Imul_1) 3275{ 3276 JSHandle<EcmaString> test = thread_->GetEcmaVM()->GetFactory()->NewFromASCII("-2"); 3277 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 8); 3278 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 3279 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 3280 ecmaRuntimeCallInfo->SetCallArg(0, test.GetTaggedValue()); 3281 ecmaRuntimeCallInfo->SetCallArg(1, JSTaggedValue(9.256)); 3282 3283 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 3284 JSTaggedValue result = BuiltinsMath::Imul(ecmaRuntimeCallInfo); 3285 TestHelper::TearDownFrame(thread_, prev); 3286 JSTaggedValue expect = BuiltinsBase::GetTaggedInt(-18); 3287 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 3288} 3289 3290// Math.Imul(5,0xffffffff) 3291HWTEST_F_L0(BuiltinsMathTest, Imul_2) 3292{ 3293 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 8); 3294 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 3295 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 3296 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(static_cast<int32_t>(5))); 3297 ecmaRuntimeCallInfo->SetCallArg(1, JSTaggedValue(static_cast<int32_t>(0xffffffff))); 3298 3299 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 3300 JSTaggedValue result = BuiltinsMath::Imul(ecmaRuntimeCallInfo); 3301 TestHelper::TearDownFrame(thread_, prev); 3302 JSTaggedValue expect = BuiltinsBase::GetTaggedInt(-5); 3303 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 3304} 3305 3306// Math.Imul(5,0xfffffffe) 3307HWTEST_F_L0(BuiltinsMathTest, Imul_3) 3308{ 3309 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 8); 3310 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 3311 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 3312 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(static_cast<int32_t>(5))); 3313 ecmaRuntimeCallInfo->SetCallArg(1, JSTaggedValue(static_cast<int32_t>(0xfffffffe))); 3314 3315 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 3316 JSTaggedValue result = BuiltinsMath::Imul(ecmaRuntimeCallInfo); 3317 TestHelper::TearDownFrame(thread_, prev); 3318 JSTaggedValue expect = BuiltinsBase::GetTaggedInt(-10); 3319 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 3320} 3321 3322// Math.sin(-1) 3323HWTEST_F_L0(BuiltinsMathTest, Sin) 3324{ 3325 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 3326 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 3327 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 3328 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(static_cast<int32_t>(-1))); 3329 3330 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 3331 JSTaggedValue result = BuiltinsMath::Sin(ecmaRuntimeCallInfo); 3332 TestHelper::TearDownFrame(thread_, prev); 3333 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(-0.8414709848078965); 3334 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 3335} 3336 3337// Math.sin(-1.5) 3338HWTEST_F_L0(BuiltinsMathTest, Sin_2) 3339{ 3340 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 3341 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 3342 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 3343 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(-1.5)); 3344 3345 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 3346 JSTaggedValue result = BuiltinsMath::Sin(ecmaRuntimeCallInfo); 3347 TestHelper::TearDownFrame(thread_, prev); 3348 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(-0.9974949866040544); 3349 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 3350} 3351 3352// Math.sin(null) 3353HWTEST_F_L0(BuiltinsMathTest, Sin_3) 3354{ 3355 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 3356 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 3357 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 3358 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue::Null()); 3359 3360 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 3361 JSTaggedValue result = BuiltinsMath::Sin(ecmaRuntimeCallInfo); 3362 TestHelper::TearDownFrame(thread_, prev); 3363 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(0); 3364 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 3365} 3366 3367// Math.sin(UNDEFINED) 3368HWTEST_F_L0(BuiltinsMathTest, Sin_4) 3369{ 3370 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 3371 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 3372 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 3373 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue::Undefined()); 3374 3375 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 3376 JSTaggedValue result = BuiltinsMath::Sin(ecmaRuntimeCallInfo); 3377 TestHelper::TearDownFrame(thread_, prev); 3378 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(base::NAN_VALUE); 3379 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 3380} 3381 3382// Math.sin(true) 3383HWTEST_F_L0(BuiltinsMathTest, Sin_5) 3384{ 3385 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 3386 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 3387 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 3388 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue::True()); 3389 3390 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 3391 JSTaggedValue result = BuiltinsMath::Sin(ecmaRuntimeCallInfo); 3392 TestHelper::TearDownFrame(thread_, prev); 3393 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(0.8414709848078965); 3394 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 3395} 3396 3397// Math.sin("0.1") 3398HWTEST_F_L0(BuiltinsMathTest, Sin_6) 3399{ 3400 JSHandle<EcmaString> test = thread_->GetEcmaVM()->GetFactory()->NewFromASCII("0.1"); 3401 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 3402 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 3403 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 3404 ecmaRuntimeCallInfo->SetCallArg(0, test.GetTaggedValue()); 3405 3406 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 3407 JSTaggedValue result = BuiltinsMath::Sin(ecmaRuntimeCallInfo); 3408 TestHelper::TearDownFrame(thread_, prev); 3409 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(0.09983341664682815); 3410 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 3411} 3412 3413// Math.sin(Number.POSITIVE_INFINITY) 3414HWTEST_F_L0(BuiltinsMathTest, Sin_7) 3415{ 3416 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 3417 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 3418 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 3419 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(base::POSITIVE_INFINITY)); 3420 3421 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 3422 JSTaggedValue result = BuiltinsMath::Sin(ecmaRuntimeCallInfo); 3423 TestHelper::TearDownFrame(thread_, prev); 3424 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(base::NAN_VALUE); 3425 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 3426} 3427 3428// Math.sin(-NaN) 3429HWTEST_F_L0(BuiltinsMathTest, Sin_8) 3430{ 3431 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 3432 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 3433 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 3434 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(-base::NAN_VALUE)); 3435 3436 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 3437 JSTaggedValue result = BuiltinsMath::Sin(ecmaRuntimeCallInfo); 3438 TestHelper::TearDownFrame(thread_, prev); 3439 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(base::NAN_VALUE); 3440 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 3441} 3442 3443// Math.sinh(-1) 3444HWTEST_F_L0(BuiltinsMathTest, Sinh) 3445{ 3446 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 3447 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 3448 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 3449 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(static_cast<int32_t>(-1))); 3450 3451 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 3452 JSTaggedValue result = BuiltinsMath::Sinh(ecmaRuntimeCallInfo); 3453 TestHelper::TearDownFrame(thread_, prev); 3454 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(-1.1752011936438014); 3455 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 3456} 3457 3458// Math.sinh(-1.5) 3459HWTEST_F_L0(BuiltinsMathTest, Sinh_1) 3460{ 3461 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 3462 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 3463 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 3464 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(-1.5)); 3465 3466 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 3467 JSTaggedValue result = BuiltinsMath::Sinh(ecmaRuntimeCallInfo); 3468 TestHelper::TearDownFrame(thread_, prev); 3469 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(-2.1292794550948173); 3470 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 3471} 3472 3473// Math.sinh(null) 3474HWTEST_F_L0(BuiltinsMathTest, Sinh_2) 3475{ 3476 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 3477 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 3478 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 3479 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue::Null()); 3480 3481 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 3482 JSTaggedValue result = BuiltinsMath::Sinh(ecmaRuntimeCallInfo); 3483 TestHelper::TearDownFrame(thread_, prev); 3484 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(0); 3485 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 3486} 3487 3488// Math.sinh(UNDEFINED) 3489HWTEST_F_L0(BuiltinsMathTest, Sinh_3) 3490{ 3491 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 3492 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 3493 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 3494 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue::Undefined()); 3495 3496 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 3497 JSTaggedValue result = BuiltinsMath::Sinh(ecmaRuntimeCallInfo); 3498 TestHelper::TearDownFrame(thread_, prev); 3499 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(base::NAN_VALUE); 3500 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 3501} 3502 3503// Math.sinh(true) 3504HWTEST_F_L0(BuiltinsMathTest, Sinh_4) 3505{ 3506 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 3507 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 3508 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 3509 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue::True()); 3510 3511 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 3512 JSTaggedValue result = BuiltinsMath::Sinh(ecmaRuntimeCallInfo); 3513 TestHelper::TearDownFrame(thread_, prev); 3514 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(1.1752011936438014); 3515 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 3516} 3517 3518// Math.sinh("0.1") 3519HWTEST_F_L0(BuiltinsMathTest, Sinh_5) 3520{ 3521 JSHandle<EcmaString> test = thread_->GetEcmaVM()->GetFactory()->NewFromASCII("0.1"); 3522 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 3523 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 3524 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 3525 ecmaRuntimeCallInfo->SetCallArg(0, test.GetTaggedValue()); 3526 3527 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 3528 JSTaggedValue result = BuiltinsMath::Sinh(ecmaRuntimeCallInfo); 3529 TestHelper::TearDownFrame(thread_, prev); 3530 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(0.10016675001984403); 3531 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 3532} 3533 3534// Math.sinh(-Number.POSITIVE_INFINITY) 3535HWTEST_F_L0(BuiltinsMathTest, Sinh_6) 3536{ 3537 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 3538 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 3539 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 3540 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(-base::POSITIVE_INFINITY)); 3541 3542 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 3543 JSTaggedValue result = BuiltinsMath::Sinh(ecmaRuntimeCallInfo); 3544 TestHelper::TearDownFrame(thread_, prev); 3545 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(-base::POSITIVE_INFINITY); 3546 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 3547} 3548 3549// Math.sinh(-NaN) 3550HWTEST_F_L0(BuiltinsMathTest, Sinh_7) 3551{ 3552 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 3553 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 3554 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 3555 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(-base::NAN_VALUE)); 3556 3557 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 3558 JSTaggedValue result = BuiltinsMath::Sinh(ecmaRuntimeCallInfo); 3559 TestHelper::TearDownFrame(thread_, prev); 3560 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(base::NAN_VALUE); 3561 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 3562} 3563 3564// Math.sqrt(-1) 3565HWTEST_F_L0(BuiltinsMathTest, Sqrt) 3566{ 3567 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 3568 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 3569 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 3570 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(static_cast<int32_t>(-1))); 3571 3572 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 3573 JSTaggedValue result = BuiltinsMath::Sqrt(ecmaRuntimeCallInfo); 3574 TestHelper::TearDownFrame(thread_, prev); 3575 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(base::NAN_VALUE); 3576 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 3577} 3578 3579// Math.sqrt(-0) 3580HWTEST_F_L0(BuiltinsMathTest, Sqrt_1) 3581{ 3582 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 3583 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 3584 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 3585 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(-0.0)); 3586 3587 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 3588 JSTaggedValue result = BuiltinsMath::Sqrt(ecmaRuntimeCallInfo); 3589 TestHelper::TearDownFrame(thread_, prev); 3590 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(-0.0); 3591 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 3592} 3593 3594// Math.sqrt(null) 3595HWTEST_F_L0(BuiltinsMathTest, Sqrt_2) 3596{ 3597 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 3598 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 3599 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 3600 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue::Null()); 3601 3602 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 3603 JSTaggedValue result = BuiltinsMath::Sqrt(ecmaRuntimeCallInfo); 3604 TestHelper::TearDownFrame(thread_, prev); 3605 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(0); 3606 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 3607} 3608 3609// Math.sqrt(true) 3610HWTEST_F_L0(BuiltinsMathTest, Sqrt_3) 3611{ 3612 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 3613 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 3614 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 3615 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue::True()); 3616 3617 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 3618 JSTaggedValue result = BuiltinsMath::Sqrt(ecmaRuntimeCallInfo); 3619 TestHelper::TearDownFrame(thread_, prev); 3620 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(1.0); 3621 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 3622} 3623 3624// Math.sqrt("0.1") 3625HWTEST_F_L0(BuiltinsMathTest, Sqrt_4) 3626{ 3627 JSHandle<EcmaString> test = thread_->GetEcmaVM()->GetFactory()->NewFromASCII("0.1"); 3628 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 3629 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 3630 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 3631 ecmaRuntimeCallInfo->SetCallArg(0, test.GetTaggedValue()); 3632 3633 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 3634 JSTaggedValue result = BuiltinsMath::Sqrt(ecmaRuntimeCallInfo); 3635 TestHelper::TearDownFrame(thread_, prev); 3636 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(0.31622776601683794); 3637 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 3638} 3639 3640// Math.sqrt(Number.POSITIVE_INFINITY) 3641HWTEST_F_L0(BuiltinsMathTest, Sqrt_5) 3642{ 3643 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 3644 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 3645 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 3646 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(base::POSITIVE_INFINITY)); 3647 3648 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 3649 JSTaggedValue result = BuiltinsMath::Sqrt(ecmaRuntimeCallInfo); 3650 TestHelper::TearDownFrame(thread_, prev); 3651 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(base::POSITIVE_INFINITY); 3652 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 3653} 3654 3655// Math.sqrt(-NaN) 3656HWTEST_F_L0(BuiltinsMathTest, Sqrt_6) 3657{ 3658 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 3659 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 3660 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 3661 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(static_cast<double>(-base::NAN_VALUE))); 3662 3663 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 3664 JSTaggedValue result = BuiltinsMath::Sqrt(ecmaRuntimeCallInfo); 3665 TestHelper::TearDownFrame(thread_, prev); 3666 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(base::NAN_VALUE); 3667 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 3668} 3669 3670// Math.tan(-1) 3671HWTEST_F_L0(BuiltinsMathTest, Tan) 3672{ 3673 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 3674 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 3675 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 3676 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(static_cast<int32_t>(-1))); 3677 3678 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 3679 JSTaggedValue result = BuiltinsMath::Tan(ecmaRuntimeCallInfo); 3680 TestHelper::TearDownFrame(thread_, prev); 3681 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(-1.5574077246549023); 3682 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 3683} 3684 3685// Math.tan(-0) 3686HWTEST_F_L0(BuiltinsMathTest, Tan_1) 3687{ 3688 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 3689 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 3690 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 3691 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(-0.0)); 3692 3693 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 3694 JSTaggedValue result = BuiltinsMath::Tan(ecmaRuntimeCallInfo); 3695 TestHelper::TearDownFrame(thread_, prev); 3696 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(-0.0); 3697 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 3698} 3699 3700// Math.tan(null) 3701HWTEST_F_L0(BuiltinsMathTest, Tan_2) 3702{ 3703 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 3704 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 3705 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 3706 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue::Null()); 3707 3708 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 3709 JSTaggedValue result = BuiltinsMath::Tan(ecmaRuntimeCallInfo); 3710 TestHelper::TearDownFrame(thread_, prev); 3711 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(0); 3712 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 3713} 3714 3715// Math.tan(true) 3716HWTEST_F_L0(BuiltinsMathTest, Tan_3) 3717{ 3718 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 3719 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 3720 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 3721 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue::True()); 3722 3723 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 3724 JSTaggedValue result = BuiltinsMath::Tan(ecmaRuntimeCallInfo); 3725 TestHelper::TearDownFrame(thread_, prev); 3726 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(1.5574077246549023); 3727 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 3728} 3729 3730// Math.tan("0.1") 3731HWTEST_F_L0(BuiltinsMathTest, Tan_4) 3732{ 3733 JSHandle<EcmaString> test = thread_->GetEcmaVM()->GetFactory()->NewFromASCII("0.1"); 3734 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 3735 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 3736 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 3737 ecmaRuntimeCallInfo->SetCallArg(0, test.GetTaggedValue()); 3738 3739 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 3740 JSTaggedValue result = BuiltinsMath::Tan(ecmaRuntimeCallInfo); 3741 TestHelper::TearDownFrame(thread_, prev); 3742 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(0.10033467208545055); 3743 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 3744} 3745 3746// Math.tan(Number.POSITIVE_INFINITY) 3747HWTEST_F_L0(BuiltinsMathTest, Tan_5) 3748{ 3749 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 3750 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 3751 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 3752 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(base::POSITIVE_INFINITY)); 3753 3754 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 3755 JSTaggedValue result = BuiltinsMath::Tan(ecmaRuntimeCallInfo); 3756 TestHelper::TearDownFrame(thread_, prev); 3757 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(base::NAN_VALUE); 3758 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 3759} 3760 3761// Math.tan(-NaN) 3762HWTEST_F_L0(BuiltinsMathTest, Tan_6) 3763{ 3764 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 3765 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 3766 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 3767 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(-base::NAN_VALUE)); 3768 3769 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 3770 JSTaggedValue result = BuiltinsMath::Tan(ecmaRuntimeCallInfo); 3771 TestHelper::TearDownFrame(thread_, prev); 3772 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(base::NAN_VALUE); 3773 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 3774} 3775 3776// Math.tanh(-1) 3777HWTEST_F_L0(BuiltinsMathTest, Tanh) 3778{ 3779 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 3780 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 3781 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 3782 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(static_cast<int32_t>(-1))); 3783 3784 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 3785 JSTaggedValue result = BuiltinsMath::Tanh(ecmaRuntimeCallInfo); 3786 TestHelper::TearDownFrame(thread_, prev); 3787 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(-0.7615941559557649); 3788 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 3789} 3790 3791// Math.tanh(-0) 3792HWTEST_F_L0(BuiltinsMathTest, Tanh_1) 3793{ 3794 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 3795 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 3796 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 3797 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(-0.0)); 3798 3799 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 3800 JSTaggedValue result = BuiltinsMath::Tanh(ecmaRuntimeCallInfo); 3801 TestHelper::TearDownFrame(thread_, prev); 3802 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(-0.0); 3803 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 3804} 3805 3806// Math.tanh(null) 3807HWTEST_F_L0(BuiltinsMathTest, Tanh_2) 3808{ 3809 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 3810 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 3811 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 3812 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue::Null()); 3813 3814 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 3815 JSTaggedValue result = BuiltinsMath::Tanh(ecmaRuntimeCallInfo); 3816 TestHelper::TearDownFrame(thread_, prev); 3817 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(0); 3818 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 3819} 3820 3821// Math.tanh(true) 3822HWTEST_F_L0(BuiltinsMathTest, Tanh_3) 3823{ 3824 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 3825 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 3826 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 3827 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue::True()); 3828 3829 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 3830 JSTaggedValue result = BuiltinsMath::Tanh(ecmaRuntimeCallInfo); 3831 TestHelper::TearDownFrame(thread_, prev); 3832 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(0.7615941559557649); 3833 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 3834} 3835 3836// Math.tanh("0.1") 3837HWTEST_F_L0(BuiltinsMathTest, Tanh_4) 3838{ 3839 JSHandle<EcmaString> test = thread_->GetEcmaVM()->GetFactory()->NewFromASCII("0.1"); 3840 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 3841 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 3842 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 3843 ecmaRuntimeCallInfo->SetCallArg(0, test.GetTaggedValue()); 3844 3845 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 3846 JSTaggedValue result = BuiltinsMath::Tanh(ecmaRuntimeCallInfo); 3847 TestHelper::TearDownFrame(thread_, prev); 3848 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(0.09966799462495582); 3849 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 3850} 3851 3852// Math.tanh(Number.POSITIVE_INFINITY) 3853HWTEST_F_L0(BuiltinsMathTest, Tanh_5) 3854{ 3855 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 3856 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 3857 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 3858 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(base::POSITIVE_INFINITY)); 3859 3860 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 3861 JSTaggedValue result = BuiltinsMath::Tanh(ecmaRuntimeCallInfo); 3862 TestHelper::TearDownFrame(thread_, prev); 3863 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(1.0); 3864 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 3865} 3866 3867// Math.tanh(-NaN) 3868HWTEST_F_L0(BuiltinsMathTest, Tanh_6) 3869{ 3870 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 3871 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 3872 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 3873 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(-base::NAN_VALUE)); 3874 3875 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 3876 JSTaggedValue result = BuiltinsMath::Tanh(ecmaRuntimeCallInfo); 3877 TestHelper::TearDownFrame(thread_, prev); 3878 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(base::NAN_VALUE); 3879 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 3880} 3881 3882// Math.trunc(-1) 3883HWTEST_F_L0(BuiltinsMathTest, Trunc) 3884{ 3885 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 3886 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 3887 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 3888 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(static_cast<int32_t>(-1))); 3889 3890 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 3891 JSTaggedValue result = BuiltinsMath::Trunc(ecmaRuntimeCallInfo); 3892 TestHelper::TearDownFrame(thread_, prev); 3893 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(-1.0); 3894 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 3895} 3896 3897// Math.trunc(-0) 3898HWTEST_F_L0(BuiltinsMathTest, Trunc_1) 3899{ 3900 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 3901 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 3902 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 3903 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(-0.0)); 3904 3905 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 3906 JSTaggedValue result = BuiltinsMath::Trunc(ecmaRuntimeCallInfo); 3907 TestHelper::TearDownFrame(thread_, prev); 3908 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(-0.0); 3909 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 3910} 3911 3912// Math.trunc(null) 3913HWTEST_F_L0(BuiltinsMathTest, Trunc_2) 3914{ 3915 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 3916 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 3917 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 3918 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue::Null()); 3919 3920 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 3921 JSTaggedValue result = BuiltinsMath::Trunc(ecmaRuntimeCallInfo); 3922 TestHelper::TearDownFrame(thread_, prev); 3923 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(0); 3924 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 3925} 3926 3927// Math.trunc(true) 3928HWTEST_F_L0(BuiltinsMathTest, Trunc_3) 3929{ 3930 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 3931 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 3932 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 3933 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue::True()); 3934 3935 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 3936 JSTaggedValue result = BuiltinsMath::Trunc(ecmaRuntimeCallInfo); 3937 TestHelper::TearDownFrame(thread_, prev); 3938 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(1.0); 3939 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 3940} 3941 3942// Math.trunc("-0.1") 3943HWTEST_F_L0(BuiltinsMathTest, Trunc_4) 3944{ 3945 JSHandle<EcmaString> test = thread_->GetEcmaVM()->GetFactory()->NewFromASCII("-0.1"); 3946 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 3947 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 3948 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 3949 ecmaRuntimeCallInfo->SetCallArg(0, test.GetTaggedValue()); 3950 3951 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 3952 JSTaggedValue result = BuiltinsMath::Trunc(ecmaRuntimeCallInfo); 3953 TestHelper::TearDownFrame(thread_, prev); 3954 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(-0.0); 3955 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 3956} 3957 3958// Math.trunc(Number.POSITIVE_INFINITY) 3959HWTEST_F_L0(BuiltinsMathTest, Trunc_5) 3960{ 3961 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 3962 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 3963 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 3964 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(base::POSITIVE_INFINITY)); 3965 3966 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 3967 JSTaggedValue result = BuiltinsMath::Trunc(ecmaRuntimeCallInfo); 3968 TestHelper::TearDownFrame(thread_, prev); 3969 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(base::POSITIVE_INFINITY); 3970 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 3971} 3972 3973// Math.trunc(-NaN) 3974HWTEST_F_L0(BuiltinsMathTest, Trunc_6) 3975{ 3976 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6); 3977 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 3978 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 3979 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(-base::NAN_VALUE)); 3980 3981 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, ecmaRuntimeCallInfo); 3982 JSTaggedValue result = BuiltinsMath::Trunc(ecmaRuntimeCallInfo); 3983 TestHelper::TearDownFrame(thread_, prev); 3984 JSTaggedValue expect = BuiltinsBase::GetTaggedDouble(base::NAN_VALUE); 3985 ASSERT_EQ(result.GetRawData(), expect.GetRawData()); 3986} 3987} // namespace panda::test 3988