14514f5e3Sopenharmony_ci/* 24514f5e3Sopenharmony_ci * Copyright (c) 2021 Huawei Device Co., Ltd. 34514f5e3Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 44514f5e3Sopenharmony_ci * you may not use this file except in compliance with the License. 54514f5e3Sopenharmony_ci * You may obtain a copy of the License at 64514f5e3Sopenharmony_ci * 74514f5e3Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 84514f5e3Sopenharmony_ci * 94514f5e3Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 104514f5e3Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 114514f5e3Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 124514f5e3Sopenharmony_ci * See the License for the specific language governing permissions and 134514f5e3Sopenharmony_ci * limitations under the License. 144514f5e3Sopenharmony_ci */ 154514f5e3Sopenharmony_ci 164514f5e3Sopenharmony_ci#include "builtin_test_util.h" 174514f5e3Sopenharmony_ci#include "ecmascript/builtins/builtins_dataview.h" 184514f5e3Sopenharmony_ci 194514f5e3Sopenharmony_ci#include "ecmascript/builtins/builtins_arraybuffer.h" 204514f5e3Sopenharmony_ci#include "ecmascript/ecma_runtime_call_info.h" 214514f5e3Sopenharmony_ci#include "ecmascript/ecma_vm.h" 224514f5e3Sopenharmony_ci#include "ecmascript/global_env.h" 234514f5e3Sopenharmony_ci#include "ecmascript/js_arraybuffer.h" 244514f5e3Sopenharmony_ci#include "ecmascript/js_dataview.h" 254514f5e3Sopenharmony_ci#include "ecmascript/js_handle.h" 264514f5e3Sopenharmony_ci#include "ecmascript/js_tagged_value.h" 274514f5e3Sopenharmony_ci#include "ecmascript/tests/test_helper.h" 284514f5e3Sopenharmony_ci 294514f5e3Sopenharmony_ciusing namespace panda::ecmascript; 304514f5e3Sopenharmony_ciusing namespace panda::ecmascript::builtins; 314514f5e3Sopenharmony_ci 324514f5e3Sopenharmony_cinamespace panda::test { 334514f5e3Sopenharmony_ciusing DataViewType = ecmascript::DataViewType; 344514f5e3Sopenharmony_ciclass BuiltinsDataViewTest : public BaseTestWithScope<false> { 354514f5e3Sopenharmony_ci}; 364514f5e3Sopenharmony_ci 374514f5e3Sopenharmony_cienum class AlgorithmType { 384514f5e3Sopenharmony_ci GET_OFFSET, 394514f5e3Sopenharmony_ci GET_BYTELENGTH, 404514f5e3Sopenharmony_ci GET_BUFFER, 414514f5e3Sopenharmony_ci GET_INT8, 424514f5e3Sopenharmony_ci SET_INT8, 434514f5e3Sopenharmony_ci GET_UINT8, 444514f5e3Sopenharmony_ci SET_UINT8, 454514f5e3Sopenharmony_ci GET_UINT16, 464514f5e3Sopenharmony_ci SET_UINT16, 474514f5e3Sopenharmony_ci GET_INT16, 484514f5e3Sopenharmony_ci SET_INT16, 494514f5e3Sopenharmony_ci GET_UINT32, 504514f5e3Sopenharmony_ci SET_UINT32, 514514f5e3Sopenharmony_ci GET_INT32, 524514f5e3Sopenharmony_ci SET_INT32, 534514f5e3Sopenharmony_ci GET_FLOAT32, 544514f5e3Sopenharmony_ci SET_FLOAT32, 554514f5e3Sopenharmony_ci GET_FLOAT64, 564514f5e3Sopenharmony_ci SET_FLOAT64, 574514f5e3Sopenharmony_ci GET_BIGINT64, 584514f5e3Sopenharmony_ci SET_BIGINT64, 594514f5e3Sopenharmony_ci}; 604514f5e3Sopenharmony_ci 614514f5e3Sopenharmony_cistatic JSTaggedValue DataViewAlgorithmGet(AlgorithmType type, EcmaRuntimeCallInfo* ecmaRuntimeCallInfo) 624514f5e3Sopenharmony_ci{ 634514f5e3Sopenharmony_ci JSTaggedValue result; 644514f5e3Sopenharmony_ci switch (type) { 654514f5e3Sopenharmony_ci case AlgorithmType::GET_OFFSET: 664514f5e3Sopenharmony_ci result = BuiltinsDataView::GetOffset(ecmaRuntimeCallInfo); 674514f5e3Sopenharmony_ci break; 684514f5e3Sopenharmony_ci case AlgorithmType::GET_BYTELENGTH: 694514f5e3Sopenharmony_ci result = BuiltinsDataView::GetByteLength(ecmaRuntimeCallInfo); 704514f5e3Sopenharmony_ci break; 714514f5e3Sopenharmony_ci case AlgorithmType::GET_BUFFER: 724514f5e3Sopenharmony_ci result = BuiltinsDataView::GetBuffer(ecmaRuntimeCallInfo); 734514f5e3Sopenharmony_ci break; 744514f5e3Sopenharmony_ci case AlgorithmType::GET_INT8: 754514f5e3Sopenharmony_ci result = BuiltinsDataView::GetInt8(ecmaRuntimeCallInfo); 764514f5e3Sopenharmony_ci break; 774514f5e3Sopenharmony_ci case AlgorithmType::GET_UINT16: 784514f5e3Sopenharmony_ci result = BuiltinsDataView::GetUint16(ecmaRuntimeCallInfo); 794514f5e3Sopenharmony_ci break; 804514f5e3Sopenharmony_ci case AlgorithmType::GET_INT16: 814514f5e3Sopenharmony_ci result = BuiltinsDataView::GetInt16(ecmaRuntimeCallInfo); 824514f5e3Sopenharmony_ci break; 834514f5e3Sopenharmony_ci case AlgorithmType::GET_UINT32: 844514f5e3Sopenharmony_ci result = BuiltinsDataView::GetUint32(ecmaRuntimeCallInfo); 854514f5e3Sopenharmony_ci break; 864514f5e3Sopenharmony_ci case AlgorithmType::GET_INT32: 874514f5e3Sopenharmony_ci result = BuiltinsDataView::GetInt32(ecmaRuntimeCallInfo); 884514f5e3Sopenharmony_ci break; 894514f5e3Sopenharmony_ci case AlgorithmType::GET_FLOAT32: 904514f5e3Sopenharmony_ci result = BuiltinsDataView::GetFloat32(ecmaRuntimeCallInfo); 914514f5e3Sopenharmony_ci break; 924514f5e3Sopenharmony_ci case AlgorithmType::GET_FLOAT64: 934514f5e3Sopenharmony_ci result = BuiltinsDataView::GetFloat64(ecmaRuntimeCallInfo); 944514f5e3Sopenharmony_ci break; 954514f5e3Sopenharmony_ci case AlgorithmType::GET_BIGINT64: 964514f5e3Sopenharmony_ci result = BuiltinsDataView::GetBigInt64(ecmaRuntimeCallInfo); 974514f5e3Sopenharmony_ci break; 984514f5e3Sopenharmony_ci default: 994514f5e3Sopenharmony_ci break; 1004514f5e3Sopenharmony_ci } 1014514f5e3Sopenharmony_ci return result; 1024514f5e3Sopenharmony_ci} 1034514f5e3Sopenharmony_ci 1044514f5e3Sopenharmony_cistatic JSTaggedValue DataViewAlgorithm(JSThread *thread, std::vector<JSTaggedValue>& args, int32_t maxArgLen, 1054514f5e3Sopenharmony_ci AlgorithmType type, JSTaggedValue thisValue = JSTaggedValue::Undefined()) 1064514f5e3Sopenharmony_ci{ 1074514f5e3Sopenharmony_ci auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread, args, maxArgLen, thisValue); 1084514f5e3Sopenharmony_ci auto prev = TestHelper::SetupFrame(thread, ecmaRuntimeCallInfo); 1094514f5e3Sopenharmony_ci JSTaggedValue result; 1104514f5e3Sopenharmony_ci switch (type) { 1114514f5e3Sopenharmony_ci case AlgorithmType::SET_INT8: 1124514f5e3Sopenharmony_ci result = BuiltinsDataView::SetInt8(ecmaRuntimeCallInfo); 1134514f5e3Sopenharmony_ci break; 1144514f5e3Sopenharmony_ci case AlgorithmType::GET_UINT8: 1154514f5e3Sopenharmony_ci result = BuiltinsDataView::GetUint8(ecmaRuntimeCallInfo); 1164514f5e3Sopenharmony_ci break; 1174514f5e3Sopenharmony_ci case AlgorithmType::SET_UINT8: 1184514f5e3Sopenharmony_ci result = BuiltinsDataView::SetUint8(ecmaRuntimeCallInfo); 1194514f5e3Sopenharmony_ci break; 1204514f5e3Sopenharmony_ci case AlgorithmType::SET_UINT16: 1214514f5e3Sopenharmony_ci result = BuiltinsDataView::SetUint16(ecmaRuntimeCallInfo); 1224514f5e3Sopenharmony_ci break; 1234514f5e3Sopenharmony_ci case AlgorithmType::SET_INT16: 1244514f5e3Sopenharmony_ci result = BuiltinsDataView::SetInt16(ecmaRuntimeCallInfo); 1254514f5e3Sopenharmony_ci break; 1264514f5e3Sopenharmony_ci case AlgorithmType::SET_UINT32: 1274514f5e3Sopenharmony_ci result = BuiltinsDataView::SetUint32(ecmaRuntimeCallInfo); 1284514f5e3Sopenharmony_ci break; 1294514f5e3Sopenharmony_ci case AlgorithmType::SET_INT32: 1304514f5e3Sopenharmony_ci result = BuiltinsDataView::SetInt32(ecmaRuntimeCallInfo); 1314514f5e3Sopenharmony_ci break; 1324514f5e3Sopenharmony_ci case AlgorithmType::SET_FLOAT32: 1334514f5e3Sopenharmony_ci result = BuiltinsDataView::SetFloat32(ecmaRuntimeCallInfo); 1344514f5e3Sopenharmony_ci break; 1354514f5e3Sopenharmony_ci case AlgorithmType::SET_FLOAT64: 1364514f5e3Sopenharmony_ci result = BuiltinsDataView::SetFloat64(ecmaRuntimeCallInfo); 1374514f5e3Sopenharmony_ci break; 1384514f5e3Sopenharmony_ci case AlgorithmType::SET_BIGINT64: 1394514f5e3Sopenharmony_ci result = BuiltinsDataView::SetBigInt64(ecmaRuntimeCallInfo); 1404514f5e3Sopenharmony_ci break; 1414514f5e3Sopenharmony_ci default: 1424514f5e3Sopenharmony_ci result = DataViewAlgorithmGet(type, ecmaRuntimeCallInfo); 1434514f5e3Sopenharmony_ci break; 1444514f5e3Sopenharmony_ci } 1454514f5e3Sopenharmony_ci TestHelper::TearDownFrame(thread, prev); 1464514f5e3Sopenharmony_ci return result; 1474514f5e3Sopenharmony_ci} 1484514f5e3Sopenharmony_ci 1494514f5e3Sopenharmony_ciJSTaggedValue CreateBuiltinsDataviewArrayBuffer(JSThread *thread, int32_t length) 1504514f5e3Sopenharmony_ci{ 1514514f5e3Sopenharmony_ci JSHandle<GlobalEnv> env = thread->GetEcmaVM()->GetGlobalEnv(); 1524514f5e3Sopenharmony_ci JSHandle<JSFunction> arrayBuffer(thread, env->GetArrayBufferFunction().GetTaggedValue()); 1534514f5e3Sopenharmony_ci JSHandle<JSObject> globalObject(thread, env->GetGlobalObject()); 1544514f5e3Sopenharmony_ci // 6 : test case 1554514f5e3Sopenharmony_ci auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread, JSTaggedValue(*arrayBuffer), 6); 1564514f5e3Sopenharmony_ci ecmaRuntimeCallInfo->SetFunction(arrayBuffer.GetTaggedValue()); 1574514f5e3Sopenharmony_ci ecmaRuntimeCallInfo->SetThis(globalObject.GetTaggedValue()); 1584514f5e3Sopenharmony_ci ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(length)); 1594514f5e3Sopenharmony_ci 1604514f5e3Sopenharmony_ci [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread, ecmaRuntimeCallInfo); 1614514f5e3Sopenharmony_ci JSTaggedValue result = BuiltinsArrayBuffer::ArrayBufferConstructor(ecmaRuntimeCallInfo); 1624514f5e3Sopenharmony_ci TestHelper::TearDownFrame(thread, prev); 1634514f5e3Sopenharmony_ci return result; 1644514f5e3Sopenharmony_ci} 1654514f5e3Sopenharmony_ci 1664514f5e3Sopenharmony_ciJSTaggedValue CreateBuiltinsDataView(JSThread *thread, int32_t length, int32_t byte_offset) 1674514f5e3Sopenharmony_ci{ 1684514f5e3Sopenharmony_ci JSHandle<GlobalEnv> env = thread->GetEcmaVM()->GetGlobalEnv(); 1694514f5e3Sopenharmony_ci JSHandle<JSFunction> dataView(thread, env->GetDataViewFunction().GetTaggedValue()); 1704514f5e3Sopenharmony_ci JSHandle<JSObject> globalObject(thread, env->GetGlobalObject()); 1714514f5e3Sopenharmony_ci JSTaggedValue tagged = CreateBuiltinsDataviewArrayBuffer(thread, length); 1724514f5e3Sopenharmony_ci JSHandle<JSArrayBuffer> arrBuf(thread, JSArrayBuffer::Cast(reinterpret_cast<TaggedObject *>(tagged.GetRawData()))); 1734514f5e3Sopenharmony_ci // 8 : test case 1744514f5e3Sopenharmony_ci auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread, JSTaggedValue(*dataView), 8); 1754514f5e3Sopenharmony_ci ecmaRuntimeCallInfo->SetFunction(dataView.GetTaggedValue()); 1764514f5e3Sopenharmony_ci ecmaRuntimeCallInfo->SetThis(globalObject.GetTaggedValue()); 1774514f5e3Sopenharmony_ci ecmaRuntimeCallInfo->SetCallArg(0, arrBuf.GetTaggedValue()); 1784514f5e3Sopenharmony_ci ecmaRuntimeCallInfo->SetCallArg(1, JSTaggedValue(byte_offset)); 1794514f5e3Sopenharmony_ci 1804514f5e3Sopenharmony_ci [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread, ecmaRuntimeCallInfo); 1814514f5e3Sopenharmony_ci JSTaggedValue result = BuiltinsDataView::DataViewConstructor(ecmaRuntimeCallInfo); 1824514f5e3Sopenharmony_ci TestHelper::TearDownFrame(thread, prev); 1834514f5e3Sopenharmony_ci return result; 1844514f5e3Sopenharmony_ci} 1854514f5e3Sopenharmony_ci 1864514f5e3Sopenharmony_civoid SetUint8(JSThread *thread, const JSHandle<JSDataView> &view, int32_t offset, JSTaggedValue value) 1874514f5e3Sopenharmony_ci{ 1884514f5e3Sopenharmony_ci std::vector<JSTaggedValue> vals{JSTaggedValue(offset), value}; 1894514f5e3Sopenharmony_ci DataViewAlgorithm(thread, vals, 8, AlgorithmType::SET_UINT8, view.GetTaggedValue()); // 8: data max len 1904514f5e3Sopenharmony_ci} 1914514f5e3Sopenharmony_ci 1924514f5e3Sopenharmony_ci// new DataView(new ArrayBuffer(10), 1) 1934514f5e3Sopenharmony_ciHWTEST_F_L0(BuiltinsDataViewTest, Constructor) 1944514f5e3Sopenharmony_ci{ 1954514f5e3Sopenharmony_ci JSHandle<GlobalEnv> env = thread->GetEcmaVM()->GetGlobalEnv(); 1964514f5e3Sopenharmony_ci JSHandle<JSFunction> dataView(thread, env->GetDataViewFunction().GetTaggedValue()); 1974514f5e3Sopenharmony_ci JSHandle<JSObject> globalObject(thread, env->GetGlobalObject()); 1984514f5e3Sopenharmony_ci JSTaggedValue tagged = CreateBuiltinsDataviewArrayBuffer(thread, 10); 1994514f5e3Sopenharmony_ci JSHandle<JSArrayBuffer> arrBuf(thread, JSArrayBuffer::Cast(reinterpret_cast<TaggedObject *>(tagged.GetRawData()))); 2004514f5e3Sopenharmony_ci auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread, JSTaggedValue(*dataView), 8); 2014514f5e3Sopenharmony_ci ecmaRuntimeCallInfo->SetFunction(dataView.GetTaggedValue()); 2024514f5e3Sopenharmony_ci ecmaRuntimeCallInfo->SetThis(globalObject.GetTaggedValue()); 2034514f5e3Sopenharmony_ci ecmaRuntimeCallInfo->SetCallArg(0, arrBuf.GetTaggedValue()); 2044514f5e3Sopenharmony_ci ecmaRuntimeCallInfo->SetCallArg(1, JSTaggedValue(1)); 2054514f5e3Sopenharmony_ci 2064514f5e3Sopenharmony_ci [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread, ecmaRuntimeCallInfo); 2074514f5e3Sopenharmony_ci JSTaggedValue result = BuiltinsDataView::DataViewConstructor(ecmaRuntimeCallInfo); 2084514f5e3Sopenharmony_ci ASSERT_TRUE(result.IsECMAObject()); 2094514f5e3Sopenharmony_ci TestHelper::TearDownFrame(thread, prev); 2104514f5e3Sopenharmony_ci 2114514f5e3Sopenharmony_ci // case: Detached Buffer 2124514f5e3Sopenharmony_ci arrBuf->SetArrayBufferData(thread, JSTaggedValue::Null()); 2134514f5e3Sopenharmony_ci ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread, JSTaggedValue(*dataView), 8); 2144514f5e3Sopenharmony_ci ecmaRuntimeCallInfo->SetFunction(dataView.GetTaggedValue()); 2154514f5e3Sopenharmony_ci ecmaRuntimeCallInfo->SetThis(globalObject.GetTaggedValue()); 2164514f5e3Sopenharmony_ci ecmaRuntimeCallInfo->SetCallArg(0, arrBuf.GetTaggedValue()); 2174514f5e3Sopenharmony_ci ecmaRuntimeCallInfo->SetCallArg(1, JSTaggedValue(1)); 2184514f5e3Sopenharmony_ci 2194514f5e3Sopenharmony_ci prev = TestHelper::SetupFrame(thread, ecmaRuntimeCallInfo); 2204514f5e3Sopenharmony_ci result = BuiltinsDataView::DataViewConstructor(ecmaRuntimeCallInfo); 2214514f5e3Sopenharmony_ci TestHelper::TearDownFrame(thread, prev); 2224514f5e3Sopenharmony_ci EXPECT_TRUE(thread->HasPendingException()); 2234514f5e3Sopenharmony_ci EXPECT_EQ(result, JSTaggedValue::Exception()); 2244514f5e3Sopenharmony_ci thread->ClearException(); 2254514f5e3Sopenharmony_ci} 2264514f5e3Sopenharmony_ci 2274514f5e3Sopenharmony_ci// new DataView(new ArrayBuffer(10), 1).byteOffset 2284514f5e3Sopenharmony_ciHWTEST_F_L0(BuiltinsDataViewTest, byteOffset) 2294514f5e3Sopenharmony_ci{ 2304514f5e3Sopenharmony_ci JSTaggedValue tagged = CreateBuiltinsDataView(thread, 10, 1); 2314514f5e3Sopenharmony_ci JSHandle<JSDataView> view(thread, JSDataView::Cast(reinterpret_cast<TaggedObject *>(tagged.GetRawData()))); 2324514f5e3Sopenharmony_ci 2334514f5e3Sopenharmony_ci std::vector<JSTaggedValue> vals{}; 2344514f5e3Sopenharmony_ci auto result = DataViewAlgorithm(thread, vals, 4, AlgorithmType::GET_OFFSET, view.GetTaggedValue()); 2354514f5e3Sopenharmony_ci ASSERT_EQ(result.GetRawData(), JSTaggedValue(1).GetRawData()); 2364514f5e3Sopenharmony_ci 2374514f5e3Sopenharmony_ci // case: Detached Buffer 2384514f5e3Sopenharmony_ci JSTaggedValue tagged1 = BuiltTestUtil::CreateBuiltinsArrayBuffer(thread, 10); 2394514f5e3Sopenharmony_ci JSHandle<JSArrayBuffer> arrBuf(thread, JSArrayBuffer::Cast(reinterpret_cast<TaggedObject *>(tagged1.GetRawData()))); 2404514f5e3Sopenharmony_ci arrBuf->SetArrayBufferData(thread, JSTaggedValue::Null()); 2414514f5e3Sopenharmony_ci view->SetViewedArrayBuffer(thread, arrBuf); 2424514f5e3Sopenharmony_ci 2434514f5e3Sopenharmony_ci result = DataViewAlgorithm(thread, vals, 4, AlgorithmType::GET_OFFSET, view.GetTaggedValue()); 2444514f5e3Sopenharmony_ci EXPECT_TRUE(thread->HasPendingException()); 2454514f5e3Sopenharmony_ci EXPECT_EQ(result, JSTaggedValue::Exception()); 2464514f5e3Sopenharmony_ci thread->ClearException(); 2474514f5e3Sopenharmony_ci} 2484514f5e3Sopenharmony_ci 2494514f5e3Sopenharmony_ci// new DataView(new ArrayBuffer(10), 2).byteLength 2504514f5e3Sopenharmony_ciHWTEST_F_L0(BuiltinsDataViewTest, byteLength) 2514514f5e3Sopenharmony_ci{ 2524514f5e3Sopenharmony_ci JSTaggedValue tagged = CreateBuiltinsDataView(thread, 10, 2); 2534514f5e3Sopenharmony_ci JSHandle<JSDataView> view(thread, JSDataView::Cast(reinterpret_cast<TaggedObject *>(tagged.GetRawData()))); 2544514f5e3Sopenharmony_ci 2554514f5e3Sopenharmony_ci std::vector<JSTaggedValue> vals{}; 2564514f5e3Sopenharmony_ci auto result = DataViewAlgorithm(thread, vals, 4, AlgorithmType::GET_BYTELENGTH, view.GetTaggedValue()); 2574514f5e3Sopenharmony_ci ASSERT_EQ(result.GetRawData(), JSTaggedValue(8).GetRawData()); 2584514f5e3Sopenharmony_ci 2594514f5e3Sopenharmony_ci // case: Detached Buffer 2604514f5e3Sopenharmony_ci JSTaggedValue tagged1 = BuiltTestUtil::CreateBuiltinsArrayBuffer(thread, 10); 2614514f5e3Sopenharmony_ci JSHandle<JSArrayBuffer> arrBuf(thread, JSArrayBuffer::Cast(reinterpret_cast<TaggedObject *>(tagged1.GetRawData()))); 2624514f5e3Sopenharmony_ci arrBuf->SetArrayBufferData(thread, JSTaggedValue::Null()); 2634514f5e3Sopenharmony_ci view->SetViewedArrayBuffer(thread, arrBuf); 2644514f5e3Sopenharmony_ci result = DataViewAlgorithm(thread, vals, 4, AlgorithmType::GET_BYTELENGTH, view.GetTaggedValue()); 2654514f5e3Sopenharmony_ci EXPECT_TRUE(thread->HasPendingException()); 2664514f5e3Sopenharmony_ci EXPECT_EQ(result, JSTaggedValue::Exception()); 2674514f5e3Sopenharmony_ci thread->ClearException(); 2684514f5e3Sopenharmony_ci} 2694514f5e3Sopenharmony_ci 2704514f5e3Sopenharmony_ci// new DataView(new ArrayBuffer(10), 1).buffer 2714514f5e3Sopenharmony_ciHWTEST_F_L0(BuiltinsDataViewTest, buffer) 2724514f5e3Sopenharmony_ci{ 2734514f5e3Sopenharmony_ci JSTaggedValue tagged = CreateBuiltinsDataView(thread, 10, 1); 2744514f5e3Sopenharmony_ci JSHandle<JSDataView> view(thread, JSDataView::Cast(reinterpret_cast<TaggedObject *>(tagged.GetRawData()))); 2754514f5e3Sopenharmony_ci std::vector<JSTaggedValue> vals{}; 2764514f5e3Sopenharmony_ci auto result = DataViewAlgorithm(thread, vals, 4, AlgorithmType::GET_BUFFER, view.GetTaggedValue()); 2774514f5e3Sopenharmony_ci ASSERT_EQ(result.IsArrayBuffer(), true); 2784514f5e3Sopenharmony_ci} 2794514f5e3Sopenharmony_ci 2804514f5e3Sopenharmony_ci// new DataView(new ArrayBuffer(8), 0).SetUint16/GetUint16 2814514f5e3Sopenharmony_ciHWTEST_F_L0(BuiltinsDataViewTest, getUint16) 2824514f5e3Sopenharmony_ci{ 2834514f5e3Sopenharmony_ci JSTaggedValue tagged = CreateBuiltinsDataView(thread, 8, 0); 2844514f5e3Sopenharmony_ci JSHandle<JSDataView> view(thread, JSDataView::Cast(reinterpret_cast<TaggedObject *>(tagged.GetRawData()))); 2854514f5e3Sopenharmony_ci 2864514f5e3Sopenharmony_ci std::vector<JSTaggedValue> vals{JSTaggedValue(0), JSTaggedValue(-1870724872), JSTaggedValue::False()}; 2874514f5e3Sopenharmony_ci auto result = DataViewAlgorithm(thread, vals, 10, AlgorithmType::SET_UINT16, view.GetTaggedValue()); 2884514f5e3Sopenharmony_ci ASSERT_EQ(result.GetRawData(), JSTaggedValue::VALUE_UNDEFINED); 2894514f5e3Sopenharmony_ci 2904514f5e3Sopenharmony_ci std::vector<JSTaggedValue> vals2{JSTaggedValue(0), JSTaggedValue::True()}; 2914514f5e3Sopenharmony_ci auto result1 = DataViewAlgorithm(thread, vals2, 8, AlgorithmType::GET_UINT16, view.GetTaggedValue()); 2924514f5e3Sopenharmony_ci ASSERT_EQ(result1.GetRawData(), JSTaggedValue(63488).GetRawData()); 2934514f5e3Sopenharmony_ci} 2944514f5e3Sopenharmony_ci 2954514f5e3Sopenharmony_ci// new DataView(new ArrayBuffer(8), 0).SetInt16/GetInt16 2964514f5e3Sopenharmony_ciHWTEST_F_L0(BuiltinsDataViewTest, getInt16) 2974514f5e3Sopenharmony_ci{ 2984514f5e3Sopenharmony_ci JSTaggedValue tagged = CreateBuiltinsDataView(thread, 8, 0); 2994514f5e3Sopenharmony_ci JSHandle<JSDataView> view(thread, JSDataView::Cast(reinterpret_cast<TaggedObject *>(tagged.GetRawData()))); 3004514f5e3Sopenharmony_ci std::vector<JSTaggedValue> vals{JSTaggedValue(0), JSTaggedValue(-1870724872), JSTaggedValue::False()}; 3014514f5e3Sopenharmony_ci auto result = DataViewAlgorithm(thread, vals, 10, AlgorithmType::SET_INT16, view.GetTaggedValue()); 3024514f5e3Sopenharmony_ci ASSERT_EQ(result.GetRawData(), JSTaggedValue::VALUE_UNDEFINED); 3034514f5e3Sopenharmony_ci 3044514f5e3Sopenharmony_ci std::vector<JSTaggedValue> vals2{JSTaggedValue(0), JSTaggedValue::True()}; 3054514f5e3Sopenharmony_ci auto result1 = DataViewAlgorithm(thread, vals2, 8, AlgorithmType::GET_INT16, view.GetTaggedValue()); 3064514f5e3Sopenharmony_ci ASSERT_EQ(result1.GetRawData(), JSTaggedValue(-2048).GetRawData()); 3074514f5e3Sopenharmony_ci} 3084514f5e3Sopenharmony_ci 3094514f5e3Sopenharmony_ci// new DataView(new ArrayBuffer(8), 0).SetUint8/GetUint32 3104514f5e3Sopenharmony_cistatic JSHandle<JSDataView> GetCommonInt32(JSThread *thread) 3114514f5e3Sopenharmony_ci{ 3124514f5e3Sopenharmony_ci JSTaggedValue tagged = CreateBuiltinsDataView(thread, 8, 0); // 8: data len 3134514f5e3Sopenharmony_ci JSHandle<JSDataView> view(thread, JSDataView::Cast(reinterpret_cast<TaggedObject *>(tagged.GetRawData()))); 3144514f5e3Sopenharmony_ci SetUint8(thread, view, 0, JSTaggedValue(127)); // 127:value 3154514f5e3Sopenharmony_ci SetUint8(thread, view, 1, JSTaggedValue(255)); // 1: the second value, 255:value 3164514f5e3Sopenharmony_ci SetUint8(thread, view, 2, JSTaggedValue(255)); // 2: the third value, 255:value 3174514f5e3Sopenharmony_ci SetUint8(thread, view, 3, JSTaggedValue(255)); // 3: the forth value, 255:value 3184514f5e3Sopenharmony_ci return view; 3194514f5e3Sopenharmony_ci} 3204514f5e3Sopenharmony_ci 3214514f5e3Sopenharmony_ciHWTEST_F_L0(BuiltinsDataViewTest, GetUint32) 3224514f5e3Sopenharmony_ci{ 3234514f5e3Sopenharmony_ci auto view = GetCommonInt32(thread); 3244514f5e3Sopenharmony_ci std::vector<JSTaggedValue> vals{JSTaggedValue(0), JSTaggedValue::False()}; 3254514f5e3Sopenharmony_ci auto result = DataViewAlgorithm(thread, vals, 8, AlgorithmType::GET_UINT32, view.GetTaggedValue()); 3264514f5e3Sopenharmony_ci ASSERT_EQ(result.GetRawData(), JSTaggedValue(2147483647).GetRawData()); 3274514f5e3Sopenharmony_ci} 3284514f5e3Sopenharmony_ci 3294514f5e3Sopenharmony_ci// new DataView(new ArrayBuffer(8), 0).SetUint8/GetInt32 3304514f5e3Sopenharmony_ciHWTEST_F_L0(BuiltinsDataViewTest, GetInt32) 3314514f5e3Sopenharmony_ci{ 3324514f5e3Sopenharmony_ci auto view = GetCommonInt32(thread); 3334514f5e3Sopenharmony_ci std::vector<JSTaggedValue> vals{JSTaggedValue(0), JSTaggedValue::False()}; 3344514f5e3Sopenharmony_ci auto result = DataViewAlgorithm(thread, vals, 8, AlgorithmType::GET_INT32, view.GetTaggedValue()); 3354514f5e3Sopenharmony_ci 3364514f5e3Sopenharmony_ci ASSERT_EQ(result.GetRawData(), JSTaggedValue(2147483647).GetRawData()); 3374514f5e3Sopenharmony_ci} 3384514f5e3Sopenharmony_ci 3394514f5e3Sopenharmony_ci// new DataView(new ArrayBuffer(8), 0).SetUint8/GetInt8 3404514f5e3Sopenharmony_ciHWTEST_F_L0(BuiltinsDataViewTest, GetInt8) 3414514f5e3Sopenharmony_ci{ 3424514f5e3Sopenharmony_ci JSTaggedValue tagged = CreateBuiltinsDataView(thread, 8, 0); 3434514f5e3Sopenharmony_ci JSHandle<JSDataView> view(thread, JSDataView::Cast(reinterpret_cast<TaggedObject *>(tagged.GetRawData()))); 3444514f5e3Sopenharmony_ci SetUint8(thread, view, 0, JSTaggedValue(255)); 3454514f5e3Sopenharmony_ci 3464514f5e3Sopenharmony_ci std::vector<JSTaggedValue> vals{JSTaggedValue(0)}; 3474514f5e3Sopenharmony_ci auto result = DataViewAlgorithm(thread, vals, 6, AlgorithmType::GET_INT8, view.GetTaggedValue()); 3484514f5e3Sopenharmony_ci 3494514f5e3Sopenharmony_ci ASSERT_EQ(result.GetRawData(), JSTaggedValue(-1).GetRawData()); 3504514f5e3Sopenharmony_ci} 3514514f5e3Sopenharmony_ci 3524514f5e3Sopenharmony_ci// new DataView(new ArrayBuffer(8), 0).SetUint8/GetUint8 3534514f5e3Sopenharmony_ciHWTEST_F_L0(BuiltinsDataViewTest, GetUint8) 3544514f5e3Sopenharmony_ci{ 3554514f5e3Sopenharmony_ci JSTaggedValue tagged = CreateBuiltinsDataView(thread, 8, 0); 3564514f5e3Sopenharmony_ci JSHandle<JSDataView> view(thread, JSDataView::Cast(reinterpret_cast<TaggedObject *>(tagged.GetRawData()))); 3574514f5e3Sopenharmony_ci SetUint8(thread, view, 0, JSTaggedValue(127)); 3584514f5e3Sopenharmony_ci 3594514f5e3Sopenharmony_ci std::vector<JSTaggedValue> vals{JSTaggedValue(0)}; 3604514f5e3Sopenharmony_ci auto result = DataViewAlgorithm(thread, vals, 6, AlgorithmType::GET_UINT8, view.GetTaggedValue()); 3614514f5e3Sopenharmony_ci ASSERT_EQ(result.GetRawData(), JSTaggedValue(127).GetRawData()); 3624514f5e3Sopenharmony_ci} 3634514f5e3Sopenharmony_ci 3644514f5e3Sopenharmony_ci// new DataView(new ArrayBuffer(8), 4).SetUint8/GetFloat32 3654514f5e3Sopenharmony_ciHWTEST_F_L0(BuiltinsDataViewTest, GetFloat32) 3664514f5e3Sopenharmony_ci{ 3674514f5e3Sopenharmony_ci JSTaggedValue tagged = CreateBuiltinsDataView(thread, 8, 0); 3684514f5e3Sopenharmony_ci JSHandle<JSDataView> view(thread, JSDataView::Cast(reinterpret_cast<TaggedObject *>(tagged.GetRawData()))); 3694514f5e3Sopenharmony_ci SetUint8(thread, view, 4, JSTaggedValue(75)); 3704514f5e3Sopenharmony_ci SetUint8(thread, view, 5, JSTaggedValue(75)); 3714514f5e3Sopenharmony_ci SetUint8(thread, view, 6, JSTaggedValue(75)); 3724514f5e3Sopenharmony_ci SetUint8(thread, view, 7, JSTaggedValue(75)); 3734514f5e3Sopenharmony_ci 3744514f5e3Sopenharmony_ci std::vector<JSTaggedValue> vals{JSTaggedValue(4), JSTaggedValue::False()}; 3754514f5e3Sopenharmony_ci auto result = DataViewAlgorithm(thread, vals, 8, AlgorithmType::GET_FLOAT32, view.GetTaggedValue()); 3764514f5e3Sopenharmony_ci 3774514f5e3Sopenharmony_ci ASSERT_EQ(result.GetRawData(), JSTaggedValue(static_cast<double>(13323083)).GetRawData()); 3784514f5e3Sopenharmony_ci} 3794514f5e3Sopenharmony_ci 3804514f5e3Sopenharmony_ci// new DataView(new ArrayBuffer(12), 4).SetUint8/GetFloat64 3814514f5e3Sopenharmony_ciHWTEST_F_L0(BuiltinsDataViewTest, GetFloat64) 3824514f5e3Sopenharmony_ci{ 3834514f5e3Sopenharmony_ci JSTaggedValue tagged = CreateBuiltinsDataView(thread, 12, 0); 3844514f5e3Sopenharmony_ci JSHandle<JSDataView> view(thread, JSDataView::Cast(reinterpret_cast<TaggedObject *>(tagged.GetRawData()))); 3854514f5e3Sopenharmony_ci SetUint8(thread, view, 4, JSTaggedValue(67)); 3864514f5e3Sopenharmony_ci SetUint8(thread, view, 5, JSTaggedValue(67)); 3874514f5e3Sopenharmony_ci SetUint8(thread, view, 6, JSTaggedValue(68)); 3884514f5e3Sopenharmony_ci SetUint8(thread, view, 7, JSTaggedValue(68)); 3894514f5e3Sopenharmony_ci SetUint8(thread, view, 8, JSTaggedValue(67)); 3904514f5e3Sopenharmony_ci SetUint8(thread, view, 9, JSTaggedValue(67)); 3914514f5e3Sopenharmony_ci SetUint8(thread, view, 10, JSTaggedValue(68)); 3924514f5e3Sopenharmony_ci SetUint8(thread, view, 11, JSTaggedValue(68)); 3934514f5e3Sopenharmony_ci 3944514f5e3Sopenharmony_ci std::vector<JSTaggedValue> vals{JSTaggedValue(4), JSTaggedValue::False()}; 3954514f5e3Sopenharmony_ci auto result = DataViewAlgorithm(thread, vals, 8, AlgorithmType::GET_FLOAT64, view.GetTaggedValue()); 3964514f5e3Sopenharmony_ci ASSERT_EQ(result.GetRawData(), JSTaggedValue(static_cast<double>(10846169068898440)).GetRawData()); 3974514f5e3Sopenharmony_ci} 3984514f5e3Sopenharmony_ci 3994514f5e3Sopenharmony_ci// new DataView(new ArrayBuffer(8), 0).SetUint32/GetUint32 4004514f5e3Sopenharmony_ciHWTEST_F_L0(BuiltinsDataViewTest, SetUint32) 4014514f5e3Sopenharmony_ci{ 4024514f5e3Sopenharmony_ci JSTaggedValue tagged = CreateBuiltinsDataView(thread, 8, 0); 4034514f5e3Sopenharmony_ci JSHandle<JSDataView> view(thread, JSDataView::Cast(reinterpret_cast<TaggedObject *>(tagged.GetRawData()))); 4044514f5e3Sopenharmony_ci 4054514f5e3Sopenharmony_ci std::vector<JSTaggedValue> vals{JSTaggedValue(0), JSTaggedValue(0x907f00f8), JSTaggedValue::True()}; 4064514f5e3Sopenharmony_ci auto result = DataViewAlgorithm(thread, vals, 10, AlgorithmType::SET_UINT32, view.GetTaggedValue()); 4074514f5e3Sopenharmony_ci ASSERT_EQ(result.GetRawData(), JSTaggedValue::VALUE_UNDEFINED); 4084514f5e3Sopenharmony_ci 4094514f5e3Sopenharmony_ci std::vector<JSTaggedValue> vals2{JSTaggedValue(0), JSTaggedValue::False()}; 4104514f5e3Sopenharmony_ci auto result1 = DataViewAlgorithm(thread, vals2, 8, AlgorithmType::GET_UINT32, view.GetTaggedValue()); 4114514f5e3Sopenharmony_ci ASSERT_EQ(result1.GetRawData(), JSTaggedValue(static_cast<double>(0xf8007f90)).GetRawData()); 4124514f5e3Sopenharmony_ci} 4134514f5e3Sopenharmony_ci 4144514f5e3Sopenharmony_ci// new DataView(new ArrayBuffer(8), 0).SetInt32/GetInt32 4154514f5e3Sopenharmony_ciHWTEST_F_L0(BuiltinsDataViewTest, SetInt32) 4164514f5e3Sopenharmony_ci{ 4174514f5e3Sopenharmony_ci JSTaggedValue tagged = CreateBuiltinsDataView(thread, 8, 0); 4184514f5e3Sopenharmony_ci JSHandle<JSDataView> view(thread, JSDataView::Cast(reinterpret_cast<TaggedObject *>(tagged.GetRawData()))); 4194514f5e3Sopenharmony_ci 4204514f5e3Sopenharmony_ci std::vector<JSTaggedValue> vals{JSTaggedValue(0), JSTaggedValue(-1870724872), JSTaggedValue::True()}; 4214514f5e3Sopenharmony_ci auto result = DataViewAlgorithm(thread, vals, 10, AlgorithmType::SET_INT32, view.GetTaggedValue()); 4224514f5e3Sopenharmony_ci ASSERT_EQ(result.GetRawData(), JSTaggedValue::VALUE_UNDEFINED); 4234514f5e3Sopenharmony_ci 4244514f5e3Sopenharmony_ci std::vector<JSTaggedValue> vals2{JSTaggedValue(0), JSTaggedValue::False()}; 4254514f5e3Sopenharmony_ci auto result1 = DataViewAlgorithm(thread, vals2, 8, AlgorithmType::GET_INT32, view.GetTaggedValue()); 4264514f5e3Sopenharmony_ci ASSERT_EQ(result1.GetRawData(), JSTaggedValue(-134185072).GetRawData()); 4274514f5e3Sopenharmony_ci} 4284514f5e3Sopenharmony_ci 4294514f5e3Sopenharmony_ci// new DataView(new ArrayBuffer(8), 0).SetInt8/GetUint8 4304514f5e3Sopenharmony_ciHWTEST_F_L0(BuiltinsDataViewTest, SetInt8) 4314514f5e3Sopenharmony_ci{ 4324514f5e3Sopenharmony_ci JSTaggedValue tagged = CreateBuiltinsDataView(thread, 8, 0); 4334514f5e3Sopenharmony_ci JSHandle<JSDataView> view(thread, JSDataView::Cast(reinterpret_cast<TaggedObject *>(tagged.GetRawData()))); 4344514f5e3Sopenharmony_ci 4354514f5e3Sopenharmony_ci std::vector<JSTaggedValue> vals{JSTaggedValue(0), JSTaggedValue(-1)}; 4364514f5e3Sopenharmony_ci auto result = DataViewAlgorithm(thread, vals, 8, AlgorithmType::SET_INT8, view.GetTaggedValue()); 4374514f5e3Sopenharmony_ci ASSERT_EQ(result.GetRawData(), JSTaggedValue::VALUE_UNDEFINED); 4384514f5e3Sopenharmony_ci 4394514f5e3Sopenharmony_ci std::vector<JSTaggedValue> vals2{JSTaggedValue(0)}; 4404514f5e3Sopenharmony_ci auto result1 = DataViewAlgorithm(thread, vals2, 6, AlgorithmType::GET_UINT8, view.GetTaggedValue()); 4414514f5e3Sopenharmony_ci 4424514f5e3Sopenharmony_ci ASSERT_EQ(result1.GetRawData(), JSTaggedValue(255).GetRawData()); 4434514f5e3Sopenharmony_ci} 4444514f5e3Sopenharmony_ci 4454514f5e3Sopenharmony_ci// new DataView(new ArrayBuffer(4), 0).SetFloat32/GetFloat32 4464514f5e3Sopenharmony_ciHWTEST_F_L0(BuiltinsDataViewTest, SetFloat32) 4474514f5e3Sopenharmony_ci{ 4484514f5e3Sopenharmony_ci JSTaggedValue tagged = CreateBuiltinsDataView(thread, 4, 0); 4494514f5e3Sopenharmony_ci JSHandle<JSDataView> view(thread, JSDataView::Cast(reinterpret_cast<TaggedObject *>(tagged.GetRawData()))); 4504514f5e3Sopenharmony_ci std::vector<JSTaggedValue> vals{JSTaggedValue(0), JSTaggedValue(42), JSTaggedValue::True()}; 4514514f5e3Sopenharmony_ci auto result = DataViewAlgorithm(thread, vals, 10, AlgorithmType::SET_FLOAT32, view.GetTaggedValue()); 4524514f5e3Sopenharmony_ci ASSERT_EQ(result.GetRawData(), JSTaggedValue::VALUE_UNDEFINED); 4534514f5e3Sopenharmony_ci 4544514f5e3Sopenharmony_ci std::vector<JSTaggedValue> vals2{JSTaggedValue(0), JSTaggedValue::False()}; 4554514f5e3Sopenharmony_ci auto result1 = DataViewAlgorithm(thread, vals2, 8, AlgorithmType::GET_FLOAT32, view.GetTaggedValue()); 4564514f5e3Sopenharmony_ci ASSERT_EQ(result1.GetRawData(), JSTaggedValue(static_cast<double>(1.4441781973331565e-41)).GetRawData()); 4574514f5e3Sopenharmony_ci} 4584514f5e3Sopenharmony_ci 4594514f5e3Sopenharmony_ci// new DataView(new ArrayBuffer(8), 0).SetFloat64/GetFloat64 4604514f5e3Sopenharmony_ciHWTEST_F_L0(BuiltinsDataViewTest, SetFloat64) 4614514f5e3Sopenharmony_ci{ 4624514f5e3Sopenharmony_ci JSTaggedValue tagged = CreateBuiltinsDataView(thread, 8, 0); 4634514f5e3Sopenharmony_ci JSHandle<JSDataView> view(thread, JSDataView::Cast(reinterpret_cast<TaggedObject *>(tagged.GetRawData()))); 4644514f5e3Sopenharmony_ci 4654514f5e3Sopenharmony_ci std::vector<JSTaggedValue> vals{JSTaggedValue(0), JSTaggedValue(42), JSTaggedValue::True()}; 4664514f5e3Sopenharmony_ci auto result = DataViewAlgorithm(thread, vals, 10, AlgorithmType::SET_FLOAT64, view.GetTaggedValue()); 4674514f5e3Sopenharmony_ci ASSERT_EQ(result.GetRawData(), JSTaggedValue::VALUE_UNDEFINED); 4684514f5e3Sopenharmony_ci 4694514f5e3Sopenharmony_ci std::vector<JSTaggedValue> vals2{JSTaggedValue(0), JSTaggedValue::False()}; 4704514f5e3Sopenharmony_ci auto result1 = DataViewAlgorithm(thread, vals2, 8, AlgorithmType::GET_FLOAT64, view.GetTaggedValue()); 4714514f5e3Sopenharmony_ci 4724514f5e3Sopenharmony_ci ASSERT_EQ(result1.GetRawData(), JSTaggedValue(static_cast<double>(8.759e-320)).GetRawData()); 4734514f5e3Sopenharmony_ci} 4744514f5e3Sopenharmony_ci 4754514f5e3Sopenharmony_cistatic JSHandle<JSDataView> BigInt64Common(JSThread *thread) 4764514f5e3Sopenharmony_ci{ 4774514f5e3Sopenharmony_ci JSTaggedValue tagged = CreateBuiltinsDataView(thread, 10, 2); 4784514f5e3Sopenharmony_ci JSHandle<JSDataView> view(thread, JSDataView::Cast(reinterpret_cast<TaggedObject *>(tagged.GetRawData()))); 4794514f5e3Sopenharmony_ci JSTaggedValue tagged1 = BuiltTestUtil::CreateBuiltinsArrayBuffer(thread, 10); 4804514f5e3Sopenharmony_ci JSHandle<JSArrayBuffer> arrBuf(thread, JSArrayBuffer::Cast(reinterpret_cast<TaggedObject *>(tagged1.GetRawData()))); 4814514f5e3Sopenharmony_ci arrBuf->SetArrayBufferData(thread, JSTaggedValue::Null()); 4824514f5e3Sopenharmony_ci view->SetViewedArrayBuffer(thread, arrBuf); 4834514f5e3Sopenharmony_ci return view; 4844514f5e3Sopenharmony_ci} 4854514f5e3Sopenharmony_ci 4864514f5e3Sopenharmony_ciHWTEST_F_L0(BuiltinsDataViewTest, GetBigInt64) 4874514f5e3Sopenharmony_ci{ 4884514f5e3Sopenharmony_ci // case: Detached Buffer 4894514f5e3Sopenharmony_ci auto view = BigInt64Common(thread); 4904514f5e3Sopenharmony_ci std::vector<JSTaggedValue> vals{JSTaggedValue(0), JSTaggedValue::False()}; 4914514f5e3Sopenharmony_ci auto result = DataViewAlgorithm(thread, vals, 8, AlgorithmType::GET_BIGINT64, view.GetTaggedValue()); 4924514f5e3Sopenharmony_ci EXPECT_TRUE(thread->HasPendingException()); 4934514f5e3Sopenharmony_ci EXPECT_EQ(result, JSTaggedValue::Exception()); 4944514f5e3Sopenharmony_ci thread->ClearException(); 4954514f5e3Sopenharmony_ci} 4964514f5e3Sopenharmony_ci 4974514f5e3Sopenharmony_ciHWTEST_F_L0(BuiltinsDataViewTest, SetBigInt64) 4984514f5e3Sopenharmony_ci{ 4994514f5e3Sopenharmony_ci auto view = BigInt64Common(thread); 5004514f5e3Sopenharmony_ci std::vector<JSTaggedValue> vals{JSTaggedValue(0), JSTaggedValue(10)}; 5014514f5e3Sopenharmony_ci auto result = DataViewAlgorithm(thread, vals, 8, AlgorithmType::SET_BIGINT64, view.GetTaggedValue()); 5024514f5e3Sopenharmony_ci EXPECT_TRUE(thread->HasPendingException()); 5034514f5e3Sopenharmony_ci EXPECT_EQ(result, JSTaggedValue::Exception()); 5044514f5e3Sopenharmony_ci thread->ClearException(); 5054514f5e3Sopenharmony_ci // case index < 0 is unreachable 5064514f5e3Sopenharmony_ci} 5074514f5e3Sopenharmony_ci} // namespace panda::test 508