• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2023 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 <cstddef>
17 #include <ctime>
18 #include <sys/time.h>
19 
20 #include "gtest/gtest.h"
21 #include "ecmascript/base/string_helper.h"
22 #include "ecmascript/builtins/builtins.h"
23 #include "ecmascript/builtins/builtins_function.h"
24 #include "ecmascript/builtins/builtins_locale.h"
25 #include "ecmascript/builtins/builtins_regexp.h"
26 #include "ecmascript/containers/containers_hashset.h"
27 #include "ecmascript/containers/containers_lightweightmap.h"
28 #include "ecmascript/containers/containers_lightweightset.h"
29 #include "ecmascript/containers/containers_private.h"
30 #include "ecmascript/debugger/hot_reload_manager.h"
31 #include "ecmascript/debugger/js_debugger_manager.h"
32 #include "ecmascript/ecma_global_storage.h"
33 #include "ecmascript/ecma_vm.h"
34 #include "ecmascript/global_env.h"
35 #include "ecmascript/js_api/js_api_arraylist.h"
36 #include "ecmascript/js_api/js_api_deque.h"
37 #include "ecmascript/js_api/js_api_hashmap.h"
38 #include "ecmascript/js_api/js_api_linked_list.h"
39 #include "ecmascript/js_api/js_api_linked_list_iterator.h"
40 #include "ecmascript/js_api/js_api_list.h"
41 #include "ecmascript/js_api/js_api_plain_array.h"
42 #include "ecmascript/js_api/js_api_queue.h"
43 #include "ecmascript/js_api/js_api_stack.h"
44 #include "ecmascript/js_api/js_api_tree_map.h"
45 #include "ecmascript/js_api/js_api_tree_set.h"
46 #include "ecmascript/js_api/js_api_vector.h"
47 #include "ecmascript/js_array.h"
48 #include "ecmascript/js_bigint.h"
49 #include "ecmascript/js_collator.h"
50 #include "ecmascript/js_date.h"
51 #include "ecmascript/js_date_time_format.h"
52 #include "ecmascript/js_generator_object.h"
53 #include "ecmascript/js_iterator.h"
54 #include "ecmascript/js_list_format.h"
55 #include "ecmascript/js_locale.h"
56 #include "ecmascript/js_map.h"
57 #include "ecmascript/js_map_iterator.h"
58 #include "ecmascript/js_number_format.h"
59 #include "ecmascript/jspandafile/js_pandafile_manager.h"
60 #include "ecmascript/js_plural_rules.h"
61 #include "ecmascript/js_primitive_ref.h"
62 #include "ecmascript/js_regexp.h"
63 #include "ecmascript/js_runtime_options.h"
64 #include "ecmascript/js_set.h"
65 #include "ecmascript/js_set_iterator.h"
66 #include "ecmascript/js_string_iterator.h"
67 #include "ecmascript/js_tagged_number.h"
68 #include "ecmascript/js_thread.h"
69 #include "ecmascript/linked_hash_table.h"
70 #include "ecmascript/module/js_module_deregister.h"
71 #include "ecmascript/module/js_module_namespace.h"
72 #include "ecmascript/module/js_module_record.h"
73 #include "ecmascript/module/js_module_source_text.h"
74 #include "ecmascript/napi/include/jsnapi.h"
75 #include "ecmascript/napi/jsnapi_helper.h"
76 #include "ecmascript/object_factory.h"
77 #include "ecmascript/tagged_array.h"
78 #include "ecmascript/tagged_hash_array.h"
79 #include "ecmascript/tagged_list.h"
80 #include "ecmascript/tagged_tree.h"
81 #include "ecmascript/tests/test_helper.h"
82 
83 using namespace panda;
84 using namespace panda::ecmascript;
85 
86 static constexpr int NUM_COUNT = 10000;
87 static constexpr int TIME_UNIT = 1000000;
88 time_t g_timeFor = 0;
89 struct timeval g_beginTime;
90 struct timeval g_endTime;
91 time_t g_time1 = 0;
92 time_t g_time2 = 0;
93 time_t g_time = 0;
94 
95 #define TEST_TIME(NAME)                                                                  \
96     {                                                                                    \
97         g_time1 = (g_beginTime.tv_sec * TIME_UNIT) + (g_beginTime.tv_usec);              \
98         g_time2 = (g_endTime.tv_sec * TIME_UNIT) + (g_endTime.tv_usec);                  \
99         g_time = g_time2 - g_time1;                                                      \
100         GTEST_LOG_(INFO) << "name =" << #NAME << " = Time =" << int(g_time - g_timeFor); \
101     }
102 
103 namespace panda::test {
104 using BuiltinsFunction = ecmascript::builtins::BuiltinsFunction;
105 
FunCallback(JsiRuntimeCallInfo * info)106 Local<JSValueRef> FunCallback(JsiRuntimeCallInfo *info)
107 {
108     EscapeLocalScope scope(info->GetVM());
109     return scope.Escape(ArrayRef::New(info->GetVM(), info->GetArgsNumber()));
110 }
111 
112 class JSNApiSplTest : public testing::Test {
113 public:
SetUpTestCase(void)114     static void SetUpTestCase(void)
115     {
116         GTEST_LOG_(INFO) << "SetUpTestCase";
117     }
118 
TearDownTestCase(void)119     static void TearDownTestCase(void)
120     {
121         GTEST_LOG_(INFO) << "TearDownCase";
122     }
123 
SetUp()124     void SetUp() override
125     {
126         RuntimeOption option;
127         option.SetLogLevel(RuntimeOption::LOG_LEVEL::ERROR);
128         vm_ = JSNApi::CreateJSVM(option);
129         ASSERT_TRUE(vm_ != nullptr) << "Cannot create Runtime";
130         thread_ = vm_->GetJSThread();
131         vm_->SetEnableForceGC(true);
132         GTEST_LOG_(INFO) << "SetUp";
133     }
134 
TearDown()135     void TearDown() override
136     {
137         vm_->SetEnableForceGC(false);
138         JSNApi::DestroyJSVM(vm_);
139         GTEST_LOG_(INFO) << "TearDown";
140     }
141 
142 protected:
143     JSThread *thread_ = nullptr;
144     EcmaVM *vm_ = nullptr;
145 };
146 
147 #ifndef UNUSED
148 #define UNUSED(X) (void)(X)
149 #endif
150 
FreeGlobalCallBack(void * ptr)151 template <typename T> void FreeGlobalCallBack(void *ptr)
152 {
153     T *i = static_cast<T *>(ptr);
154     UNUSED(i);
155 }
NativeFinalizeCallback(void * ptr)156 template <typename T> void NativeFinalizeCallback(void *ptr)
157 {
158     T *i = static_cast<T *>(ptr);
159     delete i;
160 }
161 
CalculateForTime()162 void CalculateForTime()
163 {
164     gettimeofday(&g_beginTime, nullptr);
165     for (int i = 0; i < NUM_COUNT; i++) {
166     }
167     gettimeofday(&g_endTime, nullptr);
168     time_t start = (g_beginTime.tv_sec * TIME_UNIT) + (g_beginTime.tv_usec);
169     time_t end = (g_endTime.tv_sec * TIME_UNIT) + (g_endTime.tv_usec);
170     g_timeFor = end - start;
171     GTEST_LOG_(INFO) << "timefor = " << g_timeFor;
172 }
173 
JSLocaleCreateWithOptionTest(JSThread * thread)174 static JSTaggedValue JSLocaleCreateWithOptionTest(JSThread *thread)
175 {
176     ObjectFactory *factory = thread->GetEcmaVM()->GetFactory();
177     JSHandle<GlobalEnv> env = thread->GetEcmaVM()->GetGlobalEnv();
178     JSHandle<JSFunction> newTarget(env->GetLocaleFunction());
179     JSHandle<JSTaggedValue> objFun = env->GetObjectFunction();
180     JSHandle<JSTaggedValue> languageKey = thread->GlobalConstants()->GetHandledLanguageString();
181     JSHandle<JSTaggedValue> regionKey = thread->GlobalConstants()->GetHandledRegionString();
182     JSHandle<JSTaggedValue> scriptKey = thread->GlobalConstants()->GetHandledScriptString();
183     JSHandle<JSTaggedValue> languageValue(factory->NewFromASCII("en"));
184     JSHandle<JSTaggedValue> regionValue(factory->NewFromASCII("US"));
185     JSHandle<JSTaggedValue> scriptValue(factory->NewFromASCII("Latn"));
186     JSHandle<JSTaggedValue> locale(factory->NewFromASCII("en-Latn-US"));
187     JSHandle<JSObject> optionsObj = factory->NewJSObjectByConstructor(JSHandle<JSFunction>(objFun), objFun);
188     JSObject::SetProperty(thread, optionsObj, languageKey, languageValue);
189     JSObject::SetProperty(thread, optionsObj, regionKey, regionValue);
190     JSObject::SetProperty(thread, optionsObj, scriptKey, scriptValue);
191     auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread, JSTaggedValue(*newTarget), 8);
192     ecmaRuntimeCallInfo->SetFunction(newTarget.GetTaggedValue());
193     ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined());
194     ecmaRuntimeCallInfo->SetCallArg(0, locale.GetTaggedValue());
195     ecmaRuntimeCallInfo->SetCallArg(1, optionsObj.GetTaggedValue());
196     auto prev = TestHelper::SetupFrame(thread, ecmaRuntimeCallInfo);
197     JSTaggedValue result = ecmascript::builtins::BuiltinsLocale::LocaleConstructor(ecmaRuntimeCallInfo);
198     TestHelper::TearDownFrame(thread, prev);
199     return result;
200 }
201 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_False)202 HWTEST_F_L0(JSNApiSplTest, JSValueRef_False)
203 {
204     LocalScope scope(vm_);
205     CalculateForTime();
206     gettimeofday(&g_beginTime, nullptr);
207     for (int i = 0; i < NUM_COUNT; i++) {
208         (void)JSValueRef::False(vm_);
209     }
210     gettimeofday(&g_endTime, nullptr);
211     TEST_TIME(JSValueRef::False);
212 }
213 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_ToObject_NewFromUtf8)214 HWTEST_F_L0(JSNApiSplTest, JSValueRef_ToObject_NewFromUtf8)
215 {
216     LocalScope scope(vm_);
217     CalculateForTime();
218     Local<StringRef> obj(StringRef::NewFromUtf8(vm_, "-123.3"));
219     gettimeofday(&g_beginTime, nullptr);
220     for (int i = 0; i < NUM_COUNT; i++) {
221         (void)obj->ToObject(vm_);
222     }
223     gettimeofday(&g_endTime, nullptr);
224     TEST_TIME(JSValueRef::ToObject);
225 }
226 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_ToObject_NewFromUtf16)227 HWTEST_F_L0(JSNApiSplTest, JSValueRef_ToObject_NewFromUtf16)
228 {
229     LocalScope scope(vm_);
230     CalculateForTime();
231     char16_t data = 0Xdf06;
232     Local<StringRef> obj = StringRef::NewFromUtf16(vm_, &data);
233     gettimeofday(&g_beginTime, nullptr);
234     for (int i = 0; i < NUM_COUNT; i++) {
235         (void)obj->ToObject(vm_);
236     }
237     gettimeofday(&g_endTime, nullptr);
238     TEST_TIME(JSValueRef::ToObject);
239 }
240 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_ToObject_NumberRef)241 HWTEST_F_L0(JSNApiSplTest, JSValueRef_ToObject_NumberRef)
242 {
243     LocalScope scope(vm_);
244     CalculateForTime();
245     double num = 1.236;
246     Local<NumberRef> numberObj(NumberRef::New(vm_, num));
247     gettimeofday(&g_beginTime, nullptr);
248     for (int i = 0; i < NUM_COUNT; i++) {
249         (void)numberObj->ToObject(vm_);
250     }
251     gettimeofday(&g_endTime, nullptr);
252     TEST_TIME(JSValueRef::ToObject);
253 }
254 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_ToObject_Int32_Max)255 HWTEST_F_L0(JSNApiSplTest, JSValueRef_ToObject_Int32_Max)
256 {
257     LocalScope scope(vm_);
258     CalculateForTime();
259     int32_t num = std::numeric_limits<int32_t>::max();
260     Local<NumberRef> obj = NumberRef::New(vm_, num);
261     gettimeofday(&g_beginTime, nullptr);
262     for (int i = 0; i < NUM_COUNT; i++) {
263         (void)obj->ToObject(vm_);
264     }
265     gettimeofday(&g_endTime, nullptr);
266     TEST_TIME(JSValueRef::ToObject);
267 }
268 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_ToObject_Int32_Min)269 HWTEST_F_L0(JSNApiSplTest, JSValueRef_ToObject_Int32_Min)
270 {
271     LocalScope scope(vm_);
272     CalculateForTime();
273     int32_t num = std::numeric_limits<int32_t>::min();
274     Local<NumberRef> obj = NumberRef::New(vm_, num);
275     gettimeofday(&g_beginTime, nullptr);
276     for (int i = 0; i < NUM_COUNT; i++) {
277         (void)obj->ToObject(vm_);
278     }
279     gettimeofday(&g_endTime, nullptr);
280     TEST_TIME(JSValueRef::ToObject);
281 }
282 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_ToObject_Int64_Max)283 HWTEST_F_L0(JSNApiSplTest, JSValueRef_ToObject_Int64_Max)
284 {
285     LocalScope scope(vm_);
286     CalculateForTime();
287     int64_t num = std::numeric_limits<int64_t>::max();
288     Local<NumberRef> obj = NumberRef::New(vm_, num);
289     gettimeofday(&g_beginTime, nullptr);
290     for (int i = 0; i < NUM_COUNT; i++) {
291         (void)obj->ToObject(vm_);
292     }
293     gettimeofday(&g_endTime, nullptr);
294     TEST_TIME(JSValueRef::ToObject);
295 }
296 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_ToObject_BigIntRef)297 HWTEST_F_L0(JSNApiSplTest, JSValueRef_ToObject_BigIntRef)
298 {
299     LocalScope scope(vm_);
300     CalculateForTime();
301     uint64_t num = std::numeric_limits<uint64_t>::max();
302     Local<BigIntRef> bigIntObj = BigIntRef::New(vm_, num);
303     gettimeofday(&g_beginTime, nullptr);
304     for (int i = 0; i < NUM_COUNT; i++) {
305         (void)bigIntObj->ToObject(vm_);
306     }
307     gettimeofday(&g_endTime, nullptr);
308     TEST_TIME(JSValueRef::ToObject);
309 }
310 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_ToObject_SymbolRef)311 HWTEST_F_L0(JSNApiSplTest, JSValueRef_ToObject_SymbolRef)
312 {
313     LocalScope scope(vm_);
314     CalculateForTime();
315     Local<SymbolRef> symbolObj(SymbolRef::New(vm_, StringRef::NewFromUtf8(vm_, "-123.3")));
316     gettimeofday(&g_beginTime, nullptr);
317     for (int i = 0; i < NUM_COUNT; i++) {
318         (void)symbolObj->ToObject(vm_);
319     }
320     gettimeofday(&g_endTime, nullptr);
321     TEST_TIME(JSValueRef::ToObject);
322 }
323 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_IsInt_True)324 HWTEST_F_L0(JSNApiSplTest, JSValueRef_IsInt_True)
325 {
326     LocalScope scope(vm_);
327     CalculateForTime();
328     int32_t num = 10;
329     Local<NumberRef> obj(NumberRef::New(vm_, num));
330     gettimeofday(&g_beginTime, nullptr);
331     for (int i = 0; i < NUM_COUNT; i++) {
332         (void)obj->IsInt();
333     }
334     gettimeofday(&g_endTime, nullptr);
335     TEST_TIME(JSValueRef::IsInt);
336 }
337 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_IsInt_False)338 HWTEST_F_L0(JSNApiSplTest, JSValueRef_IsInt_False)
339 {
340     LocalScope scope(vm_);
341     CalculateForTime();
342     Local<StringRef> obj(StringRef::NewFromUtf8(vm_, "-123.3"));
343     gettimeofday(&g_beginTime, nullptr);
344     for (int i = 0; i < NUM_COUNT; i++) {
345         (void)obj->IsInt();
346     }
347     gettimeofday(&g_endTime, nullptr);
348     TEST_TIME(JSValueRef::IsInt);
349 }
350 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_IsInt_Int64_Max)351 HWTEST_F_L0(JSNApiSplTest, JSValueRef_IsInt_Int64_Max)
352 {
353     LocalScope scope(vm_);
354     CalculateForTime();
355     int64_t num = std::numeric_limits<int64_t>::max();
356     Local<NumberRef> obj = NumberRef::New(vm_, num);
357     gettimeofday(&g_beginTime, nullptr);
358     for (int i = 0; i < NUM_COUNT; i++) {
359         (void)obj->IsInt();
360     }
361     gettimeofday(&g_endTime, nullptr);
362     TEST_TIME(JSValueRef::IsInt);
363 }
364 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_IsInt_Double)365 HWTEST_F_L0(JSNApiSplTest, JSValueRef_IsInt_Double)
366 {
367     LocalScope scope(vm_);
368     CalculateForTime();
369     double num = 1.235;
370     Local<NumberRef> obj = NumberRef::New(vm_, num);
371     gettimeofday(&g_beginTime, nullptr);
372     for (int i = 0; i < NUM_COUNT; i++) {
373         (void)obj->IsInt();
374     }
375     gettimeofday(&g_endTime, nullptr);
376     TEST_TIME(JSValueRef::IsInt);
377 }
378 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_IsFunction_True)379 HWTEST_F_L0(JSNApiSplTest, JSValueRef_IsFunction_True)
380 {
381     LocalScope scope(vm_);
382     CalculateForTime();
383     NativePointerCallback deleter = nullptr;
384     void *cb = reinterpret_cast<void *>(BuiltinsFunction::FunctionPrototypeInvokeSelf);
385     bool callNative = true;
386     size_t nativeBindingSize = 15;
387     Local<FunctionRef> obj(FunctionRef::NewClassFunction(vm_, FunCallback, deleter, cb, callNative, nativeBindingSize));
388     gettimeofday(&g_beginTime, nullptr);
389     for (int i = 0; i < NUM_COUNT; i++) {
390         (void)obj->IsFunction(vm_);
391     }
392     gettimeofday(&g_endTime, nullptr);
393     TEST_TIME(JSValueRef::IsFunction);
394 }
395 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_IsFunction_False)396 HWTEST_F_L0(JSNApiSplTest, JSValueRef_IsFunction_False)
397 {
398     LocalScope scope(vm_);
399     CalculateForTime();
400     double num = 1.235;
401     Local<NumberRef> obj = NumberRef::New(vm_, num);
402     gettimeofday(&g_beginTime, nullptr);
403     for (int i = 0; i < NUM_COUNT; i++) {
404         (void)obj->IsInt();
405     }
406     gettimeofday(&g_endTime, nullptr);
407     TEST_TIME(JSValueRef::IsFunction);
408 }
409 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_IsSet)410 HWTEST_F_L0(JSNApiSplTest, JSValueRef_IsSet)
411 {
412     LocalScope scope(vm_);
413     CalculateForTime();
414     JSThread *thread = vm_->GetJSThread();
415     ObjectFactory *factory = thread->GetEcmaVM()->GetFactory();
416     JSHandle<GlobalEnv> env = thread->GetEcmaVM()->GetGlobalEnv();
417     JSHandle<JSTaggedValue> constructor = env->GetBuiltinsSetFunction();
418     JSHandle<JSSet> set =
419         JSHandle<JSSet>::Cast(factory->NewJSObjectByConstructor(JSHandle<JSFunction>(constructor), constructor));
420     JSHandle<LinkedHashSet> hashSet = LinkedHashSet::Create(thread);
421     set->SetLinkedSet(thread, hashSet);
422     JSHandle<JSTaggedValue> setTag = JSHandle<JSTaggedValue>::Cast(set);
423     gettimeofday(&g_beginTime, nullptr);
424     for (int i = 0; i < NUM_COUNT; i++) {
425         JSNApiHelper::ToLocal<SetRef>(setTag)->IsSet(vm_);
426     }
427     gettimeofday(&g_endTime, nullptr);
428     TEST_TIME(JSValueRef::IsSet);
429 }
430 
HWTEST_F_L0(JSNApiSplTest,BooleanRef_New_True)431 HWTEST_F_L0(JSNApiSplTest, BooleanRef_New_True)
432 {
433     LocalScope scope(vm_);
434     CalculateForTime();
435     int num = -10000;
436     Local<BooleanRef> obj;
437     gettimeofday(&g_beginTime, nullptr);
438     for (int i = 0; i < NUM_COUNT; i++) {
439         obj = BooleanRef::New(vm_, num);
440     }
441     gettimeofday(&g_endTime, nullptr);
442     TEST_TIME(BooleanRef::New);
443 }
444 
HWTEST_F_L0(JSNApiSplTest,BooleanRef_New_False)445 HWTEST_F_L0(JSNApiSplTest, BooleanRef_New_False)
446 {
447     LocalScope scope(vm_);
448     CalculateForTime();
449     Local<BooleanRef> obj;
450     bool flag = false;
451     gettimeofday(&g_beginTime, nullptr);
452     for (int i = 0; i < NUM_COUNT; i++) {
453         obj = BooleanRef::New(vm_, flag);
454     }
455     gettimeofday(&g_endTime, nullptr);
456     TEST_TIME(BooleanRef::New);
457 }
458 
HWTEST_F_L0(JSNApiSplTest,BooleanRef_Value_True)459 HWTEST_F_L0(JSNApiSplTest, BooleanRef_Value_True)
460 {
461     LocalScope scope(vm_);
462     CalculateForTime();
463     int num = -10000;
464     Local<BooleanRef> obj(BooleanRef::New(vm_, num));
465     gettimeofday(&g_beginTime, nullptr);
466     for (int i = 0; i < NUM_COUNT; i++) {
467         (void)obj->Value();
468     }
469     gettimeofday(&g_endTime, nullptr);
470     TEST_TIME(BooleanRef::Value);
471 }
472 
HWTEST_F_L0(JSNApiSplTest,BooleanRef_Value_False)473 HWTEST_F_L0(JSNApiSplTest, BooleanRef_Value_False)
474 {
475     LocalScope scope(vm_);
476     CalculateForTime();
477     Local<BooleanRef> obj = BooleanRef::New(vm_, 0);
478     gettimeofday(&g_beginTime, nullptr);
479     for (int i = 0; i < NUM_COUNT; i++) {
480         (void)obj->Value();
481     }
482     gettimeofday(&g_endTime, nullptr);
483     TEST_TIME(BooleanRef::Value);
484 }
485 
HWTEST_F_L0(JSNApiSplTest,IsGeneratorFunction_True)486 HWTEST_F_L0(JSNApiSplTest, IsGeneratorFunction_True)
487 {
488     ObjectFactory *factory = vm_->GetFactory();
489     auto env = vm_->GetGlobalEnv();
490     JSHandle<JSTaggedValue> genFunc = env->GetGeneratorFunctionFunction();
491     JSHandle<JSGeneratorObject> genObjHandleVal = factory->NewJSGeneratorObject(genFunc);
492     JSHandle<JSHClass> hclass = JSHandle<JSHClass>::Cast(env->GetGeneratorFunctionClass());
493     JSHandle<JSFunction> generatorFunc = JSHandle<JSFunction>::Cast(factory->NewJSObject(hclass));
494     JSFunction::InitializeJSFunction(vm_->GetJSThread(), generatorFunc, FunctionKind::GENERATOR_FUNCTION);
495     JSHandle<GeneratorContext> generatorContext = factory->NewGeneratorContext();
496     generatorContext->SetMethod(vm_->GetJSThread(), generatorFunc.GetTaggedValue());
497     JSHandle<JSTaggedValue> generatorContextVal = JSHandle<JSTaggedValue>::Cast(generatorContext);
498     genObjHandleVal->SetGeneratorContext(vm_->GetJSThread(), generatorContextVal.GetTaggedValue());
499     JSHandle<JSTaggedValue> genObjTagHandleVal = JSHandle<JSTaggedValue>::Cast(genObjHandleVal);
500     Local<GeneratorObjectRef> genObjectRef = JSNApiHelper::ToLocal<GeneratorObjectRef>(genObjTagHandleVal);
501     Local<JSValueRef> genObject = genObjectRef->GetGeneratorFunction(vm_);
502     gettimeofday(&g_beginTime, nullptr);
503     for (int i = 0; i < NUM_COUNT; i++) {
504         genObject->IsGeneratorFunction(vm_);
505     }
506     gettimeofday(&g_endTime, nullptr);
507     TEST_TIME(JSValueRef::IsGeneratorFunction);
508 }
509 
HWTEST_F_L0(JSNApiSplTest,IsGeneratorFunction_False)510 HWTEST_F_L0(JSNApiSplTest, IsGeneratorFunction_False)
511 {
512     LocalScope scope(vm_);
513     CalculateForTime();
514     Local<BooleanRef> obj = BooleanRef::New(vm_, 0);
515     gettimeofday(&g_beginTime, nullptr);
516     for (int i = 0; i < NUM_COUNT; i++) {
517         obj->IsGeneratorFunction(vm_);
518     }
519     gettimeofday(&g_endTime, nullptr);
520     TEST_TIME(JSValueRef::IsGeneratorFunction);
521 }
522 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_IsArrayBuffer)523 HWTEST_F_L0(JSNApiSplTest, JSValueRef_IsArrayBuffer)
524 {
525     static bool isFree = false;
526     struct Data {
527         int32_t length;
528     };
529     const int32_t length = 15;
530     Data *data = new Data();
531     data->length = length;
532     NativePointerCallback deleter = [](void *env, void *buffer, void *data) -> void {
533         delete[] reinterpret_cast<uint8_t *>(buffer);
534         Data *currentData = reinterpret_cast<Data *>(data);
535         delete currentData;
536         isFree = true;
537     };
538     LocalScope scope(vm_);
539     CalculateForTime();
540     uint8_t *buffer = new uint8_t[length]();
541     Local<ArrayBufferRef> arrayBuffer = ArrayBufferRef::New(vm_, buffer, length, deleter, data);
542     gettimeofday(&g_beginTime, nullptr);
543     for (int i = 0; i < NUM_COUNT; i++) {
544         (void)arrayBuffer->IsArrayBuffer(vm_);
545     }
546     gettimeofday(&g_endTime, nullptr);
547     TEST_TIME(JSValueRef::IsArrayBuffer);
548 }
549 
HWTEST_F_L0(JSNApiSplTest,BufferRef_New1)550 HWTEST_F_L0(JSNApiSplTest, BufferRef_New1)
551 {
552     static bool isFree = false;
553     struct Data {
554         int32_t length;
555     };
556     const int32_t length = 15;
557     NativePointerCallback deleter = [](void *env, void *buffer, void *data) -> void {
558         delete[] reinterpret_cast<uint8_t *>(buffer);
559         Data *currentData = reinterpret_cast<Data *>(data);
560         delete currentData;
561         isFree = true;
562     };
563     LocalScope scope(vm_);
564     CalculateForTime();
565     gettimeofday(&g_beginTime, nullptr);
566     for (int i = 0; i < NUM_COUNT; i++) {
567         isFree = false;
568         uint8_t *buffer = new uint8_t[length]();
569         Data *data = new Data();
570         data->length = length;
571         (void)BufferRef::New(vm_, buffer, length, deleter, data);
572     }
573     gettimeofday(&g_endTime, nullptr);
574     TEST_TIME(BufferRef::New);
575 }
576 
HWTEST_F_L0(JSNApiSplTest,BufferRef_New2)577 HWTEST_F_L0(JSNApiSplTest, BufferRef_New2)
578 {
579     LocalScope scope(vm_);
580     CalculateForTime();
581     const int32_t length = 15;
582     gettimeofday(&g_beginTime, nullptr);
583     for (int i = 0; i < NUM_COUNT; i++) {
584         (void)BufferRef::New(vm_, length);
585     }
586     gettimeofday(&g_endTime, nullptr);
587     TEST_TIME(BufferRef::New);
588 }
589 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_IsBuffer)590 HWTEST_F_L0(JSNApiSplTest, JSValueRef_IsBuffer)
591 {
592     LocalScope scope(vm_);
593     CalculateForTime();
594     const int32_t length = 15;
595     Local<BufferRef> bufferRef = BufferRef::New(vm_, length);
596     gettimeofday(&g_beginTime, nullptr);
597     for (int i = 0; i < NUM_COUNT; i++) {
598         (void)bufferRef->IsBuffer(vm_);
599     }
600     gettimeofday(&g_endTime, nullptr);
601     TEST_TIME(JSValueRef::IsBuffer);
602 }
603 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_IsUint32Array)604 HWTEST_F_L0(JSNApiSplTest, JSValueRef_IsUint32Array)
605 {
606     LocalScope scope(vm_);
607     CalculateForTime();
608     const int32_t length = 30;
609     Local<ArrayBufferRef> arrayBuffer = ArrayBufferRef::New(vm_, length);
610     Local<Uint32ArrayRef> typedArray = Uint32ArrayRef::New(vm_, arrayBuffer, 4, 6);
611     gettimeofday(&g_beginTime, nullptr);
612     for (int i = 0; i < NUM_COUNT; i++) {
613         (void)typedArray->IsUint32Array(vm_);
614     }
615     gettimeofday(&g_endTime, nullptr);
616     TEST_TIME(JSValueRef::IsBuIsUint32Arrayffer);
617 }
618 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_IsFloat32Array)619 HWTEST_F_L0(JSNApiSplTest, JSValueRef_IsFloat32Array)
620 {
621     LocalScope scope(vm_);
622     CalculateForTime();
623     const int32_t length = 30;
624     Local<ArrayBufferRef> arrayBuffer = ArrayBufferRef::New(vm_, length);
625     Local<Float32ArrayRef> typedArray = Float32ArrayRef::New(vm_, arrayBuffer, 4, 6);
626     gettimeofday(&g_beginTime, nullptr);
627     for (int i = 0; i < NUM_COUNT; i++) {
628         (void)typedArray->IsFloat32Array(vm_);
629     }
630     gettimeofday(&g_endTime, nullptr);
631     TEST_TIME(JSValueRef::IsFloat32Array);
632 }
633 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_IsFloat64Array)634 HWTEST_F_L0(JSNApiSplTest, JSValueRef_IsFloat64Array)
635 {
636     LocalScope scope(vm_);
637     CalculateForTime();
638     const int32_t length = 30;
639     Local<ArrayBufferRef> arrayBuffer = ArrayBufferRef::New(vm_, length);
640     Local<Float64ArrayRef> floatArray = Float64ArrayRef::New(vm_, arrayBuffer, 4, 6);
641     gettimeofday(&g_beginTime, nullptr);
642     for (int i = 0; i < NUM_COUNT; i++) {
643         (void)floatArray->IsFloat64Array(vm_);
644     }
645     gettimeofday(&g_endTime, nullptr);
646     TEST_TIME(JSValueRef::IsFloat64Array);
647 }
648 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_TypeOf_String)649 HWTEST_F_L0(JSNApiSplTest, JSValueRef_TypeOf_String)
650 {
651     LocalScope scope(vm_);
652     CalculateForTime();
653     Local<StringRef> origin = StringRef::NewFromUtf8(vm_, "1");
654     gettimeofday(&g_beginTime, nullptr);
655     for (int i = 0; i < NUM_COUNT; i++) {
656         (void)origin->Typeof(vm_);
657     }
658     gettimeofday(&g_endTime, nullptr);
659     TEST_TIME(JSValueRef::TypeOf);
660 }
661 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_TypeOf_NumberRef)662 HWTEST_F_L0(JSNApiSplTest, JSValueRef_TypeOf_NumberRef)
663 {
664     LocalScope scope(vm_);
665     CalculateForTime();
666     Local<NumberRef> origin = NumberRef::New(vm_, 1);
667     gettimeofday(&g_beginTime, nullptr);
668     for (int i = 0; i < NUM_COUNT; i++) {
669         (void)origin->Typeof(vm_);
670     }
671     gettimeofday(&g_endTime, nullptr);
672     TEST_TIME(JSValueRef::TypeOf);
673 }
674 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_InstanceOf)675 HWTEST_F_L0(JSNApiSplTest, JSValueRef_InstanceOf)
676 {
677     LocalScope scope(vm_);
678     CalculateForTime();
679     Local<ObjectRef> origin = ObjectRef::New(vm_);
680     JSHandle<GlobalEnv> globalEnv = vm_->GetGlobalEnv();
681     JSHandle<JSFunction> constructor(globalEnv->GetObjectFunction());
682     JSHandle<JSTaggedValue> arryListTag = JSHandle<JSTaggedValue>::Cast(constructor);
683     Local<JSValueRef> value = JSNApiHelper::ToLocal<JSValueRef>(arryListTag);
684     gettimeofday(&g_beginTime, nullptr);
685     for (int i = 0; i < NUM_COUNT; i++) {
686         (void)origin->InstanceOf(vm_, value);
687     }
688     gettimeofday(&g_endTime, nullptr);
689     TEST_TIME(JSValueRef::InstanceOf);
690 }
691 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_IsArrayList)692 HWTEST_F_L0(JSNApiSplTest, JSValueRef_IsArrayList)
693 {
694     LocalScope scope(vm_);
695     CalculateForTime();
696     JSThread *thread = vm_->GetJSThread();
697     auto factory = thread->GetEcmaVM()->GetFactory();
698     auto globalEnv = thread->GetEcmaVM()->GetGlobalEnv();
699     JSHandle<JSTaggedValue> proto = globalEnv->GetFunctionPrototype();
700     JSHandle<JSHClass> arrayListClass = factory->NewEcmaHClass(JSAPIArrayList::SIZE, JSType::JS_API_ARRAY_LIST, proto);
701     JSHandle<JSAPIArrayList> jsArrayList = JSHandle<JSAPIArrayList>::Cast(factory->NewJSObjectWithInit(arrayListClass));
702     jsArrayList->SetLength(thread, JSTaggedValue(0));
703     JSHandle<JSTaggedValue> arryListTag = JSHandle<JSTaggedValue>::Cast(jsArrayList);
704     gettimeofday(&g_beginTime, nullptr);
705     for (int i = 0; i < NUM_COUNT; i++) {
706         JSNApiHelper::ToLocal<JSValueRef>(arryListTag)->IsArrayList(vm_);
707     }
708     gettimeofday(&g_endTime, nullptr);
709     TEST_TIME(JSValueRef::IsArrayList);
710 }
711 
HWTEST_F_L0(JSNApiSplTest,PromiseRef_Catch)712 HWTEST_F_L0(JSNApiSplTest, PromiseRef_Catch)
713 {
714     LocalScope scope(vm_);
715     CalculateForTime();
716     Local<PromiseCapabilityRef> capability = PromiseCapabilityRef::New(vm_);
717     Local<PromiseRef> promise = capability->GetPromise(vm_);
718     Local<FunctionRef> reject = FunctionRef::New(vm_, FunCallback);
719     gettimeofday(&g_beginTime, nullptr);
720     for (int i = 0; i < NUM_COUNT; i++) {
721         (void)promise->Catch(vm_, reject);
722     }
723     gettimeofday(&g_endTime, nullptr);
724     TEST_TIME(PromiseRef::Catch);
725 }
726 
HWTEST_F_L0(JSNApiSplTest,PromiseRef_Finally)727 HWTEST_F_L0(JSNApiSplTest, PromiseRef_Finally)
728 {
729     LocalScope scope(vm_);
730     CalculateForTime();
731     Local<PromiseCapabilityRef> capability = PromiseCapabilityRef::New(vm_);
732     Local<PromiseRef> promise = capability->GetPromise(vm_);
733     Local<FunctionRef> reject = FunctionRef::New(vm_, FunCallback);
734     gettimeofday(&g_beginTime, nullptr);
735     for (int i = 0; i < NUM_COUNT; i++) {
736         (void)promise->Finally(vm_, reject);
737     }
738     gettimeofday(&g_endTime, nullptr);
739     TEST_TIME(PromiseRef::Finally);
740 }
741 
HWTEST_F_L0(JSNApiSplTest,PromiseRef_Then)742 HWTEST_F_L0(JSNApiSplTest, PromiseRef_Then)
743 {
744     LocalScope scope(vm_);
745     CalculateForTime();
746     Local<PromiseCapabilityRef> capability = PromiseCapabilityRef::New(vm_);
747     Local<PromiseRef> promise = capability->GetPromise(vm_);
748     Local<FunctionRef> callback = FunctionRef::New(vm_, FunCallback);
749     gettimeofday(&g_beginTime, nullptr);
750     for (int i = 0; i < NUM_COUNT; i++) {
751         (void)promise->Then(vm_, callback);
752     }
753     gettimeofday(&g_endTime, nullptr);
754     TEST_TIME(PromiseRef::Then);
755 }
756 
HWTEST_F_L0(JSNApiSplTest,PromiseRef_Then1)757 HWTEST_F_L0(JSNApiSplTest, PromiseRef_Then1)
758 {
759     LocalScope scope(vm_);
760     CalculateForTime();
761     Local<PromiseCapabilityRef> capability = PromiseCapabilityRef::New(vm_);
762     Local<PromiseRef> promise = capability->GetPromise(vm_);
763     Local<FunctionRef> callback = FunctionRef::New(vm_, FunCallback);
764     gettimeofday(&g_beginTime, nullptr);
765     for (int i = 0; i < NUM_COUNT; i++) {
766         (void)promise->Then(vm_, callback, callback);
767     }
768     gettimeofday(&g_endTime, nullptr);
769     TEST_TIME(PromiseRef::Then);
770 }
771 
HWTEST_F_L0(JSNApiSplTest,PromiseCapabilityRef_New)772 HWTEST_F_L0(JSNApiSplTest, PromiseCapabilityRef_New)
773 {
774     LocalScope scope(vm_);
775     CalculateForTime();
776     gettimeofday(&g_beginTime, nullptr);
777     for (int i = 0; i < NUM_COUNT; i++) {
778         (void)PromiseCapabilityRef::New(vm_);
779     }
780     gettimeofday(&g_endTime, nullptr);
781     TEST_TIME(PromiseCapabilityRef::New);
782 }
783 
HWTEST_F_L0(JSNApiSplTest,PromiseCapabilityRef_GetPromise)784 HWTEST_F_L0(JSNApiSplTest, PromiseCapabilityRef_GetPromise)
785 {
786     LocalScope scope(vm_);
787     CalculateForTime();
788     Local<PromiseCapabilityRef> capability = PromiseCapabilityRef::New(vm_);
789     gettimeofday(&g_beginTime, nullptr);
790     for (int i = 0; i < NUM_COUNT; i++) {
791         (void)capability->GetPromise(vm_);
792     }
793     gettimeofday(&g_endTime, nullptr);
794     TEST_TIME(PromiseCapabilityRef::GetPromise);
795 }
796 
HWTEST_F_L0(JSNApiSplTest,PromiseCapabilityRef_Resolve)797 HWTEST_F_L0(JSNApiSplTest, PromiseCapabilityRef_Resolve)
798 {
799     LocalScope scope(vm_);
800     CalculateForTime();
801     Local<PromiseCapabilityRef> capability = PromiseCapabilityRef::New(vm_);
802     Local<PromiseRef> promise = capability->GetPromise(vm_);
803     Local<FunctionRef> resolve = FunctionRef::New(vm_, FunCallback);
804     Local<FunctionRef> reject = FunctionRef::New(vm_, FunCallback);
805     promise->Then(vm_, resolve, reject);
806     Local<StringRef> value = NumberRef::New(vm_, 300.3);
807     gettimeofday(&g_beginTime, nullptr);
808     for (int i = 0; i < NUM_COUNT; i++) {
809         (void)capability->Resolve(vm_, value);
810     }
811     gettimeofday(&g_endTime, nullptr);
812     TEST_TIME(PromiseCapabilityRef::Resolve);
813 }
814 
HWTEST_F_L0(JSNApiSplTest,PromiseCapabilityRef_Reject)815 HWTEST_F_L0(JSNApiSplTest, PromiseCapabilityRef_Reject)
816 {
817     LocalScope scope(vm_);
818     CalculateForTime();
819     Local<PromiseCapabilityRef> capability = PromiseCapabilityRef::New(vm_);
820     Local<PromiseRef> promise = capability->GetPromise(vm_);
821     Local<FunctionRef> resolve = FunctionRef::New(vm_, FunCallback);
822     Local<FunctionRef> reject = FunctionRef::New(vm_, FunCallback);
823     promise->Then(vm_, resolve, reject);
824     Local<StringRef> value = NumberRef::New(vm_, 300.3);
825     gettimeofday(&g_beginTime, nullptr);
826     for (int i = 0; i < NUM_COUNT; i++) {
827         (void)capability->Reject(vm_, value);
828     }
829     gettimeofday(&g_endTime, nullptr);
830     TEST_TIME(PromiseCapabilityRef::Reject);
831 }
832 
HWTEST_F_L0(JSNApiSplTest,ArrayBufferRef_New)833 HWTEST_F_L0(JSNApiSplTest, ArrayBufferRef_New)
834 {
835     LocalScope scope(vm_);
836     CalculateForTime();
837     const int32_t length = 30;
838     gettimeofday(&g_beginTime, nullptr);
839     for (int i = 0; i < NUM_COUNT; i++) {
840         (void)ArrayBufferRef::New(vm_, length);
841     }
842     gettimeofday(&g_endTime, nullptr);
843     TEST_TIME(ArrayBufferRef::New);
844 }
845 
HWTEST_F_L0(JSNApiSplTest,ArrayBufferRef_New1)846 HWTEST_F_L0(JSNApiSplTest, ArrayBufferRef_New1)
847 {
848     static bool isFree = false;
849     struct Data {
850         int32_t length;
851     };
852     const int32_t length = 15;
853     NativePointerCallback deleter = [](void *env, void *buffer, void *data) -> void {
854         delete[] reinterpret_cast<uint8_t *>(buffer);
855         Data *currentData = reinterpret_cast<Data *>(data);
856         delete currentData;
857         isFree = true;
858     };
859     LocalScope scope(vm_);
860     CalculateForTime();
861     gettimeofday(&g_beginTime, nullptr);
862     for (int i = 0; i < NUM_COUNT; i++) {
863         isFree = false;
864         uint8_t *buffer = new uint8_t[length]();
865         Data *data = new Data();
866         data->length = length;
867         (void)ArrayBufferRef::New(vm_, buffer, length, deleter, data);
868     }
869     gettimeofday(&g_endTime, nullptr);
870     TEST_TIME(ArrayBufferRef::New);
871 }
872 
HWTEST_F_L0(JSNApiSplTest,ArrayBufferRef_ByteLength)873 HWTEST_F_L0(JSNApiSplTest, ArrayBufferRef_ByteLength)
874 {
875     LocalScope scope(vm_);
876     CalculateForTime();
877     const int32_t length = 30;
878     Local<ArrayBufferRef> arrayBuffer = ArrayBufferRef::New(vm_, length);
879     gettimeofday(&g_beginTime, nullptr);
880     for (int i = 0; i < NUM_COUNT; i++) {
881         (void)arrayBuffer->ByteLength(vm_);
882     }
883     gettimeofday(&g_endTime, nullptr);
884     TEST_TIME(ArrayBufferRef::ByteLength);
885 }
886 
HWTEST_F_L0(JSNApiSplTest,ArrayBufferRef_Detach)887 HWTEST_F_L0(JSNApiSplTest, ArrayBufferRef_Detach)
888 {
889     LocalScope scope(vm_);
890     CalculateForTime();
891     const int32_t length = 30;
892     Local<ArrayBufferRef> arrayBuffer = ArrayBufferRef::New(vm_, length);
893     gettimeofday(&g_beginTime, nullptr);
894     for (int i = 0; i < NUM_COUNT; i++) {
895         (void)arrayBuffer->Detach(vm_);
896     }
897     gettimeofday(&g_endTime, nullptr);
898     TEST_TIME(ArrayBufferRef::Detach);
899 }
900 
HWTEST_F_L0(JSNApiSplTest,ArrayBufferRef_IsDetach)901 HWTEST_F_L0(JSNApiSplTest, ArrayBufferRef_IsDetach)
902 {
903     LocalScope scope(vm_);
904     CalculateForTime();
905     const int32_t length = 30;
906     Local<ArrayBufferRef> arrayBuffer = ArrayBufferRef::New(vm_, length);
907     arrayBuffer->Detach(vm_);
908     gettimeofday(&g_beginTime, nullptr);
909     for (int i = 0; i < NUM_COUNT; i++) {
910         (void)arrayBuffer->IsDetach(vm_);
911     }
912     gettimeofday(&g_endTime, nullptr);
913     TEST_TIME(ArrayBufferRef::IsDetach);
914 }
915 
HWTEST_F_L0(JSNApiSplTest,BufferRef_ByteLength)916 HWTEST_F_L0(JSNApiSplTest, BufferRef_ByteLength)
917 {
918     LocalScope scope(vm_);
919     CalculateForTime();
920     const int32_t length = 30;
921     Local<BufferRef> obj = BufferRef::New(vm_, length);
922     gettimeofday(&g_beginTime, nullptr);
923     for (int i = 0; i < NUM_COUNT; i++) {
924         obj->ByteLength(vm_);
925     }
926     gettimeofday(&g_endTime, nullptr);
927     TEST_TIME(ArrayBufferRef::ByteLength);
928 }
929 
HWTEST_F_L0(JSNApiSplTest,BufferRef_BufferRef)930 HWTEST_F_L0(JSNApiSplTest, BufferRef_BufferRef)
931 {
932     LocalScope scope(vm_);
933     CalculateForTime();
934     const int32_t length = 30;
935     Local<BufferRef> obj = BufferRef::New(vm_, length);
936     gettimeofday(&g_beginTime, nullptr);
937     for (int i = 0; i < NUM_COUNT; i++) {
938         (void)obj->GetBuffer(vm_);
939     }
940     gettimeofday(&g_endTime, nullptr);
941     TEST_TIME(BufferRef::BufferRef);
942 }
943 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_IsArgumentsObject)944 HWTEST_F_L0(JSNApiSplTest, JSValueRef_IsArgumentsObject)
945 {
946     LocalScope scope(vm_);
947     CalculateForTime();
948     ObjectFactory *factory = vm_->GetFactory();
949     JSHandle<JSArguments> obj = factory->NewJSArguments();
950     JSHandle<JSTaggedValue> argumentTag = JSHandle<JSTaggedValue>::Cast(obj);
951     gettimeofday(&g_beginTime, nullptr);
952     for (int i = 0; i < NUM_COUNT; i++) {
953         JSNApiHelper::ToLocal<ObjectRef>(argumentTag)->IsArgumentsObject(vm_);
954     }
955     gettimeofday(&g_endTime, nullptr);
956     TEST_TIME(JSValueRef::IsArgumentsObject);
957 }
958 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_IsAsyncFunction)959 HWTEST_F_L0(JSNApiSplTest, JSValueRef_IsAsyncFunction)
960 {
961     ObjectFactory *factory = vm_->GetFactory();
962     JSHandle<JSAsyncFuncObject> asyncFuncObj = factory->NewJSAsyncFuncObject();
963     JSHandle<JSTaggedValue> argumentTag = JSHandle<JSTaggedValue>::Cast(asyncFuncObj);
964     gettimeofday(&g_beginTime, nullptr);
965     for (int i = 0; i < NUM_COUNT; i++) {
966         JSNApiHelper::ToLocal<ObjectRef>(argumentTag)->IsAsyncFunction(vm_);
967     }
968     gettimeofday(&g_endTime, nullptr);
969     TEST_TIME(JSValueRef::IsAsyncFunction);
970 }
971 
972 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_IsJSLocale)973 HWTEST_F_L0(JSNApiSplTest, JSValueRef_IsJSLocale)
974 {
975     JSThread *thread = vm_->GetJSThread();
976     JSHandle<JSLocale> jsLocale = JSHandle<JSLocale>(thread, JSLocaleCreateWithOptionTest(thread));
977     JSHandle<JSTaggedValue> argumentTag = JSHandle<JSTaggedValue>::Cast(jsLocale);
978     gettimeofday(&g_beginTime, nullptr);
979     for (int i = 0; i < NUM_COUNT; i++) {
980         JSNApiHelper::ToLocal<ObjectRef>(argumentTag)->IsJSLocale(vm_);
981     }
982     gettimeofday(&g_endTime, nullptr);
983     TEST_TIME(JSValueRef::IsJSLocale);
984 }
985 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_IsDeque)986 HWTEST_F_L0(JSNApiSplTest, JSValueRef_IsDeque)
987 {
988     LocalScope scope(vm_);
989     CalculateForTime();
990     ObjectFactory *factory = vm_->GetFactory();
991     JSThread *thread = vm_->GetJSThread();
992     JSHandle<JSTaggedValue> proto = thread->GetEcmaVM()->GetGlobalEnv()->GetFunctionPrototype();
993     JSHandle<JSHClass> queueClass = factory->NewEcmaHClass(JSAPIDeque::SIZE, JSType::JS_API_DEQUE, proto);
994     JSHandle<JSAPIQueue> jsQueue = JSHandle<JSAPIQueue>::Cast(factory->NewJSObjectWithInit(queueClass));
995     JSHandle<TaggedArray> newElements = factory->NewTaggedArray(JSAPIDeque::DEFAULT_CAPACITY_LENGTH);
996     jsQueue->SetLength(thread, JSTaggedValue(0));
997     jsQueue->SetFront(0);
998     jsQueue->SetTail(0);
999     jsQueue->SetElements(thread, newElements);
1000     JSHandle<JSTaggedValue> deQue = JSHandle<JSTaggedValue>::Cast(jsQueue);
1001     gettimeofday(&g_beginTime, nullptr);
1002     for (int i = 0; i < NUM_COUNT; i++) {
1003         (void)JSNApiHelper::ToLocal<JSValueRef>(deQue)->IsDeque(vm_);
1004     }
1005     gettimeofday(&g_endTime, nullptr);
1006     TEST_TIME(JSValueRef::IsDeque);
1007 }
1008 
HWTEST_F_L0(JSNApiSplTest,DataView_New)1009 HWTEST_F_L0(JSNApiSplTest, DataView_New)
1010 {
1011     LocalScope scope(vm_);
1012     CalculateForTime();
1013     const int32_t length = 15;
1014     Local<ArrayBufferRef> arrayBuffer = ArrayBufferRef::New(vm_, length);
1015     gettimeofday(&g_beginTime, nullptr);
1016     for (int i = 0; i < NUM_COUNT; i++) {
1017         (void)DataViewRef::New(vm_, arrayBuffer, 5, 7);
1018     }
1019     gettimeofday(&g_endTime, nullptr);
1020     TEST_TIME(DataView::New);
1021 }
1022 
HWTEST_F_L0(JSNApiSplTest,DataView_ByteLength)1023 HWTEST_F_L0(JSNApiSplTest, DataView_ByteLength)
1024 {
1025     LocalScope scope(vm_);
1026     CalculateForTime();
1027     const int32_t length = 15;
1028     Local<ArrayBufferRef> arrayBuffer = ArrayBufferRef::New(vm_, length);
1029     Local<DataViewRef> dataView = DataViewRef::New(vm_, arrayBuffer, 5, 7);
1030     gettimeofday(&g_beginTime, nullptr);
1031     for (int i = 0; i < NUM_COUNT; i++) {
1032         (void)dataView->ByteLength();
1033     }
1034     gettimeofday(&g_endTime, nullptr);
1035     TEST_TIME(DataView::ByteLength);
1036 }
1037 
HWTEST_F_L0(JSNApiSplTest,DataView_ByteOffset)1038 HWTEST_F_L0(JSNApiSplTest, DataView_ByteOffset)
1039 {
1040     LocalScope scope(vm_);
1041     CalculateForTime();
1042     const int32_t length = 15;
1043     Local<ArrayBufferRef> arrayBuffer = ArrayBufferRef::New(vm_, length);
1044     Local<DataViewRef> dataView = DataViewRef::New(vm_, arrayBuffer, 5, 7);
1045     gettimeofday(&g_beginTime, nullptr);
1046     for (int i = 0; i < NUM_COUNT; i++) {
1047         (void)dataView->ByteOffset();
1048     }
1049     gettimeofday(&g_endTime, nullptr);
1050     TEST_TIME(DataView::ByteOffset);
1051 }
1052 
HWTEST_F_L0(JSNApiSplTest,DataView_GetArrayBuffer)1053 HWTEST_F_L0(JSNApiSplTest, DataView_GetArrayBuffer)
1054 {
1055     LocalScope scope(vm_);
1056     CalculateForTime();
1057     const int32_t length = 15;
1058     Local<ArrayBufferRef> arrayBuffer = ArrayBufferRef::New(vm_, length);
1059     Local<DataViewRef> dataView = DataViewRef::New(vm_, arrayBuffer, 5, 7);
1060     gettimeofday(&g_beginTime, nullptr);
1061     for (int i = 0; i < NUM_COUNT; i++) {
1062         (void)dataView->GetArrayBuffer(vm_);
1063     }
1064     gettimeofday(&g_endTime, nullptr);
1065     TEST_TIME(DataView::GetArrayBuffer);
1066 }
1067 
HWTEST_F_L0(JSNApiSplTest,TypedArrayRef_ByteLength)1068 HWTEST_F_L0(JSNApiSplTest, TypedArrayRef_ByteLength)
1069 {
1070     LocalScope scope(vm_);
1071     CalculateForTime();
1072     const int32_t length = 15;
1073     Local<ArrayBufferRef> arrayBuffer = ArrayBufferRef::New(vm_, length);
1074     Local<Int8ArrayRef> obj = Int8ArrayRef::New(vm_, arrayBuffer, 5, 6);
1075     gettimeofday(&g_beginTime, nullptr);
1076     for (int i = 0; i < NUM_COUNT; i++) {
1077         (void)obj->ByteLength(vm_);
1078     }
1079     gettimeofday(&g_endTime, nullptr);
1080     TEST_TIME(TypedArrayRef::ByteLength);
1081 }
1082 
HWTEST_F_L0(JSNApiSplTest,TypedArrayRef_ByteOffset)1083 HWTEST_F_L0(JSNApiSplTest, TypedArrayRef_ByteOffset)
1084 {
1085     LocalScope scope(vm_);
1086     CalculateForTime();
1087     const int32_t length = 15;
1088     Local<ArrayBufferRef> arrayBuffer = ArrayBufferRef::New(vm_, length);
1089     Local<Int8ArrayRef> obj = Int8ArrayRef::New(vm_, arrayBuffer, 5, 6);
1090     gettimeofday(&g_beginTime, nullptr);
1091     for (int i = 0; i < NUM_COUNT; i++) {
1092         (void)obj->ByteOffset(vm_);
1093     }
1094     gettimeofday(&g_endTime, nullptr);
1095     TEST_TIME(TypedArrayRef::ByteOffset);
1096 }
1097 
HWTEST_F_L0(JSNApiSplTest,TypedArrayRef_ArrayLength)1098 HWTEST_F_L0(JSNApiSplTest, TypedArrayRef_ArrayLength)
1099 {
1100     LocalScope scope(vm_);
1101     CalculateForTime();
1102     const int32_t length = 15;
1103     Local<ArrayBufferRef> arrayBuffer = ArrayBufferRef::New(vm_, length);
1104     Local<Int8ArrayRef> obj = Int8ArrayRef::New(vm_, arrayBuffer, 5, 6);
1105     gettimeofday(&g_beginTime, nullptr);
1106     for (int i = 0; i < NUM_COUNT; i++) {
1107         (void)obj->ArrayLength(vm_);
1108     }
1109     gettimeofday(&g_endTime, nullptr);
1110     TEST_TIME(TypedArrayRef::ArrayLength);
1111 }
1112 
HWTEST_F_L0(JSNApiSplTest,TypedArrayRef_GetArrayBuffer)1113 HWTEST_F_L0(JSNApiSplTest, TypedArrayRef_GetArrayBuffer)
1114 {
1115     LocalScope scope(vm_);
1116     CalculateForTime();
1117     const int32_t length = 15;
1118     Local<ArrayBufferRef> arrayBuffer = ArrayBufferRef::New(vm_, length);
1119     Local<Int8ArrayRef> obj = Int8ArrayRef::New(vm_, arrayBuffer, 5, 6);
1120     gettimeofday(&g_beginTime, nullptr);
1121     for (int i = 0; i < NUM_COUNT; i++) {
1122         (void)obj->GetArrayBuffer(vm_);
1123     }
1124     gettimeofday(&g_endTime, nullptr);
1125     TEST_TIME(TypedArrayRef::GetArrayBuffer);
1126 }
1127 
HWTEST_F_L0(JSNApiSplTest,Int8ArrayRef_New)1128 HWTEST_F_L0(JSNApiSplTest, Int8ArrayRef_New)
1129 {
1130     LocalScope scope(vm_);
1131     CalculateForTime();
1132     const int32_t length = 15;
1133     Local<ArrayBufferRef> arrayBuffer = ArrayBufferRef::New(vm_, length);
1134     gettimeofday(&g_beginTime, nullptr);
1135     for (int i = 0; i < NUM_COUNT; i++) {
1136         (void)Int8ArrayRef::New(vm_, arrayBuffer, 5, 6);
1137     }
1138     gettimeofday(&g_endTime, nullptr);
1139     TEST_TIME(Int8ArrayRef::New);
1140 }
1141 
HWTEST_F_L0(JSNApiSplTest,Uint8ArrayRef_New)1142 HWTEST_F_L0(JSNApiSplTest, Uint8ArrayRef_New)
1143 {
1144     LocalScope scope(vm_);
1145     CalculateForTime();
1146     const int32_t length = 15;
1147     Local<ArrayBufferRef> arrayBuffer = ArrayBufferRef::New(vm_, length);
1148     gettimeofday(&g_beginTime, nullptr);
1149     for (int i = 0; i < NUM_COUNT; i++) {
1150         (void)Uint8ArrayRef::New(vm_, arrayBuffer, 5, 6);
1151     }
1152     gettimeofday(&g_endTime, nullptr);
1153     TEST_TIME(Uint8ArrayRef::New);
1154 }
1155 
HWTEST_F_L0(JSNApiSplTest,Uint8ClampedArrayRef_New)1156 HWTEST_F_L0(JSNApiSplTest, Uint8ClampedArrayRef_New)
1157 {
1158     LocalScope scope(vm_);
1159     CalculateForTime();
1160     const int32_t length = 15;
1161     Local<ArrayBufferRef> arrayBuffer = ArrayBufferRef::New(vm_, length);
1162     gettimeofday(&g_beginTime, nullptr);
1163     for (int i = 0; i < NUM_COUNT; i++) {
1164         (void)Uint8ClampedArrayRef::New(vm_, arrayBuffer, 5, 6);
1165     }
1166     gettimeofday(&g_endTime, nullptr);
1167     TEST_TIME(Uint8ClampedArrayRef::New);
1168 }
1169 
HWTEST_F_L0(JSNApiSplTest,Int16ArrayRef_New)1170 HWTEST_F_L0(JSNApiSplTest, Int16ArrayRef_New)
1171 {
1172     LocalScope scope(vm_);
1173     CalculateForTime();
1174     const int32_t length = 15;
1175     Local<ArrayBufferRef> arrayBuffer = ArrayBufferRef::New(vm_, length);
1176     gettimeofday(&g_beginTime, nullptr);
1177     for (int i = 0; i < NUM_COUNT; i++) {
1178         (void)Int16ArrayRef::New(vm_, arrayBuffer, 5, 6);
1179     }
1180     gettimeofday(&g_endTime, nullptr);
1181     TEST_TIME(Int16ArrayRef::New);
1182 }
1183 
HWTEST_F_L0(JSNApiSplTest,Uint16ArrayRef_New)1184 HWTEST_F_L0(JSNApiSplTest, Uint16ArrayRef_New)
1185 {
1186     LocalScope scope(vm_);
1187     CalculateForTime();
1188     const int32_t length = 15;
1189     Local<ArrayBufferRef> arrayBuffer = ArrayBufferRef::New(vm_, length);
1190     gettimeofday(&g_beginTime, nullptr);
1191     for (int i = 0; i < NUM_COUNT; i++) {
1192         (void)Uint16ArrayRef::New(vm_, arrayBuffer, 5, 6);
1193     }
1194     gettimeofday(&g_endTime, nullptr);
1195     TEST_TIME(Uint16ArrayRef::New);
1196 }
1197 
HWTEST_F_L0(JSNApiSplTest,Int32ArrayRef_New)1198 HWTEST_F_L0(JSNApiSplTest, Int32ArrayRef_New)
1199 {
1200     LocalScope scope(vm_);
1201     CalculateForTime();
1202     const int32_t length = 15;
1203     Local<ArrayBufferRef> arrayBuffer = ArrayBufferRef::New(vm_, length);
1204     gettimeofday(&g_beginTime, nullptr);
1205     for (int i = 0; i < NUM_COUNT; i++) {
1206         (void)Int32ArrayRef::New(vm_, arrayBuffer, 5, 6);
1207     }
1208     gettimeofday(&g_endTime, nullptr);
1209     TEST_TIME(Int32ArrayRef::New);
1210 }
1211 
HWTEST_F_L0(JSNApiSplTest,Uint32ArrayRef_New)1212 HWTEST_F_L0(JSNApiSplTest, Uint32ArrayRef_New)
1213 {
1214     LocalScope scope(vm_);
1215     CalculateForTime();
1216     const int32_t length = 15;
1217     Local<ArrayBufferRef> arrayBuffer = ArrayBufferRef::New(vm_, length);
1218     gettimeofday(&g_beginTime, nullptr);
1219     for (int i = 0; i < NUM_COUNT; i++) {
1220         (void)Uint32ArrayRef::New(vm_, arrayBuffer, 5, 6);
1221     }
1222     gettimeofday(&g_endTime, nullptr);
1223     TEST_TIME(Uint32ArrayRef::New);
1224 }
1225 
HWTEST_F_L0(JSNApiSplTest,BufferRef_BufferToStringCallback)1226 HWTEST_F_L0(JSNApiSplTest, BufferRef_BufferToStringCallback)
1227 {
1228     LocalScope scope(vm_);
1229     CalculateForTime();
1230     JSThread *thread = vm_->GetJSThread();
1231     ObjectFactory *factory = thread->GetEcmaVM()->GetFactory();
1232     JSHandle<JSTaggedValue> undefined = thread->GlobalConstants()->GetHandledUndefined();
1233     JSHandle<JSArrayBuffer> arrayBuffer = factory->NewJSArrayBuffer(10);
1234     JSHandle<JSTaggedValue> arryListTag = JSHandle<JSTaggedValue>::Cast(arrayBuffer);
1235     EcmaRuntimeCallInfo *objCallInfo =
1236         EcmaInterpreter::NewRuntimeCallInfo(thread, undefined, arryListTag, undefined, 1);
1237     gettimeofday(&g_beginTime, nullptr);
1238     for (int i = 0; i < NUM_COUNT; i++) {
1239         BufferRef::BufferToStringCallback(objCallInfo);
1240     }
1241     gettimeofday(&g_endTime, nullptr);
1242     TEST_TIME(BufferRef::BufferToStringCallback);
1243 }
1244 
ConstructobjectHashMap(const EcmaVM * vm_)1245 JSHandle<JSAPIHashMap> ConstructobjectHashMap(const EcmaVM *vm_)
1246 {
1247     JSThread *thread = vm_->GetJSThread();
1248     ObjectFactory *factory = thread->GetEcmaVM()->GetFactory();
1249     JSHandle<GlobalEnv> env = thread->GetEcmaVM()->GetGlobalEnv();
1250     JSHandle<JSTaggedValue> globalObject = env->GetJSGlobalObject();
1251     JSHandle<JSTaggedValue> key(factory->NewFromASCII("ArkPrivate"));
1252     JSHandle<JSTaggedValue> value =
1253         JSObject::GetProperty(thread, JSHandle<JSTaggedValue>(globalObject), key).GetValue();
1254     auto objCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread, JSTaggedValue::Undefined(), 6);
1255     objCallInfo->SetFunction(JSTaggedValue::Undefined());
1256     objCallInfo->SetThis(value.GetTaggedValue());
1257     objCallInfo->SetCallArg(0, JSTaggedValue(static_cast<int>(containers::ContainerTag::HashMap)));
1258     [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread, objCallInfo);
1259     JSTaggedValue result = containers::ContainersPrivate::Load(objCallInfo);
1260     TestHelper::TearDownFrame(thread, prev);
1261     JSHandle<JSTaggedValue> constructor(thread, result);
1262     JSHandle<JSAPIHashMap> map(factory->NewJSObjectByConstructor(JSHandle<JSFunction>(constructor), constructor));
1263     return map;
1264 }
1265 
ConstructobjectHashSet(const EcmaVM * vm_)1266 JSHandle<JSAPIHashSet> ConstructobjectHashSet(const EcmaVM *vm_)
1267 {
1268     JSThread *thread = vm_->GetJSThread();
1269     ObjectFactory *factory = thread->GetEcmaVM()->GetFactory();
1270     JSHandle<GlobalEnv> env = thread->GetEcmaVM()->GetGlobalEnv();
1271     JSHandle<JSTaggedValue> globalObject = env->GetJSGlobalObject();
1272     JSHandle<JSTaggedValue> key(factory->NewFromASCII("ArkPrivate"));
1273     JSHandle<JSTaggedValue> value =
1274         JSObject::GetProperty(thread, JSHandle<JSTaggedValue>(globalObject), key).GetValue();
1275     auto objCallInfo1 = TestHelper::CreateEcmaRuntimeCallInfo(thread, JSTaggedValue::Undefined(), 6);
1276     objCallInfo1->SetFunction(JSTaggedValue::Undefined());
1277     objCallInfo1->SetThis(value.GetTaggedValue());
1278     objCallInfo1->SetCallArg(0, JSTaggedValue(static_cast<int>(containers::ContainerTag::HashSet)));
1279     [[maybe_unused]] auto prev1 = TestHelper::SetupFrame(thread, objCallInfo1);
1280     JSTaggedValue result1 = containers::ContainersPrivate::Load(objCallInfo1);
1281     JSHandle<JSFunction> newTarget(thread, result1);
1282     auto objCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread, JSTaggedValue::Undefined(), 4);
1283     objCallInfo->SetFunction(newTarget.GetTaggedValue());
1284     objCallInfo->SetNewTarget(newTarget.GetTaggedValue());
1285     objCallInfo->SetThis(JSTaggedValue::Undefined());
1286     [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread, objCallInfo);
1287     JSTaggedValue result = ecmascript::containers::ContainersHashSet::HashSetConstructor(objCallInfo);
1288     TestHelper::TearDownFrame(thread, prev);
1289     JSHandle<JSAPIHashSet> setHandle(thread, result);
1290     return setHandle;
1291 }
1292 
ConstructobjectLightWeightMap(const EcmaVM * vm_)1293 JSHandle<JSAPILightWeightMap> ConstructobjectLightWeightMap(const EcmaVM *vm_)
1294 {
1295     JSThread *thread = vm_->GetJSThread();
1296     ObjectFactory *factory = thread->GetEcmaVM()->GetFactory();
1297     JSHandle<GlobalEnv> env = thread->GetEcmaVM()->GetGlobalEnv();
1298     JSHandle<JSTaggedValue> globalObject = env->GetJSGlobalObject();
1299     JSHandle<JSTaggedValue> key(factory->NewFromASCII("ArkPrivate"));
1300     JSHandle<JSTaggedValue> value =
1301         JSObject::GetProperty(thread, JSHandle<JSTaggedValue>(globalObject), key).GetValue();
1302     auto objCallInfo1 = TestHelper::CreateEcmaRuntimeCallInfo(thread, JSTaggedValue::Undefined(), 6);
1303     objCallInfo1->SetFunction(JSTaggedValue::Undefined());
1304     objCallInfo1->SetThis(value.GetTaggedValue());
1305     objCallInfo1->SetCallArg(0, JSTaggedValue(static_cast<int>(containers::ContainerTag::LightWeightMap)));
1306     [[maybe_unused]] auto prev1 = TestHelper::SetupFrame(thread, objCallInfo1);
1307     JSTaggedValue result1 = ecmascript::containers::ContainersPrivate::Load(objCallInfo1);
1308     JSHandle<JSFunction> newTarget(thread, result1);
1309     auto objCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread, JSTaggedValue::Undefined(), 4);
1310     objCallInfo->SetFunction(newTarget.GetTaggedValue());
1311     objCallInfo->SetNewTarget(newTarget.GetTaggedValue());
1312     objCallInfo->SetThis(JSTaggedValue::Undefined());
1313     [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread, objCallInfo);
1314     JSTaggedValue result = ecmascript::containers::ContainersLightWeightMap::LightWeightMapConstructor(objCallInfo);
1315     TestHelper::TearDownFrame(thread, prev);
1316     JSHandle<JSAPILightWeightMap> mapHandle(thread, result);
1317     return mapHandle;
1318 }
1319 
ConstructobjectLightWeightSet(const EcmaVM * vm_)1320 JSHandle<JSAPILightWeightSet> ConstructobjectLightWeightSet(const EcmaVM *vm_)
1321 {
1322     JSThread *thread = vm_->GetJSThread();
1323     ObjectFactory *factory = thread->GetEcmaVM()->GetFactory();
1324     JSHandle<GlobalEnv> env = thread->GetEcmaVM()->GetGlobalEnv();
1325     JSHandle<JSTaggedValue> globalObject = env->GetJSGlobalObject();
1326     JSHandle<JSTaggedValue> key(factory->NewFromASCII("ArkPrivate"));
1327     JSHandle<JSTaggedValue> value =
1328         JSObject::GetProperty(thread, JSHandle<JSTaggedValue>(globalObject), key).GetValue();
1329     auto objCallInfo1 = TestHelper::CreateEcmaRuntimeCallInfo(thread, JSTaggedValue::Undefined(), 6);
1330     objCallInfo1->SetFunction(JSTaggedValue::Undefined());
1331     objCallInfo1->SetThis(value.GetTaggedValue());
1332     objCallInfo1->SetCallArg(0, JSTaggedValue(static_cast<int>(containers::ContainerTag::LightWeightSet)));
1333     [[maybe_unused]] auto prev1 = TestHelper::SetupFrame(thread, objCallInfo1);
1334     JSTaggedValue result1 = ecmascript::containers::ContainersPrivate::Load(objCallInfo1);
1335     JSHandle<JSFunction> newTarget(thread, result1);
1336     auto objCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread, JSTaggedValue::Undefined(), 4);
1337     objCallInfo->SetFunction(newTarget.GetTaggedValue());
1338     objCallInfo->SetNewTarget(newTarget.GetTaggedValue());
1339     objCallInfo->SetThis(JSTaggedValue::Undefined());
1340     [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread, objCallInfo);
1341     JSTaggedValue result = ecmascript::containers::ContainersLightWeightSet::LightWeightSetConstructor(objCallInfo);
1342     TestHelper::TearDownFrame(thread, prev);
1343     JSHandle<JSAPILightWeightSet> mapHandle(thread, result);
1344     return mapHandle;
1345 }
1346 
HWTEST_F_L0(JSNApiSplTest,IsStringIterator)1347 HWTEST_F_L0(JSNApiSplTest, IsStringIterator)
1348 {
1349     LocalScope scope(vm_);
1350     CalculateForTime();
1351     JSHandle<EcmaString> recordName = vm_->GetFactory()->NewFromUtf8("646458");
1352     JSHandle<JSStringIterator> jsStringIter = JSStringIterator::CreateStringIterator(vm_->GetJSThread(), recordName);
1353     JSHandle<JSTaggedValue> setTag = JSHandle<JSTaggedValue>::Cast(jsStringIter);
1354     gettimeofday(&g_beginTime, nullptr);
1355     for (int i = 0; i < NUM_COUNT; i++) {
1356         JSNApiHelper::ToLocal<StringRef>(setTag)->IsStringIterator(vm_);
1357     }
1358     gettimeofday(&g_endTime, nullptr);
1359     TEST_TIME(JSValueRef::IsStringIterator);
1360     GTEST_LOG_(INFO) << std::boolalpha << JSNApiHelper::ToLocal<StringRef>(setTag)->IsStringIterator(vm_);
1361 }
1362 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_IsUint8Array)1363 HWTEST_F_L0(JSNApiSplTest, JSValueRef_IsUint8Array)
1364 {
1365     LocalScope scope(vm_);
1366     CalculateForTime();
1367     Local<ArrayBufferRef> buffer = ArrayBufferRef::New(vm_, 5);
1368     Local<Uint8ArrayRef> object = Uint8ArrayRef::New(vm_, buffer, 4, 5);
1369     gettimeofday(&g_beginTime, nullptr);
1370     for (int i = 0; i < NUM_COUNT; i++) {
1371         object->IsUint8Array(vm_);
1372     }
1373     gettimeofday(&g_endTime, nullptr);
1374     TEST_TIME(JSValueRef::IsUint8Array);
1375     GTEST_LOG_(INFO) << std::boolalpha << object->IsUint8Array(vm_);
1376 }
1377 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_IsInt8Array)1378 HWTEST_F_L0(JSNApiSplTest, JSValueRef_IsInt8Array)
1379 {
1380     LocalScope scope(vm_);
1381     CalculateForTime();
1382     Local<ArrayBufferRef> buffer = ArrayBufferRef::New(vm_, 5);
1383     Local<ObjectRef> object = Int8ArrayRef::New(vm_, buffer, 4, 5);
1384     gettimeofday(&g_beginTime, nullptr);
1385     for (int i = 0; i < NUM_COUNT; i++) {
1386         object->IsInt8Array(vm_);
1387     }
1388     gettimeofday(&g_endTime, nullptr);
1389     TEST_TIME(JSValueRef::IsInt8Array);
1390     GTEST_LOG_(INFO) << std::boolalpha << object->IsInt8Array(vm_);
1391 }
1392 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_IsBigInt64Array)1393 HWTEST_F_L0(JSNApiSplTest, JSValueRef_IsBigInt64Array)
1394 {
1395     LocalScope scope(vm_);
1396     CalculateForTime();
1397     Local<ArrayBufferRef> buffer = ArrayBufferRef::New(vm_, 5);
1398     Local<ObjectRef> object = BigInt64ArrayRef::New(vm_, buffer, 4, 5);
1399     gettimeofday(&g_beginTime, nullptr);
1400     for (int i = 0; i < NUM_COUNT; i++) {
1401         object->IsBigInt64Array(vm_);
1402     }
1403     gettimeofday(&g_endTime, nullptr);
1404     TEST_TIME(JSValueRef::IsBigInt64Array);
1405     GTEST_LOG_(INFO) << std::boolalpha << object->IsBigInt64Array(vm_);
1406 }
1407 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_IsBigUint64Array)1408 HWTEST_F_L0(JSNApiSplTest, JSValueRef_IsBigUint64Array)
1409 {
1410     LocalScope scope(vm_);
1411     CalculateForTime();
1412     Local<ArrayBufferRef> buffer = ArrayBufferRef::New(vm_, 5);
1413     Local<ObjectRef> object = BigUint64ArrayRef::New(vm_, buffer, 4, 5);
1414     gettimeofday(&g_beginTime, nullptr);
1415     for (int i = 0; i < NUM_COUNT; i++) {
1416         object->IsBigUint64Array(vm_);
1417     }
1418     gettimeofday(&g_endTime, nullptr);
1419     TEST_TIME(JSValueRef::IsBigUint64Array);
1420     GTEST_LOG_(INFO) << std::boolalpha << object->IsBigUint64Array(vm_);
1421 }
1422 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_IsJSPrimitiveRef)1423 HWTEST_F_L0(JSNApiSplTest, JSValueRef_IsJSPrimitiveRef)
1424 {
1425     LocalScope scope(vm_);
1426     CalculateForTime();
1427     auto factory = vm_->GetFactory();
1428     int num = 0;
1429     Local<IntegerRef> intValue = IntegerRef::New(vm_, num);
1430     EXPECT_EQ(intValue->Value(), num);
1431     Local<JSValueRef> jsValue = intValue->GetValue(vm_);
1432     EXPECT_TRUE(*jsValue == nullptr);
1433     JSHandle<JSTaggedValue> nullHandle(thread_, JSTaggedValue::Null());
1434     JSHandle<JSHClass> jsClassHandle = factory->NewEcmaHClass(JSObject::SIZE, JSType::JS_PRIMITIVE_REF, nullHandle);
1435     TaggedObject *taggedObject = factory->NewObject(jsClassHandle);
1436     JSHandle<JSTaggedValue> jsTaggedValue(thread_, JSTaggedValue(taggedObject));
1437     Local<PrimitiveRef> jsValueRef = JSNApiHelper::ToLocal<JSPrimitiveRef>(jsTaggedValue);
1438     gettimeofday(&g_beginTime, nullptr);
1439     for (int i = 0; i < NUM_COUNT; i++) {
1440         jsValueRef->IsJSPrimitiveRef(vm_);
1441     }
1442     gettimeofday(&g_endTime, nullptr);
1443     TEST_TIME(JSValueRef::IsJSPrimitiveRef);
1444     GTEST_LOG_(INFO) << std::boolalpha << jsValueRef->IsJSPrimitiveRef(vm_);
1445 }
1446 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_IsJSDateTimeFormat)1447 HWTEST_F_L0(JSNApiSplTest, JSValueRef_IsJSDateTimeFormat)
1448 {
1449     LocalScope scope(vm_);
1450     CalculateForTime();
1451     auto factory = vm_->GetFactory();
1452     int num = 0;
1453     Local<IntegerRef> intValue = IntegerRef::New(vm_, num);
1454     EXPECT_EQ(intValue->Value(), num);
1455     Local<JSValueRef> jsValue = intValue->GetValue(vm_);
1456     EXPECT_TRUE(*jsValue == nullptr);
1457     JSHandle<JSTaggedValue> nullHandle(thread_, JSTaggedValue::Null());
1458     JSHandle<JSHClass> jsClassHandle = factory->NewEcmaHClass(JSObject::SIZE, JSType::JS_DATE_TIME_FORMAT, nullHandle);
1459     TaggedObject *taggedObject = factory->NewObject(jsClassHandle);
1460     JSHandle<JSTaggedValue> jsTaggedValue(thread_, JSTaggedValue(taggedObject));
1461     gettimeofday(&g_beginTime, nullptr);
1462     for (int i = 0; i < NUM_COUNT; i++) {
1463         JSNApiHelper::ToLocal<JSValueRef>(jsTaggedValue)->IsJSDateTimeFormat(vm_);
1464     }
1465     gettimeofday(&g_endTime, nullptr);
1466     TEST_TIME(JSValueRef::IsJSDateTimeFormat);
1467     GTEST_LOG_(INFO) << std::boolalpha << JSNApiHelper::ToLocal<JSValueRef>(jsTaggedValue)->IsJSDateTimeFormat(vm_);
1468 }
1469 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_IsJSRelativeTimeFormat)1470 HWTEST_F_L0(JSNApiSplTest, JSValueRef_IsJSRelativeTimeFormat)
1471 {
1472     LocalScope scope(vm_);
1473     CalculateForTime();
1474     auto factory = vm_->GetFactory();
1475     Local<IntegerRef> intValue = IntegerRef::New(vm_, 0);
1476     EXPECT_EQ(intValue->Value(), 0);
1477     Local<JSValueRef> jsValue = intValue->GetValue(vm_);
1478     EXPECT_TRUE(*jsValue == nullptr);
1479     JSHandle<JSTaggedValue> nullHandle(thread_, JSTaggedValue::Null());
1480     JSHandle<JSHClass> jsClassHandle =
1481         factory->NewEcmaHClass(JSObject::SIZE, JSType::JS_RELATIVE_TIME_FORMAT, nullHandle);
1482     TaggedObject *taggedObject = factory->NewObject(jsClassHandle);
1483     JSHandle<JSTaggedValue> jsTaggedValue(thread_, JSTaggedValue(taggedObject));
1484     gettimeofday(&g_beginTime, nullptr);
1485     for (int i = 0; i < NUM_COUNT; i++) {
1486         JSNApiHelper::ToLocal<JSValueRef>(jsTaggedValue)->IsJSRelativeTimeFormat(vm_);
1487     }
1488     gettimeofday(&g_endTime, nullptr);
1489     TEST_TIME(JSValueRef::IsJSRelativeTimeFormat);
1490     GTEST_LOG_(INFO) << std::boolalpha <<
1491         JSNApiHelper::ToLocal<JSValueRef>(jsTaggedValue)->IsJSRelativeTimeFormat(vm_);
1492 }
1493 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_IsJSIntl)1494 HWTEST_F_L0(JSNApiSplTest, JSValueRef_IsJSIntl)
1495 {
1496     LocalScope scope(vm_);
1497     CalculateForTime();
1498     auto factory = vm_->GetFactory();
1499     Local<IntegerRef> intValue = IntegerRef::New(vm_, 0);
1500     EXPECT_EQ(intValue->Value(), 0);
1501     Local<JSValueRef> jsValue = intValue->GetValue(vm_);
1502     EXPECT_TRUE(*jsValue == nullptr);
1503     JSHandle<JSTaggedValue> nullHandle(thread_, JSTaggedValue::Null());
1504     JSHandle<JSHClass> jsClassHandle = factory->NewEcmaHClass(JSObject::SIZE, JSType::JS_INTL, nullHandle);
1505     TaggedObject *taggedObject = factory->NewObject(jsClassHandle);
1506     JSHandle<JSTaggedValue> jsTaggedValue(thread_, JSTaggedValue(taggedObject));
1507     gettimeofday(&g_beginTime, nullptr);
1508     for (int i = 0; i < NUM_COUNT; i++) {
1509         JSNApiHelper::ToLocal<JSValueRef>(jsTaggedValue)->IsJSIntl(vm_);
1510     }
1511     gettimeofday(&g_endTime, nullptr);
1512     TEST_TIME(JSValueRef::IsJSIntl);
1513     GTEST_LOG_(INFO) << std::boolalpha << JSNApiHelper::ToLocal<JSValueRef>(jsTaggedValue)->IsJSIntl(vm_);
1514 }
1515 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_IsJSNumberFormat)1516 HWTEST_F_L0(JSNApiSplTest, JSValueRef_IsJSNumberFormat)
1517 {
1518     LocalScope scope(vm_);
1519     CalculateForTime();
1520     auto factory = vm_->GetFactory();
1521     Local<IntegerRef> intValue = IntegerRef::New(vm_, 0);
1522     EXPECT_EQ(intValue->Value(), 0);
1523     Local<JSValueRef> jsValue = intValue->GetValue(vm_);
1524     EXPECT_TRUE(*jsValue == nullptr);
1525     JSHandle<JSTaggedValue> nullHandle(thread_, JSTaggedValue::Null());
1526     JSHandle<JSHClass> jsClassHandle = factory->NewEcmaHClass(JSObject::SIZE, JSType::JS_NUMBER_FORMAT, nullHandle);
1527     TaggedObject *taggedObject = factory->NewObject(jsClassHandle);
1528     JSHandle<JSTaggedValue> jsTaggedValue(thread_, JSTaggedValue(taggedObject));
1529     gettimeofday(&g_beginTime, nullptr);
1530     for (int i = 0; i < NUM_COUNT; i++) {
1531         JSNApiHelper::ToLocal<JSValueRef>(jsTaggedValue)->IsJSNumberFormat(vm_);
1532     }
1533     gettimeofday(&g_endTime, nullptr);
1534     TEST_TIME(JSValueRef::IsJSNumberFormat);
1535     GTEST_LOG_(INFO) << std::boolalpha << JSNApiHelper::ToLocal<JSValueRef>(jsTaggedValue)->IsJSNumberFormat(vm_);
1536 }
1537 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_IsHashMap)1538 HWTEST_F_L0(JSNApiSplTest, JSValueRef_IsHashMap)
1539 {
1540     LocalScope scope(vm_);
1541     CalculateForTime();
1542     JSHandle<JSAPIHashMap> map = ConstructobjectHashMap(vm_);
1543     JSHandle<JSTaggedValue> jsHashMap = JSHandle<JSTaggedValue>::Cast(map);
1544     Local<JSValueRef> tag = JSNApiHelper::ToLocal<JSValueRef>(jsHashMap);
1545     gettimeofday(&g_beginTime, nullptr);
1546     for (int i = 0; i < NUM_COUNT; i++) {
1547         ASSERT_TRUE(tag->IsHashMap(vm_));
1548     }
1549     gettimeofday(&g_endTime, nullptr);
1550     TEST_TIME(JSValueRef::IsHashMap);
1551 }
1552 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_IsHashSet)1553 HWTEST_F_L0(JSNApiSplTest, JSValueRef_IsHashSet)
1554 {
1555     LocalScope scope(vm_);
1556     CalculateForTime();
1557     JSHandle<JSAPIHashSet> setHandle = ConstructobjectHashSet(vm_);
1558     JSHandle<JSTaggedValue> jsHashMap = JSHandle<JSTaggedValue>::Cast(setHandle);
1559     Local<JSValueRef> tag = JSNApiHelper::ToLocal<JSValueRef>(jsHashMap);
1560     gettimeofday(&g_beginTime, nullptr);
1561     for (int i = 0; i < NUM_COUNT; i++) {
1562         ASSERT_TRUE(tag->IsHashSet(vm_));
1563     }
1564     gettimeofday(&g_endTime, nullptr);
1565     TEST_TIME(JSValueRef::IsHashSet);
1566 }
1567 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_IsLightWeightMap)1568 HWTEST_F_L0(JSNApiSplTest, JSValueRef_IsLightWeightMap)
1569 {
1570     LocalScope scope(vm_);
1571     CalculateForTime();
1572     JSHandle<JSAPILightWeightMap> mapHandle = ConstructobjectLightWeightMap(vm_);
1573     JSHandle<JSTaggedValue> jsHashMap = JSHandle<JSTaggedValue>::Cast(mapHandle);
1574     Local<JSValueRef> tag = JSNApiHelper::ToLocal<JSValueRef>(jsHashMap);
1575     gettimeofday(&g_beginTime, nullptr);
1576     for (int i = 0; i < NUM_COUNT; i++) {
1577         ASSERT_TRUE(tag->IsLightWeightMap(vm_));
1578     }
1579     gettimeofday(&g_endTime, nullptr);
1580     TEST_TIME(JSValueRef::IsLightWeightMap);
1581 }
1582 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_IsLightWeightSet)1583 HWTEST_F_L0(JSNApiSplTest, JSValueRef_IsLightWeightSet)
1584 {
1585     LocalScope scope(vm_);
1586     CalculateForTime();
1587     JSHandle<JSAPILightWeightSet> mapHandle = ConstructobjectLightWeightSet(vm_);
1588     JSHandle<JSTaggedValue> jsHashMap = JSHandle<JSTaggedValue>::Cast(mapHandle);
1589     Local<JSValueRef> tag = JSNApiHelper::ToLocal<JSValueRef>(jsHashMap);
1590     gettimeofday(&g_beginTime, nullptr);
1591     for (int i = 0; i < NUM_COUNT; i++) {
1592         ASSERT_TRUE(tag->IsLightWeightSet(vm_));
1593     }
1594     gettimeofday(&g_endTime, nullptr);
1595     TEST_TIME(JSValueRef::IsLightWeightSet);
1596 }
1597 
HWTEST_F_L0(JSNApiSplTest,PropertyAttribute_Default)1598 HWTEST_F_L0(JSNApiSplTest, PropertyAttribute_Default)
1599 {
1600     LocalScope scope(vm_);
1601     CalculateForTime();
1602     Local<JSValueRef> value = ObjectRef::New(vm_);
1603     PropertyAttribute object(value, true, true, true);
1604     gettimeofday(&g_beginTime, nullptr);
1605     for (int i = 0; i < NUM_COUNT; i++) {
1606         object.Default();
1607     }
1608     gettimeofday(&g_endTime, nullptr);
1609     TEST_TIME(PropertyAttribute::Default);
1610 }
1611 
HWTEST_F_L0(JSNApiSplTest,PropertyAttribute_PropertyAttribute)1612 HWTEST_F_L0(JSNApiSplTest, PropertyAttribute_PropertyAttribute)
1613 {
1614     LocalScope scope(vm_);
1615     CalculateForTime();
1616     gettimeofday(&g_beginTime, nullptr);
1617     for (int i = 0; i < NUM_COUNT; i++) {
1618         PropertyAttribute *p = new PropertyAttribute();
1619         delete p;
1620     }
1621     gettimeofday(&g_endTime, nullptr);
1622     TEST_TIME(PropertyAttribute::PropertyAttribute);
1623 }
1624 
HWTEST_F_L0(JSNApiSplTest,PropertyAttribute_PropertyAttribute1)1625 HWTEST_F_L0(JSNApiSplTest, PropertyAttribute_PropertyAttribute1)
1626 {
1627     LocalScope scope(vm_);
1628     CalculateForTime();
1629     Local<JSValueRef> value = ObjectRef::New(vm_);
1630     gettimeofday(&g_beginTime, nullptr);
1631     for (int i = 0; i < NUM_COUNT; i++) {
1632         PropertyAttribute *p = new PropertyAttribute(value, true, true, true);
1633         delete p;
1634     }
1635     gettimeofday(&g_endTime, nullptr);
1636     TEST_TIME(PropertyAttribute::PropertyAttribute);
1637 }
1638 
HWTEST_F_L0(JSNApiSplTest,PropertyAttribute_IsWritable)1639 HWTEST_F_L0(JSNApiSplTest, PropertyAttribute_IsWritable)
1640 {
1641     LocalScope scope(vm_);
1642     CalculateForTime();
1643     Local<JSValueRef> value = ObjectRef::New(vm_);
1644     PropertyAttribute object(value, true, true, true);
1645     ASSERT_EQ(true, object.IsWritable());
1646     gettimeofday(&g_beginTime, nullptr);
1647     for (int i = 0; i < NUM_COUNT; i++) {
1648         bool b = object.IsWritable();
1649         UNUSED(b);
1650     }
1651     gettimeofday(&g_endTime, nullptr);
1652     TEST_TIME(PropertyAttribute::IsWritable);
1653 }
1654 
HWTEST_F_L0(JSNApiSplTest,PropertyAttribute_SetWritable)1655 HWTEST_F_L0(JSNApiSplTest, PropertyAttribute_SetWritable)
1656 {
1657     LocalScope scope(vm_);
1658     CalculateForTime();
1659     Local<JSValueRef> value = ObjectRef::New(vm_);
1660     PropertyAttribute object(value, false, true, true);
1661     gettimeofday(&g_beginTime, nullptr);
1662     for (int i = 0; i < NUM_COUNT; i++) {
1663         object.SetWritable(true);
1664         bool b = object.IsWritable();
1665         bool b1 = object.HasWritable();
1666         UNUSED(b);
1667         UNUSED(b1);
1668     }
1669     gettimeofday(&g_endTime, nullptr);
1670     TEST_TIME(PropertyAttribute::SetWritable);
1671 }
1672 
HWTEST_F_L0(JSNApiSplTest,PropertyAttribute_IsEnumerable)1673 HWTEST_F_L0(JSNApiSplTest, PropertyAttribute_IsEnumerable)
1674 {
1675     LocalScope scope(vm_);
1676     CalculateForTime();
1677     Local<JSValueRef> value = ObjectRef::New(vm_);
1678     PropertyAttribute object(value, true, true, true);
1679     ASSERT_EQ(true, object.IsEnumerable());
1680     gettimeofday(&g_beginTime, nullptr);
1681     for (int i = 0; i < NUM_COUNT; i++) {
1682         bool b = object.IsEnumerable();
1683         UNUSED(b);
1684     }
1685     gettimeofday(&g_endTime, nullptr);
1686     TEST_TIME(PropertyAttribute::IsEnumerable);
1687 }
1688 
HWTEST_F_L0(JSNApiSplTest,PropertyAttribute_SetEnumerable)1689 HWTEST_F_L0(JSNApiSplTest, PropertyAttribute_SetEnumerable)
1690 {
1691     LocalScope scope(vm_);
1692     CalculateForTime();
1693     Local<JSValueRef> value = ObjectRef::New(vm_);
1694     PropertyAttribute object(value, true, false, true);
1695     gettimeofday(&g_beginTime, nullptr);
1696     for (int i = 0; i < NUM_COUNT; i++) {
1697         object.SetEnumerable(true);
1698         bool b = object.IsEnumerable();
1699         bool b1 = object.HasEnumerable();
1700         UNUSED(b);
1701         UNUSED(b1);
1702     }
1703     gettimeofday(&g_endTime, nullptr);
1704     TEST_TIME(PropertyAttribute::SetEnumerable);
1705 }
1706 
HWTEST_F_L0(JSNApiSplTest,PropertyAttribute_IsConfigurable)1707 HWTEST_F_L0(JSNApiSplTest, PropertyAttribute_IsConfigurable)
1708 {
1709     LocalScope scope(vm_);
1710     CalculateForTime();
1711     Local<JSValueRef> value = ObjectRef::New(vm_);
1712     PropertyAttribute object(value, true, true, true);
1713     ASSERT_EQ(true, object.IsConfigurable());
1714     gettimeofday(&g_beginTime, nullptr);
1715     for (int i = 0; i < NUM_COUNT; i++) {
1716         bool b = object.IsConfigurable();
1717         UNUSED(b);
1718     }
1719     gettimeofday(&g_endTime, nullptr);
1720     TEST_TIME(PropertyAttribute::IsConfigurable);
1721 }
1722 
HWTEST_F_L0(JSNApiSplTest,PropertyAttribute_SetConfigurable)1723 HWTEST_F_L0(JSNApiSplTest, PropertyAttribute_SetConfigurable)
1724 {
1725     LocalScope scope(vm_);
1726     CalculateForTime();
1727     Local<JSValueRef> value = ObjectRef::New(vm_);
1728     PropertyAttribute object(value, true, true, false);
1729     gettimeofday(&g_beginTime, nullptr);
1730     for (int i = 0; i < NUM_COUNT; i++) {
1731         object.SetConfigurable(true);
1732         bool b = object.IsConfigurable();
1733         bool b1 = object.HasConfigurable();
1734         UNUSED(b);
1735         UNUSED(b1);
1736     }
1737     gettimeofday(&g_endTime, nullptr);
1738     TEST_TIME(PropertyAttribute::SetConfigurable);
1739 }
1740 
HWTEST_F_L0(JSNApiSplTest,HasWritable_True)1741 HWTEST_F_L0(JSNApiSplTest, HasWritable_True)
1742 {
1743     LocalScope scope(vm_);
1744     CalculateForTime();
1745     Local<JSValueRef> value = ObjectRef::New(vm_);
1746     PropertyAttribute object(value, true, true, true);
1747     gettimeofday(&g_beginTime, nullptr);
1748     for (int i = 0; i < NUM_COUNT; i++) {
1749         bool b = object.HasWritable();
1750         UNUSED(b);
1751     }
1752     gettimeofday(&g_endTime, nullptr);
1753     TEST_TIME(PropertyAttribute::HasWritable);
1754 }
1755 
HWTEST_F_L0(JSNApiSplTest,HasConfigurable_False)1756 HWTEST_F_L0(JSNApiSplTest, HasConfigurable_False)
1757 {
1758     LocalScope scope(vm_);
1759     CalculateForTime();
1760     Local<PropertyAttribute> obj;
1761     gettimeofday(&g_beginTime, nullptr);
1762     for (int i = 0; i < NUM_COUNT; i++) {
1763         bool b = obj->HasConfigurable();
1764         UNUSED(b);
1765     }
1766     gettimeofday(&g_endTime, nullptr);
1767     TEST_TIME(PropertyAttribute::HasConfigurable);
1768 }
1769 
HWTEST_F_L0(JSNApiSplTest,HasEnumerable_True)1770 HWTEST_F_L0(JSNApiSplTest, HasEnumerable_True)
1771 {
1772     LocalScope scope(vm_);
1773     CalculateForTime();
1774     Local<JSValueRef> value = ObjectRef::New(vm_);
1775     PropertyAttribute object(value, true, true, true);
1776     gettimeofday(&g_beginTime, nullptr);
1777     for (int i = 0; i < NUM_COUNT; i++) {
1778         bool b = object.HasEnumerable();
1779         UNUSED(b);
1780     }
1781     gettimeofday(&g_endTime, nullptr);
1782     TEST_TIME(PropertyAttribute::HasEnumerable);
1783 }
1784 
HWTEST_F_L0(JSNApiSplTest,GetValue)1785 HWTEST_F_L0(JSNApiSplTest, GetValue)
1786 {
1787     LocalScope scope(vm_);
1788     CalculateForTime();
1789     Local<JSValueRef> value = ObjectRef::New(vm_);
1790     PropertyAttribute object(value, true, true, true);
1791     gettimeofday(&g_beginTime, nullptr);
1792     for (int i = 0; i < NUM_COUNT; i++) {
1793         object.GetValue(vm_);
1794     }
1795     gettimeofday(&g_endTime, nullptr);
1796     TEST_TIME(PropertyAttribute::GetValue);
1797 }
1798 
HWTEST_F_L0(JSNApiSplTest,SetValue)1799 HWTEST_F_L0(JSNApiSplTest, SetValue)
1800 {
1801     LocalScope scope(vm_);
1802     CalculateForTime();
1803     Local<JSValueRef> value = ObjectRef::New(vm_);
1804     PropertyAttribute object;
1805     gettimeofday(&g_beginTime, nullptr);
1806     for (int i = 0; i < NUM_COUNT; i++) {
1807         object.SetValue(value);
1808     }
1809     gettimeofday(&g_endTime, nullptr);
1810     TEST_TIME(PropertyAttribute::SetValue);
1811 }
1812 
HWTEST_F_L0(JSNApiSplTest,PropertyAttribute_HasValue)1813 HWTEST_F_L0(JSNApiSplTest, PropertyAttribute_HasValue)
1814 {
1815     LocalScope scope(vm_);
1816     CalculateForTime();
1817     Local<JSValueRef> value = ObjectRef::New(vm_);
1818     PropertyAttribute object(value, true, true, true);
1819     gettimeofday(&g_beginTime, nullptr);
1820     for (int i = 0; i < NUM_COUNT; i++) {
1821         (void)object.HasValue();
1822     }
1823     gettimeofday(&g_endTime, nullptr);
1824     TEST_TIME(PropertyAttribute::HasValue);
1825 }
1826 
HWTEST_F_L0(JSNApiSplTest,PropertyAttribute_SetGetter)1827 HWTEST_F_L0(JSNApiSplTest, PropertyAttribute_SetGetter)
1828 {
1829     LocalScope scope(vm_);
1830     CalculateForTime();
1831     Local<JSValueRef> value = ObjectRef::New(vm_);
1832     PropertyAttribute object;
1833     gettimeofday(&g_beginTime, nullptr);
1834     for (int i = 0; i < NUM_COUNT; i++) {
1835         object.SetGetter(value);
1836     }
1837     gettimeofday(&g_endTime, nullptr);
1838     TEST_TIME(PropertyAttribute::SetGetter);
1839 }
1840 
HWTEST_F_L0(JSNApiSplTest,PropertyAttribute_GetGetter)1841 HWTEST_F_L0(JSNApiSplTest, PropertyAttribute_GetGetter)
1842 {
1843     LocalScope scope(vm_);
1844     CalculateForTime();
1845     Local<JSValueRef> value = BooleanRef::New(vm_, true);
1846     PropertyAttribute object;
1847     object.SetGetter(value);
1848     gettimeofday(&g_beginTime, nullptr);
1849     for (int i = 0; i < NUM_COUNT; i++) {
1850         (void)object.GetGetter(vm_);
1851     }
1852     gettimeofday(&g_endTime, nullptr);
1853     TEST_TIME(PropertyAttribute::GetGetter);
1854 }
1855 
HWTEST_F_L0(JSNApiSplTest,HasGetter)1856 HWTEST_F_L0(JSNApiSplTest, HasGetter)
1857 {
1858     LocalScope scope(vm_);
1859     CalculateForTime();
1860     Local<JSValueRef> value = ObjectRef::New(vm_);
1861     PropertyAttribute object;
1862     object.SetGetter(value);
1863     gettimeofday(&g_beginTime, nullptr);
1864     for (int i = 0; i < NUM_COUNT; i++) {
1865         object.HasGetter();
1866     }
1867     gettimeofday(&g_endTime, nullptr);
1868     TEST_TIME(PropertyAttribute::HasGetter);
1869 }
1870 
HWTEST_F_L0(JSNApiSplTest,SetSetter)1871 HWTEST_F_L0(JSNApiSplTest, SetSetter)
1872 {
1873     LocalScope scope(vm_);
1874     CalculateForTime();
1875     Local<JSValueRef> value = ObjectRef::New(vm_);
1876     PropertyAttribute object;
1877     gettimeofday(&g_beginTime, nullptr);
1878     for (int i = 0; i < NUM_COUNT; i++) {
1879         object.SetSetter(value);
1880     }
1881     gettimeofday(&g_endTime, nullptr);
1882     TEST_TIME(PropertyAttribute::SetSetter);
1883 }
1884 
HWTEST_F_L0(JSNApiSplTest,GetSetter)1885 HWTEST_F_L0(JSNApiSplTest, GetSetter)
1886 {
1887     LocalScope scope(vm_);
1888     CalculateForTime();
1889     Local<JSValueRef> value = ObjectRef::New(vm_);
1890     PropertyAttribute object;
1891     object.SetSetter(value);
1892     gettimeofday(&g_beginTime, nullptr);
1893     for (int i = 0; i < NUM_COUNT; i++) {
1894         object.GetSetter(vm_);
1895     }
1896     gettimeofday(&g_endTime, nullptr);
1897     TEST_TIME(PropertyAttribute::GetSetter);
1898 }
1899 
HWTEST_F_L0(JSNApiSplTest,HasSetter)1900 HWTEST_F_L0(JSNApiSplTest, HasSetter)
1901 {
1902     LocalScope scope(vm_);
1903     CalculateForTime();
1904     Local<JSValueRef> value = ObjectRef::New(vm_);
1905     PropertyAttribute object;
1906     object.SetGetter(value);
1907     gettimeofday(&g_beginTime, nullptr);
1908     for (int i = 0; i < NUM_COUNT; i++) {
1909         object.HasSetter();
1910     }
1911     gettimeofday(&g_endTime, nullptr);
1912     TEST_TIME(PropertyAttribute::HasSetter);
1913 }
1914 
HWTEST_F_L0(JSNApiSplTest,Float32ArrayRef_New)1915 HWTEST_F_L0(JSNApiSplTest, Float32ArrayRef_New)
1916 {
1917     LocalScope scope(vm_);
1918     CalculateForTime();
1919     int32_t num = 4;
1920     Local<ArrayBufferRef> buffer = ArrayBufferRef::New(vm_, num);
1921     int32_t byteOffset = 4;
1922     int32_t length = 20;
1923     gettimeofday(&g_beginTime, nullptr);
1924     for (int i = 0; i < NUM_COUNT; i++) {
1925         Float32ArrayRef::New(vm_, buffer, byteOffset, length);
1926     }
1927     gettimeofday(&g_endTime, nullptr);
1928     TEST_TIME(Float32ArrayRef::New);
1929 }
1930 
HWTEST_F_L0(JSNApiSplTest,Float64ArrayRef_New)1931 HWTEST_F_L0(JSNApiSplTest, Float64ArrayRef_New)
1932 {
1933     LocalScope scope(vm_);
1934     CalculateForTime();
1935     int32_t num = 4;
1936     Local<ArrayBufferRef> buffer = ArrayBufferRef::New(vm_, num);
1937     int32_t byteOffset = 4;
1938     int32_t length = 20;
1939     gettimeofday(&g_beginTime, nullptr);
1940     for (int i = 0; i < NUM_COUNT; i++) {
1941         Float64ArrayRef::New(vm_, buffer, byteOffset, length);
1942     }
1943     gettimeofday(&g_endTime, nullptr);
1944     TEST_TIME(Float64ArrayRef::New);
1945 }
1946 
HWTEST_F_L0(JSNApiSplTest,BigInt64ArrayRef_New)1947 HWTEST_F_L0(JSNApiSplTest, BigInt64ArrayRef_New)
1948 {
1949     LocalScope scope(vm_);
1950     CalculateForTime();
1951     int32_t num = 4;
1952     Local<ArrayBufferRef> buffer = ArrayBufferRef::New(vm_, num);
1953     int32_t byteOffset = 4;
1954     int32_t length = 20;
1955     gettimeofday(&g_beginTime, nullptr);
1956     for (int i = 0; i < NUM_COUNT; i++) {
1957         BigInt64ArrayRef::New(vm_, buffer, byteOffset, length);
1958     }
1959     gettimeofday(&g_endTime, nullptr);
1960     TEST_TIME(BigInt64ArrayRef::New);
1961 }
1962 
HWTEST_F_L0(JSNApiSplTest,BigUint64ArrayRef_New)1963 HWTEST_F_L0(JSNApiSplTest, BigUint64ArrayRef_New)
1964 {
1965     LocalScope scope(vm_);
1966     CalculateForTime();
1967     int32_t num = 4;
1968     Local<ArrayBufferRef> buffer = ArrayBufferRef::New(vm_, num);
1969     int32_t byteOffset = 4;
1970     int32_t length = 20;
1971     gettimeofday(&g_beginTime, nullptr);
1972     for (int i = 0; i < NUM_COUNT; i++) {
1973         BigUint64ArrayRef::New(vm_, buffer, byteOffset, length);
1974     }
1975     gettimeofday(&g_endTime, nullptr);
1976     TEST_TIME(BigUint64ArrayRef::New);
1977 }
1978 
HWTEST_F_L0(JSNApiSplTest,GetOriginalSource)1979 HWTEST_F_L0(JSNApiSplTest, GetOriginalSource)
1980 {
1981     LocalScope scope(vm_);
1982     CalculateForTime();
1983     JSThread *thread = vm_->GetJSThread();
1984     ObjectFactory *factory = vm_->GetFactory();
1985     auto globalEnv = thread->GetEcmaVM()->GetGlobalEnv();
1986     JSHandle<JSTaggedValue> proto = globalEnv->GetObjectFunctionPrototype();
1987     JSHandle<JSHClass> jSRegExpClass = factory->NewEcmaHClass(JSRegExp::SIZE, JSType::JS_REG_EXP, proto);
1988     JSHandle<JSRegExp> jSRegExp = JSHandle<JSRegExp>::Cast(factory->NewJSObject(jSRegExpClass));
1989     jSRegExp->SetByteCodeBuffer(thread, JSTaggedValue::Undefined());
1990     jSRegExp->SetOriginalSource(thread, JSTaggedValue::Undefined());
1991     jSRegExp->SetGroupName(thread, JSTaggedValue::Undefined());
1992     jSRegExp->SetOriginalFlags(thread, JSTaggedValue(0));
1993     jSRegExp->SetLength(0);
1994     JSHandle<JSTaggedValue> jsRegTag = JSHandle<JSTaggedValue>::Cast(jSRegExp);
1995     Local<RegExpRef> object = JSNApiHelper::ToLocal<RegExpRef>(jsRegTag);
1996     gettimeofday(&g_beginTime, nullptr);
1997     for (int i = 0; i < NUM_COUNT; i++) {
1998         object->GetOriginalSource(vm_);
1999     }
2000     gettimeofday(&g_endTime, nullptr);
2001     TEST_TIME(RegExpRef::GetOriginalSource);
2002 }
2003 
HWTEST_F_L0(JSNApiSplTest,GetOriginalFlags)2004 HWTEST_F_L0(JSNApiSplTest, GetOriginalFlags)
2005 {
2006     LocalScope scope(vm_);
2007     CalculateForTime();
2008     JSThread *thread = vm_->GetJSThread();
2009     ObjectFactory *factory = vm_->GetFactory();
2010     auto globalEnv = thread->GetEcmaVM()->GetGlobalEnv();
2011     JSHandle<JSTaggedValue> proto = globalEnv->GetObjectFunctionPrototype();
2012     JSHandle<JSHClass> jSRegExpClass = factory->NewEcmaHClass(JSRegExp::SIZE, JSType::JS_REG_EXP, proto);
2013     JSHandle<JSRegExp> jSRegExp = JSHandle<JSRegExp>::Cast(factory->NewJSObject(jSRegExpClass));
2014     jSRegExp->SetByteCodeBuffer(thread, JSTaggedValue::Undefined());
2015     jSRegExp->SetOriginalSource(thread, JSTaggedValue::Undefined());
2016     jSRegExp->SetGroupName(thread, JSTaggedValue::Undefined());
2017     jSRegExp->SetOriginalFlags(thread, JSTaggedValue(0));
2018     jSRegExp->SetLength(0);
2019     JSHandle<JSTaggedValue> jsRegTag = JSHandle<JSTaggedValue>::Cast(jSRegExp);
2020     Local<RegExpRef> object = JSNApiHelper::ToLocal<RegExpRef>(jsRegTag);
2021     gettimeofday(&g_beginTime, nullptr);
2022     for (int i = 0; i < NUM_COUNT; i++) {
2023         object->GetOriginalFlags(vm_);
2024     }
2025     gettimeofday(&g_endTime, nullptr);
2026     TEST_TIME(RegExpRef::GetOriginalFlags);
2027 }
2028 
HWTEST_F_L0(JSNApiSplTest,IsGlobal)2029 HWTEST_F_L0(JSNApiSplTest, IsGlobal)
2030 {
2031     LocalScope scope(vm_);
2032     CalculateForTime();
2033     JSThread *thread = vm_->GetJSThread();
2034     auto globalEnv = thread->GetEcmaVM()->GetGlobalEnv();
2035     JSHandle<JSTaggedValue> proto = globalEnv->GetObjectFunctionPrototype();
2036     JSHandle<JSGlobalObject> globalObject = JSHandle<JSGlobalObject>::Cast(proto);
2037     JSHandle<JSTaggedValue> jsRegTag = JSHandle<JSTaggedValue>::Cast(globalObject);
2038     Local<RegExpRef> object = JSNApiHelper::ToLocal<RegExpRef>(jsRegTag);
2039     gettimeofday(&g_beginTime, nullptr);
2040     for (int i = 0; i < NUM_COUNT; i++) {
2041         object->IsGlobal(vm_);
2042     }
2043     gettimeofday(&g_endTime, nullptr);
2044     TEST_TIME(RegExpRef::IsGlobal);
2045 }
2046 
HWTEST_F_L0(JSNApiSplTest,IsIgnoreCase)2047 HWTEST_F_L0(JSNApiSplTest, IsIgnoreCase)
2048 {
2049     LocalScope scope(vm_);
2050     CalculateForTime();
2051     JSThread *thread = vm_->GetJSThread();
2052     ObjectFactory *factory = vm_->GetFactory();
2053     auto globalEnv = thread->GetEcmaVM()->GetGlobalEnv();
2054     JSHandle<JSTaggedValue> proto = globalEnv->GetObjectFunctionPrototype();
2055     JSHandle<JSHClass> jSRegExpClass = factory->NewEcmaHClass(JSRegExp::SIZE, JSType::JS_REG_EXP, proto);
2056     JSHandle<JSRegExp> jSRegExp = JSHandle<JSRegExp>::Cast(factory->NewJSObject(jSRegExpClass));
2057     JSHandle<JSTaggedValue> jsRegTag = JSHandle<JSTaggedValue>::Cast(jSRegExp);
2058     Local<RegExpRef> object = JSNApiHelper::ToLocal<RegExpRef>(jsRegTag);
2059     gettimeofday(&g_beginTime, nullptr);
2060     for (int i = 0; i < NUM_COUNT; i++) {
2061         object->IsIgnoreCase(vm_);
2062     }
2063     gettimeofday(&g_endTime, nullptr);
2064     TEST_TIME(RegExpRef::IsIgnoreCase);
2065 }
2066 
HWTEST_F_L0(JSNApiSplTest,IsMultiline)2067 HWTEST_F_L0(JSNApiSplTest, IsMultiline)
2068 {
2069     LocalScope scope(vm_);
2070     CalculateForTime();
2071     JSThread *thread = vm_->GetJSThread();
2072     ObjectFactory *factory = vm_->GetFactory();
2073     auto globalEnv = thread->GetEcmaVM()->GetGlobalEnv();
2074     JSHandle<JSTaggedValue> proto = globalEnv->GetObjectFunctionPrototype();
2075     JSHandle<JSHClass> jSRegExpClass = factory->NewEcmaHClass(JSRegExp::SIZE, JSType::JS_REG_EXP, proto);
2076     JSHandle<JSRegExp> jSRegExp = JSHandle<JSRegExp>::Cast(factory->NewJSObject(jSRegExpClass));
2077     JSHandle<JSTaggedValue> jsRegTag = JSHandle<JSTaggedValue>::Cast(jSRegExp);
2078     Local<RegExpRef> object = JSNApiHelper::ToLocal<RegExpRef>(jsRegTag);
2079     gettimeofday(&g_beginTime, nullptr);
2080     for (int i = 0; i < NUM_COUNT; i++) {
2081         object->IsMultiline(vm_);
2082     }
2083     gettimeofday(&g_endTime, nullptr);
2084     TEST_TIME(RegExpRef::IsMultiline);
2085 }
2086 
HWTEST_F_L0(JSNApiSplTest,IsDotAll)2087 HWTEST_F_L0(JSNApiSplTest, IsDotAll)
2088 {
2089     LocalScope scope(vm_);
2090     CalculateForTime();
2091     JSThread *thread = vm_->GetJSThread();
2092     ObjectFactory *factory = vm_->GetFactory();
2093     auto globalEnv = thread->GetEcmaVM()->GetGlobalEnv();
2094     JSHandle<JSTaggedValue> proto = globalEnv->GetObjectFunctionPrototype();
2095     JSHandle<JSHClass> jSRegExpClass = factory->NewEcmaHClass(JSRegExp::SIZE, JSType::JS_REG_EXP, proto);
2096     JSHandle<JSRegExp> jSRegExp = JSHandle<JSRegExp>::Cast(factory->NewJSObject(jSRegExpClass));
2097     JSHandle<JSTaggedValue> jsregtag = JSHandle<JSTaggedValue>::Cast(jSRegExp);
2098     Local<RegExpRef> object = JSNApiHelper::ToLocal<RegExpRef>(jsregtag);
2099     gettimeofday(&g_beginTime, nullptr);
2100     for (int i = 0; i < NUM_COUNT; i++) {
2101         object->IsDotAll(vm_);
2102     }
2103     gettimeofday(&g_endTime, nullptr);
2104     TEST_TIME(RegExpRef::IsDotAll);
2105 }
2106 
HWTEST_F_L0(JSNApiSplTest,IsUtf16)2107 HWTEST_F_L0(JSNApiSplTest, IsUtf16)
2108 {
2109     LocalScope scope(vm_);
2110     CalculateForTime();
2111     JSThread *thread = vm_->GetJSThread();
2112     ObjectFactory *factory = vm_->GetFactory();
2113     auto globalEnv = thread->GetEcmaVM()->GetGlobalEnv();
2114     JSHandle<JSTaggedValue> proto = globalEnv->GetObjectFunctionPrototype();
2115     JSHandle<JSHClass> jSRegExpClass = factory->NewEcmaHClass(JSRegExp::SIZE, JSType::JS_REG_EXP, proto);
2116     JSHandle<JSRegExp> jSRegExp = JSHandle<JSRegExp>::Cast(factory->NewJSObject(jSRegExpClass));
2117     JSHandle<JSTaggedValue> jsregtag = JSHandle<JSTaggedValue>::Cast(jSRegExp);
2118     Local<RegExpRef> object = JSNApiHelper::ToLocal<RegExpRef>(jsregtag);
2119     gettimeofday(&g_beginTime, nullptr);
2120     for (int i = 0; i < NUM_COUNT; i++) {
2121         object->IsUtf16(vm_);
2122     }
2123     gettimeofday(&g_endTime, nullptr);
2124     TEST_TIME(RegExpRef::IsUtf16);
2125 }
2126 
HWTEST_F_L0(JSNApiSplTest,IsStick)2127 HWTEST_F_L0(JSNApiSplTest, IsStick)
2128 {
2129     LocalScope scope(vm_);
2130     CalculateForTime();
2131     JSThread *thread = vm_->GetJSThread();
2132     ObjectFactory *factory = vm_->GetFactory();
2133     auto globalEnv = thread->GetEcmaVM()->GetGlobalEnv();
2134     JSHandle<JSTaggedValue> proto = globalEnv->GetObjectFunctionPrototype();
2135     JSHandle<JSHClass> jSRegExpClass = factory->NewEcmaHClass(JSRegExp::SIZE, JSType::JS_REG_EXP, proto);
2136     JSHandle<JSRegExp> jSRegExp = JSHandle<JSRegExp>::Cast(factory->NewJSObject(jSRegExpClass));
2137     JSHandle<JSTaggedValue> jsregtag = JSHandle<JSTaggedValue>::Cast(jSRegExp);
2138     Local<RegExpRef> object = JSNApiHelper::ToLocal<RegExpRef>(jsregtag);
2139     gettimeofday(&g_beginTime, nullptr);
2140     for (int i = 0; i < NUM_COUNT; i++) {
2141         object->IsStick(vm_);
2142     }
2143     gettimeofday(&g_endTime, nullptr);
2144     TEST_TIME(RegExpRef::IsStick);
2145 }
2146 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_BooleaValue_True)2147 HWTEST_F_L0(JSNApiSplTest, JSValueRef_BooleaValue_True)
2148 {
2149     LocalScope scope(vm_);
2150     CalculateForTime();
2151     Local<JSValueRef> tag = JSValueRef::True(vm_);
2152     gettimeofday(&g_beginTime, nullptr);
2153     for (int i = 0; i < NUM_COUNT; i++) {
2154         bool b = tag->BooleaValue(vm_);
2155         UNUSED(b);
2156     }
2157     gettimeofday(&g_endTime, nullptr);
2158     TEST_TIME(JSValueRef_BooleaValue_true);
2159 }
2160 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_BooleaValue_False)2161 HWTEST_F_L0(JSNApiSplTest, JSValueRef_BooleaValue_False)
2162 {
2163     LocalScope scope(vm_);
2164     CalculateForTime();
2165     Local<JSValueRef> tag = JSValueRef::False(vm_);
2166     gettimeofday(&g_beginTime, nullptr);
2167     for (int i = 0; i < NUM_COUNT; i++) {
2168         bool b = tag->BooleaValue(vm_);
2169         UNUSED(b);
2170     }
2171     gettimeofday(&g_endTime, nullptr);
2172     TEST_TIME(JSValueRef_BooleaValue_false);
2173 }
2174 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_IntegerValue_Int64)2175 HWTEST_F_L0(JSNApiSplTest, JSValueRef_IntegerValue_Int64)
2176 {
2177     LocalScope scope(vm_);
2178     CalculateForTime();
2179     int64_t num = 0xffffffffffff; // 0xffffffffffff = A number exceeding 32 bits
2180     Local<JSValueRef> targetInt = NumberRef::New(vm_, num);
2181     gettimeofday(&g_beginTime, nullptr);
2182     for (int i = 0; i < NUM_COUNT; i++) {
2183         int64_t i64 = targetInt->IntegerValue(vm_);
2184         UNUSED(i64);
2185     }
2186     gettimeofday(&g_endTime, nullptr);
2187     TEST_TIME(JSValueRef_IntegerValue_Int64);
2188 }
2189 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_IntegerValue_Double)2190 HWTEST_F_L0(JSNApiSplTest, JSValueRef_IntegerValue_Double)
2191 {
2192     LocalScope scope(vm_);
2193     CalculateForTime();
2194     double num = 123.456; // 123.456 = random number
2195     Local<JSValueRef> targetInt = NumberRef::New(vm_, num);
2196     gettimeofday(&g_beginTime, nullptr);
2197     for (int i = 0; i < NUM_COUNT; i++) {
2198         int64_t i64 = targetInt->IntegerValue(vm_);
2199         UNUSED(i64);
2200     }
2201     gettimeofday(&g_endTime, nullptr);
2202     TEST_TIME(JSValueRef_IntegerValue_Double);
2203 }
2204 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_IntegerValue_Int)2205 HWTEST_F_L0(JSNApiSplTest, JSValueRef_IntegerValue_Int)
2206 {
2207     LocalScope scope(vm_);
2208     CalculateForTime();
2209     int num = 789; // 789 = random number
2210     Local<JSValueRef> targetInt = IntegerRef::New(vm_, num);
2211     gettimeofday(&g_beginTime, nullptr);
2212     for (int i = 0; i < NUM_COUNT; i++) {
2213         int64_t i64 = targetInt->IntegerValue(vm_);
2214         UNUSED(i64);
2215     }
2216     gettimeofday(&g_endTime, nullptr);
2217     TEST_TIME(JSValueRef_IntegerValue_Int);
2218 }
2219 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_Uint32Value)2220 HWTEST_F_L0(JSNApiSplTest, JSValueRef_Uint32Value)
2221 {
2222     LocalScope scope(vm_);
2223     CalculateForTime();
2224     unsigned int num = 456; // 456 = random number
2225     Local<JSValueRef> targetUInt = IntegerRef::NewFromUnsigned(vm_, num);
2226     gettimeofday(&g_beginTime, nullptr);
2227     for (int i = 0; i < NUM_COUNT; i++) {
2228         uint32_t ui = targetUInt->Uint32Value(vm_);
2229         UNUSED(ui);
2230     }
2231     gettimeofday(&g_endTime, nullptr);
2232     TEST_TIME(JSValueRef_Uint32Value);
2233 }
2234 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_ToNativePointer_String)2235 HWTEST_F_L0(JSNApiSplTest, JSValueRef_ToNativePointer_String)
2236 {
2237     LocalScope scope(vm_);
2238     CalculateForTime();
2239     void *vp1 = static_cast<void *>(new std::string("test1"));
2240     Local<JSValueRef> tag = NativePointerRef::New(vm_, vp1);
2241     gettimeofday(&g_beginTime, nullptr);
2242     for (int i = 0; i < NUM_COUNT; i++) {
2243         Local<NativePointerRef> npr = tag->ToNativePointer(vm_);
2244         UNUSED(npr);
2245     }
2246     gettimeofday(&g_endTime, nullptr);
2247     TEST_TIME(JSValueRef_ToNativePointer_String);
2248 }
2249 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_ToNativePointer_Int)2250 HWTEST_F_L0(JSNApiSplTest, JSValueRef_ToNativePointer_Int)
2251 {
2252     LocalScope scope(vm_);
2253     CalculateForTime();
2254     void *vp1 = static_cast<void *>(new int(123)); // 123 = random number
2255     Local<JSValueRef> tag = NativePointerRef::New(vm_, vp1);
2256     gettimeofday(&g_beginTime, nullptr);
2257     for (int i = 0; i < NUM_COUNT; i++) {
2258         Local<NativePointerRef> npr = tag->ToNativePointer(vm_);
2259         UNUSED(npr);
2260     }
2261     gettimeofday(&g_endTime, nullptr);
2262     TEST_TIME(JSValueRef_ToNativePointer_Int);
2263 }
2264 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_ToNativePointer_Double)2265 HWTEST_F_L0(JSNApiSplTest, JSValueRef_ToNativePointer_Double)
2266 {
2267     LocalScope scope(vm_);
2268     CalculateForTime();
2269     void *vp1 = static_cast<void *>(new double(123.456)); // 123.456 = random number
2270     Local<JSValueRef> tag = NativePointerRef::New(vm_, vp1);
2271     gettimeofday(&g_beginTime, nullptr);
2272     for (int i = 0; i < NUM_COUNT; i++) {
2273         Local<NativePointerRef> npr = tag->ToNativePointer(vm_);
2274         UNUSED(npr);
2275     }
2276     gettimeofday(&g_endTime, nullptr);
2277     TEST_TIME(JSValueRef_ToNativePointer_Double);
2278 }
2279 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_ToNativePointer_Char)2280 HWTEST_F_L0(JSNApiSplTest, JSValueRef_ToNativePointer_Char)
2281 {
2282     LocalScope scope(vm_);
2283     CalculateForTime();
2284     void *vp1 = static_cast<void *>(new char('a'));
2285     Local<JSValueRef> tag = NativePointerRef::New(vm_, vp1);
2286     gettimeofday(&g_beginTime, nullptr);
2287     for (int i = 0; i < NUM_COUNT; i++) {
2288         Local<NativePointerRef> npr = tag->ToNativePointer(vm_);
2289         UNUSED(npr);
2290     }
2291     gettimeofday(&g_endTime, nullptr);
2292     TEST_TIME(JSValueRef_ToNativePointer_Char);
2293 }
2294 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_ToNativePointer_Long)2295 HWTEST_F_L0(JSNApiSplTest, JSValueRef_ToNativePointer_Long)
2296 {
2297     LocalScope scope(vm_);
2298     CalculateForTime();
2299     void *vp1 = static_cast<void *>(new long(123456)); // 123456 = random number
2300     Local<JSValueRef> tag = NativePointerRef::New(vm_, vp1);
2301     gettimeofday(&g_beginTime, nullptr);
2302     for (int i = 0; i < NUM_COUNT; i++) {
2303         Local<NativePointerRef> npr = tag->ToNativePointer(vm_);
2304         UNUSED(npr);
2305     }
2306     gettimeofday(&g_endTime, nullptr);
2307     TEST_TIME(JSValueRef_ToNativePointer_Long);
2308 }
2309 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_IsUndefined_False)2310 HWTEST_F_L0(JSNApiSplTest, JSValueRef_IsUndefined_False)
2311 {
2312     LocalScope scope(vm_);
2313     CalculateForTime();
2314     int num = 123; // 123 = random number
2315     Local<JSValueRef> tag = IntegerRef::New(vm_, num);
2316     gettimeofday(&g_beginTime, nullptr);
2317     for (int i = 0; i < NUM_COUNT; i++) {
2318         bool b = tag->IsUndefined();
2319         UNUSED(b);
2320     }
2321     gettimeofday(&g_endTime, nullptr);
2322     TEST_TIME(JSValueRef_IsUndefined_False);
2323 }
2324 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_IsUndefined_True)2325 HWTEST_F_L0(JSNApiSplTest, JSValueRef_IsUndefined_True)
2326 {
2327     LocalScope scope(vm_);
2328     CalculateForTime();
2329     Local<JSValueRef> tag = JSValueRef::Undefined(vm_);
2330     gettimeofday(&g_beginTime, nullptr);
2331     for (int i = 0; i < NUM_COUNT; i++) {
2332         bool b = tag->IsUndefined();
2333         UNUSED(b);
2334     }
2335     gettimeofday(&g_endTime, nullptr);
2336     TEST_TIME(JSValueRef_IsUndefined_True);
2337 }
2338 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_IsNull_False)2339 HWTEST_F_L0(JSNApiSplTest, JSValueRef_IsNull_False)
2340 {
2341     LocalScope scope(vm_);
2342     CalculateForTime();
2343     int num = 123; // 123 = random number
2344     Local<JSValueRef> tag = IntegerRef::New(vm_, num);
2345     gettimeofday(&g_beginTime, nullptr);
2346     for (int i = 0; i < NUM_COUNT; i++) {
2347         bool b = tag->IsNull();
2348         UNUSED(b);
2349     }
2350     gettimeofday(&g_endTime, nullptr);
2351     TEST_TIME(JSValueRef_IsNull_False);
2352 }
2353 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_IsNull_True)2354 HWTEST_F_L0(JSNApiSplTest, JSValueRef_IsNull_True)
2355 {
2356     LocalScope scope(vm_);
2357     CalculateForTime();
2358     Local<JSValueRef> tag = JSValueRef::Null(vm_);
2359     gettimeofday(&g_beginTime, nullptr);
2360     for (int i = 0; i < NUM_COUNT; i++) {
2361         bool b = tag->IsNull();
2362         UNUSED(b);
2363     }
2364     gettimeofday(&g_endTime, nullptr);
2365     TEST_TIME(JSValueRef_IsNull_True);
2366 }
2367 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_WithinInt32_False)2368 HWTEST_F_L0(JSNApiSplTest, JSValueRef_WithinInt32_False)
2369 {
2370     LocalScope scope(vm_);
2371     CalculateForTime();
2372     Local<JSValueRef> tag = StringRef::NewFromUtf8(vm_, "abcd");
2373     gettimeofday(&g_beginTime, nullptr);
2374     for (int i = 0; i < NUM_COUNT; i++) {
2375         bool b = tag->WithinInt32();
2376         UNUSED(b);
2377     }
2378     gettimeofday(&g_endTime, nullptr);
2379     TEST_TIME(JSValueRef_WithinInt32_False);
2380 }
2381 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_WithinInt32_True)2382 HWTEST_F_L0(JSNApiSplTest, JSValueRef_WithinInt32_True)
2383 {
2384     LocalScope scope(vm_);
2385     CalculateForTime();
2386     int num = 456; // 456 = random number
2387     Local<JSValueRef> tag = IntegerRef::New(vm_, num);
2388     gettimeofday(&g_beginTime, nullptr);
2389     for (int i = 0; i < NUM_COUNT; i++) {
2390         bool b = tag->WithinInt32();
2391         UNUSED(b);
2392     }
2393     gettimeofday(&g_endTime, nullptr);
2394     TEST_TIME(JSValueRef_WithinInt32_True);
2395 }
2396 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_IsBoolean_False)2397 HWTEST_F_L0(JSNApiSplTest, JSValueRef_IsBoolean_False)
2398 {
2399     LocalScope scope(vm_);
2400     CalculateForTime();
2401     int num = 123; // 123 = random number
2402     Local<JSValueRef> tag = IntegerRef::New(vm_, num);
2403     gettimeofday(&g_beginTime, nullptr);
2404     for (int i = 0; i < NUM_COUNT; i++) {
2405         bool b = tag->IsBoolean();
2406         UNUSED(b);
2407     }
2408     gettimeofday(&g_endTime, nullptr);
2409     TEST_TIME(JSValueRef_IsBoolean_False);
2410 }
2411 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_IsBoolean_True)2412 HWTEST_F_L0(JSNApiSplTest, JSValueRef_IsBoolean_True)
2413 {
2414     LocalScope scope(vm_);
2415     CalculateForTime();
2416     Local<JSValueRef> tag = BooleanRef::New(vm_, false);
2417     gettimeofday(&g_beginTime, nullptr);
2418     for (int i = 0; i < NUM_COUNT; i++) {
2419         bool b = tag->IsBoolean();
2420         UNUSED(b);
2421     }
2422     gettimeofday(&g_endTime, nullptr);
2423     TEST_TIME(JSValueRef_IsBoolean_True);
2424 }
2425 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_IsString_False)2426 HWTEST_F_L0(JSNApiSplTest, JSValueRef_IsString_False)
2427 {
2428     LocalScope scope(vm_);
2429     CalculateForTime();
2430     Local<JSValueRef> tag = BooleanRef::New(vm_, true);
2431     gettimeofday(&g_beginTime, nullptr);
2432     for (int i = 0; i < NUM_COUNT; i++) {
2433         bool b = tag->IsString(vm_);
2434         UNUSED(b);
2435     }
2436     gettimeofday(&g_endTime, nullptr);
2437     TEST_TIME(JSValueRef_IsString_False);
2438 }
2439 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_IsString_True)2440 HWTEST_F_L0(JSNApiSplTest, JSValueRef_IsString_True)
2441 {
2442     LocalScope scope(vm_);
2443     CalculateForTime();
2444     Local<JSValueRef> tag = StringRef::NewFromUtf8(vm_, "abc");
2445     gettimeofday(&g_beginTime, nullptr);
2446     for (int i = 0; i < NUM_COUNT; i++) {
2447         bool b = tag->IsString(vm_);
2448         UNUSED(b);
2449     }
2450     gettimeofday(&g_endTime, nullptr);
2451     TEST_TIME(JSValueRef_IsString_True);
2452 }
2453 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_IsProxy_False)2454 HWTEST_F_L0(JSNApiSplTest, JSValueRef_IsProxy_False)
2455 {
2456     LocalScope scope(vm_);
2457     CalculateForTime();
2458     Local<JSValueRef> tag = BooleanRef::New(vm_, true);
2459     gettimeofday(&g_beginTime, nullptr);
2460     for (int i = 0; i < NUM_COUNT; i++) {
2461         bool b = tag->IsProxy(vm_);
2462         UNUSED(b);
2463     }
2464     gettimeofday(&g_endTime, nullptr);
2465     TEST_TIME(JSValueRef_IsProxy_False);
2466 }
2467 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_IsProxy_True)2468 HWTEST_F_L0(JSNApiSplTest, JSValueRef_IsProxy_True)
2469 {
2470     LocalScope scope(vm_);
2471     CalculateForTime();
2472     Local<JSValueRef> tag = ProxyRef::New(vm_);
2473     gettimeofday(&g_beginTime, nullptr);
2474     for (int i = 0; i < NUM_COUNT; i++) {
2475         bool b = tag->IsProxy(vm_);
2476         UNUSED(b);
2477     }
2478     gettimeofday(&g_endTime, nullptr);
2479     TEST_TIME(JSValueRef_IsProxy_True);
2480 }
2481 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_IsPromise_False)2482 HWTEST_F_L0(JSNApiSplTest, JSValueRef_IsPromise_False)
2483 {
2484     LocalScope scope(vm_);
2485     CalculateForTime();
2486     Local<JSValueRef> tag = BooleanRef::New(vm_, true);
2487     gettimeofday(&g_beginTime, nullptr);
2488     for (int i = 0; i < NUM_COUNT; i++) {
2489         bool b = tag->IsPromise(vm_);
2490         UNUSED(b);
2491     }
2492     gettimeofday(&g_endTime, nullptr);
2493     TEST_TIME(JSValueRef_IsPromise_False);
2494 }
2495 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_IsPromise_True)2496 HWTEST_F_L0(JSNApiSplTest, JSValueRef_IsPromise_True)
2497 {
2498     LocalScope scope(vm_);
2499     CalculateForTime();
2500     Local<JSValueRef> tag = PromiseCapabilityRef::New(vm_)->GetPromise(vm_);
2501     gettimeofday(&g_beginTime, nullptr);
2502     for (int i = 0; i < NUM_COUNT; i++) {
2503         bool b = tag->IsPromise(vm_);
2504         UNUSED(b);
2505     }
2506     gettimeofday(&g_endTime, nullptr);
2507     TEST_TIME(JSValueRef_IsPromise_True);
2508 }
2509 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_IsDataView_False)2510 HWTEST_F_L0(JSNApiSplTest, JSValueRef_IsDataView_False)
2511 {
2512     LocalScope scope(vm_);
2513     CalculateForTime();
2514     Local<JSValueRef> tag = BooleanRef::New(vm_, true);
2515     gettimeofday(&g_beginTime, nullptr);
2516     for (int i = 0; i < NUM_COUNT; i++) {
2517         bool b = tag->IsDataView(vm_);
2518         UNUSED(b);
2519     }
2520     gettimeofday(&g_endTime, nullptr);
2521     TEST_TIME(JSValueRef_IsDataView_False);
2522 }
2523 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_IsDataView_True)2524 HWTEST_F_L0(JSNApiSplTest, JSValueRef_IsDataView_True)
2525 {
2526     LocalScope scope(vm_);
2527     CalculateForTime();
2528     int num = 0; // 0 = random number
2529     Local<JSValueRef> tag = DataViewRef::New(vm_, ArrayBufferRef::New(vm_, num), num, num);
2530     gettimeofday(&g_beginTime, nullptr);
2531     for (int i = 0; i < NUM_COUNT; i++) {
2532         bool b = tag->IsDataView(vm_);
2533         UNUSED(b);
2534     }
2535     gettimeofday(&g_endTime, nullptr);
2536     TEST_TIME(JSValueRef_IsDataView_True);
2537 }
2538 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_IsWeakRef_False)2539 HWTEST_F_L0(JSNApiSplTest, JSValueRef_IsWeakRef_False)
2540 {
2541     LocalScope scope(vm_);
2542     CalculateForTime();
2543     Local<JSValueRef> tag = BooleanRef::New(vm_, true);
2544     gettimeofday(&g_beginTime, nullptr);
2545     for (int i = 0; i < NUM_COUNT; i++) {
2546         bool b = tag->IsWeakRef(vm_);
2547         UNUSED(b);
2548     }
2549     gettimeofday(&g_endTime, nullptr);
2550     TEST_TIME(JSValueRef_IsWeakRef_False);
2551 }
2552 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_IsWeakMap_False)2553 HWTEST_F_L0(JSNApiSplTest, JSValueRef_IsWeakMap_False)
2554 {
2555     LocalScope scope(vm_);
2556     CalculateForTime();
2557     Local<JSValueRef> tag = BooleanRef::New(vm_, true);
2558     gettimeofday(&g_beginTime, nullptr);
2559     for (int i = 0; i < NUM_COUNT; i++) {
2560         bool b = tag->IsWeakMap(vm_);
2561         UNUSED(b);
2562     }
2563     gettimeofday(&g_endTime, nullptr);
2564     TEST_TIME(JSValueRef_IsWeakMap_False);
2565 }
2566 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_IsWeakMap_True)2567 HWTEST_F_L0(JSNApiSplTest, JSValueRef_IsWeakMap_True)
2568 {
2569     LocalScope scope(vm_);
2570     CalculateForTime();
2571     Local<JSValueRef> tag = WeakMapRef::New(vm_);
2572     gettimeofday(&g_beginTime, nullptr);
2573     for (int i = 0; i < NUM_COUNT; i++) {
2574         bool b = tag->IsWeakMap(vm_);
2575         UNUSED(b);
2576     }
2577     gettimeofday(&g_endTime, nullptr);
2578     TEST_TIME(JSValueRef_IsWeakMap_True);
2579 }
2580 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_IsWeakSet_False)2581 HWTEST_F_L0(JSNApiSplTest, JSValueRef_IsWeakSet_False)
2582 {
2583     LocalScope scope(vm_);
2584     CalculateForTime();
2585     Local<JSValueRef> tag = JSValueRef::Null(vm_);
2586     gettimeofday(&g_beginTime, nullptr);
2587     for (int i = 0; i < NUM_COUNT; i++) {
2588         bool b = tag->IsWeakSet(vm_);
2589         UNUSED(b);
2590     }
2591     gettimeofday(&g_endTime, nullptr);
2592     TEST_TIME(JSValueRef_IsWeakSet_False);
2593 }
2594 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_IsWeakSet_True)2595 HWTEST_F_L0(JSNApiSplTest, JSValueRef_IsWeakSet_True)
2596 {
2597     LocalScope scope(vm_);
2598     CalculateForTime();
2599     Local<JSValueRef> tag = WeakSetRef::New(vm_);
2600     gettimeofday(&g_beginTime, nullptr);
2601     for (int i = 0; i < NUM_COUNT; i++) {
2602         bool b = tag->IsWeakSet(vm_);
2603         UNUSED(b);
2604     }
2605     gettimeofday(&g_endTime, nullptr);
2606     TEST_TIME(JSValueRef_IsWeakSet_True);
2607 }
2608 
HWTEST_F_L0(JSNApiSplTest,Global_Global)2609 HWTEST_F_L0(JSNApiSplTest, Global_Global)
2610 {
2611     LocalScope scope(vm_);
2612     CalculateForTime();
2613     Global<JSValueRef> param;
2614     gettimeofday(&g_beginTime, nullptr);
2615     for (int i = 0; i < NUM_COUNT; i++) {
2616         Global<JSValueRef> global(param);
2617         UNUSED(global);
2618     }
2619     gettimeofday(&g_endTime, nullptr);
2620     TEST_TIME(Global_Global);
2621 }
2622 
HWTEST_F_L0(JSNApiSplTest,Global_OperatorEqual)2623 HWTEST_F_L0(JSNApiSplTest, Global_OperatorEqual)
2624 {
2625     LocalScope scope(vm_);
2626     CalculateForTime();
2627     Global<JSValueRef> param;
2628     Global<JSValueRef> global;
2629     gettimeofday(&g_beginTime, nullptr);
2630     for (int i = 0; i < NUM_COUNT; i++) {
2631         global = param;
2632     }
2633     gettimeofday(&g_endTime, nullptr);
2634     TEST_TIME(Global_OperatorEqual);
2635 }
2636 
HWTEST_F_L0(JSNApiSplTest,Global_GlobalMove)2637 HWTEST_F_L0(JSNApiSplTest, Global_GlobalMove)
2638 {
2639     LocalScope scope(vm_);
2640     CalculateForTime();
2641     Global<JSValueRef> param;
2642     gettimeofday(&g_beginTime, nullptr);
2643     for (int i = 0; i < NUM_COUNT; i++) {
2644         Global<JSValueRef> global(std::move(param));
2645         UNUSED(global);
2646     }
2647     gettimeofday(&g_endTime, nullptr);
2648     TEST_TIME(Global_GlobalMove);
2649 }
2650 
HWTEST_F_L0(JSNApiSplTest,Global_OperatorEqualMove)2651 HWTEST_F_L0(JSNApiSplTest, Global_OperatorEqualMove)
2652 {
2653     LocalScope scope(vm_);
2654     CalculateForTime();
2655     Global<JSValueRef> param;
2656     Global<JSValueRef> global;
2657     gettimeofday(&g_beginTime, nullptr);
2658     for (int i = 0; i < NUM_COUNT; i++) {
2659         global = std::move(param);
2660     }
2661     gettimeofday(&g_endTime, nullptr);
2662     TEST_TIME(Global_OperatorEqualMove);
2663 }
2664 
HWTEST_F_L0(JSNApiSplTest,Global_Global_VM_Local)2665 HWTEST_F_L0(JSNApiSplTest, Global_Global_VM_Local)
2666 {
2667     LocalScope scope(vm_);
2668     CalculateForTime();
2669     Local<BooleanRef> current = BooleanRef::New(vm_, true);
2670     gettimeofday(&g_beginTime, nullptr);
2671     for (int i = 0; i < NUM_COUNT; i++) {
2672         Global<JSValueRef> global(vm_, current);
2673         UNUSED(global);
2674     }
2675     gettimeofday(&g_endTime, nullptr);
2676     TEST_TIME(Global_Global_VM_Local);
2677 }
2678 
HWTEST_F_L0(JSNApiSplTest,Global_Global_VM_Global)2679 HWTEST_F_L0(JSNApiSplTest, Global_Global_VM_Global)
2680 {
2681     LocalScope scope(vm_);
2682     CalculateForTime();
2683     Global<BooleanRef> current(vm_, BooleanRef::New(vm_, true));
2684     gettimeofday(&g_beginTime, nullptr);
2685     for (int i = 0; i < NUM_COUNT; i++) {
2686         Global<JSValueRef> global(vm_, current);
2687         UNUSED(global);
2688     }
2689     gettimeofday(&g_endTime, nullptr);
2690     TEST_TIME(Global_Global_VM_Global);
2691 }
2692 
HWTEST_F_L0(JSNApiSplTest,Global_ToLocal)2693 HWTEST_F_L0(JSNApiSplTest, Global_ToLocal)
2694 {
2695     LocalScope scope(vm_);
2696     CalculateForTime();
2697     Global<BooleanRef> global(vm_, BooleanRef::New(vm_, true));
2698     gettimeofday(&g_beginTime, nullptr);
2699     for (int i = 0; i < NUM_COUNT; i++) {
2700         Local<JSValueRef> local = global.ToLocal();
2701         UNUSED(local);
2702     }
2703     gettimeofday(&g_endTime, nullptr);
2704     TEST_TIME(Global_ToLocal);
2705 }
2706 
HWTEST_F_L0(JSNApiSplTest,Global_ToLocal_VM)2707 HWTEST_F_L0(JSNApiSplTest, Global_ToLocal_VM)
2708 {
2709     LocalScope scope(vm_);
2710     CalculateForTime();
2711     Global<BooleanRef> global(vm_, BooleanRef::New(vm_, true));
2712     gettimeofday(&g_beginTime, nullptr);
2713     for (int i = 0; i < NUM_COUNT; i++) {
2714         Local<JSValueRef> local = global.ToLocal(vm_);
2715         UNUSED(local);
2716     }
2717     gettimeofday(&g_endTime, nullptr);
2718     TEST_TIME(Global_ToLocal_VM);
2719 }
2720 
HWTEST_F_L0(JSNApiSplTest,Global_Empty)2721 HWTEST_F_L0(JSNApiSplTest, Global_Empty)
2722 {
2723     LocalScope scope(vm_);
2724     CalculateForTime();
2725     Global<BooleanRef> global(vm_, BooleanRef::New(vm_, true));
2726     gettimeofday(&g_beginTime, nullptr);
2727     for (int i = 0; i < NUM_COUNT; i++) {
2728         global.Empty();
2729     }
2730     gettimeofday(&g_endTime, nullptr);
2731     TEST_TIME(Global_Empty);
2732 }
2733 
HWTEST_F_L0(JSNApiSplTest,Global_FreeGlobalHandleAddr)2734 HWTEST_F_L0(JSNApiSplTest, Global_FreeGlobalHandleAddr)
2735 {
2736     LocalScope scope(vm_);
2737     CalculateForTime();
2738     Global<BooleanRef> global(vm_, BooleanRef::New(vm_, true));
2739     gettimeofday(&g_beginTime, nullptr);
2740     for (int i = 0; i < NUM_COUNT; i++) {
2741         global.FreeGlobalHandleAddr();
2742     }
2743     gettimeofday(&g_endTime, nullptr);
2744     TEST_TIME(Global_FreeGlobalHandleAddr);
2745 }
2746 
HWTEST_F_L0(JSNApiSplTest,Global_OperatorStar)2747 HWTEST_F_L0(JSNApiSplTest, Global_OperatorStar)
2748 {
2749     LocalScope scope(vm_);
2750     CalculateForTime();
2751     Global<JSValueRef> global(vm_, BooleanRef::New(vm_, true));
2752     gettimeofday(&g_beginTime, nullptr);
2753     for (int i = 0; i < NUM_COUNT; i++) {
2754         bool b = (*global)->BooleaValue(vm_);
2755         UNUSED(b);
2756     }
2757     gettimeofday(&g_endTime, nullptr);
2758     TEST_TIME(Global_OperatorStar);
2759 }
2760 
HWTEST_F_L0(JSNApiSplTest,Global_OperatorPointTo)2761 HWTEST_F_L0(JSNApiSplTest, Global_OperatorPointTo)
2762 {
2763     LocalScope scope(vm_);
2764     CalculateForTime();
2765     Global<JSValueRef> global(vm_, BooleanRef::New(vm_, true));
2766     gettimeofday(&g_beginTime, nullptr);
2767     for (int i = 0; i < NUM_COUNT; i++) {
2768         bool b = global->BooleaValue(vm_);
2769         UNUSED(b);
2770     }
2771     gettimeofday(&g_endTime, nullptr);
2772     TEST_TIME(Global_OperatorPointTo);
2773 }
2774 
HWTEST_F_L0(JSNApiSplTest,Global_IsEmpty_True)2775 HWTEST_F_L0(JSNApiSplTest, Global_IsEmpty_True)
2776 {
2777     LocalScope scope(vm_);
2778     CalculateForTime();
2779     Global<JSValueRef> global;
2780     gettimeofday(&g_beginTime, nullptr);
2781     for (int i = 0; i < NUM_COUNT; i++) {
2782         bool b = global.IsEmpty();
2783         UNUSED(b);
2784     }
2785     gettimeofday(&g_endTime, nullptr);
2786     TEST_TIME(Global_IsEmpty_True);
2787 }
2788 
HWTEST_F_L0(JSNApiSplTest,Global_IsEmpty_False)2789 HWTEST_F_L0(JSNApiSplTest, Global_IsEmpty_False)
2790 {
2791     LocalScope scope(vm_);
2792     CalculateForTime();
2793     Global<JSValueRef> global(vm_, BooleanRef::New(vm_, true));
2794     gettimeofday(&g_beginTime, nullptr);
2795     for (int i = 0; i < NUM_COUNT; i++) {
2796         bool b = global.IsEmpty();
2797         UNUSED(b);
2798     }
2799     gettimeofday(&g_endTime, nullptr);
2800     TEST_TIME(Global_IsEmpty_False);
2801 }
2802 
HWTEST_F_L0(JSNApiSplTest,Global_SetWeak)2803 HWTEST_F_L0(JSNApiSplTest, Global_SetWeak)
2804 {
2805     LocalScope scope(vm_);
2806     CalculateForTime();
2807     Global<JSValueRef> global(vm_, BooleanRef::New(vm_, true));
2808     gettimeofday(&g_beginTime, nullptr);
2809     for (int i = 0; i < NUM_COUNT; i++) {
2810         global.SetWeak();
2811     }
2812     gettimeofday(&g_endTime, nullptr);
2813     TEST_TIME(Global_SetWeak);
2814 }
2815 
HWTEST_F_L0(JSNApiSplTest,Global_SetWeakCallback_Int)2816 HWTEST_F_L0(JSNApiSplTest, Global_SetWeakCallback_Int)
2817 {
2818     LocalScope scope(vm_);
2819     CalculateForTime();
2820     Global<JSValueRef> global(vm_, BooleanRef::New(vm_, true));
2821     void *ref = new int(123); // 123 = random number
2822     WeakRefClearCallBack freeGlobalCallBack = FreeGlobalCallBack<int>;
2823     WeakRefClearCallBack nativeFinalizeCallback = NativeFinalizeCallback<int>;
2824     gettimeofday(&g_beginTime, nullptr);
2825     for (int i = 0; i < NUM_COUNT; i++) {
2826         global.SetWeakCallback(ref, freeGlobalCallBack, nativeFinalizeCallback);
2827     }
2828     gettimeofday(&g_endTime, nullptr);
2829     TEST_TIME(Global_SetWeakCallback_Int);
2830 }
2831 
HWTEST_F_L0(JSNApiSplTest,Global_SetWeakCallback_String)2832 HWTEST_F_L0(JSNApiSplTest, Global_SetWeakCallback_String)
2833 {
2834     LocalScope scope(vm_);
2835     CalculateForTime();
2836     Global<JSValueRef> global(vm_, BooleanRef::New(vm_, true));
2837     void *ref = new std::string("abc");
2838     WeakRefClearCallBack freeGlobalCallBack = FreeGlobalCallBack<std::string>;
2839     WeakRefClearCallBack nativeFinalizeCallback = NativeFinalizeCallback<std::string>;
2840     gettimeofday(&g_beginTime, nullptr);
2841     for (int i = 0; i < NUM_COUNT; i++) {
2842         global.SetWeakCallback(ref, freeGlobalCallBack, nativeFinalizeCallback);
2843     }
2844     gettimeofday(&g_endTime, nullptr);
2845     TEST_TIME(Global_SetWeakCallback_String);
2846 }
2847 
HWTEST_F_L0(JSNApiSplTest,Global_SetWeakCallback_Double)2848 HWTEST_F_L0(JSNApiSplTest, Global_SetWeakCallback_Double)
2849 {
2850     LocalScope scope(vm_);
2851     CalculateForTime();
2852     Global<JSValueRef> global(vm_, BooleanRef::New(vm_, true));
2853     void *ref = new double(123.456); // 123.456 = random number
2854     WeakRefClearCallBack freeGlobalCallBack = FreeGlobalCallBack<double>;
2855     WeakRefClearCallBack nativeFinalizeCallback = NativeFinalizeCallback<double>;
2856     gettimeofday(&g_beginTime, nullptr);
2857     for (int i = 0; i < NUM_COUNT; i++) {
2858         global.SetWeakCallback(ref, freeGlobalCallBack, nativeFinalizeCallback);
2859     }
2860     gettimeofday(&g_endTime, nullptr);
2861     TEST_TIME(Global_SetWeakCallback_Double);
2862 }
2863 
HWTEST_F_L0(JSNApiSplTest,Global_SetWeakCallback_Char)2864 HWTEST_F_L0(JSNApiSplTest, Global_SetWeakCallback_Char)
2865 {
2866     LocalScope scope(vm_);
2867     CalculateForTime();
2868     Global<JSValueRef> global(vm_, BooleanRef::New(vm_, true));
2869     void *ref = new char('a');
2870     WeakRefClearCallBack freeGlobalCallBack = FreeGlobalCallBack<char>;
2871     WeakRefClearCallBack nativeFinalizeCallback = NativeFinalizeCallback<char>;
2872     gettimeofday(&g_beginTime, nullptr);
2873     for (int i = 0; i < NUM_COUNT; i++) {
2874         global.SetWeakCallback(ref, freeGlobalCallBack, nativeFinalizeCallback);
2875     }
2876     gettimeofday(&g_endTime, nullptr);
2877     TEST_TIME(Global_SetWeakCallback_Char);
2878 }
2879 
HWTEST_F_L0(JSNApiSplTest,Global_SetWeakCallback_Long)2880 HWTEST_F_L0(JSNApiSplTest, Global_SetWeakCallback_Long)
2881 {
2882     LocalScope scope(vm_);
2883     CalculateForTime();
2884     Global<JSValueRef> global(vm_, BooleanRef::New(vm_, true));
2885     void *ref = new long(123456); // 123456 = random number
2886     WeakRefClearCallBack freeGlobalCallBack = FreeGlobalCallBack<long>;
2887     WeakRefClearCallBack nativeFinalizeCallback = NativeFinalizeCallback<long>;
2888     gettimeofday(&g_beginTime, nullptr);
2889     for (int i = 0; i < NUM_COUNT; i++) {
2890         global.SetWeakCallback(ref, freeGlobalCallBack, nativeFinalizeCallback);
2891     }
2892     gettimeofday(&g_endTime, nullptr);
2893     TEST_TIME(Global_SetWeakCallback_Long);
2894 }
2895 
HWTEST_F_L0(JSNApiSplTest,Global_ClearWeak)2896 HWTEST_F_L0(JSNApiSplTest, Global_ClearWeak)
2897 {
2898     LocalScope scope(vm_);
2899     CalculateForTime();
2900     Global<JSValueRef> global(vm_, BooleanRef::New(vm_, true));
2901     gettimeofday(&g_beginTime, nullptr);
2902     for (int i = 0; i < NUM_COUNT; i++) {
2903         global.ClearWeak();
2904     }
2905     gettimeofday(&g_endTime, nullptr);
2906     TEST_TIME(Global_ClearWeak);
2907 }
2908 
HWTEST_F_L0(JSNApiSplTest,Global_IsWeak_False)2909 HWTEST_F_L0(JSNApiSplTest, Global_IsWeak_False)
2910 {
2911     LocalScope scope(vm_);
2912     CalculateForTime();
2913     Global<JSValueRef> global(vm_, BooleanRef::New(vm_, true));
2914     gettimeofday(&g_beginTime, nullptr);
2915     for (int i = 0; i < NUM_COUNT; i++) {
2916         bool b = global.IsWeak();
2917         UNUSED(b);
2918     }
2919     gettimeofday(&g_endTime, nullptr);
2920     TEST_TIME(Global_IsWeak_False);
2921 }
2922 
HWTEST_F_L0(JSNApiSplTest,Global_IsWeak_True)2923 HWTEST_F_L0(JSNApiSplTest, Global_IsWeak_True)
2924 {
2925     LocalScope scope(vm_);
2926     CalculateForTime();
2927     Global<JSValueRef> global(vm_, BooleanRef::New(vm_, true));
2928     global.SetWeak();
2929     gettimeofday(&g_beginTime, nullptr);
2930     for (int i = 0; i < NUM_COUNT; i++) {
2931         bool b = global.IsWeak();
2932         UNUSED(b);
2933     }
2934     gettimeofday(&g_endTime, nullptr);
2935     TEST_TIME(Global_IsWeak_True);
2936 }
2937 
HWTEST_F_L0(JSNApiSplTest,StringRef_Cast)2938 HWTEST_F_L0(JSNApiSplTest, StringRef_Cast)
2939 {
2940     LocalScope scope(vm_);
2941     CalculateForTime();
2942     Local<JSValueRef> local = StringRef::NewFromUtf8(vm_, "abcdefbb");
2943     JSValueRef *jsValue = (*local);
2944     gettimeofday(&g_beginTime, nullptr);
2945     for (int i = 0; i < NUM_COUNT; i++) {
2946         StringRef *str = StringRef::Cast(jsValue);
2947         UNUSED(str);
2948     }
2949     gettimeofday(&g_endTime, nullptr);
2950     TEST_TIME(StringRef_Cast);
2951 }
2952 
HWTEST_F_L0(JSNApiSplTest,StringRef_NewFromUtf8)2953 HWTEST_F_L0(JSNApiSplTest, StringRef_NewFromUtf8)
2954 {
2955     LocalScope scope(vm_);
2956     CalculateForTime();
2957     gettimeofday(&g_beginTime, nullptr);
2958     for (int i = 0; i < NUM_COUNT; i++) {
2959         Local<StringRef> local = StringRef::NewFromUtf8(vm_, "abcdefbb");
2960         UNUSED(local);
2961     }
2962     gettimeofday(&g_endTime, nullptr);
2963     TEST_TIME(StringRef_NewFromUtf8);
2964 }
2965 
HWTEST_F_L0(JSNApiSplTest,StringRef_NewFromUtf8_0)2966 HWTEST_F_L0(JSNApiSplTest, StringRef_NewFromUtf8_0)
2967 {
2968     LocalScope scope(vm_);
2969     CalculateForTime();
2970     gettimeofday(&g_beginTime, nullptr);
2971     for (int i = 0; i < NUM_COUNT; i++) {
2972         Local<StringRef> local = StringRef::NewFromUtf8(vm_, "abcdefbb", 0);
2973         UNUSED(local);
2974     }
2975     gettimeofday(&g_endTime, nullptr);
2976     TEST_TIME(StringRef_NewFromUtf8_0);
2977 }
2978 
HWTEST_F_L0(JSNApiSplTest,StringRef_NewFromUtf8_3)2979 HWTEST_F_L0(JSNApiSplTest, StringRef_NewFromUtf8_3)
2980 {
2981     LocalScope scope(vm_);
2982     CalculateForTime();
2983     gettimeofday(&g_beginTime, nullptr);
2984     for (int i = 0; i < NUM_COUNT; i++) {
2985         Local<StringRef> local = StringRef::NewFromUtf8(vm_, "abcdefbb", 3);
2986         UNUSED(local);
2987     }
2988     gettimeofday(&g_endTime, nullptr);
2989     TEST_TIME(StringRef_NewFromUtf8_3);
2990 }
2991 
HWTEST_F_L0(JSNApiSplTest,StringRef_NewFromUtf16)2992 HWTEST_F_L0(JSNApiSplTest, StringRef_NewFromUtf16)
2993 {
2994     LocalScope scope(vm_);
2995     CalculateForTime();
2996     const char16_t *utf16 = u"您好,华为!";
2997     gettimeofday(&g_beginTime, nullptr);
2998     for (int i = 0; i < NUM_COUNT; i++) {
2999         Local<StringRef> local = StringRef::NewFromUtf16(vm_, utf16);
3000         UNUSED(local);
3001     }
3002     gettimeofday(&g_endTime, nullptr);
3003     TEST_TIME(StringRef_NewFromUtf16);
3004 }
3005 
HWTEST_F_L0(JSNApiSplTest,StringRef_NewFromUtf16_0)3006 HWTEST_F_L0(JSNApiSplTest, StringRef_NewFromUtf16_0)
3007 {
3008     LocalScope scope(vm_);
3009     CalculateForTime();
3010     const char16_t *utf16 = u"您好,华为!";
3011     gettimeofday(&g_beginTime, nullptr);
3012     for (int i = 0; i < NUM_COUNT; i++) {
3013         Local<StringRef> local = StringRef::NewFromUtf16(vm_, utf16, 0);
3014         UNUSED(local);
3015     }
3016     gettimeofday(&g_endTime, nullptr);
3017     TEST_TIME(StringRef_NewFromUtf16_0);
3018 }
3019 
HWTEST_F_L0(JSNApiSplTest,StringRef_NewFromUtf16_3)3020 HWTEST_F_L0(JSNApiSplTest, StringRef_NewFromUtf16_3)
3021 {
3022     LocalScope scope(vm_);
3023     CalculateForTime();
3024     const char16_t *utf16 = u"您好,华为!";
3025     gettimeofday(&g_beginTime, nullptr);
3026     for (int i = 0; i < NUM_COUNT; i++) {
3027         Local<StringRef> local = StringRef::NewFromUtf16(vm_, utf16, 3);
3028         UNUSED(local);
3029     }
3030     gettimeofday(&g_endTime, nullptr);
3031     TEST_TIME(StringRef_NewFromUtf16_3);
3032 }
3033 
HWTEST_F_L0(JSNApiSplTest,StringRef_ToString)3034 HWTEST_F_L0(JSNApiSplTest, StringRef_ToString)
3035 {
3036     LocalScope scope(vm_);
3037     CalculateForTime();
3038     Local<StringRef> local = StringRef::NewFromUtf8(vm_, "abcdefbb");
3039     gettimeofday(&g_beginTime, nullptr);
3040     for (int i = 0; i < NUM_COUNT; i++) {
3041         std::string str = local->ToString(vm_);
3042         UNUSED(str);
3043     }
3044     gettimeofday(&g_endTime, nullptr);
3045     TEST_TIME(StringRef_ToString);
3046 }
3047 
HWTEST_F_L0(JSNApiSplTest,StringRef_Length)3048 HWTEST_F_L0(JSNApiSplTest, StringRef_Length)
3049 {
3050     LocalScope scope(vm_);
3051     CalculateForTime();
3052     Local<StringRef> local = StringRef::NewFromUtf8(vm_, "abcdefbb");
3053     gettimeofday(&g_beginTime, nullptr);
3054     for (int i = 0; i < NUM_COUNT; i++) {
3055         uint32_t length = local->Length(vm_);
3056         UNUSED(length);
3057     }
3058     gettimeofday(&g_endTime, nullptr);
3059     TEST_TIME(StringRef_Length);
3060 }
3061 
HWTEST_F_L0(JSNApiSplTest,StringRef_Utf8Length)3062 HWTEST_F_L0(JSNApiSplTest, StringRef_Utf8Length)
3063 {
3064     LocalScope scope(vm_);
3065     CalculateForTime();
3066     Local<StringRef> local = StringRef::NewFromUtf8(vm_, "abcdefbb");
3067     gettimeofday(&g_beginTime, nullptr);
3068     for (int i = 0; i < NUM_COUNT; i++) {
3069         uint32_t length = local->Utf8Length(vm_);
3070         UNUSED(length);
3071     }
3072     gettimeofday(&g_endTime, nullptr);
3073     TEST_TIME(StringRef_Utf8Length);
3074 }
3075 
HWTEST_F_L0(JSNApiSplTest,StringRef_WriteUtf8)3076 HWTEST_F_L0(JSNApiSplTest, StringRef_WriteUtf8)
3077 {
3078     LocalScope scope(vm_);
3079     CalculateForTime();
3080     Local<StringRef> local = StringRef::NewFromUtf8(vm_, "abcdefbb");
3081     char cs[16] = {0};
3082     gettimeofday(&g_beginTime, nullptr);
3083     for (int i = 0; i < NUM_COUNT; i++) {
3084         uint32_t length = local->WriteUtf8(vm_, cs, 6);
3085         UNUSED(length);
3086     }
3087     gettimeofday(&g_endTime, nullptr);
3088     TEST_TIME(StringRef_WriteUtf8);
3089 }
3090 
HWTEST_F_L0(JSNApiSplTest,StringRef_WriteUtf8_all)3091 HWTEST_F_L0(JSNApiSplTest, StringRef_WriteUtf8_all)
3092 {
3093     LocalScope scope(vm_);
3094     CalculateForTime();
3095     Local<StringRef> local = StringRef::NewFromUtf8(vm_, "abcdefbb");
3096     char cs[16] = {0}; // 16 = The size of the character array
3097     gettimeofday(&g_beginTime, nullptr);
3098     for (int i = 0; i < NUM_COUNT; i++) {
3099         uint32_t length = local->WriteUtf8(vm_, cs, local->Length(vm_));
3100         UNUSED(length);
3101     }
3102     gettimeofday(&g_endTime, nullptr);
3103     TEST_TIME(StringRef_WriteUtf8_all);
3104 }
3105 
HWTEST_F_L0(JSNApiSplTest,StringRef_WriteUtf8_0)3106 HWTEST_F_L0(JSNApiSplTest, StringRef_WriteUtf8_0)
3107 {
3108     LocalScope scope(vm_);
3109     CalculateForTime();
3110     Local<StringRef> local = StringRef::NewFromUtf8(vm_, "abcdefbb");
3111     char cs[16] = {0}; // 16 = The size of the character array
3112     gettimeofday(&g_beginTime, nullptr);
3113     for (int i = 0; i < NUM_COUNT; i++) {
3114         uint32_t length = local->WriteUtf8(vm_, cs, 0);
3115         UNUSED(length);
3116     }
3117     gettimeofday(&g_endTime, nullptr);
3118     TEST_TIME(StringRef_WriteUtf8_0);
3119 }
3120 
HWTEST_F_L0(JSNApiSplTest,StringRef_WriteUtf8_true)3121 HWTEST_F_L0(JSNApiSplTest, StringRef_WriteUtf8_true)
3122 {
3123     LocalScope scope(vm_);
3124     CalculateForTime();
3125     Local<StringRef> local = StringRef::NewFromUtf8(vm_, "abcdefbb");
3126     char cs[16] = {0}; // 16 =The size of the character array
3127     gettimeofday(&g_beginTime, nullptr);
3128     for (int i = 0; i < NUM_COUNT; i++) {
3129         uint32_t length = local->WriteUtf8(vm_, cs, 6, true);
3130         UNUSED(length);
3131     }
3132     gettimeofday(&g_endTime, nullptr);
3133     TEST_TIME(StringRef_WriteUtf8_true);
3134 }
3135 
HWTEST_F_L0(JSNApiSplTest,StringRef_WriteUtf8_all_true)3136 HWTEST_F_L0(JSNApiSplTest, StringRef_WriteUtf8_all_true)
3137 {
3138     LocalScope scope(vm_);
3139     CalculateForTime();
3140     Local<StringRef> local = StringRef::NewFromUtf8(vm_, "abcdefbb");
3141     char cs[16] = {0}; // 16 = The size of the character array
3142     gettimeofday(&g_beginTime, nullptr);
3143     for (int i = 0; i < NUM_COUNT; i++) {
3144         uint32_t length = local->WriteUtf8(vm_, cs, local->Length(vm_), true);
3145         UNUSED(length);
3146     }
3147     gettimeofday(&g_endTime, nullptr);
3148     TEST_TIME(StringRef_WriteUtf8_all_true);
3149 }
3150 
HWTEST_F_L0(JSNApiSplTest,StringRef_WriteUtf16)3151 HWTEST_F_L0(JSNApiSplTest, StringRef_WriteUtf16)
3152 {
3153     LocalScope scope(vm_);
3154     CalculateForTime();
3155     Local<StringRef> local = StringRef::NewFromUtf16(vm_, u"您好,华为!");
3156     char16_t cs[16] = {0}; // 16 = The size of the character array
3157     gettimeofday(&g_beginTime, nullptr);
3158     for (int i = 0; i < NUM_COUNT; i++) {
3159         uint32_t length = local->WriteUtf16(vm_, cs, 3);
3160         UNUSED(length);
3161     }
3162     gettimeofday(&g_endTime, nullptr);
3163     TEST_TIME(StringRef_WriteUtf16);
3164 }
3165 
HWTEST_F_L0(JSNApiSplTest,StringRef_WriteLatin1)3166 HWTEST_F_L0(JSNApiSplTest, StringRef_WriteLatin1)
3167 {
3168     LocalScope scope(vm_);
3169     CalculateForTime();
3170     Local<StringRef> local = StringRef::NewFromUtf8(vm_, "abcdefbb");
3171     char cs[16] = {0}; // 16 = The size of the character array
3172     gettimeofday(&g_beginTime, nullptr);
3173     for (int i = 0; i < NUM_COUNT; i++) {
3174         uint32_t length = local->WriteLatin1(vm_, cs, 8);
3175         UNUSED(length);
3176     }
3177     gettimeofday(&g_endTime, nullptr);
3178     TEST_TIME(StringRef_WriteLatin1);
3179 }
3180 
HWTEST_F_L0(JSNApiSplTest,StringRef_GetNapiWrapperString)3181 HWTEST_F_L0(JSNApiSplTest, StringRef_GetNapiWrapperString)
3182 {
3183     LocalScope scope(vm_);
3184     CalculateForTime();
3185     gettimeofday(&g_beginTime, nullptr);
3186     for (int i = 0; i < NUM_COUNT; i++) {
3187         Local<StringRef> local = StringRef::GetNapiWrapperString(vm_);
3188         UNUSED(local);
3189     }
3190     gettimeofday(&g_endTime, nullptr);
3191     TEST_TIME(StringRef_GetNapiWrapperString);
3192 }
3193 
HWTEST_F_L0(JSNApiSplTest,JSNApi_IsMixedDebugEnabled)3194 HWTEST_F_L0(JSNApiSplTest, JSNApi_IsMixedDebugEnabled)
3195 {
3196     LocalScope scope(vm_);
3197     CalculateForTime();
3198     gettimeofday(&g_beginTime, nullptr);
3199     for (int i = 0; i < NUM_COUNT; i++) {
3200         bool b = JSNApi::IsMixedDebugEnabled(vm_);
3201         UNUSED(b);
3202     }
3203     gettimeofday(&g_endTime, nullptr);
3204     TEST_TIME(JSNApi_IsMixedDebugEnabled);
3205 }
3206 
HWTEST_F_L0(JSNApiSplTest,JSNApi_NotifyNativeCalling_Int)3207 HWTEST_F_L0(JSNApiSplTest, JSNApi_NotifyNativeCalling_Int)
3208 {
3209     LocalScope scope(vm_);
3210     CalculateForTime();
3211     void *par = new int(0);
3212     gettimeofday(&g_beginTime, nullptr);
3213     for (int i = 0; i < NUM_COUNT; i++) {
3214         JSNApi::NotifyNativeCalling(vm_, par);
3215     }
3216     gettimeofday(&g_endTime, nullptr);
3217     TEST_TIME(JSNApi_NotifyNativeCalling_Int);
3218 }
3219 
HWTEST_F_L0(JSNApiSplTest,JSNApi_NotifyNativeCalling_String)3220 HWTEST_F_L0(JSNApiSplTest, JSNApi_NotifyNativeCalling_String)
3221 {
3222     LocalScope scope(vm_);
3223     CalculateForTime();
3224     void *par = new std::string("abc");
3225     gettimeofday(&g_beginTime, nullptr);
3226     for (int i = 0; i < NUM_COUNT; i++) {
3227         JSNApi::NotifyNativeCalling(vm_, par);
3228     }
3229     gettimeofday(&g_endTime, nullptr);
3230     TEST_TIME(JSNApi_NotifyNativeCalling_String);
3231 }
3232 
HWTEST_F_L0(JSNApiSplTest,JSNApi_NotifyNativeCalling_Char)3233 HWTEST_F_L0(JSNApiSplTest, JSNApi_NotifyNativeCalling_Char)
3234 {
3235     LocalScope scope(vm_);
3236     CalculateForTime();
3237     void *par = new char('a');
3238     gettimeofday(&g_beginTime, nullptr);
3239     for (int i = 0; i < NUM_COUNT; i++) {
3240         JSNApi::NotifyNativeCalling(vm_, par);
3241     }
3242     gettimeofday(&g_endTime, nullptr);
3243     TEST_TIME(JSNApi_NotifyNativeCalling_Char);
3244 }
3245 
HWTEST_F_L0(JSNApiSplTest,JSNApi_NotifyNativeCalling_Long)3246 HWTEST_F_L0(JSNApiSplTest, JSNApi_NotifyNativeCalling_Long)
3247 {
3248     LocalScope scope(vm_);
3249     CalculateForTime();
3250     void *par = new long(123456); // 123456 = random number
3251     gettimeofday(&g_beginTime, nullptr);
3252     for (int i = 0; i < NUM_COUNT; i++) {
3253         JSNApi::NotifyNativeCalling(vm_, par);
3254     }
3255     gettimeofday(&g_endTime, nullptr);
3256     TEST_TIME(JSNApi_NotifyNativeCalling_Long);
3257 }
3258 
HWTEST_F_L0(JSNApiSplTest,JSNApi_NotifyNativeCalling_Nullptr)3259 HWTEST_F_L0(JSNApiSplTest, JSNApi_NotifyNativeCalling_Nullptr)
3260 {
3261     LocalScope scope(vm_);
3262     CalculateForTime();
3263     void *par = nullptr;
3264     gettimeofday(&g_beginTime, nullptr);
3265     for (int i = 0; i < NUM_COUNT; i++) {
3266         JSNApi::NotifyNativeCalling(vm_, par);
3267     }
3268     gettimeofday(&g_endTime, nullptr);
3269     TEST_TIME(JSNApi_NotifyNativeCalling_Nullptr);
3270 }
3271 
HWTEST_F_L0(JSNApiSplTest,JSNApi_SerializeValue_Bool)3272 HWTEST_F_L0(JSNApiSplTest, JSNApi_SerializeValue_Bool)
3273 {
3274     LocalScope scope(vm_);
3275     CalculateForTime();
3276     Local<JSValueRef> value = BooleanRef::New(vm_, true);
3277     Local<JSValueRef> transfer = JSValueRef::Undefined(vm_);
3278     gettimeofday(&g_beginTime, nullptr);
3279     for (int i = 0; i < NUM_COUNT; i++) {
3280         void *ptr = JSNApi::SerializeValue(vm_, value, transfer, JSValueRef::Undefined(vm_));
3281         UNUSED(ptr);
3282     }
3283     gettimeofday(&g_endTime, nullptr);
3284     TEST_TIME(JSNApi_SerializeValue_Bool);
3285 }
3286 
HWTEST_F_L0(JSNApiSplTest,JSNApi_SerializeValue_Int)3287 HWTEST_F_L0(JSNApiSplTest, JSNApi_SerializeValue_Int)
3288 {
3289     LocalScope scope(vm_);
3290     CalculateForTime();
3291     int num = 123; // 123 = random number
3292     Local<JSValueRef> value = IntegerRef::New(vm_, num);
3293     Local<JSValueRef> transfer = JSValueRef::Undefined(vm_);
3294     gettimeofday(&g_beginTime, nullptr);
3295     for (int i = 0; i < NUM_COUNT; i++) {
3296         void *ptr = JSNApi::SerializeValue(vm_, value, transfer, JSValueRef::Undefined(vm_));
3297         UNUSED(ptr);
3298     }
3299     gettimeofday(&g_endTime, nullptr);
3300     TEST_TIME(JSNApi_SerializeValue_Int);
3301 }
3302 
HWTEST_F_L0(JSNApiSplTest,JSNApi_SerializeValue_String)3303 HWTEST_F_L0(JSNApiSplTest, JSNApi_SerializeValue_String)
3304 {
3305     LocalScope scope(vm_);
3306     CalculateForTime();
3307     Local<JSValueRef> value = StringRef::NewFromUtf8(vm_, "abcdefbb");
3308     Local<JSValueRef> transfer = JSValueRef::Undefined(vm_);
3309     gettimeofday(&g_beginTime, nullptr);
3310     for (int i = 0; i < NUM_COUNT; i++) {
3311         void *ptr = JSNApi::SerializeValue(vm_, value, transfer, JSValueRef::Undefined(vm_));
3312         UNUSED(ptr);
3313     }
3314     gettimeofday(&g_endTime, nullptr);
3315     TEST_TIME(JSNApi_SerializeValue_String);
3316 }
3317 
HWTEST_F_L0(JSNApiSplTest,JSNApi_SerializeValue_String2)3318 HWTEST_F_L0(JSNApiSplTest, JSNApi_SerializeValue_String2)
3319 {
3320     LocalScope scope(vm_);
3321     CalculateForTime();
3322     Local<JSValueRef> value = StringRef::NewFromUtf8(vm_, "abcdefbb");
3323     gettimeofday(&g_beginTime, nullptr);
3324     for (int i = 0; i < NUM_COUNT; i++) {
3325         void *ptr = JSNApi::SerializeValue(vm_, value, JSValueRef::Undefined(vm_), JSValueRef::Undefined(vm_), true);
3326         UNUSED(ptr);
3327     }
3328     gettimeofday(&g_endTime, nullptr);
3329     TEST_TIME(JSNApi_SerializeValue_String2);
3330 }
3331 
HWTEST_F_L0(JSNApiSplTest,JSNApi_SerializeValue_String3)3332 HWTEST_F_L0(JSNApiSplTest, JSNApi_SerializeValue_String3)
3333 {
3334     LocalScope scope(vm_);
3335     CalculateForTime();
3336     Local<JSValueRef> value = StringRef::NewFromUtf8(vm_, "abcdefbb");
3337     Local<JSValueRef> transfer = JSValueRef::Undefined(vm_);
3338     gettimeofday(&g_beginTime, nullptr);
3339     for (int i = 0; i < NUM_COUNT; i++) {
3340         void *ptr = JSNApi::SerializeValue(vm_, value, transfer, JSValueRef::Undefined(vm_));
3341         UNUSED(ptr);
3342     }
3343     gettimeofday(&g_endTime, nullptr);
3344     TEST_TIME(JSNApi_SerializeValue_String3);
3345 }
3346 
HWTEST_F_L0(JSNApiSplTest,JSNApi_SerializeValue_String_Bool)3347 HWTEST_F_L0(JSNApiSplTest, JSNApi_SerializeValue_String_Bool)
3348 {
3349     LocalScope scope(vm_);
3350     CalculateForTime();
3351     Local<JSValueRef> value = StringRef::NewFromUtf8(vm_, "abcdefbb");
3352     Local<JSValueRef> transfer = JSValueRef::Undefined(vm_);
3353     gettimeofday(&g_beginTime, nullptr);
3354     for (int i = 0; i < NUM_COUNT; i++) {
3355         void *ptr = JSNApi::SerializeValue(vm_, value, transfer, JSValueRef::Undefined(vm_));
3356         UNUSED(ptr);
3357     }
3358     gettimeofday(&g_endTime, nullptr);
3359     TEST_TIME(JSNApi_SerializeValue_String_Bool);
3360 }
3361 
HWTEST_F_L0(JSNApiSplTest,JSNApi_DeserializeValue_String)3362 HWTEST_F_L0(JSNApiSplTest, JSNApi_DeserializeValue_String)
3363 {
3364     LocalScope scope(vm_);
3365     CalculateForTime();
3366     EcmaVM *vm2 = JSNApi::CreateJSVM(RuntimeOption());
3367     gettimeofday(&g_beginTime, nullptr);
3368     for (int i = 0; i < NUM_COUNT; i++) {
3369         void *recoder = JSNApi::SerializeValue(vm_, StringRef::NewFromUtf8(vm_, "abcdefbb"), JSValueRef::Undefined(vm_),
3370             JSValueRef::Undefined(vm_));
3371         void *hint = nullptr;
3372         Local<JSValueRef> local = JSNApi::DeserializeValue(vm2, recoder, hint);
3373         UNUSED(local);
3374     }
3375     gettimeofday(&g_endTime, nullptr);
3376     JSNApi::DestroyJSVM(vm2);
3377     TEST_TIME(JSNApi_DeserializeValue_String);
3378 }
3379 
HWTEST_F_L0(JSNApiSplTest,JSNApi_DeserializeValue_Bool)3380 HWTEST_F_L0(JSNApiSplTest, JSNApi_DeserializeValue_Bool)
3381 {
3382     LocalScope scope(vm_);
3383     CalculateForTime();
3384     EcmaVM *vm2 = JSNApi::CreateJSVM(RuntimeOption());
3385     gettimeofday(&g_beginTime, nullptr);
3386     for (int i = 0; i < NUM_COUNT; i++) {
3387         void *recoder = JSNApi::SerializeValue(vm_, BooleanRef::New(vm_, true), JSValueRef::Undefined(vm_),
3388             JSValueRef::Undefined(vm_));
3389         void *hint = nullptr;
3390         Local<JSValueRef> local = JSNApi::DeserializeValue(vm2, recoder, hint);
3391         UNUSED(local);
3392     }
3393     gettimeofday(&g_endTime, nullptr);
3394     JSNApi::DestroyJSVM(vm2);
3395     TEST_TIME(JSNApi_DeserializeValue_Bool);
3396 }
3397 
HWTEST_F_L0(JSNApiSplTest,JSNApi_DeserializeValue_Int)3398 HWTEST_F_L0(JSNApiSplTest, JSNApi_DeserializeValue_Int)
3399 {
3400     LocalScope scope(vm_);
3401     CalculateForTime();
3402     EcmaVM *vm2 = JSNApi::CreateJSVM(RuntimeOption());
3403     gettimeofday(&g_beginTime, nullptr);
3404     for (int i = 0; i < NUM_COUNT; i++) {
3405         void *recoder = JSNApi::SerializeValue(vm_, IntegerRef::New(vm_, 123), JSValueRef::Undefined(vm_),
3406             JSValueRef::Undefined(vm_));
3407         void *hint = nullptr;
3408         Local<JSValueRef> local = JSNApi::DeserializeValue(vm2, recoder, hint);
3409         UNUSED(local);
3410     }
3411     gettimeofday(&g_endTime, nullptr);
3412     JSNApi::DestroyJSVM(vm2);
3413     TEST_TIME(JSNApi_DeserializeValue_Int);
3414 }
3415 
HWTEST_F_L0(JSNApiSplTest,JSNApi_DeserializeValue_Undefined)3416 HWTEST_F_L0(JSNApiSplTest, JSNApi_DeserializeValue_Undefined)
3417 {
3418     LocalScope scope(vm_);
3419     CalculateForTime();
3420     EcmaVM *vm2 = JSNApi::CreateJSVM(RuntimeOption());
3421     gettimeofday(&g_beginTime, nullptr);
3422     for (int i = 0; i < NUM_COUNT; i++) {
3423         void *recoder = JSNApi::SerializeValue(vm_, JSValueRef::Undefined(vm_), JSValueRef::Undefined(vm_),
3424             JSValueRef::Undefined(vm_));
3425         void *hint = nullptr;
3426         Local<JSValueRef> local = JSNApi::DeserializeValue(vm2, recoder, hint);
3427         UNUSED(local);
3428     }
3429     gettimeofday(&g_endTime, nullptr);
3430     JSNApi::DestroyJSVM(vm2);
3431     TEST_TIME(JSNApi_DeserializeValue_Undefined);
3432 }
3433 
HWTEST_F_L0(JSNApiSplTest,JSNApi_DeserializeValue_Null)3434 HWTEST_F_L0(JSNApiSplTest, JSNApi_DeserializeValue_Null)
3435 {
3436     LocalScope scope(vm_);
3437     CalculateForTime();
3438     EcmaVM *vm2 = JSNApi::CreateJSVM(RuntimeOption());
3439     gettimeofday(&g_beginTime, nullptr);
3440     for (int i = 0; i < NUM_COUNT; i++) {
3441         void *recoder =
3442             JSNApi::SerializeValue(vm_, JSValueRef::Null(vm_), JSValueRef::Undefined(vm_), JSValueRef::Undefined(vm_));
3443         void *hint = nullptr;
3444         Local<JSValueRef> local = JSNApi::DeserializeValue(vm2, recoder, hint);
3445         UNUSED(local);
3446     }
3447     gettimeofday(&g_endTime, nullptr);
3448     JSNApi::DestroyJSVM(vm2);
3449     TEST_TIME(JSNApi_DeserializeValue_Null);
3450 }
3451 
HWTEST_F_L0(JSNApiSplTest,JSNApi_DeleteSerializationData_String)3452 HWTEST_F_L0(JSNApiSplTest, JSNApi_DeleteSerializationData_String)
3453 {
3454     LocalScope scope(vm_);
3455     CalculateForTime();
3456     gettimeofday(&g_beginTime, nullptr);
3457     for (int i = 0; i < NUM_COUNT; i++) {
3458         void *data = JSNApi::SerializeValue(vm_, StringRef::NewFromUtf8(vm_, "abcdefbb"),
3459             StringRef::NewFromUtf8(vm_, "abcdefbb"), JSValueRef::Undefined(vm_));
3460         JSNApi::DeleteSerializationData(data);
3461     }
3462     gettimeofday(&g_endTime, nullptr);
3463     TEST_TIME(JSNApi_DeleteSerializationData_String);
3464 }
3465 
HWTEST_F_L0(JSNApiSplTest,JSNApi_DeleteSerializationData_Bool)3466 HWTEST_F_L0(JSNApiSplTest, JSNApi_DeleteSerializationData_Bool)
3467 {
3468     LocalScope scope(vm_);
3469     CalculateForTime();
3470     gettimeofday(&g_beginTime, nullptr);
3471     for (int i = 0; i < NUM_COUNT; i++) {
3472         void *data = JSNApi::SerializeValue(vm_, BooleanRef::New(vm_, true), JSValueRef::Undefined(vm_),
3473             JSValueRef::Undefined(vm_));
3474         JSNApi::DeleteSerializationData(data);
3475     }
3476     gettimeofday(&g_endTime, nullptr);
3477     TEST_TIME(JSNApi_DeleteSerializationData_Bool);
3478 }
3479 
HWTEST_F_L0(JSNApiSplTest,JSNApi_DeleteSerializationData_Int)3480 HWTEST_F_L0(JSNApiSplTest, JSNApi_DeleteSerializationData_Int)
3481 {
3482     LocalScope scope(vm_);
3483     CalculateForTime();
3484     gettimeofday(&g_beginTime, nullptr);
3485     for (int i = 0; i < NUM_COUNT; i++) {
3486         void *data = JSNApi::SerializeValue(vm_, BooleanRef::New(vm_, true), JSValueRef::Undefined(vm_),
3487             JSValueRef::Undefined(vm_));
3488         JSNApi::DeleteSerializationData(data);
3489     }
3490     gettimeofday(&g_endTime, nullptr);
3491     TEST_TIME(JSNApi_DeleteSerializationData_Int);
3492 }
3493 
HWTEST_F_L0(JSNApiSplTest,JSNApi_DeleteSerializationData_Undefined)3494 HWTEST_F_L0(JSNApiSplTest, JSNApi_DeleteSerializationData_Undefined)
3495 {
3496     LocalScope scope(vm_);
3497     CalculateForTime();
3498     gettimeofday(&g_beginTime, nullptr);
3499     for (int i = 0; i < NUM_COUNT; i++) {
3500         void *data = JSNApi::SerializeValue(vm_, JSValueRef::Undefined(vm_), JSValueRef::Undefined(vm_),
3501             JSValueRef::Undefined(vm_));
3502         JSNApi::DeleteSerializationData(data);
3503     }
3504     gettimeofday(&g_endTime, nullptr);
3505     TEST_TIME(JSNApi_DeleteSerializationData_Undefined);
3506 }
3507 
HWTEST_F_L0(JSNApiSplTest,JSNApi_DeleteSerializationData_Null)3508 HWTEST_F_L0(JSNApiSplTest, JSNApi_DeleteSerializationData_Null)
3509 {
3510     LocalScope scope(vm_);
3511     CalculateForTime();
3512     gettimeofday(&g_beginTime, nullptr);
3513     for (int i = 0; i < NUM_COUNT; i++) {
3514         void *data =
3515             JSNApi::SerializeValue(vm_, JSValueRef::Null(vm_), JSValueRef::Undefined(vm_), JSValueRef::Undefined(vm_));
3516         JSNApi::DeleteSerializationData(data);
3517     }
3518     gettimeofday(&g_endTime, nullptr);
3519     TEST_TIME(JSNApi_DeleteSerializationData_Null);
3520 }
3521 
HWTEST_F_L0(JSNApiSplTest,JSNApi_SetHostPromiseRejectionTracker)3522 HWTEST_F_L0(JSNApiSplTest, JSNApi_SetHostPromiseRejectionTracker)
3523 {
3524     LocalScope scope(vm_);
3525     CalculateForTime();
3526     void *data = reinterpret_cast<void *>(builtins::BuiltinsFunction::FunctionPrototypeInvokeSelf);
3527     gettimeofday(&g_beginTime, nullptr);
3528     for (int i = 0; i < NUM_COUNT; i++) {
3529         JSNApi::SetHostPromiseRejectionTracker(vm_, data, data);
3530     }
3531     gettimeofday(&g_endTime, nullptr);
3532     TEST_TIME(JSNApi_SetHostPromiseRejectionTracker);
3533 }
3534 
HWTEST_F_L0(JSNApiSplTest,JSNApi_SetHostResolveBufferTracker)3535 HWTEST_F_L0(JSNApiSplTest, JSNApi_SetHostResolveBufferTracker)
3536 {
3537     LocalScope scope(vm_);
3538     CalculateForTime();
3539     std::function<bool(std::string dirPath, uint8_t * *buff, size_t * buffSize, std::string &errorMsg)> cb =
3540         [](const std::string &inputPath, uint8_t **buff, size_t *buffSize, std::string &errorMsg) -> bool {
3541         if (inputPath.empty() || buff == nullptr || buffSize == nullptr) {
3542             return false;
3543         }
3544         return true;
3545     };
3546 
3547     gettimeofday(&g_beginTime, nullptr);
3548     for (int i = 0; i < NUM_COUNT; i++) {
3549         JSNApi::SetHostResolveBufferTracker(vm_, cb);
3550     }
3551     gettimeofday(&g_endTime, nullptr);
3552     TEST_TIME(JSNApi_SetHostResolveBufferTracker);
3553 }
3554 
NativePtrGetterCallback(void * info)3555 void *NativePtrGetterCallback(void *info)
3556 {
3557     return info;
3558 }
3559 
HWTEST_F_L0(JSNApiSplTest,JSNApi_SetNativePtrGetter)3560 HWTEST_F_L0(JSNApiSplTest, JSNApi_SetNativePtrGetter)
3561 {
3562     LocalScope scope(vm_);
3563     CalculateForTime();
3564     void *cb = reinterpret_cast<void *>(NativePtrGetterCallback);
3565     gettimeofday(&g_beginTime, nullptr);
3566     for (int i = 0; i < NUM_COUNT; i++) {
3567         JSNApi::SetNativePtrGetter(vm_, cb);
3568     }
3569     gettimeofday(&g_endTime, nullptr);
3570     TEST_TIME(JSNApi_SetNativePtrGetter);
3571 }
3572 
HostEnqueueJobCallback(JsiRuntimeCallInfo * callBackFunc)3573 Local<JSValueRef> HostEnqueueJobCallback([[maybe_unused]] JsiRuntimeCallInfo *callBackFunc)
3574 {
3575     Local<JSValueRef> local;
3576     return local;
3577 }
3578 
HWTEST_F_L0(JSNApiSplTest,JSNApi_SetHostEnqueueJob)3579 HWTEST_F_L0(JSNApiSplTest, JSNApi_SetHostEnqueueJob)
3580 {
3581     LocalScope scope(vm_);
3582     CalculateForTime();
3583     Local<JSValueRef> cb = FunctionRef::New(vm_, HostEnqueueJobCallback);
3584     gettimeofday(&g_beginTime, nullptr);
3585     for (int i = 0; i < NUM_COUNT; i++) {
3586         JSNApi::SetHostEnqueueJob(vm_, cb);
3587     }
3588     gettimeofday(&g_endTime, nullptr);
3589     TEST_TIME(JSNApi_SetHostEnqueueJob);
3590 }
3591 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_IsMapIterator_True)3592 HWTEST_F_L0(JSNApiSplTest, JSValueRef_IsMapIterator_True)
3593 {
3594     LocalScope scope(vm_);
3595     CalculateForTime();
3596     JSHandle<GlobalEnv> env = thread_->GetEcmaVM()->GetGlobalEnv();
3597     ObjectFactory *factory = thread_->GetEcmaVM()->GetFactory();
3598     JSHandle<JSTaggedValue> builtinsMapFunc = env->GetBuiltinsMapFunction();
3599     JSHandle<JSMap> jsMap(factory->NewJSObjectByConstructor(JSHandle<JSFunction>(builtinsMapFunc), builtinsMapFunc));
3600     JSHandle<JSTaggedValue> linkedHashMap(LinkedHashMap::Create(thread_));
3601     jsMap->SetLinkedMap(thread_, linkedHashMap);
3602     JSHandle<JSTaggedValue> mapIteratorVal =
3603         JSMapIterator::CreateMapIterator(thread_, JSHandle<JSTaggedValue>::Cast(jsMap), IterationKind::KEY);
3604     Local<MapIteratorRef> object = JSNApiHelper::ToLocal<MapIteratorRef>(mapIteratorVal);
3605     gettimeofday(&g_beginTime, nullptr);
3606     for (int i = 0; i < NUM_COUNT; i++) {
3607         ASSERT_TRUE(object->IsMapIterator(vm_));
3608     }
3609     gettimeofday(&g_endTime, nullptr);
3610     TEST_TIME(JSValueRef::IsMapIterator);
3611 }
3612 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_IsMapIterator_False)3613 HWTEST_F_L0(JSNApiSplTest, JSValueRef_IsMapIterator_False)
3614 {
3615     LocalScope scope(vm_);
3616     CalculateForTime();
3617     int num = 10; // 10 = random number
3618     Local<JSValueRef> object = IntegerRef::New(vm_, num);
3619     gettimeofday(&g_beginTime, nullptr);
3620     for (int i = 0; i < NUM_COUNT; i++) {
3621         ASSERT_FALSE(object->IsMapIterator(vm_));
3622     }
3623     gettimeofday(&g_endTime, nullptr);
3624     TEST_TIME(JSValueRef::IsMapIterator);
3625 }
3626 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_IsUint8ClampedArray_True)3627 HWTEST_F_L0(JSNApiSplTest, JSValueRef_IsUint8ClampedArray_True)
3628 {
3629     LocalScope scope(vm_);
3630     CalculateForTime();
3631     int32_t length = 4;     // 4 = length
3632     int32_t byteOffset = 0; // 0 = length
3633     Local<ArrayBufferRef> buffer = ArrayBufferRef::New(vm_, length);
3634     Local<Uint8ClampedArrayRef> object = Uint8ClampedArrayRef::New(vm_, buffer, byteOffset, length);
3635     gettimeofday(&g_beginTime, nullptr);
3636     for (int i = 0; i < NUM_COUNT; i++) {
3637         ASSERT_TRUE(object->IsUint8ClampedArray(vm_));
3638     }
3639     gettimeofday(&g_endTime, nullptr);
3640     TEST_TIME(JSValueRef::IsUint8ClampedArray);
3641 }
3642 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_IsUint8ClampedArray_False)3643 HWTEST_F_L0(JSNApiSplTest, JSValueRef_IsUint8ClampedArray_False)
3644 {
3645     LocalScope scope(vm_);
3646     CalculateForTime();
3647     int num = 10; // 10 = random number
3648     Local<JSValueRef> object = IntegerRef::New(vm_, num);
3649     gettimeofday(&g_beginTime, nullptr);
3650     for (int i = 0; i < NUM_COUNT; i++) {
3651         ASSERT_FALSE(object->IsUint8ClampedArray(vm_));
3652     }
3653     gettimeofday(&g_endTime, nullptr);
3654     TEST_TIME(JSValueRef::IsUint8ClampedArray);
3655 }
3656 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_IsInt16Array_True)3657 HWTEST_F_L0(JSNApiSplTest, JSValueRef_IsInt16Array_True)
3658 {
3659     LocalScope scope(vm_);
3660     CalculateForTime();
3661     const int32_t length = 30; // 30 = length
3662     int32_t byteOffset = 4;    // 4 = offset
3663     int32_t len = 6;           // 6 = length
3664     Local<ArrayBufferRef> arrayBuffer = ArrayBufferRef::New(vm_, length);
3665     Local<Int16ArrayRef> object = Int16ArrayRef::New(vm_, arrayBuffer, byteOffset, len);
3666     gettimeofday(&g_beginTime, nullptr);
3667     for (int i = 0; i < NUM_COUNT; i++) {
3668         ASSERT_TRUE(object->IsInt16Array(vm_));
3669     }
3670     gettimeofday(&g_endTime, nullptr);
3671     TEST_TIME(JSValueRef::IsInt16Array);
3672 }
3673 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_IsInt16Array_False)3674 HWTEST_F_L0(JSNApiSplTest, JSValueRef_IsInt16Array_False)
3675 {
3676     LocalScope scope(vm_);
3677     CalculateForTime();
3678     int num = 10; // 10 = random number
3679     Local<JSValueRef> object = IntegerRef::New(vm_, num);
3680     gettimeofday(&g_beginTime, nullptr);
3681     for (int i = 0; i < NUM_COUNT; i++) {
3682         ASSERT_FALSE(object->IsInt16Array(vm_));
3683     }
3684     gettimeofday(&g_endTime, nullptr);
3685     TEST_TIME(JSValueRef::IsInt16Array);
3686 }
3687 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_IsJSPrimitiveNumber_True)3688 HWTEST_F_L0(JSNApiSplTest, JSValueRef_IsJSPrimitiveNumber_True)
3689 {
3690     LocalScope scope(vm_);
3691     CalculateForTime();
3692     ObjectFactory *factory = vm_->GetFactory();
3693     JSHandle<JSTaggedValue> jsTagValue;
3694     JSHandle<JSPrimitiveRef> jsprimitive = factory->NewJSPrimitiveRef(PrimitiveType::PRIMITIVE_NUMBER, jsTagValue);
3695     JSHandle<JSTaggedValue> jspri = JSHandle<JSTaggedValue>::Cast(jsprimitive);
3696     Local<JSValueRef> object = JSNApiHelper::ToLocal<JSValueRef>(jspri);
3697     gettimeofday(&g_beginTime, nullptr);
3698     for (int i = 0; i < NUM_COUNT; i++) {
3699         object->IsJSPrimitiveNumber(vm_);
3700     }
3701     gettimeofday(&g_endTime, nullptr);
3702     TEST_TIME(JSValueRef::IsJSPrimitiveNumber);
3703 }
3704 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_IsJSPrimitiveNumber_False)3705 HWTEST_F_L0(JSNApiSplTest, JSValueRef_IsJSPrimitiveNumber_False)
3706 {
3707     LocalScope scope(vm_);
3708     CalculateForTime();
3709     Local<JSValueRef> object = ObjectRef::New(vm_);
3710     gettimeofday(&g_beginTime, nullptr);
3711     for (int i = 0; i < NUM_COUNT; i++) {
3712         ASSERT_FALSE(object->IsJSPrimitiveNumber(vm_));
3713     }
3714     gettimeofday(&g_endTime, nullptr);
3715     TEST_TIME(JSValueRef::IsJSPrimitiveNumber);
3716 }
3717 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_IsJSPrimitiveInt_True)3718 HWTEST_F_L0(JSNApiSplTest, JSValueRef_IsJSPrimitiveInt_True)
3719 {
3720     LocalScope scope(vm_);
3721     CalculateForTime();
3722     ObjectFactory *factory = vm_->GetFactory();
3723     JSHandle<JSTaggedValue> jsTagValue;
3724     JSHandle<JSPrimitiveRef> jsprimitive = factory->NewJSPrimitiveRef(PrimitiveType::PRIMITIVE_BIGINT, jsTagValue);
3725     JSHandle<JSTaggedValue> jspri = JSHandle<JSTaggedValue>::Cast(jsprimitive);
3726     Local<JSValueRef> object = JSNApiHelper::ToLocal<JSValueRef>(jspri);
3727     gettimeofday(&g_beginTime, nullptr);
3728     for (int i = 0; i < NUM_COUNT; i++) {
3729         object->IsJSPrimitiveInt(vm_);
3730     }
3731     gettimeofday(&g_endTime, nullptr);
3732     TEST_TIME(JSValueRef::IsJSPrimitiveInt);
3733 }
3734 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_IsJSPrimitiveBoolean_True)3735 HWTEST_F_L0(JSNApiSplTest, JSValueRef_IsJSPrimitiveBoolean_True)
3736 {
3737     LocalScope scope(vm_);
3738     CalculateForTime();
3739     ObjectFactory *factory = vm_->GetFactory();
3740     JSHandle<JSTaggedValue> jsTagValue;
3741     JSHandle<JSPrimitiveRef> jsprimitive = factory->NewJSPrimitiveRef(PrimitiveType::PRIMITIVE_BOOLEAN, jsTagValue);
3742     JSHandle<JSTaggedValue> jspri = JSHandle<JSTaggedValue>::Cast(jsprimitive);
3743     Local<JSValueRef> object = JSNApiHelper::ToLocal<JSValueRef>(jspri);
3744     gettimeofday(&g_beginTime, nullptr);
3745     for (int i = 0; i < NUM_COUNT; i++) {
3746         object->IsJSPrimitiveBoolean(vm_);
3747     }
3748     gettimeofday(&g_endTime, nullptr);
3749     TEST_TIME(JSValueRef::IsJSPrimitiveBoolean);
3750 }
3751 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_IsJSPrimitiveBoolean_False)3752 HWTEST_F_L0(JSNApiSplTest, JSValueRef_IsJSPrimitiveBoolean_False)
3753 {
3754     LocalScope scope(vm_);
3755     CalculateForTime();
3756     Local<JSValueRef> object = ObjectRef::New(vm_);
3757     gettimeofday(&g_beginTime, nullptr);
3758     for (int i = 0; i < NUM_COUNT; i++) {
3759         ASSERT_FALSE(object->IsJSPrimitiveBoolean(vm_));
3760     }
3761     gettimeofday(&g_endTime, nullptr);
3762     TEST_TIME(JSValueRef::IsJSPrimitiveBoolean);
3763 }
3764 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_IsJSCollator_True)3765 HWTEST_F_L0(JSNApiSplTest, JSValueRef_IsJSCollator_True)
3766 {
3767     LocalScope scope(vm_);
3768     CalculateForTime();
3769     JSHandle<GlobalEnv> env = vm_->GetGlobalEnv();
3770     ObjectFactory *factory = vm_->GetFactory();
3771     JSHandle<JSTaggedValue> ctor = env->GetCollatorFunction();
3772     JSHandle<JSCollator> collator =
3773         JSHandle<JSCollator>::Cast(factory->NewJSObjectByConstructor(JSHandle<JSFunction>(ctor), ctor));
3774     JSHandle<JSTaggedValue> localeStr = thread_->GlobalConstants()->GetHandledEnUsString();
3775     JSHandle<JSTaggedValue> undefinedHandle(thread_, JSTaggedValue::Undefined());
3776     JSHandle<JSCollator> initCollator = JSCollator::InitializeCollator(thread_, collator, localeStr, undefinedHandle);
3777 
3778     JSHandle<JSTaggedValue> collatorTagHandleVal = JSHandle<JSTaggedValue>::Cast(initCollator);
3779     Local<JSValueRef> object = JSNApiHelper::ToLocal<JSValueRef>(collatorTagHandleVal);
3780     gettimeofday(&g_beginTime, nullptr);
3781     for (int i = 0; i < NUM_COUNT; i++) {
3782         ASSERT_TRUE(object->IsJSCollator(vm_));
3783     }
3784     gettimeofday(&g_endTime, nullptr);
3785     TEST_TIME(JSValueRef::IsJSCollator);
3786 }
3787 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_IsJSCollator_False)3788 HWTEST_F_L0(JSNApiSplTest, JSValueRef_IsJSCollator_False)
3789 {
3790     LocalScope scope(vm_);
3791     CalculateForTime();
3792     int num = 10; // 10 = random number
3793     Local<JSValueRef> object = IntegerRef::New(vm_, num);
3794     gettimeofday(&g_beginTime, nullptr);
3795     for (int i = 0; i < NUM_COUNT; i++) {
3796         ASSERT_FALSE(object->IsJSCollator(vm_));
3797     }
3798     gettimeofday(&g_endTime, nullptr);
3799     TEST_TIME(JSValueRef::IsJSCollator);
3800 }
3801 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_IsJSPluralRules_True)3802 HWTEST_F_L0(JSNApiSplTest, JSValueRef_IsJSPluralRules_True)
3803 {
3804     LocalScope scope(vm_);
3805     CalculateForTime();
3806     ObjectFactory *factory = vm_->GetFactory();
3807     JSHandle<GlobalEnv> env = vm_->GetGlobalEnv();
3808     JSHandle<JSTaggedValue> optionHandle(thread_, JSTaggedValue::Undefined());
3809     JSHandle<JSTaggedValue> ctor = env->GetPluralRulesFunction();
3810     JSHandle<JSPluralRules> pluralRules =
3811         JSHandle<JSPluralRules>::Cast(factory->NewJSObjectByConstructor(JSHandle<JSFunction>(ctor), ctor));
3812     JSHandle<JSTaggedValue> localeStr(factory->NewFromASCII("en-GB"));
3813     JSHandle<JSPluralRules> initPluralRules =
3814         JSPluralRules::InitializePluralRules(thread_, pluralRules, localeStr, optionHandle);
3815     JSHandle<JSTaggedValue> tagPlureRules = JSHandle<JSTaggedValue>::Cast(initPluralRules);
3816     Local<JSValueRef> object = JSNApiHelper::ToLocal<JSValueRef>(tagPlureRules);
3817     gettimeofday(&g_beginTime, nullptr);
3818     for (int i = 0; i < NUM_COUNT; i++) {
3819         ASSERT_TRUE(object->IsJSPluralRules(vm_));
3820     }
3821     gettimeofday(&g_endTime, nullptr);
3822     TEST_TIME(JSValueRef::IsJSPluralRules);
3823 }
3824 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_IsJSPluralRules_False)3825 HWTEST_F_L0(JSNApiSplTest, JSValueRef_IsJSPluralRules_False)
3826 {
3827     LocalScope scope(vm_);
3828     CalculateForTime();
3829     int num = 10; // 10 = random number
3830     Local<JSValueRef> object = IntegerRef::New(vm_, num);
3831     gettimeofday(&g_beginTime, nullptr);
3832     for (int i = 0; i < NUM_COUNT; i++) {
3833         ASSERT_FALSE(object->IsJSPluralRules(vm_));
3834     }
3835     gettimeofday(&g_endTime, nullptr);
3836     TEST_TIME(JSValueRef::IsJSPluralRules);
3837 }
3838 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_IsJSListFormat_False)3839 HWTEST_F_L0(JSNApiSplTest, JSValueRef_IsJSListFormat_False)
3840 {
3841     LocalScope scope(vm_);
3842     CalculateForTime();
3843     int num = 10; // 10 = random number
3844     Local<JSValueRef> object = IntegerRef::New(vm_, num);
3845     gettimeofday(&g_beginTime, nullptr);
3846     for (int i = 0; i < NUM_COUNT; i++) {
3847         ASSERT_FALSE(object->IsJSListFormat(vm_));
3848     }
3849     gettimeofday(&g_endTime, nullptr);
3850     TEST_TIME(JSValueRef::IsJSListFormat);
3851 }
3852 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_IsAsyncGeneratorFunction_True)3853 HWTEST_F_L0(JSNApiSplTest, JSValueRef_IsAsyncGeneratorFunction_True)
3854 {
3855     LocalScope scope(vm_);
3856     CalculateForTime();
3857     ObjectFactory *factory = vm_->GetFactory();
3858     MethodLiteral *methodLiteral = nullptr;
3859     JSHandle<Method> method = factory->NewSMethod(methodLiteral);
3860     JSHandle<JSFunction> asyncGeneratorFunction = factory->NewJSAsyncGeneratorFunction(method);
3861     JSHandle<JSTaggedValue> asyncgefu = JSHandle<JSTaggedValue>::Cast(asyncGeneratorFunction);
3862     Local<JSValueRef> object = JSNApiHelper::ToLocal<JSValueRef>(asyncgefu);
3863     gettimeofday(&g_beginTime, nullptr);
3864     for (int i = 0; i < NUM_COUNT; i++) {
3865         ASSERT_TRUE(object->IsAsyncGeneratorFunction(vm_));
3866     }
3867     gettimeofday(&g_endTime, nullptr);
3868     TEST_TIME(JSValueRef::IsAsyncGeneratorFunction);
3869 }
3870 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_IsAsyncGeneratorFunction_False)3871 HWTEST_F_L0(JSNApiSplTest, JSValueRef_IsAsyncGeneratorFunction_False)
3872 {
3873     LocalScope scope(vm_);
3874     CalculateForTime();
3875     int num = 10; // 10 = random number
3876     Local<JSValueRef> object = IntegerRef::New(vm_, num);
3877     gettimeofday(&g_beginTime, nullptr);
3878     for (int i = 0; i < NUM_COUNT; i++) {
3879         ASSERT_FALSE(object->IsAsyncGeneratorFunction(vm_));
3880     }
3881     gettimeofday(&g_endTime, nullptr);
3882     TEST_TIME(JSValueRef::IsAsyncGeneratorFunction);
3883 }
3884 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_IsLinkedList_True)3885 HWTEST_F_L0(JSNApiSplTest, JSValueRef_IsLinkedList_True)
3886 {
3887     LocalScope scope(vm_);
3888     CalculateForTime();
3889     ObjectFactory *factory = vm_->GetFactory();
3890     JSHandle<GlobalEnv> env = vm_->GetGlobalEnv();
3891     JSHandle<JSTaggedValue> globalObject = env->GetJSGlobalObject();
3892     JSHandle<JSTaggedValue> key(factory->NewFromASCII("ArkPrivate"));
3893     JSHandle<JSTaggedValue> value =
3894         JSObject::GetProperty(thread_, JSHandle<JSTaggedValue>(globalObject), key).GetValue();
3895     auto objCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), 6);
3896     objCallInfo->SetFunction(JSTaggedValue::Undefined());
3897     objCallInfo->SetThis(value.GetTaggedValue());
3898     objCallInfo->SetCallArg(0, JSTaggedValue(static_cast<int>(containers::ContainerTag::LinkedList)));
3899     [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, objCallInfo);
3900     JSHandle<JSTaggedValue> contianer =
3901         JSHandle<JSTaggedValue>(thread_, containers::ContainersPrivate::Load(objCallInfo));
3902     JSHandle<JSAPILinkedList> linkedList =
3903         JSHandle<JSAPILinkedList>::Cast(factory->NewJSObjectByConstructor(JSHandle<JSFunction>(contianer), contianer));
3904     JSTaggedValue doubleList = TaggedDoubleList::Create(thread_);
3905     linkedList->SetDoubleList(thread_, doubleList);
3906     JSHandle<JSTaggedValue> linkedListTag = JSHandle<JSTaggedValue>::Cast(linkedList);
3907     Local<JSValueRef> object = JSNApiHelper::ToLocal<JSValueRef>(linkedListTag);
3908     gettimeofday(&g_beginTime, nullptr);
3909     for (int i = 0; i < NUM_COUNT; i++) {
3910         ASSERT_TRUE(object->IsLinkedList(vm_));
3911     }
3912     gettimeofday(&g_endTime, nullptr);
3913     TEST_TIME(JSValueRef::IsLinkedList);
3914 }
3915 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_IsLinkedList_False)3916 HWTEST_F_L0(JSNApiSplTest, JSValueRef_IsLinkedList_False)
3917 {
3918     LocalScope scope(vm_);
3919     CalculateForTime();
3920     int num = 10; // 10 = random number
3921     Local<JSValueRef> object = IntegerRef::New(vm_, num);
3922     gettimeofday(&g_beginTime, nullptr);
3923     for (int i = 0; i < NUM_COUNT; i++) {
3924         ASSERT_FALSE(object->IsLinkedList(vm_));
3925     }
3926     gettimeofday(&g_endTime, nullptr);
3927     TEST_TIME(JSValueRef::IsLinkedList);
3928 }
3929 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_IsLinkedListIterator_True)3930 HWTEST_F_L0(JSNApiSplTest, JSValueRef_IsLinkedListIterator_True)
3931 {
3932     LocalScope scope(vm_);
3933     CalculateForTime();
3934     ObjectFactory *factory = vm_->GetFactory();
3935     JSHandle<GlobalEnv> env = vm_->GetGlobalEnv();
3936     JSHandle<JSTaggedValue> globalObject = env->GetJSGlobalObject();
3937     JSHandle<JSTaggedValue> key(factory->NewFromASCII("ArkPrivate"));
3938     JSHandle<JSTaggedValue> tagvalue =
3939         JSObject::GetProperty(thread_, JSHandle<JSTaggedValue>(globalObject), key).GetValue();
3940     uint32_t argvLength = 6; // 6 = argv length
3941     auto objCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), argvLength);
3942     objCallInfo->SetFunction(JSTaggedValue::Undefined());
3943     objCallInfo->SetThis(tagvalue.GetTaggedValue());
3944     objCallInfo->SetCallArg(0, JSTaggedValue(static_cast<int>(containers::ContainerTag::LinkedList)));
3945     [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, objCallInfo);
3946     JSHandle<JSTaggedValue> contianer =
3947         JSHandle<JSTaggedValue>(thread_, containers::ContainersPrivate::Load(objCallInfo));
3948     JSHandle<JSAPILinkedList> linkedList =
3949         JSHandle<JSAPILinkedList>::Cast(factory->NewJSObjectByConstructor(JSHandle<JSFunction>(contianer), contianer));
3950     JSTaggedValue doubleList = TaggedDoubleList::Create(thread_);
3951     linkedList->SetDoubleList(thread_, doubleList);
3952     uint32_t elementsNum = 256; // 256 = Number of cycles
3953     for (uint32_t i = 0; i < elementsNum; i++) {
3954         JSHandle<JSTaggedValue> taggedvalue(thread_, JSTaggedValue(i));
3955         JSAPILinkedList::Add(thread_, linkedList, taggedvalue);
3956     }
3957     JSHandle<JSTaggedValue> taggedValueHandle(thread_, linkedList.GetTaggedValue());
3958     JSHandle<JSAPILinkedListIterator> linkedListIterator(thread_,
3959         JSAPILinkedListIterator::CreateLinkedListIterator(thread_, taggedValueHandle).GetTaggedValue());
3960     JSHandle<JSTaggedValue> linkedListIteratortag = JSHandle<JSTaggedValue>::Cast(linkedListIterator);
3961     Local<JSValueRef> object = JSNApiHelper::ToLocal<JSValueRef>(linkedListIteratortag);
3962     gettimeofday(&g_beginTime, nullptr);
3963     for (int i = 0; i < NUM_COUNT; i++) {
3964         ASSERT_TRUE(object->IsLinkedListIterator(vm_));
3965     }
3966     gettimeofday(&g_endTime, nullptr);
3967     TEST_TIME(JSValueRef::IsLinkedListIterator);
3968 }
3969 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_IsLinkedListIterator_False)3970 HWTEST_F_L0(JSNApiSplTest, JSValueRef_IsLinkedListIterator_False)
3971 {
3972     LocalScope scope(vm_);
3973     CalculateForTime();
3974     int num = 10; // 10 = random number
3975     Local<JSValueRef> object = IntegerRef::New(vm_, num);
3976     gettimeofday(&g_beginTime, nullptr);
3977     for (int i = 0; i < NUM_COUNT; i++) {
3978         ASSERT_FALSE(object->IsLinkedListIterator(vm_));
3979     }
3980     gettimeofday(&g_endTime, nullptr);
3981     TEST_TIME(JSValueRef::IsLinkedListIterator);
3982 }
3983 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_IsList_True)3984 HWTEST_F_L0(JSNApiSplTest, JSValueRef_IsList_True)
3985 {
3986     LocalScope scope(vm_);
3987     CalculateForTime();
3988     ObjectFactory *factory = vm_->GetFactory();
3989     JSHandle<GlobalEnv> env = vm_->GetGlobalEnv();
3990     JSHandle<JSTaggedValue> globalObject = env->GetJSGlobalObject();
3991     JSHandle<JSTaggedValue> key(factory->NewFromASCII("ArkPrivate"));
3992     JSHandle<JSTaggedValue> value =
3993         JSObject::GetProperty(thread_, JSHandle<JSTaggedValue>(globalObject), key).GetValue();
3994     uint32_t argvLength = 6; // 6 = argv length
3995     auto objCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), argvLength);
3996     objCallInfo->SetFunction(JSTaggedValue::Undefined());
3997     objCallInfo->SetThis(value.GetTaggedValue());
3998     objCallInfo->SetCallArg(0, JSTaggedValue(static_cast<int>(containers::ContainerTag::List)));
3999     [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, objCallInfo);
4000     JSTaggedValue result = containers::ContainersPrivate::Load(objCallInfo);
4001     TestHelper::TearDownFrame(thread_, prev);
4002     JSHandle<JSTaggedValue> constructor(thread_, result);
4003     JSHandle<JSAPIList> list(factory->NewJSObjectByConstructor(JSHandle<JSFunction>(constructor), constructor));
4004     JSTaggedValue singleList = TaggedSingleList::Create(thread_);
4005     list->SetSingleList(thread_, singleList);
4006     JSHandle<JSTaggedValue> Listtag = JSHandle<JSTaggedValue>::Cast(list);
4007     Local<JSValueRef> object = JSNApiHelper::ToLocal<JSValueRef>(Listtag);
4008     gettimeofday(&g_beginTime, nullptr);
4009     for (int i = 0; i < NUM_COUNT; i++) {
4010         ASSERT_TRUE(object->IsList(vm_));
4011     }
4012     gettimeofday(&g_endTime, nullptr);
4013     TEST_TIME(JSValueRef::IsList);
4014 }
4015 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_IsList_False)4016 HWTEST_F_L0(JSNApiSplTest, JSValueRef_IsList_False)
4017 {
4018     LocalScope scope(vm_);
4019     CalculateForTime();
4020     int num = 10; // 10 = random number
4021     Local<JSValueRef> object = IntegerRef::New(vm_, num);
4022     for (int i = 0; i < NUM_COUNT; i++) {
4023         ASSERT_FALSE(object->IsList(vm_));
4024     }
4025     gettimeofday(&g_endTime, nullptr);
4026     TEST_TIME(JSValueRef::IsList);
4027 }
4028 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_IsPlainArray_True)4029 HWTEST_F_L0(JSNApiSplTest, JSValueRef_IsPlainArray_True)
4030 {
4031     LocalScope scope(vm_);
4032     CalculateForTime();
4033     ObjectFactory *factory = vm_->GetFactory();
4034     JSHandle<GlobalEnv> env = vm_->GetGlobalEnv();
4035     JSHandle<JSTaggedValue> globalObject = env->GetJSGlobalObject();
4036     JSHandle<JSTaggedValue> key(factory->NewFromASCII("ArkPrivate"));
4037     JSHandle<JSTaggedValue> value =
4038         JSObject::GetProperty(thread_, JSHandle<JSTaggedValue>(globalObject), key).GetValue();
4039     uint32_t argvLength = 6; // 6 = argv length
4040     auto objCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread_, JSTaggedValue::Undefined(), argvLength);
4041     objCallInfo->SetFunction(JSTaggedValue::Undefined());
4042     objCallInfo->SetThis(value.GetTaggedValue());
4043     objCallInfo->SetCallArg(0, JSTaggedValue(static_cast<int>(containers::ContainerTag::PlainArray)));
4044     [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread_, objCallInfo);
4045     JSTaggedValue result = containers::ContainersPrivate::Load(objCallInfo);
4046     TestHelper::TearDownFrame(thread_, prev);
4047     JSHandle<JSTaggedValue> constructor(thread_, result);
4048     JSHandle<JSAPIPlainArray> plainArray(
4049         factory->NewJSObjectByConstructor(JSHandle<JSFunction>(constructor), constructor));
4050     JSHandle<JSTaggedValue> keyArray = JSHandle<JSTaggedValue>(factory->NewTaggedArray(8));
4051     JSHandle<JSTaggedValue> valueArray = JSHandle<JSTaggedValue>(factory->NewTaggedArray(8));
4052     plainArray->SetKeys(thread_, keyArray);
4053     plainArray->SetValues(thread_, valueArray);
4054     JSHandle<JSTaggedValue> plainarraytag = JSHandle<JSTaggedValue>::Cast(plainArray);
4055     Local<JSValueRef> object = JSNApiHelper::ToLocal<JSValueRef>(plainarraytag);
4056     gettimeofday(&g_beginTime, nullptr);
4057     for (int i = 0; i < NUM_COUNT; i++) {
4058         ASSERT_TRUE(object->IsPlainArray(vm_));
4059     }
4060     gettimeofday(&g_endTime, nullptr);
4061     TEST_TIME(JSValueRef::IsPlainArray);
4062 }
4063 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_IsPlainArray_False)4064 HWTEST_F_L0(JSNApiSplTest, JSValueRef_IsPlainArray_False)
4065 {
4066     LocalScope scope(vm_);
4067     CalculateForTime();
4068     int num = 10; // 10 = random number
4069     Local<JSValueRef> object = IntegerRef::New(vm_, num);
4070     gettimeofday(&g_beginTime, nullptr);
4071     for (int i = 0; i < NUM_COUNT; i++) {
4072         ASSERT_FALSE(object->IsPlainArray(vm_));
4073     }
4074     gettimeofday(&g_endTime, nullptr);
4075     TEST_TIME(JSValueRef::IsPlainArray);
4076 }
4077 
HWTEST_F_L0(JSNApiSplTest,DateRef_New)4078 HWTEST_F_L0(JSNApiSplTest, DateRef_New)
4079 {
4080     LocalScope scope(vm_);
4081     CalculateForTime();
4082     double time = 3.14; // 3.14 = random number
4083     gettimeofday(&g_beginTime, nullptr);
4084     for (int i = 0; i < NUM_COUNT; i++) {
4085         DateRef::New(vm_, time);
4086     }
4087     gettimeofday(&g_endTime, nullptr);
4088     TEST_TIME(DateRef::New);
4089 }
4090 
HWTEST_F_L0(JSNApiSplTest,DateRef_ToString)4091 HWTEST_F_L0(JSNApiSplTest, DateRef_ToString)
4092 {
4093     LocalScope scope(vm_);
4094     CalculateForTime();
4095     double time = 3.14; // 3.14 = random number
4096     Local<DateRef> object = DateRef::New(vm_, time);
4097     gettimeofday(&g_beginTime, nullptr);
4098     for (int i = 0; i < NUM_COUNT; i++) {
4099         object->ToString(vm_);
4100     }
4101     gettimeofday(&g_endTime, nullptr);
4102     TEST_TIME(DateRef::ToString);
4103 }
4104 
HWTEST_F_L0(JSNApiSplTest,DateRef_GetTime)4105 HWTEST_F_L0(JSNApiSplTest, DateRef_GetTime)
4106 {
4107     LocalScope scope(vm_);
4108     CalculateForTime();
4109     double time = 3.14; // 3.14 = random number
4110     Local<DateRef> object = DateRef::New(vm_, time);
4111     gettimeofday(&g_beginTime, nullptr);
4112     for (int i = 0; i < NUM_COUNT; i++) {
4113         object->GetTime(vm_);
4114     }
4115     gettimeofday(&g_endTime, nullptr);
4116     TEST_TIME(DateRef::GetTime);
4117 }
4118 
HWTEST_F_L0(JSNApiSplTest,ProxyRef_GetHandler)4119 HWTEST_F_L0(JSNApiSplTest, ProxyRef_GetHandler)
4120 {
4121     LocalScope scope(vm_);
4122     CalculateForTime();
4123     JSHandle<GlobalEnv> env = vm_->GetGlobalEnv();
4124     ObjectFactory *factory = thread_->GetEcmaVM()->GetFactory();
4125     JSHandle<JSTaggedValue> hclass(thread_, env->GetObjectFunction().GetObject<JSFunction>());
4126     JSHandle<JSTaggedValue> targetHandle(factory->NewJSObjectByConstructor(JSHandle<JSFunction>::Cast(hclass), hclass));
4127     JSHandle<JSTaggedValue> key(factory->NewFromASCII("x"));
4128     JSHandle<JSTaggedValue> value(thread_, JSTaggedValue(1));
4129     JSObject::SetProperty(thread_, targetHandle, key, value);
4130     JSHandle<JSTaggedValue> handlerHandle(
4131         factory->NewJSObjectByConstructor(JSHandle<JSFunction>::Cast(hclass), hclass));
4132     JSHandle<JSProxy> proxyHandle = JSProxy::ProxyCreate(thread_, targetHandle, handlerHandle);
4133     JSHandle<JSTaggedValue> proxyTagValue = JSHandle<JSTaggedValue>::Cast(proxyHandle);
4134     Local<ProxyRef> object = JSNApiHelper::ToLocal<ProxyRef>(proxyTagValue);
4135     gettimeofday(&g_beginTime, nullptr);
4136     for (int i = 0; i < NUM_COUNT; i++) {
4137         object->GetHandler(vm_);
4138     }
4139     gettimeofday(&g_endTime, nullptr);
4140     TEST_TIME(ProxyRef::GetHandler);
4141 }
4142 
HWTEST_F_L0(JSNApiSplTest,ProxyRef_GetTarget)4143 HWTEST_F_L0(JSNApiSplTest, ProxyRef_GetTarget)
4144 {
4145     LocalScope scope(vm_);
4146     CalculateForTime();
4147     JSHandle<GlobalEnv> env = vm_->GetGlobalEnv();
4148     ObjectFactory *factory = thread_->GetEcmaVM()->GetFactory();
4149     JSHandle<JSTaggedValue> hclass(thread_, env->GetObjectFunction().GetObject<JSFunction>());
4150     JSHandle<JSTaggedValue> targetHandle(factory->NewJSObjectByConstructor(JSHandle<JSFunction>::Cast(hclass), hclass));
4151     JSHandle<JSTaggedValue> key(factory->NewFromASCII("x"));
4152     JSHandle<JSTaggedValue> value(thread_, JSTaggedValue(1));
4153     JSObject::SetProperty(thread_, targetHandle, key, value);
4154     JSHandle<JSTaggedValue> handlerHandle(
4155         factory->NewJSObjectByConstructor(JSHandle<JSFunction>::Cast(hclass), hclass));
4156     JSHandle<JSProxy> proxyHandle = JSProxy::ProxyCreate(thread_, targetHandle, handlerHandle);
4157     JSHandle<JSTaggedValue> proxyTagValue = JSHandle<JSTaggedValue>::Cast(proxyHandle);
4158     Local<ProxyRef> object = JSNApiHelper::ToLocal<ProxyRef>(proxyTagValue);
4159     gettimeofday(&g_beginTime, nullptr);
4160     for (int i = 0; i < NUM_COUNT; i++) {
4161         object->GetTarget(vm_);
4162     }
4163     gettimeofday(&g_endTime, nullptr);
4164     TEST_TIME(ProxyRef::GetTarget);
4165 }
4166 
HWTEST_F_L0(JSNApiSplTest,ProxyRef_IsRevoked)4167 HWTEST_F_L0(JSNApiSplTest, ProxyRef_IsRevoked)
4168 {
4169     LocalScope scope(vm_);
4170     CalculateForTime();
4171     JSHandle<GlobalEnv> env = vm_->GetGlobalEnv();
4172     ObjectFactory *factory = thread_->GetEcmaVM()->GetFactory();
4173     JSHandle<JSTaggedValue> hclass(thread_, env->GetObjectFunction().GetObject<JSFunction>());
4174     JSHandle<JSTaggedValue> targetHandle(factory->NewJSObjectByConstructor(JSHandle<JSFunction>::Cast(hclass), hclass));
4175     JSHandle<JSTaggedValue> key(factory->NewFromASCII("x"));
4176     JSHandle<JSTaggedValue> value(thread_, JSTaggedValue(1));
4177     JSObject::SetProperty(thread_, targetHandle, key, value);
4178     JSHandle<JSTaggedValue> handlerHandle(
4179         factory->NewJSObjectByConstructor(JSHandle<JSFunction>::Cast(hclass), hclass));
4180     JSHandle<JSProxy> proxyHandle = JSProxy::ProxyCreate(thread_, targetHandle, handlerHandle);
4181     JSHandle<JSTaggedValue> proxyTagValue = JSHandle<JSTaggedValue>::Cast(proxyHandle);
4182     Local<ProxyRef> object = JSNApiHelper::ToLocal<ProxyRef>(proxyTagValue);
4183     gettimeofday(&g_beginTime, nullptr);
4184     for (int i = 0; i < NUM_COUNT; i++) {
4185         object->IsRevoked();
4186     }
4187     gettimeofday(&g_endTime, nullptr);
4188     TEST_TIME(ProxyRef::IsRevoked);
4189 }
4190 
HWTEST_F_L0(JSNApiSplTest,MapRef_GetSize)4191 HWTEST_F_L0(JSNApiSplTest, MapRef_GetSize)
4192 {
4193     LocalScope scope(vm_);
4194     CalculateForTime();
4195     Local<MapRef> object = MapRef::New(vm_);
4196     Local<JSValueRef> key = StringRef::NewFromUtf8(vm_, "TestKey");
4197     Local<JSValueRef> value = StringRef::NewFromUtf8(vm_, "TestValue");
4198     object->Set(vm_, key, value);
4199     gettimeofday(&g_beginTime, nullptr);
4200     for (int i = 0; i < NUM_COUNT; i++) {
4201         object->GetSize(vm_);
4202     }
4203     gettimeofday(&g_endTime, nullptr);
4204     TEST_TIME(MapRef::GetSize);
4205 }
4206 
HWTEST_F_L0(JSNApiSplTest,MapRef_GetTotalElements)4207 HWTEST_F_L0(JSNApiSplTest, MapRef_GetTotalElements)
4208 {
4209     LocalScope scope(vm_);
4210     CalculateForTime();
4211     Local<MapRef> object = MapRef::New(vm_);
4212     Local<JSValueRef> key = StringRef::NewFromUtf8(vm_, "TestKey");
4213     Local<JSValueRef> value = StringRef::NewFromUtf8(vm_, "TestValue");
4214     object->Set(vm_, key, value);
4215     gettimeofday(&g_beginTime, nullptr);
4216     for (int i = 0; i < NUM_COUNT; i++) {
4217         object->GetTotalElements(vm_);
4218     }
4219     gettimeofday(&g_endTime, nullptr);
4220     TEST_TIME(MapRef::GetTotalElements);
4221 }
4222 
HWTEST_F_L0(JSNApiSplTest,MapRef_Get)4223 HWTEST_F_L0(JSNApiSplTest, MapRef_Get)
4224 {
4225     LocalScope scope(vm_);
4226     CalculateForTime();
4227     Local<MapRef> object = MapRef::New(vm_);
4228     Local<JSValueRef> key = StringRef::NewFromUtf8(vm_, "TestKey");
4229     Local<JSValueRef> value = StringRef::NewFromUtf8(vm_, "TestValue");
4230     object->Set(vm_, key, value);
4231     gettimeofday(&g_beginTime, nullptr);
4232     for (int i = 0; i < NUM_COUNT; i++) {
4233         object->Get(vm_, key);
4234     }
4235     gettimeofday(&g_endTime, nullptr);
4236     TEST_TIME(MapRef::Get);
4237 }
4238 
HWTEST_F_L0(JSNApiSplTest,MapRef_GetKey)4239 HWTEST_F_L0(JSNApiSplTest, MapRef_GetKey)
4240 {
4241     LocalScope scope(vm_);
4242     CalculateForTime();
4243     Local<MapRef> object = MapRef::New(vm_);
4244     Local<JSValueRef> key = StringRef::NewFromUtf8(vm_, "TestKey");
4245     Local<JSValueRef> value = StringRef::NewFromUtf8(vm_, "TestValue");
4246     object->Set(vm_, key, value);
4247     gettimeofday(&g_beginTime, nullptr);
4248     for (int i = 0; i < NUM_COUNT; i++) {
4249         object->GetKey(vm_, 0);
4250     }
4251     gettimeofday(&g_endTime, nullptr);
4252     TEST_TIME(MapRef::GetKey);
4253 }
4254 
HWTEST_F_L0(JSNApiSplTest,MapRef_GetValue)4255 HWTEST_F_L0(JSNApiSplTest, MapRef_GetValue)
4256 {
4257     LocalScope scope(vm_);
4258     CalculateForTime();
4259     Local<MapRef> object = MapRef::New(vm_);
4260     Local<JSValueRef> key = StringRef::NewFromUtf8(vm_, "TestKey");
4261     Local<JSValueRef> value = StringRef::NewFromUtf8(vm_, "TestValue");
4262     object->Set(vm_, key, value);
4263     gettimeofday(&g_beginTime, nullptr);
4264     for (int i = 0; i < NUM_COUNT; i++) {
4265         object->GetValue(vm_, 0);
4266     }
4267     gettimeofday(&g_endTime, nullptr);
4268     TEST_TIME(MapRef::GetValue);
4269 }
4270 
HWTEST_F_L0(JSNApiSplTest,MapRef_New)4271 HWTEST_F_L0(JSNApiSplTest, MapRef_New)
4272 {
4273     LocalScope scope(vm_);
4274     CalculateForTime();
4275     gettimeofday(&g_beginTime, nullptr);
4276     for (int i = 0; i < NUM_COUNT; i++) {
4277         MapRef::New(vm_);
4278     }
4279     gettimeofday(&g_endTime, nullptr);
4280     TEST_TIME(MapRef::New);
4281 }
4282 
HWTEST_F_L0(JSNApiSplTest,MapRef_Set)4283 HWTEST_F_L0(JSNApiSplTest, MapRef_Set)
4284 {
4285     LocalScope scope(vm_);
4286     CalculateForTime();
4287     Local<MapRef> object = MapRef::New(vm_);
4288     Local<JSValueRef> key = StringRef::NewFromUtf8(vm_, "TestKey");
4289     Local<JSValueRef> value = StringRef::NewFromUtf8(vm_, "TestValue");
4290     gettimeofday(&g_beginTime, nullptr);
4291     for (int i = 0; i < NUM_COUNT; i++) {
4292         object->Set(vm_, key, value);
4293     }
4294     gettimeofday(&g_endTime, nullptr);
4295     TEST_TIME(MapRef::Set);
4296 }
4297 
HWTEST_F_L0(JSNApiSplTest,WeakMapRef_GetSize)4298 HWTEST_F_L0(JSNApiSplTest, WeakMapRef_GetSize)
4299 {
4300     LocalScope scope(vm_);
4301     CalculateForTime();
4302     Local<WeakMapRef> object = WeakMapRef::New(vm_);
4303     Local<JSValueRef> key = StringRef::NewFromUtf8(vm_, "TestKey");
4304     Local<JSValueRef> value = StringRef::NewFromUtf8(vm_, "TestValue");
4305     object->Set(vm_, key, value);
4306     gettimeofday(&g_beginTime, nullptr);
4307     for (int i = 0; i < NUM_COUNT; i++) {
4308         object->GetSize(vm_);
4309     }
4310     gettimeofday(&g_endTime, nullptr);
4311     TEST_TIME(WeakMapRef::GetSize);
4312 }
4313 
HWTEST_F_L0(JSNApiSplTest,WeakMapRef_GetTotalElements)4314 HWTEST_F_L0(JSNApiSplTest, WeakMapRef_GetTotalElements)
4315 {
4316     LocalScope scope(vm_);
4317     CalculateForTime();
4318     Local<WeakMapRef> object = WeakMapRef::New(vm_);
4319     Local<JSValueRef> key = StringRef::NewFromUtf8(vm_, "TestKey");
4320     Local<JSValueRef> value = StringRef::NewFromUtf8(vm_, "TestValue");
4321     object->Set(vm_, key, value);
4322     gettimeofday(&g_beginTime, nullptr);
4323     for (int i = 0; i < NUM_COUNT; i++) {
4324         object->GetTotalElements(vm_);
4325     }
4326     gettimeofday(&g_endTime, nullptr);
4327     TEST_TIME(WeakMapRef::GetTotalElements);
4328 }
4329 
HWTEST_F_L0(JSNApiSplTest,WeakMapRef_GetKey)4330 HWTEST_F_L0(JSNApiSplTest, WeakMapRef_GetKey)
4331 {
4332     LocalScope scope(vm_);
4333     CalculateForTime();
4334     Local<WeakMapRef> object = WeakMapRef::New(vm_);
4335     Local<JSValueRef> key = StringRef::NewFromUtf8(vm_, "TestKey");
4336     Local<JSValueRef> value = StringRef::NewFromUtf8(vm_, "TestValue");
4337     object->Set(vm_, key, value);
4338     gettimeofday(&g_beginTime, nullptr);
4339     for (int i = 0; i < NUM_COUNT; i++) {
4340         object->GetKey(vm_, 0);
4341     }
4342     gettimeofday(&g_endTime, nullptr);
4343     TEST_TIME(WeakMapRef::GetKey);
4344 }
4345 
HWTEST_F_L0(JSNApiSplTest,WeakMapRef_GetValue)4346 HWTEST_F_L0(JSNApiSplTest, WeakMapRef_GetValue)
4347 {
4348     LocalScope scope(vm_);
4349     CalculateForTime();
4350     Local<WeakMapRef> object = WeakMapRef::New(vm_);
4351     Local<JSValueRef> key = StringRef::NewFromUtf8(vm_, "TestKey");
4352     Local<JSValueRef> value = StringRef::NewFromUtf8(vm_, "TestValue");
4353     object->Set(vm_, key, value);
4354     gettimeofday(&g_beginTime, nullptr);
4355     for (int i = 0; i < NUM_COUNT; i++) {
4356         object->GetValue(vm_, 0);
4357     }
4358     gettimeofday(&g_endTime, nullptr);
4359     TEST_TIME(WeakMapRef::GetValue);
4360 }
4361 
HWTEST_F_L0(JSNApiSplTest,SetRef_GetSize)4362 HWTEST_F_L0(JSNApiSplTest, SetRef_GetSize)
4363 {
4364     LocalScope scope(vm_);
4365     CalculateForTime();
4366     Local<SetRef> object = SetRef::New(vm_);
4367     Local<JSValueRef> key = StringRef::NewFromUtf8(vm_, "TestKey");
4368     Local<JSValueRef> value = StringRef::NewFromUtf8(vm_, "TestValue");
4369     object->Set(vm_, key, value);
4370     gettimeofday(&g_beginTime, nullptr);
4371     for (int i = 0; i < NUM_COUNT; i++) {
4372         object->GetSize(vm_);
4373     }
4374     gettimeofday(&g_endTime, nullptr);
4375     TEST_TIME(SetRef::GetSize);
4376 }
4377 
HWTEST_F_L0(JSNApiSplTest,SetRef_GetTotalElements)4378 HWTEST_F_L0(JSNApiSplTest, SetRef_GetTotalElements)
4379 {
4380     LocalScope scope(vm_);
4381     CalculateForTime();
4382     Local<SetRef> object = SetRef::New(vm_);
4383     Local<JSValueRef> key = StringRef::NewFromUtf8(vm_, "TestKey");
4384     Local<JSValueRef> value = StringRef::NewFromUtf8(vm_, "TestValue");
4385     object->Set(vm_, key, value);
4386     gettimeofday(&g_beginTime, nullptr);
4387     for (int i = 0; i < NUM_COUNT; i++) {
4388         object->GetTotalElements(vm_);
4389     }
4390     gettimeofday(&g_endTime, nullptr);
4391     TEST_TIME(SetRef::GetTotalElements);
4392 }
4393 
HWTEST_F_L0(JSNApiSplTest,SetRef_GetValue)4394 HWTEST_F_L0(JSNApiSplTest, SetRef_GetValue)
4395 {
4396     LocalScope scope(vm_);
4397     CalculateForTime();
4398     Local<SetRef> object = SetRef::New(vm_);
4399     Local<JSValueRef> key = StringRef::NewFromUtf8(vm_, "TestKey");
4400     Local<JSValueRef> value = StringRef::NewFromUtf8(vm_, "TestValue");
4401     object->Set(vm_, key, value);
4402     gettimeofday(&g_beginTime, nullptr);
4403     for (int i = 0; i < NUM_COUNT; i++) {
4404         object->GetValue(vm_, 0);
4405     }
4406     gettimeofday(&g_endTime, nullptr);
4407     TEST_TIME(SetRef::GetValue);
4408 }
4409 
HWTEST_F_L0(JSNApiSplTest,WeakSetRef_GetSize)4410 HWTEST_F_L0(JSNApiSplTest, WeakSetRef_GetSize)
4411 {
4412     LocalScope scope(vm_);
4413     CalculateForTime();
4414     Local<WeakSetRef> object = WeakSetRef::New(vm_);
4415     Local<JSValueRef> key = StringRef::NewFromUtf8(vm_, "TestKey");
4416     Local<JSValueRef> value = StringRef::NewFromUtf8(vm_, "TestValue");
4417     object->Set(vm_, key, value);
4418     gettimeofday(&g_beginTime, nullptr);
4419     for (int i = 0; i < NUM_COUNT; i++) {
4420         object->GetSize(vm_);
4421     }
4422     gettimeofday(&g_endTime, nullptr);
4423     TEST_TIME(WeakSetRef::GetSize);
4424 }
4425 
HWTEST_F_L0(JSNApiSplTest,WeakSetRef_GetTotalElements)4426 HWTEST_F_L0(JSNApiSplTest, WeakSetRef_GetTotalElements)
4427 {
4428     LocalScope scope(vm_);
4429     CalculateForTime();
4430     Local<WeakSetRef> object = WeakSetRef::New(vm_);
4431     Local<JSValueRef> key = StringRef::NewFromUtf8(vm_, "TestKey");
4432     Local<JSValueRef> value = StringRef::NewFromUtf8(vm_, "TestValue");
4433     object->Set(vm_, key, value);
4434     gettimeofday(&g_beginTime, nullptr);
4435     for (int i = 0; i < NUM_COUNT; i++) {
4436         object->GetTotalElements(vm_);
4437     }
4438     gettimeofday(&g_endTime, nullptr);
4439     TEST_TIME(WeakSetRef::GetTotalElements);
4440 }
4441 
HWTEST_F_L0(JSNApiSplTest,WeakSetRef_GetValue)4442 HWTEST_F_L0(JSNApiSplTest, WeakSetRef_GetValue)
4443 {
4444     LocalScope scope(vm_);
4445     CalculateForTime();
4446     Local<WeakSetRef> object = WeakSetRef::New(vm_);
4447     Local<JSValueRef> key = StringRef::NewFromUtf8(vm_, "TestKey");
4448     Local<JSValueRef> value = StringRef::NewFromUtf8(vm_, "TestValue");
4449     object->Set(vm_, key, value);
4450     gettimeofday(&g_beginTime, nullptr);
4451     for (int i = 0; i < NUM_COUNT; i++) {
4452         object->GetValue(vm_, 0);
4453     }
4454     gettimeofday(&g_endTime, nullptr);
4455     TEST_TIME(WeakSetRef::GetValue);
4456 }
4457 
HWTEST_F_L0(JSNApiSplTest,IsWeakSetRef_True)4458 HWTEST_F_L0(JSNApiSplTest, IsWeakSetRef_True)
4459 {
4460     LocalScope scope(vm_);
4461     CalculateForTime();
4462     Local<JSValueRef> weakSet = WeakSetRef::New(vm_);
4463     gettimeofday(&g_beginTime, nullptr);
4464     for (int i = 0; i < NUM_COUNT; i++) {
4465         ASSERT_TRUE(weakSet->IsWeakSet(vm_));
4466     }
4467     gettimeofday(&g_endTime, nullptr);
4468     TEST_TIME(JSValueRef::IsWeakSet);
4469 }
4470 
HWTEST_F_L0(JSNApiSplTest,IsWeakSetRef_False)4471 HWTEST_F_L0(JSNApiSplTest, IsWeakSetRef_False)
4472 {
4473     LocalScope scope(vm_);
4474     CalculateForTime();
4475     Local<JSValueRef> object = ObjectRef::New(vm_);
4476     gettimeofday(&g_beginTime, nullptr);
4477     for (int i = 0; i < NUM_COUNT; i++) {
4478         ASSERT_FALSE(object->IsWeakSet(vm_));
4479     }
4480     gettimeofday(&g_endTime, nullptr);
4481     TEST_TIME(JSValueRef::IsWeakSet);
4482 }
4483 
HWTEST_F_L0(JSNApiSplTest,MapIteratorRef_GetIndex)4484 HWTEST_F_L0(JSNApiSplTest, MapIteratorRef_GetIndex)
4485 {
4486     LocalScope scope(vm_);
4487     CalculateForTime();
4488     JSHandle<GlobalEnv> env = thread_->GetEcmaVM()->GetGlobalEnv();
4489     ObjectFactory *factory = thread_->GetEcmaVM()->GetFactory();
4490     JSHandle<JSTaggedValue> builtinsMapFunc = env->GetBuiltinsMapFunction();
4491     JSHandle<JSMap> jsMap(factory->NewJSObjectByConstructor(JSHandle<JSFunction>(builtinsMapFunc), builtinsMapFunc));
4492     JSHandle<JSTaggedValue> linkedHashMap(LinkedHashMap::Create(thread_));
4493     jsMap->SetLinkedMap(thread_, linkedHashMap);
4494     JSHandle<JSTaggedValue> mapValue(jsMap);
4495     JSHandle<JSTaggedValue> mapIteratorVal = JSMapIterator::CreateMapIterator(thread_, mapValue, IterationKind::KEY);
4496     JSHandle<JSMapIterator> mapIterator = JSHandle<JSMapIterator>::Cast(mapIteratorVal);
4497     mapIterator->SetNextIndex(1);
4498     Local<MapIteratorRef> object = JSNApiHelper::ToLocal<MapIteratorRef>(mapIteratorVal);
4499     gettimeofday(&g_beginTime, nullptr);
4500     for (int i = 0; i < NUM_COUNT; i++) {
4501         object->GetIndex();
4502     }
4503     gettimeofday(&g_endTime, nullptr);
4504     TEST_TIME(MapIteratorRef::GetIndex);
4505 }
4506 
HWTEST_F_L0(JSNApiSplTest,MapIteratorRef_GetKind)4507 HWTEST_F_L0(JSNApiSplTest, MapIteratorRef_GetKind)
4508 {
4509     LocalScope scope(vm_);
4510     CalculateForTime();
4511     JSHandle<GlobalEnv> env = thread_->GetEcmaVM()->GetGlobalEnv();
4512     ObjectFactory *factory = thread_->GetEcmaVM()->GetFactory();
4513     JSHandle<JSTaggedValue> builtinsMapFunc = env->GetBuiltinsMapFunction();
4514     JSHandle<JSMap> jsMap(factory->NewJSObjectByConstructor(JSHandle<JSFunction>(builtinsMapFunc), builtinsMapFunc));
4515     JSHandle<JSTaggedValue> linkedHashMap(LinkedHashMap::Create(thread_));
4516     jsMap->SetLinkedMap(thread_, linkedHashMap);
4517     JSHandle<JSTaggedValue> mapValue(jsMap);
4518     JSHandle<JSTaggedValue> mapIteratorVal = JSMapIterator::CreateMapIterator(thread_, mapValue, IterationKind::KEY);
4519     JSHandle<JSMapIterator> mapIterator = JSHandle<JSMapIterator>::Cast(mapIteratorVal);
4520     mapIterator->SetIterationKind(IterationKind::VALUE);
4521     mapIterator->SetIterationKind(IterationKind::KEY_AND_VALUE);
4522     Local<MapIteratorRef> object = JSNApiHelper::ToLocal<MapIteratorRef>(mapIteratorVal);
4523     gettimeofday(&g_beginTime, nullptr);
4524     for (int i = 0; i < NUM_COUNT; i++) {
4525         object->GetKind(vm_);
4526     }
4527     gettimeofday(&g_endTime, nullptr);
4528     TEST_TIME(MapIteratorRef::GetKind);
4529 }
4530 
HWTEST_F_L0(JSNApiSplTest,SetIteratorRef_GetIndex)4531 HWTEST_F_L0(JSNApiSplTest, SetIteratorRef_GetIndex)
4532 {
4533     LocalScope scope(vm_);
4534     CalculateForTime();
4535     JSHandle<GlobalEnv> env = thread_->GetEcmaVM()->GetGlobalEnv();
4536     ObjectFactory *factory = thread_->GetEcmaVM()->GetFactory();
4537     JSHandle<JSTaggedValue> constructor = env->GetBuiltinsSetFunction();
4538     JSHandle<JSSet> set =
4539         JSHandle<JSSet>::Cast(factory->NewJSObjectByConstructor(JSHandle<JSFunction>(constructor), constructor));
4540     JSHandle<LinkedHashSet> hashSet = LinkedHashSet::Create(thread_);
4541     set->SetLinkedSet(thread_, hashSet);
4542     JSHandle<JSTaggedValue> setIteratorValue =
4543         JSSetIterator::CreateSetIterator(thread_, JSHandle<JSTaggedValue>(set), IterationKind::KEY);
4544     JSHandle<JSSetIterator> setIterator = JSHandle<JSSetIterator>::Cast(setIteratorValue);
4545     setIterator->SetNextIndex(1);
4546     Local<SetIteratorRef> object = JSNApiHelper::ToLocal<SetIteratorRef>(setIteratorValue);
4547     gettimeofday(&g_beginTime, nullptr);
4548     for (int i = 0; i < NUM_COUNT; i++) {
4549         object->GetIndex();
4550     }
4551     gettimeofday(&g_endTime, nullptr);
4552     TEST_TIME(SetIteratorRef::GetIndex);
4553 }
4554 
HWTEST_F_L0(JSNApiSplTest,SetIteratorRef_GetKind)4555 HWTEST_F_L0(JSNApiSplTest, SetIteratorRef_GetKind)
4556 {
4557     LocalScope scope(vm_);
4558     CalculateForTime();
4559     JSHandle<GlobalEnv> env = thread_->GetEcmaVM()->GetGlobalEnv();
4560     ObjectFactory *factory = thread_->GetEcmaVM()->GetFactory();
4561     JSHandle<JSTaggedValue> constructor = env->GetBuiltinsSetFunction();
4562     JSHandle<JSSet> set =
4563         JSHandle<JSSet>::Cast(factory->NewJSObjectByConstructor(JSHandle<JSFunction>(constructor), constructor));
4564     JSHandle<LinkedHashSet> hashSet = LinkedHashSet::Create(thread_);
4565     set->SetLinkedSet(thread_, hashSet);
4566     JSHandle<JSTaggedValue> setIteratorValue =
4567         JSSetIterator::CreateSetIterator(thread_, JSHandle<JSTaggedValue>(set), IterationKind::KEY);
4568     JSHandle<JSSetIterator> setIterator = JSHandle<JSSetIterator>::Cast(setIteratorValue);
4569     setIterator->SetIterationKind(IterationKind::VALUE);
4570     setIterator->SetIterationKind(IterationKind::KEY_AND_VALUE);
4571     Local<SetIteratorRef> object = JSNApiHelper::ToLocal<SetIteratorRef>(setIteratorValue);
4572     gettimeofday(&g_beginTime, nullptr);
4573     for (int i = 0; i < NUM_COUNT; i++) {
4574         object->GetKind(vm_);
4575     }
4576     gettimeofday(&g_endTime, nullptr);
4577     TEST_TIME(SetIteratorRef::GetKind);
4578 }
4579 
HWTEST_F_L0(JSNApiSplTest,GeneratorFunctionRef_IsGenerator)4580 HWTEST_F_L0(JSNApiSplTest, GeneratorFunctionRef_IsGenerator)
4581 {
4582     LocalScope scope(vm_);
4583     CalculateForTime();
4584     JSHandle<GlobalEnv> env = thread_->GetEcmaVM()->GetGlobalEnv();
4585     ObjectFactory *factory = thread_->GetEcmaVM()->GetFactory();
4586     JSHandle<JSTaggedValue> genFunc = env->GetGeneratorFunctionFunction();
4587     JSHandle<JSGeneratorObject> genObjHandleVal = factory->NewJSGeneratorObject(genFunc);
4588     JSHandle<JSHClass> hclass = JSHandle<JSHClass>::Cast(env->GetGeneratorFunctionClass());
4589     JSHandle<JSFunction> generatorFunc = JSHandle<JSFunction>::Cast(factory->NewJSObject(hclass));
4590     JSFunction::InitializeJSFunction(thread_, generatorFunc, FunctionKind::GENERATOR_FUNCTION);
4591     JSHandle<GeneratorContext> generatorContext = factory->NewGeneratorContext();
4592     generatorContext->SetMethod(thread_, generatorFunc.GetTaggedValue());
4593     JSHandle<JSTaggedValue> generatorContextVal = JSHandle<JSTaggedValue>::Cast(generatorContext);
4594     genObjHandleVal->SetGeneratorContext(thread_, generatorContextVal.GetTaggedValue());
4595     JSHandle<JSTaggedValue> genObjTagHandleVal = JSHandle<JSTaggedValue>::Cast(genObjHandleVal);
4596     Local<GeneratorObjectRef> genObjectRef = JSNApiHelper::ToLocal<GeneratorObjectRef>(genObjTagHandleVal);
4597     Local<GeneratorFunctionRef> object = genObjectRef->GetGeneratorFunction(vm_);
4598     gettimeofday(&g_beginTime, nullptr);
4599     for (int i = 0; i < NUM_COUNT; i++) {
4600         object->IsGenerator(vm_);
4601     }
4602     gettimeofday(&g_endTime, nullptr);
4603     TEST_TIME(GeneratorFunctionRef::IsGenerator);
4604 }
4605 
HWTEST_F_L0(JSNApiSplTest,GeneratorObjectRef_GetGeneratorState)4606 HWTEST_F_L0(JSNApiSplTest, GeneratorObjectRef_GetGeneratorState)
4607 {
4608     LocalScope scope(vm_);
4609     CalculateForTime();
4610     JSHandle<GlobalEnv> env = thread_->GetEcmaVM()->GetGlobalEnv();
4611     ObjectFactory *factory = thread_->GetEcmaVM()->GetFactory();
4612     JSHandle<JSTaggedValue> genFunc = env->GetGeneratorFunctionFunction();
4613     JSHandle<JSGeneratorObject> genObjHandleVal = factory->NewJSGeneratorObject(genFunc);
4614     JSHandle<JSHClass> hclass = JSHandle<JSHClass>::Cast(env->GetGeneratorFunctionClass());
4615     JSHandle<JSFunction> generatorFunc = JSHandle<JSFunction>::Cast(factory->NewJSObject(hclass));
4616     JSFunction::InitializeJSFunction(thread_, generatorFunc, FunctionKind::GENERATOR_FUNCTION);
4617     JSHandle<GeneratorContext> generatorContext = factory->NewGeneratorContext();
4618     generatorContext->SetMethod(thread_, generatorFunc.GetTaggedValue());
4619     JSHandle<JSTaggedValue> generatorContextVal = JSHandle<JSTaggedValue>::Cast(generatorContext);
4620     genObjHandleVal->SetGeneratorContext(thread_, generatorContextVal.GetTaggedValue());
4621     genObjHandleVal->SetGeneratorState(JSGeneratorState::COMPLETED);
4622     JSHandle<JSTaggedValue> genObjTagHandleVal = JSHandle<JSTaggedValue>::Cast(genObjHandleVal);
4623     Local<GeneratorObjectRef> object = JSNApiHelper::ToLocal<GeneratorObjectRef>(genObjTagHandleVal);
4624     gettimeofday(&g_beginTime, nullptr);
4625     for (int i = 0; i < NUM_COUNT; i++) {
4626         object->GetGeneratorState(vm_);
4627     }
4628     gettimeofday(&g_endTime, nullptr);
4629     TEST_TIME(GeneratorObjectRef::GetGeneratorState);
4630 }
4631 
HWTEST_F_L0(JSNApiSplTest,GeneratorObjectRef_GetGeneratorFunction)4632 HWTEST_F_L0(JSNApiSplTest, GeneratorObjectRef_GetGeneratorFunction)
4633 {
4634     LocalScope scope(vm_);
4635     CalculateForTime();
4636     JSHandle<GlobalEnv> env = thread_->GetEcmaVM()->GetGlobalEnv();
4637     ObjectFactory *factory = thread_->GetEcmaVM()->GetFactory();
4638     JSHandle<JSTaggedValue> genFunc = env->GetGeneratorFunctionFunction();
4639     JSHandle<JSGeneratorObject> genObjHandleVal = factory->NewJSGeneratorObject(genFunc);
4640     JSHandle<JSHClass> hclass = JSHandle<JSHClass>::Cast(env->GetGeneratorFunctionClass());
4641     JSHandle<JSFunction> generatorFunc = JSHandle<JSFunction>::Cast(factory->NewJSObject(hclass));
4642     JSFunction::InitializeJSFunction(thread_, generatorFunc, FunctionKind::GENERATOR_FUNCTION);
4643     JSHandle<GeneratorContext> generatorContext = factory->NewGeneratorContext();
4644     generatorContext->SetMethod(thread_, generatorFunc.GetTaggedValue());
4645     JSHandle<JSTaggedValue> generatorContextVal = JSHandle<JSTaggedValue>::Cast(generatorContext);
4646     genObjHandleVal->SetGeneratorContext(thread_, generatorContextVal.GetTaggedValue());
4647     genObjHandleVal->SetGeneratorState(JSGeneratorState::COMPLETED);
4648     JSHandle<JSTaggedValue> genObjTagHandleVal = JSHandle<JSTaggedValue>::Cast(genObjHandleVal);
4649     Local<GeneratorObjectRef> object = JSNApiHelper::ToLocal<GeneratorObjectRef>(genObjTagHandleVal);
4650     gettimeofday(&g_beginTime, nullptr);
4651     for (int i = 0; i < NUM_COUNT; i++) {
4652         object->GetGeneratorFunction(vm_);
4653     }
4654     gettimeofday(&g_endTime, nullptr);
4655     TEST_TIME(GeneratorObjectRef::GetGeneratorFunction);
4656 }
4657 
HWTEST_F_L0(JSNApiSplTest,GeneratorObjectRef_GetGeneratorReceiver)4658 HWTEST_F_L0(JSNApiSplTest, GeneratorObjectRef_GetGeneratorReceiver)
4659 {
4660     LocalScope scope(vm_);
4661     CalculateForTime();
4662     JSHandle<GlobalEnv> env = thread_->GetEcmaVM()->GetGlobalEnv();
4663     ObjectFactory *factory = thread_->GetEcmaVM()->GetFactory();
4664     JSHandle<JSTaggedValue> genFunc = env->GetGeneratorFunctionFunction();
4665     JSHandle<JSGeneratorObject> genObjHandleVal = factory->NewJSGeneratorObject(genFunc);
4666     JSHandle<JSHClass> hclass = JSHandle<JSHClass>::Cast(env->GetGeneratorFunctionClass());
4667     JSHandle<JSFunction> generatorFunc = JSHandle<JSFunction>::Cast(factory->NewJSObject(hclass));
4668     JSFunction::InitializeJSFunction(thread_, generatorFunc, FunctionKind::GENERATOR_FUNCTION);
4669     JSHandle<GeneratorContext> generatorContext = factory->NewGeneratorContext();
4670     generatorContext->SetMethod(thread_, generatorFunc.GetTaggedValue());
4671     JSHandle<JSTaggedValue> generatorContextVal = JSHandle<JSTaggedValue>::Cast(generatorContext);
4672     genObjHandleVal->SetGeneratorContext(thread_, generatorContextVal.GetTaggedValue());
4673     genObjHandleVal->SetGeneratorState(JSGeneratorState::COMPLETED);
4674     JSHandle<JSTaggedValue> genObjTagHandleVal = JSHandle<JSTaggedValue>::Cast(genObjHandleVal);
4675     Local<GeneratorObjectRef> object = JSNApiHelper::ToLocal<GeneratorObjectRef>(genObjTagHandleVal);
4676     gettimeofday(&g_beginTime, nullptr);
4677     for (int i = 0; i < NUM_COUNT; i++) {
4678         object->GetGeneratorReceiver(vm_);
4679     }
4680     gettimeofday(&g_endTime, nullptr);
4681     TEST_TIME(GeneratorObjectRef::GetGeneratorReceiver);
4682 }
4683 
HWTEST_F_L0(JSNApiSplTest,CollatorRef_GetCompareFunction)4684 HWTEST_F_L0(JSNApiSplTest, CollatorRef_GetCompareFunction)
4685 {
4686     LocalScope scope(vm_);
4687     CalculateForTime();
4688     JSHandle<GlobalEnv> env = vm_->GetGlobalEnv();
4689     ObjectFactory *factory = vm_->GetFactory();
4690     JSHandle<JSTaggedValue> ctor = env->GetCollatorFunction();
4691     JSHandle<JSCollator> collator =
4692         JSHandle<JSCollator>::Cast(factory->NewJSObjectByConstructor(JSHandle<JSFunction>(ctor), ctor));
4693     JSHandle<JSTaggedValue> localeStr = thread_->GlobalConstants()->GetHandledEnUsString();
4694     JSHandle<JSTaggedValue> undefinedHandle(thread_, JSTaggedValue::Undefined());
4695     JSHandle<JSCollator> initCollator = JSCollator::InitializeCollator(thread_, collator, localeStr, undefinedHandle);
4696     JSHandle<JSTaggedValue> collatorTagHandleVal = JSHandle<JSTaggedValue>::Cast(initCollator);
4697     Local<CollatorRef> object = JSNApiHelper::ToLocal<CollatorRef>(collatorTagHandleVal);
4698     gettimeofday(&g_beginTime, nullptr);
4699     for (int i = 0; i < NUM_COUNT; i++) {
4700         object->GetCompareFunction(vm_);
4701     }
4702     gettimeofday(&g_endTime, nullptr);
4703     TEST_TIME(GeneratorObjectRef::GetCompareFunction);
4704 }
4705 
HWTEST_F_L0(JSNApiSplTest,DataTimeFormatRef_GetFormatFunction)4706 HWTEST_F_L0(JSNApiSplTest, DataTimeFormatRef_GetFormatFunction)
4707 {
4708     LocalScope scope(vm_);
4709     CalculateForTime();
4710     JSHandle<GlobalEnv> env = thread_->GetEcmaVM()->GetGlobalEnv();
4711     ObjectFactory *factory = thread_->GetEcmaVM()->GetFactory();
4712     JSHandle<JSTaggedValue> localeCtor = env->GetLocaleFunction();
4713     JSHandle<JSLocale> locales =
4714         JSHandle<JSLocale>::Cast(factory->NewJSObjectByConstructor(JSHandle<JSFunction>(localeCtor), localeCtor));
4715     icu::Locale icuLocale("zh", "Hans", "Cn", "calendar=chinese");
4716     factory->NewJSIntlIcuData(locales, icuLocale, JSLocale::FreeIcuLocale);
4717     JSHandle<JSTaggedValue> objFun = env->GetObjectFunction();
4718     JSHandle<JSObject> options = factory->NewJSObjectByConstructor(JSHandle<JSFunction>(objFun), objFun);
4719     options = JSDateTimeFormat::ToDateTimeOptions(thread_, JSHandle<JSTaggedValue>::Cast(options), RequiredOption::ANY,
4720         DefaultsOption::ALL);
4721     JSHandle<JSTaggedValue> dtfCtor = env->GetDateTimeFormatFunction();
4722     JSHandle<JSDateTimeFormat> dtf =
4723         JSHandle<JSDateTimeFormat>::Cast(factory->NewJSObjectByConstructor(JSHandle<JSFunction>(dtfCtor), dtfCtor));
4724     dtf = JSDateTimeFormat::InitializeDateTimeFormat(thread_, dtf, JSHandle<JSTaggedValue>::Cast(locales),
4725         JSHandle<JSTaggedValue>::Cast(options));
4726     JSHandle<JSTaggedValue> dtfTagHandleVal = JSHandle<JSTaggedValue>::Cast(dtf);
4727     Local<DataTimeFormatRef> object = JSNApiHelper::ToLocal<DataTimeFormatRef>(dtfTagHandleVal);
4728     gettimeofday(&g_beginTime, nullptr);
4729     for (int i = 0; i < NUM_COUNT; i++) {
4730         object->GetFormatFunction(vm_);
4731     }
4732     gettimeofday(&g_endTime, nullptr);
4733     TEST_TIME(DataTimeFormatRef::GetFormatFunction);
4734 }
4735 
HWTEST_F_L0(JSNApiSplTest,NumberFormatRef_GetFormatFunction)4736 HWTEST_F_L0(JSNApiSplTest, NumberFormatRef_GetFormatFunction)
4737 {
4738     LocalScope scope(vm_);
4739     CalculateForTime();
4740     JSHandle<GlobalEnv> env = thread_->GetEcmaVM()->GetGlobalEnv();
4741     ObjectFactory *factory = thread_->GetEcmaVM()->GetFactory();
4742     JSHandle<JSTaggedValue> ctor = env->GetNumberFormatFunction();
4743     JSHandle<JSNumberFormat> numberFormat =
4744         JSHandle<JSNumberFormat>::Cast(factory->NewJSObjectByConstructor(JSHandle<JSFunction>(ctor), ctor));
4745     EXPECT_TRUE(*numberFormat != nullptr);
4746     JSHandle<JSTaggedValue> locales(factory->NewFromASCII("zh-Hans-CN"));
4747     JSHandle<JSTaggedValue> undefinedOptions(thread_, JSTaggedValue::Undefined());
4748     JSNumberFormat::InitializeNumberFormat(thread_, numberFormat, locales, undefinedOptions);
4749     JSHandle<JSTaggedValue> numberformatTagHandleVal = JSHandle<JSTaggedValue>::Cast(numberFormat);
4750     Local<NumberFormatRef> object = JSNApiHelper::ToLocal<NumberFormatRef>(numberformatTagHandleVal);
4751     gettimeofday(&g_beginTime, nullptr);
4752     for (int i = 0; i < NUM_COUNT; i++) {
4753         object->GetFormatFunction(vm_);
4754     }
4755     gettimeofday(&g_endTime, nullptr);
4756     TEST_TIME(NumberFormatRef::GetFormatFunction);
4757 }
4758 
HWTEST_F_L0(JSNApiSplTest,PromiseRejectInfo_PromiseRejectInfo)4759 HWTEST_F_L0(JSNApiSplTest, PromiseRejectInfo_PromiseRejectInfo)
4760 {
4761     LocalScope scope(vm_);
4762     CalculateForTime();
4763     Local<StringRef> toStringPromise = StringRef::NewFromUtf8(vm_, "-3.14");
4764     Local<JSValueRef> promise(toStringPromise);
4765     Local<StringRef> toStringReason = StringRef::NewFromUtf8(vm_, "123.3");
4766     Local<JSValueRef> reason(toStringReason);
4767     void *data = static_cast<void *>(new std::string("promisereject"));
4768     gettimeofday(&g_beginTime, nullptr);
4769     for (int i = 0; i < NUM_COUNT; i++) {
4770         PromiseRejectInfo promisereject(promise, reason, PromiseRejectInfo::PROMISE_REJECTION_EVENT::REJECT, data);
4771     }
4772     gettimeofday(&g_endTime, nullptr);
4773     TEST_TIME(PromiseRejectInfo::PromiseRejectInfo);
4774 }
4775 
HWTEST_F_L0(JSNApiSplTest,PromiseRejectInfo_GetPromise)4776 HWTEST_F_L0(JSNApiSplTest, PromiseRejectInfo_GetPromise)
4777 {
4778     LocalScope scope(vm_);
4779     CalculateForTime();
4780     Local<StringRef> toStringPromise = StringRef::NewFromUtf8(vm_, "-3.14");
4781     Local<JSValueRef> promise(toStringPromise);
4782     Local<StringRef> toStringReason = StringRef::NewFromUtf8(vm_, "3.14");
4783     Local<JSValueRef> reason(toStringReason);
4784     void *data = static_cast<void *>(new std::string("promisereject"));
4785     PromiseRejectInfo promisereject(promise, reason, PromiseRejectInfo::PROMISE_REJECTION_EVENT::REJECT, data);
4786     gettimeofday(&g_beginTime, nullptr);
4787     for (int i = 0; i < NUM_COUNT; i++) {
4788         promisereject.GetPromise();
4789     }
4790     gettimeofday(&g_endTime, nullptr);
4791     TEST_TIME(PromiseRejectInfo::GetPromise);
4792 }
4793 
HWTEST_F_L0(JSNApiSplTest,PromiseRejectInfo_GetReason)4794 HWTEST_F_L0(JSNApiSplTest, PromiseRejectInfo_GetReason)
4795 {
4796     LocalScope scope(vm_);
4797     CalculateForTime();
4798     Local<StringRef> toStringPromise = StringRef::NewFromUtf8(vm_, "-3.14");
4799     Local<JSValueRef> promise(toStringPromise);
4800     Local<StringRef> toStringReason = StringRef::NewFromUtf8(vm_, "3.14");
4801     Local<JSValueRef> reason(toStringReason);
4802     void *data = static_cast<void *>(new std::string("promisereject"));
4803     PromiseRejectInfo promisereject(promise, reason, PromiseRejectInfo::PROMISE_REJECTION_EVENT::REJECT, data);
4804     gettimeofday(&g_beginTime, nullptr);
4805     for (int i = 0; i < NUM_COUNT; i++) {
4806         promisereject.GetReason();
4807     }
4808     gettimeofday(&g_endTime, nullptr);
4809     TEST_TIME(PromiseRejectInfo::GetReason);
4810 }
4811 
HWTEST_F_L0(JSNApiSplTest,PromiseRejectInfo_GetOperation)4812 HWTEST_F_L0(JSNApiSplTest, PromiseRejectInfo_GetOperation)
4813 {
4814     LocalScope scope(vm_);
4815     CalculateForTime();
4816     Local<StringRef> toStringPromise = StringRef::NewFromUtf8(vm_, "-3.14");
4817     Local<JSValueRef> promise(toStringPromise);
4818     Local<StringRef> toStringReason = StringRef::NewFromUtf8(vm_, "3.14");
4819     Local<JSValueRef> reason(toStringReason);
4820     void *data = static_cast<void *>(new std::string("promisereject"));
4821     PromiseRejectInfo promisereject(promise, reason, PromiseRejectInfo::PROMISE_REJECTION_EVENT::REJECT, data);
4822     gettimeofday(&g_beginTime, nullptr);
4823     for (int i = 0; i < NUM_COUNT; i++) {
4824         promisereject.GetOperation();
4825     }
4826     gettimeofday(&g_endTime, nullptr);
4827     TEST_TIME(PromiseRejectInfo::GetOperation);
4828 }
4829 
HWTEST_F_L0(JSNApiSplTest,PromiseRejectInfo_GetData)4830 HWTEST_F_L0(JSNApiSplTest, PromiseRejectInfo_GetData)
4831 {
4832     LocalScope scope(vm_);
4833     CalculateForTime();
4834     Local<StringRef> toStringPromise = StringRef::NewFromUtf8(vm_, "-3.14");
4835     Local<JSValueRef> promise(toStringPromise);
4836     Local<StringRef> toStringReason = StringRef::NewFromUtf8(vm_, "3.14");
4837     Local<JSValueRef> reason(toStringReason);
4838     void *data = static_cast<void *>(new std::string("promisereject"));
4839     PromiseRejectInfo promisereject(promise, reason, PromiseRejectInfo::PROMISE_REJECTION_EVENT::REJECT, data);
4840     gettimeofday(&g_beginTime, nullptr);
4841     for (int i = 0; i < NUM_COUNT; i++) {
4842         promisereject.GetData();
4843     }
4844     gettimeofday(&g_endTime, nullptr);
4845     TEST_TIME(PromiseRejectInfo::GetData);
4846 }
4847 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_Int32Value)4848 HWTEST_F_L0(JSNApiSplTest, JSValueRef_Int32Value)
4849 {
4850     LocalScope scope(vm_);
4851     CalculateForTime();
4852     int num = 123; // 123 = random number
4853     Local<JSValueRef> res = IntegerRef::New(vm_, num);
4854     gettimeofday(&g_beginTime, nullptr);
4855     for (int i = 0; i < NUM_COUNT; i++) {
4856         res->Int32Value(vm_);
4857     }
4858     gettimeofday(&g_endTime, nullptr);
4859     TEST_TIME(JSValueRef::Int32Value);
4860 }
4861 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_ToNumber)4862 HWTEST_F_L0(JSNApiSplTest, JSValueRef_ToNumber)
4863 {
4864     LocalScope scope(vm_);
4865     CalculateForTime();
4866     Local<StringRef> toString = StringRef::NewFromUtf8(vm_, "-123.3");
4867     Local<JSValueRef> toValue(toString);
4868     gettimeofday(&g_beginTime, nullptr);
4869     for (int i = 0; i < NUM_COUNT; i++) {
4870         toString->ToNumber(vm_);
4871     }
4872     gettimeofday(&g_endTime, nullptr);
4873     TEST_TIME(JSValueRef::ToNumber);
4874 }
4875 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_IsHole)4876 HWTEST_F_L0(JSNApiSplTest, JSValueRef_IsHole)
4877 {
4878     LocalScope scope(vm_);
4879     CalculateForTime();
4880     Local<JSValueRef> res = IntegerRef::New(vm_, 123);
4881     gettimeofday(&g_beginTime, nullptr);
4882     for (int i = 0; i < NUM_COUNT; i++) {
4883         res->IsHole();
4884     }
4885     gettimeofday(&g_endTime, nullptr);
4886     TEST_TIME(JSValueRef::IsHole);
4887 }
4888 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_IsTrue)4889 HWTEST_F_L0(JSNApiSplTest, JSValueRef_IsTrue)
4890 {
4891     LocalScope scope(vm_);
4892     CalculateForTime();
4893     int num = 123; // 123 = random number
4894     Local<JSValueRef> res = IntegerRef::New(vm_, num);
4895     gettimeofday(&g_beginTime, nullptr);
4896     for (int i = 0; i < NUM_COUNT; i++) {
4897         res->IsTrue();
4898     }
4899     gettimeofday(&g_endTime, nullptr);
4900     TEST_TIME(JSValueRef::IsTrue);
4901 }
4902 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_IsSymbol)4903 HWTEST_F_L0(JSNApiSplTest, JSValueRef_IsSymbol)
4904 {
4905     LocalScope scope(vm_);
4906     CalculateForTime();
4907     int num = 123; // 123 = random number
4908     Local<JSValueRef> res = IntegerRef::New(vm_, num);
4909     gettimeofday(&g_beginTime, nullptr);
4910     for (int i = 0; i < NUM_COUNT; i++) {
4911         res->IsSymbol(vm_);
4912     }
4913     gettimeofday(&g_endTime, nullptr);
4914     TEST_TIME(JSValueRef::IsSymbol);
4915 }
4916 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_IsObject)4917 HWTEST_F_L0(JSNApiSplTest, JSValueRef_IsObject)
4918 {
4919     LocalScope scope(vm_);
4920     CalculateForTime();
4921     int num = 123; // 123 = random number
4922     Local<JSValueRef> res = IntegerRef::New(vm_, num);
4923     gettimeofday(&g_beginTime, nullptr);
4924     for (int i = 0; i < NUM_COUNT; i++) {
4925         res->IsObject(vm_);
4926     }
4927     gettimeofday(&g_endTime, nullptr);
4928     TEST_TIME(JSValueRef::IsObject);
4929 }
4930 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_IsTypedArray)4931 HWTEST_F_L0(JSNApiSplTest, JSValueRef_IsTypedArray)
4932 {
4933     LocalScope scope(vm_);
4934     CalculateForTime();
4935     int num = 123; // 123 = random number
4936     Local<JSValueRef> res = IntegerRef::New(vm_, num);
4937     gettimeofday(&g_beginTime, nullptr);
4938     for (int i = 0; i < NUM_COUNT; i++) {
4939         res->IsTypedArray(vm_);
4940     }
4941     gettimeofday(&g_endTime, nullptr);
4942     TEST_TIME(JSValueRef::IsTypedArray);
4943 }
4944 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_IsNativePointer)4945 HWTEST_F_L0(JSNApiSplTest, JSValueRef_IsNativePointer)
4946 {
4947     LocalScope scope(vm_);
4948     CalculateForTime();
4949     int num = 123; // 123 = random number
4950     Local<JSValueRef> res = IntegerRef::New(vm_, num);
4951     gettimeofday(&g_beginTime, nullptr);
4952     for (int i = 0; i < NUM_COUNT; i++) {
4953         res->IsNativePointer(vm_);
4954     }
4955     gettimeofday(&g_endTime, nullptr);
4956     TEST_TIME(JSValueRef::IsNativePointer);
4957 }
4958 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_IsRegExp)4959 HWTEST_F_L0(JSNApiSplTest, JSValueRef_IsRegExp)
4960 {
4961     LocalScope scope(vm_);
4962     CalculateForTime();
4963     int num = 123; // 123 = random number
4964     Local<JSValueRef> res = IntegerRef::New(vm_, num);
4965     gettimeofday(&g_beginTime, nullptr);
4966     for (int i = 0; i < NUM_COUNT; i++) {
4967         res->IsRegExp(vm_);
4968     }
4969     gettimeofday(&g_endTime, nullptr);
4970     TEST_TIME(JSValueRef::IsRegExp);
4971 }
4972 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_IsArrayIterator)4973 HWTEST_F_L0(JSNApiSplTest, JSValueRef_IsArrayIterator)
4974 {
4975     LocalScope scope(vm_);
4976     CalculateForTime();
4977     int num = 123; // 123 = random number
4978     Local<JSValueRef> res = IntegerRef::New(vm_, num);
4979     gettimeofday(&g_beginTime, nullptr);
4980     for (int i = 0; i < NUM_COUNT; i++) {
4981         res->IsArrayIterator(vm_);
4982     }
4983     gettimeofday(&g_endTime, nullptr);
4984     TEST_TIME(JSValueRef::IsArrayIterator);
4985 }
4986 
HWTEST_F_L0(JSNApiSplTest,EscapeLocalScope_gz)4987 HWTEST_F_L0(JSNApiSplTest, EscapeLocalScope_gz)
4988 {
4989     LocalScope scope(vm_);
4990     CalculateForTime();
4991     gettimeofday(&g_beginTime, nullptr);
4992     for (int i = 0; i < NUM_COUNT; i++) {
4993         EscapeLocalScope test(vm_);
4994     }
4995     gettimeofday(&g_endTime, nullptr);
4996     TEST_TIME(EscapeLocalScope::EscapeLocalScope);
4997 }
4998 
HWTEST_F_L0(JSNApiSplTest,EscapeLocalScope_Escape)4999 HWTEST_F_L0(JSNApiSplTest, EscapeLocalScope_Escape)
5000 {
5001     LocalScope scope(vm_);
5002     CalculateForTime();
5003     EscapeLocalScope test(vm_);
5004     int num = 3; // 3 = random number
5005     gettimeofday(&g_beginTime, nullptr);
5006     for (int i = 0; i < NUM_COUNT; i++) {
5007         test.Escape(ArrayRef::New(vm_, num));
5008     }
5009     gettimeofday(&g_endTime, nullptr);
5010     TEST_TIME(EscapeLocalScope::Escape);
5011 }
5012 
HWTEST_F_L0(JSNApiSplTest,JSExecutionScope_gz)5013 HWTEST_F_L0(JSNApiSplTest, JSExecutionScope_gz)
5014 {
5015     LocalScope scope(vm_);
5016     CalculateForTime();
5017     gettimeofday(&g_beginTime, nullptr);
5018     for (int i = 0; i < NUM_COUNT; i++) {
5019         JSExecutionScope res(vm_);
5020     }
5021     gettimeofday(&g_endTime, nullptr);
5022     TEST_TIME(JSExecutionScope::JSExecutionScope);
5023 }
5024 
HWTEST_F_L0(JSNApiSplTest,LocalScope_gz)5025 HWTEST_F_L0(JSNApiSplTest, LocalScope_gz)
5026 {
5027     CalculateForTime();
5028     gettimeofday(&g_beginTime, nullptr);
5029     for (int i = 0; i < NUM_COUNT; i++) {
5030         LocalScope scope(vm_);
5031     }
5032     gettimeofday(&g_endTime, nullptr);
5033     TEST_TIME(LocalScope::LocalScope);
5034 }
5035 
HWTEST_F_L0(JSNApiSplTest,PrimitiveRef_GetValue)5036 HWTEST_F_L0(JSNApiSplTest, PrimitiveRef_GetValue)
5037 {
5038     LocalScope scope(vm_);
5039     CalculateForTime();
5040     int num = 0; // 0 = random number
5041     Local<PrimitiveRef> intValue = IntegerRef::New(vm_, num);
5042     gettimeofday(&g_beginTime, nullptr);
5043     for (int i = 0; i < NUM_COUNT; i++) {
5044         intValue->GetValue(vm_);
5045     }
5046     gettimeofday(&g_endTime, nullptr);
5047     TEST_TIME(PrimitiveRef::GetValue);
5048 }
5049 
HWTEST_F_L0(JSNApiSplTest,IntegerRef_New)5050 HWTEST_F_L0(JSNApiSplTest, IntegerRef_New)
5051 {
5052     LocalScope scope(vm_);
5053     CalculateForTime();
5054     gettimeofday(&g_beginTime, nullptr);
5055     for (int i = 0; i < NUM_COUNT; i++) {
5056         IntegerRef::New(vm_, 0);
5057     }
5058     gettimeofday(&g_endTime, nullptr);
5059     TEST_TIME(IntegerRef::New);
5060 }
5061 
HWTEST_F_L0(JSNApiSplTest,IntegerRef_NewFromUnsigned)5062 HWTEST_F_L0(JSNApiSplTest, IntegerRef_NewFromUnsigned)
5063 {
5064     LocalScope scope(vm_);
5065     CalculateForTime();
5066     unsigned int res = 123; // 123 = random number
5067     gettimeofday(&g_beginTime, nullptr);
5068     for (int i = 0; i < NUM_COUNT; i++) {
5069         IntegerRef::NewFromUnsigned(vm_, res);
5070     }
5071     gettimeofday(&g_endTime, nullptr);
5072     TEST_TIME(IntegerRef::NewFromUnsigned);
5073 }
5074 
HWTEST_F_L0(JSNApiSplTest,IntegerRef_Value)5075 HWTEST_F_L0(JSNApiSplTest, IntegerRef_Value)
5076 {
5077     LocalScope scope(vm_);
5078     CalculateForTime();
5079     int num = 0; // 0 = random number
5080     Local<IntegerRef> res = IntegerRef::New(vm_, num);
5081     gettimeofday(&g_beginTime, nullptr);
5082     for (int i = 0; i < NUM_COUNT; i++) {
5083         res->Value();
5084     }
5085     gettimeofday(&g_endTime, nullptr);
5086     TEST_TIME(IntegerRef::Value);
5087 }
5088 
HWTEST_F_L0(JSNApiSplTest,NumberRef_New01)5089 HWTEST_F_L0(JSNApiSplTest, NumberRef_New01)
5090 {
5091     LocalScope scope(vm_);
5092     CalculateForTime();
5093     double res = 64; // 64 = random number
5094     gettimeofday(&g_beginTime, nullptr);
5095     for (int i = 0; i < NUM_COUNT; i++) {
5096         NumberRef::New(vm_, res);
5097     }
5098     gettimeofday(&g_endTime, nullptr);
5099     TEST_TIME(NumberRef::New01);
5100 }
5101 
HWTEST_F_L0(JSNApiSplTest,NumberRef_New02)5102 HWTEST_F_L0(JSNApiSplTest, NumberRef_New02)
5103 {
5104     LocalScope scope(vm_);
5105     CalculateForTime();
5106     int32_t res = 64; // 64 = random number
5107     gettimeofday(&g_beginTime, nullptr);
5108     for (int i = 0; i < NUM_COUNT; i++) {
5109         NumberRef::New(vm_, res);
5110     }
5111     gettimeofday(&g_endTime, nullptr);
5112     TEST_TIME(NumberRef::New02);
5113 }
5114 
HWTEST_F_L0(JSNApiSplTest,NumberRef_New03)5115 HWTEST_F_L0(JSNApiSplTest, NumberRef_New03)
5116 {
5117     LocalScope scope(vm_);
5118     CalculateForTime();
5119     uint32_t res = 64; // 64 = random number
5120     gettimeofday(&g_beginTime, nullptr);
5121     for (int i = 0; i < NUM_COUNT; i++) {
5122         NumberRef::New(vm_, res);
5123     }
5124     gettimeofday(&g_endTime, nullptr);
5125     TEST_TIME(NumberRef::New03);
5126 }
5127 
HWTEST_F_L0(JSNApiSplTest,NumberRef_New04)5128 HWTEST_F_L0(JSNApiSplTest, NumberRef_New04)
5129 {
5130     LocalScope scope(vm_);
5131     CalculateForTime();
5132     int64_t res = 64; // 64 = random number
5133     gettimeofday(&g_beginTime, nullptr);
5134     for (int i = 0; i < NUM_COUNT; i++) {
5135         NumberRef::New(vm_, res);
5136     }
5137     gettimeofday(&g_endTime, nullptr);
5138     TEST_TIME(NumberRef::New04);
5139 }
5140 
HWTEST_F_L0(JSNApiSplTest,NumberRef_Value)5141 HWTEST_F_L0(JSNApiSplTest, NumberRef_Value)
5142 {
5143     LocalScope scope(vm_);
5144     CalculateForTime();
5145     int32_t num = 0; // 0 = random number
5146     Local<NumberRef> res = NumberRef::New(vm_, num);
5147     gettimeofday(&g_beginTime, nullptr);
5148     for (int i = 0; i < NUM_COUNT; i++) {
5149         res->Value();
5150     }
5151     gettimeofday(&g_endTime, nullptr);
5152     TEST_TIME(NumberRef::Value);
5153 }
5154 
HWTEST_F_L0(JSNApiSplTest,ObjectRef_Cast)5155 HWTEST_F_L0(JSNApiSplTest, ObjectRef_Cast)
5156 {
5157     LocalScope scope(vm_);
5158     CalculateForTime();
5159     Local<JSValueRef> value = ObjectRef::New(vm_);
5160     gettimeofday(&g_beginTime, nullptr);
5161     for (int i = 0; i < NUM_COUNT; i++) {
5162         ObjectRef::Cast(*value);
5163     }
5164     gettimeofday(&g_endTime, nullptr);
5165     TEST_TIME(ObjectRef::Cast);
5166 }
5167 
HWTEST_F_L0(JSNApiSplTest,ObjectRef_New)5168 HWTEST_F_L0(JSNApiSplTest, ObjectRef_New)
5169 {
5170     LocalScope scope(vm_);
5171     CalculateForTime();
5172     gettimeofday(&g_beginTime, nullptr);
5173     for (int i = 0; i < NUM_COUNT; i++) {
5174         ObjectRef::New(vm_);
5175     }
5176     gettimeofday(&g_endTime, nullptr);
5177     TEST_TIME(ObjectRef::New);
5178 }
5179 
Detach1()5180 void *Detach1()
5181 {
5182     GTEST_LOG_(INFO) << "detach is running";
5183     return nullptr;
5184 }
5185 
Attach1(void * buffer)5186 void Attach1([[maybe_unused]] void *buffer)
5187 {
5188     GTEST_LOG_(INFO) << "attach is running";
5189 }
5190 
HWTEST_F_L0(JSNApiSplTest,ObjectRef_Set02)5191 HWTEST_F_L0(JSNApiSplTest, ObjectRef_Set02)
5192 {
5193     LocalScope scope(vm_);
5194     CalculateForTime();
5195     Local<FunctionRef> object = ObjectRef::New(vm_);
5196     Local<JSValueRef> key = StringRef::NewFromUtf8(vm_, "TestKey");
5197     Local<JSValueRef> value = ObjectRef::New(vm_);
5198     gettimeofday(&g_beginTime, nullptr);
5199     for (int i = 0; i < NUM_COUNT; i++) {
5200         object->Set(vm_, key, value);
5201     }
5202     gettimeofday(&g_endTime, nullptr);
5203     TEST_TIME(ObjectRef::Set02);
5204 }
5205 
HWTEST_F_L0(JSNApiSplTest,ObjectRef_Set03)5206 HWTEST_F_L0(JSNApiSplTest, ObjectRef_Set03)
5207 {
5208     LocalScope scope(vm_);
5209     CalculateForTime();
5210     Local<FunctionRef> object = ObjectRef::New(vm_);
5211     Local<JSValueRef> key = StringRef::NewFromUtf8(vm_, "TestKey");
5212     Local<JSValueRef> value = ObjectRef::New(vm_);
5213     gettimeofday(&g_beginTime, nullptr);
5214     for (int i = 0; i < NUM_COUNT; i++) {
5215         object->Set(vm_, key, value);
5216     }
5217     gettimeofday(&g_endTime, nullptr);
5218     TEST_TIME(ObjectRef::Set03);
5219 }
5220 
HWTEST_F_L0(JSNApiSplTest,ObjectRef_SetAccessorProperty)5221 HWTEST_F_L0(JSNApiSplTest, ObjectRef_SetAccessorProperty)
5222 {
5223     LocalScope scope(vm_);
5224     CalculateForTime();
5225     Local<FunctionRef> object = ObjectRef::New(vm_);
5226     Local<JSValueRef> key = StringRef::NewFromUtf8(vm_, "TestKey");
5227     Local<FunctionRef> target1 = FunctionRef::New(vm_, nullptr);
5228     Local<FunctionRef> target2 = FunctionRef::New(vm_, nullptr);
5229     gettimeofday(&g_beginTime, nullptr);
5230     for (int i = 0; i < NUM_COUNT; i++) {
5231         object->SetAccessorProperty(vm_, key, target1, target2);
5232     }
5233     gettimeofday(&g_endTime, nullptr);
5234     TEST_TIME(ObjectRef::SetAccessorProperty);
5235 }
5236 
HWTEST_F_L0(JSNApiSplTest,ObjectRef_Get01)5237 HWTEST_F_L0(JSNApiSplTest, ObjectRef_Get01)
5238 {
5239     LocalScope scope(vm_);
5240     CalculateForTime();
5241     Local<FunctionRef> object = ObjectRef::New(vm_);
5242     Local<JSValueRef> key = StringRef::NewFromUtf8(vm_, "TestKey");
5243     gettimeofday(&g_beginTime, nullptr);
5244     for (int i = 0; i < NUM_COUNT; i++) {
5245         object->Get(vm_, key);
5246     }
5247     gettimeofday(&g_endTime, nullptr);
5248     TEST_TIME(ObjectRef::Get01);
5249 }
5250 
HWTEST_F_L0(JSNApiSplTest,ObjectRef_Get02)5251 HWTEST_F_L0(JSNApiSplTest, ObjectRef_Get02)
5252 {
5253     LocalScope scope(vm_);
5254     CalculateForTime();
5255     Local<FunctionRef> object = ObjectRef::New(vm_);
5256     int32_t key = 123; // 123 = random number
5257     gettimeofday(&g_beginTime, nullptr);
5258     for (int i = 0; i < NUM_COUNT; i++) {
5259         object->Get(vm_, key);
5260     }
5261     gettimeofday(&g_endTime, nullptr);
5262     TEST_TIME(ObjectRef::Get02);
5263 }
5264 
HWTEST_F_L0(JSNApiSplTest,ObjectRef_GetOwnProperty)5265 HWTEST_F_L0(JSNApiSplTest, ObjectRef_GetOwnProperty)
5266 {
5267     LocalScope scope(vm_);
5268     CalculateForTime();
5269     Local<ObjectRef> object = ObjectRef::New(vm_);
5270     Local<JSValueRef> key = StringRef::NewFromUtf8(vm_, "TestKey");
5271     Local<JSValueRef> value = ObjectRef::New(vm_);
5272     PropertyAttribute attribute(value, true, true, true);
5273     gettimeofday(&g_beginTime, nullptr);
5274     for (int i = 0; i < NUM_COUNT; i++) {
5275         object->GetOwnProperty(vm_, key, attribute);
5276     }
5277     gettimeofday(&g_endTime, nullptr);
5278     TEST_TIME(ObjectRef::GetOwnProperty);
5279 }
5280 
HWTEST_F_L0(JSNApiSplTest,ObjectRef_GetOwnPropertyNames)5281 HWTEST_F_L0(JSNApiSplTest, ObjectRef_GetOwnPropertyNames)
5282 {
5283     LocalScope scope(vm_);
5284     CalculateForTime();
5285     Local<ObjectRef> object = ObjectRef::New(vm_);
5286     Local<JSValueRef> value = ObjectRef::New(vm_);
5287     PropertyAttribute attribute(value, true, true, true);
5288     gettimeofday(&g_beginTime, nullptr);
5289     for (int i = 0; i < NUM_COUNT; i++) {
5290         object->GetOwnPropertyNames(vm_);
5291     }
5292     gettimeofday(&g_endTime, nullptr);
5293     TEST_TIME(ObjectRef::GetOwnPropertyNames);
5294 }
5295 
HWTEST_F_L0(JSNApiSplTest,ObjectRef_GetAllPropertyNames)5296 HWTEST_F_L0(JSNApiSplTest, ObjectRef_GetAllPropertyNames)
5297 {
5298     LocalScope scope(vm_);
5299     CalculateForTime();
5300     Local<ObjectRef> object = ObjectRef::New(vm_);
5301     uint32_t filter = 123; // 123 = random number
5302     gettimeofday(&g_beginTime, nullptr);
5303     for (int i = 0; i < NUM_COUNT; i++) {
5304         object->GetAllPropertyNames(vm_, filter);
5305     }
5306     gettimeofday(&g_endTime, nullptr);
5307     TEST_TIME(ObjectRef::GetAllPropertyNames);
5308 }
5309 
HWTEST_F_L0(JSNApiSplTest,ObjectRef_GetOwnEnumerablePropertyNames)5310 HWTEST_F_L0(JSNApiSplTest, ObjectRef_GetOwnEnumerablePropertyNames)
5311 {
5312     LocalScope scope(vm_);
5313     CalculateForTime();
5314     Local<ObjectRef> object = ObjectRef::New(vm_);
5315     gettimeofday(&g_beginTime, nullptr);
5316     for (int i = 0; i < NUM_COUNT; i++) {
5317         object->GetOwnEnumerablePropertyNames(vm_);
5318     }
5319     gettimeofday(&g_endTime, nullptr);
5320     TEST_TIME(ObjectRef::GetOwnEnumerablePropertyNames);
5321 }
5322 
HWTEST_F_L0(JSNApiSplTest,ObjectRef_GetPrototype)5323 HWTEST_F_L0(JSNApiSplTest, ObjectRef_GetPrototype)
5324 {
5325     LocalScope scope(vm_);
5326     CalculateForTime();
5327     Local<ObjectRef> object = ObjectRef::New(vm_);
5328     gettimeofday(&g_beginTime, nullptr);
5329     for (int i = 0; i < NUM_COUNT; i++) {
5330         object->GetPrototype(vm_);
5331     }
5332     gettimeofday(&g_endTime, nullptr);
5333     TEST_TIME(ObjectRef::GetPrototype);
5334 }
5335 
HWTEST_F_L0(JSNApiSplTest,ObjectRef_SetPrototype)5336 HWTEST_F_L0(JSNApiSplTest, ObjectRef_SetPrototype)
5337 {
5338     LocalScope scope(vm_);
5339     CalculateForTime();
5340     Local<ObjectRef> object = ObjectRef::New(vm_);
5341     Local<ObjectRef> prototype = object->GetPrototype(vm_);
5342     gettimeofday(&g_beginTime, nullptr);
5343     for (int i = 0; i < NUM_COUNT; i++) {
5344         object->SetPrototype(vm_, prototype);
5345     }
5346     gettimeofday(&g_endTime, nullptr);
5347     TEST_TIME(ObjectRef::SetPrototype);
5348 }
5349 
HWTEST_F_L0(JSNApiSplTest,ObjectRef_Freeze)5350 HWTEST_F_L0(JSNApiSplTest, ObjectRef_Freeze)
5351 {
5352     LocalScope scope(vm_);
5353     CalculateForTime();
5354     Local<ObjectRef> object = ObjectRef::New(vm_);
5355     gettimeofday(&g_beginTime, nullptr);
5356     for (int i = 0; i < NUM_COUNT; i++) {
5357         object->Freeze(vm_);
5358     }
5359     gettimeofday(&g_endTime, nullptr);
5360     TEST_TIME(ObjectRef::Freeze);
5361 }
5362 
HWTEST_F_L0(JSNApiSplTest,ObjectRef_Seal)5363 HWTEST_F_L0(JSNApiSplTest, ObjectRef_Seal)
5364 {
5365     LocalScope scope(vm_);
5366     CalculateForTime();
5367     Local<ObjectRef> object = ObjectRef::New(vm_);
5368     gettimeofday(&g_beginTime, nullptr);
5369     for (int i = 0; i < NUM_COUNT; i++) {
5370         object->Seal(vm_);
5371     }
5372     gettimeofday(&g_endTime, nullptr);
5373     TEST_TIME(ObjectRef::Seal);
5374 }
5375 
HWTEST_F_L0(JSNApiSplTest,ObjectRef_SetNativePointerFieldCount)5376 HWTEST_F_L0(JSNApiSplTest, ObjectRef_SetNativePointerFieldCount)
5377 {
5378     LocalScope scope(vm_);
5379     CalculateForTime();
5380     Local<ObjectRef> object = ObjectRef::New(vm_);
5381     int32_t input = 34; // 34 = random number
5382     gettimeofday(&g_beginTime, nullptr);
5383     for (int i = 0; i < NUM_COUNT; i++) {
5384         object->SetNativePointerFieldCount(vm_, input);
5385     }
5386     gettimeofday(&g_endTime, nullptr);
5387     TEST_TIME(ObjectRef::SetNativePointerFieldCount);
5388 }
5389 
HWTEST_F_L0(JSNApiSplTest,ObjectRef_GetNativePointerFieldCount)5390 HWTEST_F_L0(JSNApiSplTest, ObjectRef_GetNativePointerFieldCount)
5391 {
5392     LocalScope scope(vm_);
5393     CalculateForTime();
5394     Local<ObjectRef> object = ObjectRef::New(vm_);
5395     int32_t input = 34; // 34 = random number
5396     object->SetNativePointerFieldCount(vm_, input);
5397     gettimeofday(&g_beginTime, nullptr);
5398     for (int i = 0; i < NUM_COUNT; i++) {
5399         object->GetNativePointerFieldCount(vm_);
5400     }
5401     gettimeofday(&g_endTime, nullptr);
5402     TEST_TIME(ObjectRef::GetNativePointerFieldCount);
5403 }
5404 
HWTEST_F_L0(JSNApiSplTest,ObjectRef_SetNativePointerField)5405 HWTEST_F_L0(JSNApiSplTest, ObjectRef_SetNativePointerField)
5406 {
5407     LocalScope scope(vm_);
5408     CalculateForTime();
5409     Local<ObjectRef> object = ObjectRef::New(vm_);
5410     NativePointerCallback callBack = nullptr;
5411     void *vp1 = static_cast<void *>(new std::string("test"));
5412     void *vp2 = static_cast<void *>(new std::string("test"));
5413     gettimeofday(&g_beginTime, nullptr);
5414     for (int i = 0; i < NUM_COUNT; i++) {
5415         object->SetNativePointerField(vm_, 33, vp1, callBack, vp2);
5416     }
5417     gettimeofday(&g_endTime, nullptr);
5418     TEST_TIME(ObjectRef::SetNativePointerField);
5419 }
5420 
HWTEST_F_L0(JSNApiSplTest,ObjectRef_GetNativePointerField)5421 HWTEST_F_L0(JSNApiSplTest, ObjectRef_GetNativePointerField)
5422 {
5423     LocalScope scope(vm_);
5424     CalculateForTime();
5425     Local<ObjectRef> object = ObjectRef::New(vm_);
5426     NativePointerCallback callBack = nullptr;
5427     void *vp1 = static_cast<void *>(new std::string("test"));
5428     void *vp2 = static_cast<void *>(new std::string("test"));
5429     object->SetNativePointerField(vm_, 33, vp1, callBack, vp2);
5430     gettimeofday(&g_beginTime, nullptr);
5431     for (int i = 0; i < NUM_COUNT; i++) {
5432         object->GetNativePointerField(vm_, 33);
5433     }
5434     gettimeofday(&g_endTime, nullptr);
5435     TEST_TIME(ObjectRef::GetNativePointerField);
5436 }
5437 
HWTEST_F_L0(JSNApiSplTest,JSNApi_GetGlobalObject)5438 HWTEST_F_L0(JSNApiSplTest, JSNApi_GetGlobalObject)
5439 {
5440     LocalScope scope(vm_);
5441     CalculateForTime();
5442     gettimeofday(&g_beginTime, nullptr);
5443     for (int i = 0; i < NUM_COUNT; i++) {
5444         JSNApi::GetGlobalObject(vm_);
5445     }
5446     gettimeofday(&g_endTime, nullptr);
5447     TEST_TIME(JSNApi::GetGlobalObject);
5448 }
5449 
HWTEST_F_L0(JSNApiSplTest,JSNApi_ExecutePendingJob)5450 HWTEST_F_L0(JSNApiSplTest, JSNApi_ExecutePendingJob)
5451 {
5452     LocalScope scope(vm_);
5453     CalculateForTime();
5454     gettimeofday(&g_beginTime, nullptr);
5455     for (int i = 0; i < NUM_COUNT; i++) {
5456         JSNApi::ExecutePendingJob(vm_);
5457     }
5458     gettimeofday(&g_endTime, nullptr);
5459     TEST_TIME(JSNApi::ExecutePendingJob);
5460 }
5461 
HWTEST_F_L0(JSNApiSplTest,JSNApi_TriggerGC)5462 HWTEST_F_L0(JSNApiSplTest, JSNApi_TriggerGC)
5463 {
5464     LocalScope scope(vm_);
5465     CalculateForTime();
5466     gettimeofday(&g_beginTime, nullptr);
5467     for (int i = 0; i < NUM_COUNT; i++) {
5468         JSNApi::TriggerGC(vm_);
5469     }
5470     gettimeofday(&g_endTime, nullptr);
5471     TEST_TIME(JSNApi::TriggerGC);
5472 }
5473 
HWTEST_F_L0(JSNApiSplTest,JSNApi_ThrowException)5474 HWTEST_F_L0(JSNApiSplTest, JSNApi_ThrowException)
5475 {
5476     LocalScope scope(vm_);
5477     CalculateForTime();
5478     Local<StringRef> message = StringRef::NewFromUtf8(vm_, "ErrorTest");
5479     Local<JSValueRef> error = Exception::Error(vm_, message);
5480     gettimeofday(&g_beginTime, nullptr);
5481     for (int i = 0; i < NUM_COUNT; i++) {
5482         JSNApi::ThrowException(vm_, error);
5483     }
5484     gettimeofday(&g_endTime, nullptr);
5485     TEST_TIME(JSNApi::ThrowException);
5486 }
5487 
HWTEST_F_L0(JSNApiSplTest,JSNApi_GetAndClearUncaughtException)5488 HWTEST_F_L0(JSNApiSplTest, JSNApi_GetAndClearUncaughtException)
5489 {
5490     LocalScope scope(vm_);
5491     CalculateForTime();
5492     gettimeofday(&g_beginTime, nullptr);
5493     for (int i = 0; i < NUM_COUNT; i++) {
5494         JSNApi::GetAndClearUncaughtException(vm_);
5495     }
5496     gettimeofday(&g_endTime, nullptr);
5497     TEST_TIME(JSNApi::GetAndClearUncaughtException);
5498 }
5499 
HWTEST_F_L0(JSNApiSplTest,JSNApi_GetUncaughtException)5500 HWTEST_F_L0(JSNApiSplTest, JSNApi_GetUncaughtException)
5501 {
5502     LocalScope scope(vm_);
5503     CalculateForTime();
5504     gettimeofday(&g_beginTime, nullptr);
5505     for (int i = 0; i < NUM_COUNT; i++) {
5506         JSNApi::GetUncaughtException(vm_);
5507     }
5508     gettimeofday(&g_endTime, nullptr);
5509     TEST_TIME(JSNApi::GetUncaughtException);
5510 }
5511 
HWTEST_F_L0(JSNApiSplTest,JSNApi_HasPendingException)5512 HWTEST_F_L0(JSNApiSplTest, JSNApi_HasPendingException)
5513 {
5514     LocalScope scope(vm_);
5515     CalculateForTime();
5516     gettimeofday(&g_beginTime, nullptr);
5517     for (int i = 0; i < NUM_COUNT; i++) {
5518         JSNApi::HasPendingException(vm_);
5519     }
5520     gettimeofday(&g_endTime, nullptr);
5521     TEST_TIME(JSNApi::HasPendingException);
5522 }
5523 
HWTEST_F_L0(JSNApiSplTest,JSNApi_EnableUserUncaughtErrorHandler)5524 HWTEST_F_L0(JSNApiSplTest, JSNApi_EnableUserUncaughtErrorHandler)
5525 {
5526     LocalScope scope(vm_);
5527     CalculateForTime();
5528     gettimeofday(&g_beginTime, nullptr);
5529     for (int i = 0; i < NUM_COUNT; i++) {
5530         JSNApi::EnableUserUncaughtErrorHandler(vm_);
5531     }
5532     gettimeofday(&g_endTime, nullptr);
5533     TEST_TIME(JSNApi::EnableUserUncaughtErrorHandler);
5534 }
5535 
HWTEST_F_L0(JSNApiSplTest,JSNApi_StartDebugger)5536 HWTEST_F_L0(JSNApiSplTest, JSNApi_StartDebugger)
5537 {
5538     LocalScope scope(vm_);
5539     CalculateForTime();
5540     JSNApi::DebugOption res;
5541     res.libraryPath = "mytests";
5542     res.isDebugMode = true;
5543     gettimeofday(&g_beginTime, nullptr);
5544     for (int i = 0; i < NUM_COUNT; i++) {
5545         JSNApi::StartDebugger(vm_, res);
5546     }
5547     gettimeofday(&g_endTime, nullptr);
5548     TEST_TIME(JSNApi::StartDebugger);
5549 }
5550 
HWTEST_F_L0(JSNApiSplTest,JSNApi_StopDebugger)5551 HWTEST_F_L0(JSNApiSplTest, JSNApi_StopDebugger)
5552 {
5553     LocalScope scope(vm_);
5554     CalculateForTime();
5555     gettimeofday(&g_beginTime, nullptr);
5556     for (int i = 0; i < NUM_COUNT; i++) {
5557         JSNApi::StopDebugger(vm_);
5558     }
5559     gettimeofday(&g_endTime, nullptr);
5560     TEST_TIME(JSNApi::StopDebugger);
5561 }
5562 
HWTEST_F_L0(JSNApiSplTest,JsiRuntimeCallInfo_GetFunctionRef)5563 HWTEST_F_L0(JSNApiSplTest, JsiRuntimeCallInfo_GetFunctionRef)
5564 {
5565     LocalScope scope(vm_);
5566     CalculateForTime();
5567     JsiRuntimeCallInfo object;
5568     gettimeofday(&g_beginTime, nullptr);
5569     for (int i = 0; i < NUM_COUNT; i++) {
5570         object.GetFunctionRef();
5571     }
5572     gettimeofday(&g_endTime, nullptr);
5573     TEST_TIME(JsiRuntimeCallInfo::GetFunctionRef);
5574 }
5575 
HWTEST_F_L0(JSNApiSplTest,JsiRuntimeCallInfo_GetNewTargetRef)5576 HWTEST_F_L0(JSNApiSplTest, JsiRuntimeCallInfo_GetNewTargetRef)
5577 {
5578     LocalScope scope(vm_);
5579     CalculateForTime();
5580     JsiRuntimeCallInfo object;
5581     gettimeofday(&g_beginTime, nullptr);
5582     for (int i = 0; i < NUM_COUNT; i++) {
5583         object.GetNewTargetRef();
5584     }
5585     gettimeofday(&g_endTime, nullptr);
5586     TEST_TIME(JsiRuntimeCallInfo::GetNewTargetRef);
5587 }
5588 
HWTEST_F_L0(JSNApiSplTest,JsiRuntimeCallInfo_GetThisRef)5589 HWTEST_F_L0(JSNApiSplTest, JsiRuntimeCallInfo_GetThisRef)
5590 {
5591     LocalScope scope(vm_);
5592     CalculateForTime();
5593     JsiRuntimeCallInfo object;
5594     gettimeofday(&g_beginTime, nullptr);
5595     for (int i = 0; i < NUM_COUNT; i++) {
5596         object.GetThisRef();
5597     }
5598     gettimeofday(&g_endTime, nullptr);
5599     TEST_TIME(JsiRuntimeCallInfo::GetThisRef);
5600 }
5601 
HWTEST_F_L0(JSNApiSplTest,JsiRuntimeCallInfo_GetCallArgRef)5602 HWTEST_F_L0(JSNApiSplTest, JsiRuntimeCallInfo_GetCallArgRef)
5603 {
5604     LocalScope scope(vm_);
5605     CalculateForTime();
5606     JsiRuntimeCallInfo object;
5607     uint32_t idx = 123;
5608     gettimeofday(&g_beginTime, nullptr);
5609     for (int i = 0; i < NUM_COUNT; i++) {
5610         object.GetCallArgRef(idx);
5611     }
5612     gettimeofday(&g_endTime, nullptr);
5613     TEST_TIME(JsiRuntimeCallInfo::GetCallArgRef);
5614 }
5615 
HWTEST_F_L0(JSNApiSplTest,FunctionCallScope_Gz)5616 HWTEST_F_L0(JSNApiSplTest, FunctionCallScope_Gz)
5617 {
5618     LocalScope scope(vm_);
5619     CalculateForTime();
5620     gettimeofday(&g_beginTime, nullptr);
5621     for (int i = 0; i < NUM_COUNT; i++) {
5622         FunctionCallScope test(vm_);
5623     }
5624     gettimeofday(&g_endTime, nullptr);
5625     TEST_TIME(FunctionCallScope::FunctionCallScope);
5626 }
5627 
HWTEST_F_L0(JSNApiSplTest,IsSetIterator_Ture)5628 HWTEST_F_L0(JSNApiSplTest, IsSetIterator_Ture)
5629 {
5630     LocalScope scope(vm_);
5631     CalculateForTime();
5632     ObjectFactory *factory = vm_->GetFactory();
5633     JSHandle<JSTaggedValue> proto = thread_->GetEcmaVM()->GetGlobalEnv()->GetFunctionPrototype();
5634     JSHandle<JSHClass> setClass = factory->NewEcmaHClass(JSSet::SIZE, JSType::JS_SET, proto);
5635     JSHandle<JSSet> jsSet = JSHandle<JSSet>::Cast(factory->NewJSObjectWithInit(setClass));
5636     JSHandle<LinkedHashSet> linkedSet(LinkedHashSet::Create(thread_));
5637     jsSet->SetLinkedSet(thread_, linkedSet);
5638     JSHandle<JSSetIterator> jsSetIter = factory->NewJSSetIterator(jsSet, IterationKind::KEY);
5639     JSHandle<JSTaggedValue> setiter = JSHandle<JSTaggedValue>::Cast(jsSetIter);
5640     gettimeofday(&g_beginTime, nullptr);
5641     for (int i = 0; i < NUM_COUNT; i++) {
5642         ASSERT_TRUE(JSNApiHelper::ToLocal<JSValueRef>(setiter)->IsSetIterator(vm_));
5643     }
5644     gettimeofday(&g_endTime, nullptr);
5645     TEST_TIME(JSValueRef::IsSetIterator);
5646 }
5647 
HWTEST_F_L0(JSNApiSplTest,IsSetIterator_False)5648 HWTEST_F_L0(JSNApiSplTest, IsSetIterator_False)
5649 {
5650     LocalScope scope(vm_);
5651     CalculateForTime();
5652     Local<JSValueRef> object = ObjectRef::New(vm_);
5653     gettimeofday(&g_beginTime, nullptr);
5654     for (int i = 0; i < NUM_COUNT; i++) {
5655         ASSERT_FALSE(object->IsSetIterator(vm_));
5656     }
5657     gettimeofday(&g_endTime, nullptr);
5658     TEST_TIME(JSValueRef::IsSetIterator);
5659 }
5660 
HWTEST_F_L0(JSNApiSplTest,IsUint16Array_True)5661 HWTEST_F_L0(JSNApiSplTest, IsUint16Array_True)
5662 {
5663     LocalScope scope(vm_);
5664     CalculateForTime();
5665     int32_t num = 30;       // 30 = ArrayBuff length
5666     int32_t byteOffset = 4; // 4 = Offset
5667     int32_t length = 6;     // 6 = length
5668     Local<ArrayBufferRef> buffer = ArrayBufferRef::New(vm_, num);
5669     Local<Uint16ArrayRef> object = Uint16ArrayRef::New(vm_, buffer, byteOffset, length);
5670     gettimeofday(&g_beginTime, nullptr);
5671     for (int i = 0; i < NUM_COUNT; i++) {
5672         ASSERT_TRUE(object->IsUint16Array(vm_));
5673     }
5674     gettimeofday(&g_endTime, nullptr);
5675     TEST_TIME(JSValueRef::IsUint16Array);
5676 }
5677 
HWTEST_F_L0(JSNApiSplTest,IsUint16Array_False)5678 HWTEST_F_L0(JSNApiSplTest, IsUint16Array_False)
5679 {
5680     LocalScope scope(vm_);
5681     CalculateForTime();
5682     Local<JSValueRef> object = ObjectRef::New(vm_);
5683     gettimeofday(&g_beginTime, nullptr);
5684     for (int i = 0; i < NUM_COUNT; i++) {
5685         ASSERT_FALSE(object->IsUint16Array(vm_));
5686     }
5687     gettimeofday(&g_endTime, nullptr);
5688     TEST_TIME(JSValueRef::IsUint16Array);
5689 }
5690 
HWTEST_F_L0(JSNApiSplTest,IsInt32Array_True)5691 HWTEST_F_L0(JSNApiSplTest, IsInt32Array_True)
5692 {
5693     LocalScope scope(vm_);
5694     CalculateForTime();
5695     int32_t num = 30;       // 30 = ArrayBuff length
5696     int32_t byteOffset = 4; // 4 = Offset
5697     int32_t length = 6;     // 6 = length
5698     Local<ArrayBufferRef> buffer = ArrayBufferRef::New(vm_, num);
5699     Local<Int32ArrayRef> object = Int32ArrayRef::New(vm_, buffer, byteOffset, length);
5700     gettimeofday(&g_beginTime, nullptr);
5701     for (int i = 0; i < NUM_COUNT; i++) {
5702         ASSERT_TRUE(object->IsInt32Array(vm_));
5703     }
5704     gettimeofday(&g_endTime, nullptr);
5705     TEST_TIME(JSValueRef::IsInt32Array);
5706 }
5707 
HWTEST_F_L0(JSNApiSplTest,IsInt32Array_False)5708 HWTEST_F_L0(JSNApiSplTest, IsInt32Array_False)
5709 {
5710     LocalScope scope(vm_);
5711     CalculateForTime();
5712     Local<JSValueRef> object = ObjectRef::New(vm_);
5713     gettimeofday(&g_beginTime, nullptr);
5714     for (int i = 0; i < NUM_COUNT; i++) {
5715         ASSERT_FALSE(object->IsInt32Array(vm_));
5716     }
5717     gettimeofday(&g_endTime, nullptr);
5718     TEST_TIME(JSValueRef::IsInt32Array);
5719 }
5720 
HWTEST_F_L0(JSNApiSplTest,IsJSPrimitiveString_False)5721 HWTEST_F_L0(JSNApiSplTest, IsJSPrimitiveString_False)
5722 {
5723     LocalScope scope(vm_);
5724     CalculateForTime();
5725     Local<ObjectRef> object = ObjectRef::New(vm_);
5726     gettimeofday(&g_beginTime, nullptr);
5727     for (int i = 0; i < NUM_COUNT; i++) {
5728         ASSERT_FALSE(object->IsJSPrimitiveString(vm_));
5729     }
5730     gettimeofday(&g_endTime, nullptr);
5731     TEST_TIME(JSValueRef::IsJSPrimitiveString);
5732 }
5733 
HWTEST_F_L0(JSNApiSplTest,IsGeneratorObject_True)5734 HWTEST_F_L0(JSNApiSplTest, IsGeneratorObject_True)
5735 {
5736     LocalScope scope(vm_);
5737     CalculateForTime();
5738     ObjectFactory *factory = vm_->GetFactory();
5739     auto env = vm_->GetGlobalEnv();
5740     JSHandle<JSTaggedValue> genFunc = env->GetGeneratorFunctionFunction();
5741     JSHandle<JSGeneratorObject> genObjHandleVal = factory->NewJSGeneratorObject(genFunc);
5742     JSHandle<JSHClass> hclass = JSHandle<JSHClass>::Cast(env->GetGeneratorFunctionClass());
5743     JSHandle<JSFunction> generatorFunc = JSHandle<JSFunction>::Cast(factory->NewJSObject(hclass));
5744     JSFunction::InitializeJSFunction(thread_, generatorFunc, FunctionKind::GENERATOR_FUNCTION);
5745     JSHandle<GeneratorContext> generatorContext = factory->NewGeneratorContext();
5746     generatorContext->SetMethod(thread_, generatorFunc.GetTaggedValue());
5747     JSHandle<JSTaggedValue> generatorContextVal = JSHandle<JSTaggedValue>::Cast(generatorContext);
5748     genObjHandleVal->SetGeneratorContext(thread_, generatorContextVal.GetTaggedValue());
5749     JSHandle<JSTaggedValue> genObjTagHandleVal = JSHandle<JSTaggedValue>::Cast(genObjHandleVal);
5750     Local<GeneratorObjectRef> genObjectRef = JSNApiHelper::ToLocal<GeneratorObjectRef>(genObjTagHandleVal);
5751     gettimeofday(&g_beginTime, nullptr);
5752     for (int i = 0; i < NUM_COUNT; i++) {
5753         ASSERT_TRUE(genObjectRef->IsGeneratorObject(vm_));
5754     }
5755     gettimeofday(&g_endTime, nullptr);
5756     TEST_TIME(JSValueRef::IsGeneratorObject);
5757 }
5758 
HWTEST_F_L0(JSNApiSplTest,IsGeneratorObject_False)5759 HWTEST_F_L0(JSNApiSplTest, IsGeneratorObject_False)
5760 {
5761     LocalScope scope(vm_);
5762     CalculateForTime();
5763     Local<ObjectRef> object = ObjectRef::New(vm_);
5764     gettimeofday(&g_beginTime, nullptr);
5765     for (int i = 0; i < NUM_COUNT; i++) {
5766         ASSERT_FALSE(object->IsGeneratorObject(vm_));
5767     }
5768     gettimeofday(&g_endTime, nullptr);
5769     TEST_TIME(JSValueRef::IsGeneratorObject);
5770 }
5771 
HWTEST_F_L0(JSNApiSplTest,IsJSPrimitiveSymbol_False)5772 HWTEST_F_L0(JSNApiSplTest, IsJSPrimitiveSymbol_False)
5773 {
5774     LocalScope scope(vm_);
5775     CalculateForTime();
5776     Local<ObjectRef> object = ObjectRef::New(vm_);
5777     gettimeofday(&g_beginTime, nullptr);
5778     for (int i = 0; i < NUM_COUNT; i++) {
5779         ASSERT_FALSE(object->IsJSPrimitiveSymbol(vm_));
5780     }
5781     gettimeofday(&g_endTime, nullptr);
5782     TEST_TIME(JSValueRef::IsJSPrimitiveSymbol);
5783 }
5784 
HWTEST_F_L0(JSNApiSplTest,IsAsyncGeneratorObject_True)5785 HWTEST_F_L0(JSNApiSplTest, IsAsyncGeneratorObject_True)
5786 {
5787     LocalScope scope(vm_);
5788     CalculateForTime();
5789     auto factory = vm_->GetFactory();
5790     auto env = vm_->GetGlobalEnv();
5791     JSHandle<JSAsyncGeneratorObject> asyncGenObj =
5792         factory->NewJSAsyncGeneratorObject(env->GetAsyncGeneratorFunctionFunction());
5793     JSHandle<JSTaggedValue> genObjTagHandleVal = JSHandle<JSTaggedValue>::Cast(asyncGenObj);
5794     Local<GeneratorObjectRef> genObjectRef = JSNApiHelper::ToLocal<GeneratorObjectRef>(genObjTagHandleVal);
5795     gettimeofday(&g_beginTime, nullptr);
5796     for (int i = 0; i < NUM_COUNT; i++) {
5797         ASSERT_TRUE(genObjectRef->IsAsyncGeneratorObject(vm_));
5798     }
5799     gettimeofday(&g_endTime, nullptr);
5800     TEST_TIME(JSValueRef::IsAsyncGeneratorObject);
5801 }
5802 
HWTEST_F_L0(JSNApiSplTest,IsAsyncGeneratorObject_False)5803 HWTEST_F_L0(JSNApiSplTest, IsAsyncGeneratorObject_False)
5804 {
5805     LocalScope scope(vm_);
5806     CalculateForTime();
5807     Local<JSValueRef> object = ObjectRef::New(vm_);
5808     gettimeofday(&g_beginTime, nullptr);
5809     for (int i = 0; i < NUM_COUNT; i++) {
5810         object->IsAsyncGeneratorObject(vm_);
5811     }
5812     gettimeofday(&g_endTime, nullptr);
5813     TEST_TIME(JSValueRef::IsAsyncGeneratorObject);
5814 }
5815 
HWTEST_F_L0(JSNApiSplTest,IsModuleNamespaceObject_True)5816 HWTEST_F_L0(JSNApiSplTest, IsModuleNamespaceObject_True)
5817 {
5818     LocalScope scope(vm_);
5819     CalculateForTime();
5820     ObjectFactory *factory = vm_->GetFactory();
5821     JSHandle<ModuleNamespace> moduleNamespace = factory->NewModuleNamespace();
5822     JSHandle<JSTaggedValue> modname = JSHandle<JSTaggedValue>::Cast(moduleNamespace);
5823     gettimeofday(&g_beginTime, nullptr);
5824     for (int i = 0; i < NUM_COUNT; i++) {
5825         JSNApiHelper::ToLocal<ObjectRef>(modname)->IsModuleNamespaceObject(vm_);
5826     }
5827     gettimeofday(&g_endTime, nullptr);
5828     TEST_TIME(JSValueRef::IsModuleNamespaceObject);
5829 }
5830 
HWTEST_F_L0(JSNApiSplTest,IsModuleNamespaceObject_False)5831 HWTEST_F_L0(JSNApiSplTest, IsModuleNamespaceObject_False)
5832 {
5833     LocalScope scope(vm_);
5834     CalculateForTime();
5835     Local<JSValueRef> object = ObjectRef::New(vm_);
5836     gettimeofday(&g_beginTime, nullptr);
5837     for (int i = 0; i < NUM_COUNT; i++) {
5838         object->IsModuleNamespaceObject(vm_);
5839     }
5840     gettimeofday(&g_endTime, nullptr);
5841     TEST_TIME(JSValueRef::IsModuleNamespaceObject);
5842 }
5843 
HWTEST_F_L0(JSNApiSplTest,IsSharedArrayBuffer_True)5844 HWTEST_F_L0(JSNApiSplTest, IsSharedArrayBuffer_True)
5845 {
5846     LocalScope scope(vm_);
5847     CalculateForTime();
5848     auto *factory = vm_->GetFactory();
5849     int32_t num = 40; // 40 = ArrayBuffer length
5850     JSHandle<JSArrayBuffer> jsArrayBuffer = factory->NewJSSharedArrayBuffer(num);
5851     JSHandle<JSTaggedValue> SAbuffer = JSHandle<JSTaggedValue>::Cast(jsArrayBuffer);
5852     gettimeofday(&g_beginTime, nullptr);
5853     for (int i = 0; i < NUM_COUNT; i++) {
5854         JSNApiHelper::ToLocal<ArrayRef>(SAbuffer)->IsSharedArrayBuffer(vm_);
5855     }
5856     gettimeofday(&g_endTime, nullptr);
5857     TEST_TIME(JSValueRef::IsSharedArrayBuffer);
5858 }
5859 
HWTEST_F_L0(JSNApiSplTest,IsSharedArrayBuffer_False)5860 HWTEST_F_L0(JSNApiSplTest, IsSharedArrayBuffer_False)
5861 {
5862     LocalScope scope(vm_);
5863     CalculateForTime();
5864     Local<JSValueRef> object = ObjectRef::New(vm_);
5865     gettimeofday(&g_beginTime, nullptr);
5866     for (int i = 0; i < NUM_COUNT; i++) {
5867         object->IsSharedArrayBuffer(vm_);
5868     }
5869     gettimeofday(&g_endTime, nullptr);
5870     TEST_TIME(JSValueRef::IsSharedArrayBuffer);
5871 }
5872 
HWTEST_F_L0(JSNApiSplTest,IsStrictEquals_True)5873 HWTEST_F_L0(JSNApiSplTest, IsStrictEquals_True)
5874 {
5875     LocalScope scope(vm_);
5876     CalculateForTime();
5877     Local<ObjectRef> object = ObjectRef::New(vm_);
5878     Local<ObjectRef> object2 = ObjectRef::New(vm_);
5879     gettimeofday(&g_beginTime, nullptr);
5880     for (int i = 0; i < NUM_COUNT; i++) {
5881         object->IsStrictEquals(vm_, object2);
5882     }
5883     gettimeofday(&g_endTime, nullptr);
5884     TEST_TIME(JSValueRef::IsStrictEquals);
5885 }
5886 
HWTEST_F_L0(JSNApiSplTest,IsStrictEquals_False)5887 HWTEST_F_L0(JSNApiSplTest, IsStrictEquals_False)
5888 {
5889     LocalScope scope(vm_);
5890     CalculateForTime();
5891     Local<JSValueRef> object = ObjectRef::New(vm_);
5892     Local<JSValueRef> target1 = StringRef::NewFromUtf8(vm_, "1");
5893     gettimeofday(&g_beginTime, nullptr);
5894     for (int i = 0; i < NUM_COUNT; i++) {
5895         object->IsStrictEquals(vm_, target1);
5896     }
5897     gettimeofday(&g_endTime, nullptr);
5898     TEST_TIME(JSValueRef::IsStrictEquals);
5899 }
5900 
HWTEST_F_L0(JSNApiSplTest,IsQueue_Frue)5901 HWTEST_F_L0(JSNApiSplTest, IsQueue_Frue)
5902 {
5903     LocalScope scope(vm_);
5904     CalculateForTime();
5905     ObjectFactory *factory = vm_->GetFactory();
5906     JSThread *thread = vm_->GetJSThread();
5907     JSHandle<JSTaggedValue> proto = thread->GetEcmaVM()->GetGlobalEnv()->GetFunctionPrototype();
5908     JSHandle<JSHClass> queueClass = factory->NewEcmaHClass(JSAPIQueue::SIZE, JSType::JS_API_QUEUE, proto);
5909     JSHandle<JSAPIQueue> jsQueue = JSHandle<JSAPIQueue>::Cast(factory->NewJSObjectWithInit(queueClass));
5910     JSHandle<TaggedArray> newElements = factory->NewTaggedArray(JSAPIQueue::DEFAULT_CAPACITY_LENGTH);
5911     jsQueue->SetLength(thread, JSTaggedValue(0));
5912     jsQueue->SetFront(0);
5913     jsQueue->SetTail(0);
5914     jsQueue->SetElements(thread, newElements);
5915     JSHandle<JSTaggedValue> Que = JSHandle<JSTaggedValue>::Cast(jsQueue);
5916     gettimeofday(&g_beginTime, nullptr);
5917     for (int i = 0; i < NUM_COUNT; i++) {
5918         JSNApiHelper::ToLocal<ArrayRef>(Que)->IsDeque(vm_);
5919     }
5920     gettimeofday(&g_endTime, nullptr);
5921     TEST_TIME(JSValueRef::IsQueue);
5922 }
5923 
HWTEST_F_L0(JSNApiSplTest,IsQueue_False)5924 HWTEST_F_L0(JSNApiSplTest, IsQueue_False)
5925 {
5926     LocalScope scope(vm_);
5927     CalculateForTime();
5928     Local<JSValueRef> object = ObjectRef::New(vm_);
5929     gettimeofday(&g_beginTime, nullptr);
5930     for (int i = 0; i < NUM_COUNT; i++) {
5931         object->IsQueue(vm_);
5932     }
5933     gettimeofday(&g_endTime, nullptr);
5934     TEST_TIME(JSValueRef::IsQueue);
5935 }
5936 
HWTEST_F_L0(JSNApiSplTest,IsStack_True)5937 HWTEST_F_L0(JSNApiSplTest, IsStack_True)
5938 {
5939     LocalScope scope(vm_);
5940     CalculateForTime();
5941     ObjectFactory *factory = vm_->GetFactory();
5942     JSThread *thread = vm_->GetJSThread();
5943     JSHandle<JSTaggedValue> proto = thread->GetEcmaVM()->GetGlobalEnv()->GetFunctionPrototype();
5944     JSHandle<JSHClass> stackClass = factory->NewEcmaHClass(JSAPIStack::SIZE, JSType::JS_API_STACK, proto);
5945     JSHandle<JSAPIStack> jsStack = JSHandle<JSAPIStack>::Cast(factory->NewJSObjectWithInit(stackClass));
5946     jsStack->SetTop(0);
5947     JSHandle<JSTaggedValue> stcak = JSHandle<JSTaggedValue>::Cast(jsStack);
5948     gettimeofday(&g_beginTime, nullptr);
5949     for (int i = 0; i < NUM_COUNT; i++) {
5950         JSNApiHelper::ToLocal<ArrayRef>(stcak)->IsStack(vm_);
5951     }
5952     gettimeofday(&g_endTime, nullptr);
5953     TEST_TIME(JSValueRef::IsStack);
5954 }
5955 
HWTEST_F_L0(JSNApiSplTest,IsStack_False)5956 HWTEST_F_L0(JSNApiSplTest, IsStack_False)
5957 {
5958     LocalScope scope(vm_);
5959     CalculateForTime();
5960     Local<JSValueRef> object = ObjectRef::New(vm_);
5961     gettimeofday(&g_beginTime, nullptr);
5962     for (int i = 0; i < NUM_COUNT; i++) {
5963         object->IsStack(vm_);
5964     }
5965     gettimeofday(&g_endTime, nullptr);
5966     TEST_TIME(JSValueRef::IsStack);
5967 }
5968 
HWTEST_F_L0(JSNApiSplTest,IsTreeMap_True)5969 HWTEST_F_L0(JSNApiSplTest, IsTreeMap_True)
5970 {
5971     LocalScope scope(vm_);
5972     CalculateForTime();
5973     ObjectFactory *factory = vm_->GetFactory();
5974     JSThread *thread = vm_->GetJSThread();
5975     auto globalEnv = thread->GetEcmaVM()->GetGlobalEnv();
5976     JSHandle<JSTaggedValue> proto = globalEnv->GetObjectFunctionPrototype();
5977     JSHandle<JSHClass> mapClass = factory->NewEcmaHClass(JSAPITreeMap::SIZE, JSType::JS_API_TREE_MAP, proto);
5978     JSHandle<JSAPITreeMap> jsTreeMap = JSHandle<JSAPITreeMap>::Cast(factory->NewJSObjectWithInit(mapClass));
5979     JSHandle<TaggedTreeMap> treeMap(thread, TaggedTreeMap::Create(thread));
5980     jsTreeMap->SetTreeMap(thread, treeMap);
5981     JSHandle<JSTaggedValue> treapp = JSHandle<JSTaggedValue>::Cast(jsTreeMap);
5982     gettimeofday(&g_beginTime, nullptr);
5983     for (int i = 0; i < NUM_COUNT; i++) {
5984         JSNApiHelper::ToLocal<ArrayRef>(treapp)->IsTreeMap(vm_);
5985     }
5986     gettimeofday(&g_endTime, nullptr);
5987     TEST_TIME(JSValueRef::IsTreeMap);
5988 }
5989 
HWTEST_F_L0(JSNApiSplTest,IsTreeMap_False)5990 HWTEST_F_L0(JSNApiSplTest, IsTreeMap_False)
5991 {
5992     LocalScope scope(vm_);
5993     CalculateForTime();
5994     Local<JSValueRef> object = ObjectRef::New(vm_);
5995     gettimeofday(&g_beginTime, nullptr);
5996     for (int i = 0; i < NUM_COUNT; i++) {
5997         object->IsTreeMap(vm_);
5998     }
5999     gettimeofday(&g_endTime, nullptr);
6000     TEST_TIME(JSValueRef::IsTreeMap);
6001 }
6002 
HWTEST_F_L0(JSNApiSplTest,IsTreeSet_True)6003 HWTEST_F_L0(JSNApiSplTest, IsTreeSet_True)
6004 {
6005     LocalScope scope(vm_);
6006     CalculateForTime();
6007     ObjectFactory *factory = vm_->GetFactory();
6008     JSThread *thread = vm_->GetJSThread();
6009     auto globalEnv = thread->GetEcmaVM()->GetGlobalEnv();
6010     JSHandle<JSTaggedValue> proto = globalEnv->GetObjectFunctionPrototype();
6011     JSHandle<JSHClass> setClass = factory->NewEcmaHClass(JSAPITreeSet::SIZE, JSType::JS_API_TREE_SET, proto);
6012     JSHandle<JSAPITreeSet> jsTreeSet = JSHandle<JSAPITreeSet>::Cast(factory->NewJSObjectWithInit(setClass));
6013     JSHandle<TaggedTreeSet> treeSet(thread, TaggedTreeSet::Create(thread));
6014     jsTreeSet->SetTreeSet(thread, treeSet);
6015     JSHandle<JSTaggedValue> tresett = JSHandle<JSTaggedValue>::Cast(jsTreeSet);
6016     gettimeofday(&g_beginTime, nullptr);
6017     for (int i = 0; i < NUM_COUNT; i++) {
6018         JSNApiHelper::ToLocal<ArrayRef>(tresett)->IsTreeSet(vm_);
6019     }
6020     gettimeofday(&g_endTime, nullptr);
6021     TEST_TIME(JSValueRef::IsTreeSet);
6022 }
6023 
HWTEST_F_L0(JSNApiSplTest,IsTreeSet_False)6024 HWTEST_F_L0(JSNApiSplTest, IsTreeSet_False)
6025 {
6026     LocalScope scope(vm_);
6027     CalculateForTime();
6028     Local<JSValueRef> object = ObjectRef::New(vm_);
6029     gettimeofday(&g_beginTime, nullptr);
6030     for (int i = 0; i < NUM_COUNT; i++) {
6031         object->IsTreeSet(vm_);
6032     }
6033     gettimeofday(&g_endTime, nullptr);
6034     TEST_TIME(JSValueRef::IsTreeSet);
6035 }
6036 
HWTEST_F_L0(JSNApiSplTest,IsVector_True)6037 HWTEST_F_L0(JSNApiSplTest, IsVector_True)
6038 {
6039     LocalScope scope(vm_);
6040     CalculateForTime();
6041     ObjectFactory *factory = vm_->GetFactory();
6042     JSThread *thread = vm_->GetJSThread();
6043     JSHandle<JSTaggedValue> proto = thread->GetEcmaVM()->GetGlobalEnv()->GetFunctionPrototype();
6044     JSHandle<JSHClass> vectorClass = factory->NewEcmaHClass(JSAPIVector::SIZE, JSType::JS_API_VECTOR, proto);
6045     JSHandle<JSAPIVector> jsVector = JSHandle<JSAPIVector>::Cast(factory->NewJSObjectWithInit(vectorClass));
6046     jsVector->SetLength(0);
6047     JSHandle<JSTaggedValue> vectt = JSHandle<JSTaggedValue>::Cast(jsVector);
6048     gettimeofday(&g_beginTime, nullptr);
6049     for (int i = 0; i < NUM_COUNT; i++) {
6050         JSNApiHelper::ToLocal<ArrayRef>(vectt)->IsVector(vm_);
6051     }
6052     gettimeofday(&g_endTime, nullptr);
6053     TEST_TIME(JSValueRef::IsVector);
6054 }
6055 
HWTEST_F_L0(JSNApiSplTest,Parse_False)6056 HWTEST_F_L0(JSNApiSplTest, Parse_False)
6057 {
6058     LocalScope scope(vm_);
6059     CalculateForTime();
6060     const char16_t *utf16 = u"您好,华为!";
6061     Local<StringRef> str = StringRef::NewFromUtf8(vm_, "abc");
6062     Local<StringRef> str2 = StringRef::NewFromUtf16(vm_, utf16);
6063     gettimeofday(&g_beginTime, nullptr);
6064     for (int i = 0; i < NUM_COUNT; i++) {
6065         JSON::Parse(vm_, str);
6066     }
6067     gettimeofday(&g_endTime, nullptr);
6068     TEST_TIME(JSValueRef::Parse);
6069     gettimeofday(&g_beginTime, nullptr);
6070     for (int i = 0; i < NUM_COUNT; i++) {
6071         JSON::Parse(vm_, str2);
6072     }
6073     gettimeofday(&g_endTime, nullptr);
6074     TEST_TIME(JSValueRef::Parse);
6075 }
6076 
HWTEST_F_L0(JSNApiSplTest,Stringify)6077 HWTEST_F_L0(JSNApiSplTest, Stringify)
6078 {
6079     LocalScope scope(vm_);
6080     CalculateForTime();
6081     Local<JSValueRef> object = ObjectRef::New(vm_);
6082     gettimeofday(&g_beginTime, nullptr);
6083     for (int i = 0; i < NUM_COUNT; i++) {
6084         JSON::Stringify(vm_, object);
6085     }
6086     gettimeofday(&g_endTime, nullptr);
6087     TEST_TIME(JSValueRef::Stringify);
6088 }
6089 
HWTEST_F_L0(JSNApiSplTest,Error)6090 HWTEST_F_L0(JSNApiSplTest, Error)
6091 {
6092     LocalScope scope(vm_);
6093     CalculateForTime();
6094     gettimeofday(&g_beginTime, nullptr);
6095     for (int i = 0; i < NUM_COUNT; i++) {
6096         (void)Exception::Error(vm_, StringRef::NewFromUtf8(vm_, "test error"));
6097     }
6098     gettimeofday(&g_endTime, nullptr);
6099     TEST_TIME(JSValueRef::Error);
6100 }
6101 
HWTEST_F_L0(JSNApiSplTest,RangeError)6102 HWTEST_F_L0(JSNApiSplTest, RangeError)
6103 {
6104     LocalScope scope(vm_);
6105     CalculateForTime();
6106     gettimeofday(&g_beginTime, nullptr);
6107     for (int i = 0; i < NUM_COUNT; i++) {
6108         (void)Exception::RangeError(vm_, StringRef::NewFromUtf8(vm_, "test range error"));
6109     }
6110     gettimeofday(&g_endTime, nullptr);
6111     TEST_TIME(JSValueRef::RangeError);
6112 }
6113 
HWTEST_F_L0(JSNApiSplTest,ReferenceError)6114 HWTEST_F_L0(JSNApiSplTest, ReferenceError)
6115 {
6116     LocalScope scope(vm_);
6117     CalculateForTime();
6118     gettimeofday(&g_beginTime, nullptr);
6119     for (int i = 0; i < NUM_COUNT; i++) {
6120         (void)Exception::ReferenceError(vm_, StringRef::NewFromUtf8(vm_, "test reference error"));
6121     }
6122     gettimeofday(&g_endTime, nullptr);
6123     TEST_TIME(JSValueRef::ReferenceError);
6124 }
HWTEST_F_L0(JSNApiSplTest,SyntaxError)6125 HWTEST_F_L0(JSNApiSplTest, SyntaxError)
6126 {
6127     LocalScope scope(vm_);
6128     CalculateForTime();
6129     gettimeofday(&g_beginTime, nullptr);
6130     for (int i = 0; i < NUM_COUNT; i++) {
6131         (void)Exception::SyntaxError(vm_, StringRef::NewFromUtf8(vm_, "test syntax error"));
6132     }
6133     gettimeofday(&g_endTime, nullptr);
6134     TEST_TIME(JSValueRef::SyntaxError);
6135 }
6136 
HWTEST_F_L0(JSNApiSplTest,TypeError)6137 HWTEST_F_L0(JSNApiSplTest, TypeError)
6138 {
6139     LocalScope scope(vm_);
6140     CalculateForTime();
6141     gettimeofday(&g_beginTime, nullptr);
6142     for (int i = 0; i < NUM_COUNT; i++) {
6143         (void)Exception::TypeError(vm_, StringRef::NewFromUtf8(vm_, "test type error"));
6144     }
6145     gettimeofday(&g_endTime, nullptr);
6146     TEST_TIME(JSValueRef::TypeError);
6147 }
6148 
HWTEST_F_L0(JSNApiSplTest,AggregateError)6149 HWTEST_F_L0(JSNApiSplTest, AggregateError)
6150 {
6151     LocalScope scope(vm_);
6152     CalculateForTime();
6153     gettimeofday(&g_beginTime, nullptr);
6154     for (int i = 0; i < NUM_COUNT; i++) {
6155         (void)Exception::AggregateError(vm_, StringRef::NewFromUtf8(vm_, "test aggregate error"));
6156     }
6157     gettimeofday(&g_endTime, nullptr);
6158     TEST_TIME(JSValueRef::AggregateError);
6159 }
6160 
HWTEST_F_L0(JSNApiSplTest,EvalError)6161 HWTEST_F_L0(JSNApiSplTest, EvalError)
6162 {
6163     LocalScope scope(vm_);
6164     CalculateForTime();
6165     gettimeofday(&g_beginTime, nullptr);
6166     for (int i = 0; i < NUM_COUNT; i++) {
6167         (void)Exception::EvalError(vm_, StringRef::NewFromUtf8(vm_, "test eval error"));
6168     }
6169     gettimeofday(&g_endTime, nullptr);
6170     TEST_TIME(JSValueRef::EvalError);
6171 }
6172 
HWTEST_F_L0(JSNApiSplTest,OOMError)6173 HWTEST_F_L0(JSNApiSplTest, OOMError)
6174 {
6175     LocalScope scope(vm_);
6176     CalculateForTime();
6177     gettimeofday(&g_beginTime, nullptr);
6178     for (int i = 0; i < NUM_COUNT; i++) {
6179         (void)Exception::OOMError(vm_, StringRef::NewFromUtf8(vm_, "test out of memory error"));
6180     }
6181     gettimeofday(&g_endTime, nullptr);
6182     TEST_TIME(JSValueRef::OOMError);
6183 }
6184 
HWTEST_F_L0(JSNApiSplTest,CreateEcmaVM)6185 HWTEST_F_L0(JSNApiSplTest, CreateEcmaVM)
6186 {
6187     LocalScope scope(vm_);
6188     CalculateForTime();
6189     JSRuntimeOptions option;
6190     gettimeofday(&g_beginTime, nullptr);
6191     for (int i = 0; i < NUM_COUNT; i++) {
6192         EcmaVM *workerVm = JSNApi::CreateEcmaVM(option);
6193         JSNApi::DestroyJSVM(workerVm);
6194     }
6195     gettimeofday(&g_endTime, nullptr);
6196     TEST_TIME(JSValueRef::CreateEcmaVM);
6197 }
6198 
HWTEST_F_L0(JSNApiSplTest,PostFork)6199 HWTEST_F_L0(JSNApiSplTest, PostFork)
6200 {
6201     LocalScope scope(vm_);
6202     CalculateForTime();
6203     RuntimeOption option;
6204     gettimeofday(&g_beginTime, nullptr);
6205     for (int i = 0; i < 10; i++) {
6206         EcmaVM *vm2 = JSNApi::CreateJSVM(option);
6207         JSNApi::PreFork(vm2);
6208         JSNApi::PostFork(vm2, option);
6209         JSNApi::DestroyJSVM(vm2);
6210     }
6211     gettimeofday(&g_endTime, nullptr);
6212     TEST_TIME(JSValueRef::PostFork);
6213 }
6214 
HWTEST_F_L0(JSNApiSplTest,AddWorker)6215 HWTEST_F_L0(JSNApiSplTest, AddWorker)
6216 {
6217     LocalScope scope(vm_);
6218     CalculateForTime();
6219     JSRuntimeOptions option;
6220     gettimeofday(&g_beginTime, nullptr);
6221     EcmaVM *workerVm = JSNApi::CreateEcmaVM(option);
6222     for (int i = 0; i < NUM_COUNT; i++) {
6223         JSNApi::AddWorker(vm_, workerVm);
6224     }
6225     gettimeofday(&g_endTime, nullptr);
6226     TEST_TIME(JSValueRef::addWorker);
6227     JSNApi::DestroyJSVM(workerVm);
6228 }
6229 
HWTEST_F_L0(JSNApiSplTest,DeleteWorker)6230 HWTEST_F_L0(JSNApiSplTest, DeleteWorker)
6231 {
6232     LocalScope scope(vm_);
6233     CalculateForTime();
6234     JSRuntimeOptions option;
6235     EcmaVM *workerVm = JSNApi::CreateEcmaVM(option);
6236     gettimeofday(&g_beginTime, nullptr);
6237     for (int i = 0; i < NUM_COUNT; i++) {
6238         JSNApi::AddWorker(vm_, workerVm);
6239         JSNApi::DeleteWorker(vm_, workerVm);
6240     }
6241     gettimeofday(&g_endTime, nullptr);
6242     TEST_TIME(JSValueRef::DeleteWorker);
6243     JSNApi::DestroyJSVM(workerVm);
6244 }
6245 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_IsBundle)6246 HWTEST_F_L0(JSNApiSplTest, JSValueRef_IsBundle)
6247 {
6248     LocalScope scope(vm_);
6249     CalculateForTime();
6250     gettimeofday(&g_beginTime, nullptr);
6251     for (int i = 0; i < NUM_COUNT; i++) {
6252         JSNApi::IsBundle(vm_);
6253     }
6254     gettimeofday(&g_endTime, nullptr);
6255     TEST_TIME(JSValueRef::IsBundle);
6256 }
6257 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_SetBundle)6258 HWTEST_F_L0(JSNApiSplTest, JSValueRef_SetBundle)
6259 {
6260     LocalScope scope(vm_);
6261     CalculateForTime();
6262     gettimeofday(&g_beginTime, nullptr);
6263     for (int i = 0; i < NUM_COUNT; i++) {
6264         JSNApi::SetBundle(vm_, false);
6265     }
6266     gettimeofday(&g_endTime, nullptr);
6267     TEST_TIME(JSValueRef::SetBundle);
6268 }
6269 
HWTEST_F_L0(JSNApiSplTest,JSNApi_SetAssetPath)6270 HWTEST_F_L0(JSNApiSplTest, JSNApi_SetAssetPath)
6271 {
6272     LocalScope scope(vm_);
6273     CalculateForTime();
6274     std::string str = "/data/storage/el1/bundle/moduleName/ets/modules.abc";
6275     gettimeofday(&g_beginTime, nullptr);
6276     for (int i = 0; i < NUM_COUNT; i++) {
6277         JSNApi::SetAssetPath(vm_, str);
6278     }
6279     gettimeofday(&g_endTime, nullptr);
6280     TEST_TIME(JSValueRef::SetAssetPath);
6281 }
6282 
HWTEST_F_L0(JSNApiSplTest,JSNApi_GetAssetPath)6283 HWTEST_F_L0(JSNApiSplTest, JSNApi_GetAssetPath)
6284 {
6285     LocalScope scope(vm_);
6286     CalculateForTime();
6287     std::string str = "/data/storage/el1/bundle/moduleName/ets/modules.abc";
6288     gettimeofday(&g_beginTime, nullptr);
6289     JSNApi::SetAssetPath(vm_, str);
6290     for (int i = 0; i < NUM_COUNT; i++) {
6291         std::string res = JSNApi::GetAssetPath(vm_);
6292     }
6293     gettimeofday(&g_endTime, nullptr);
6294     TEST_TIME(JSValueRef::GetAssetPath);
6295 }
6296 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_SetBundleName)6297 HWTEST_F_L0(JSNApiSplTest, JSValueRef_SetBundleName)
6298 {
6299     LocalScope scope(vm_);
6300     CalculateForTime();
6301     std::string str = "11";
6302     gettimeofday(&g_beginTime, nullptr);
6303     for (int i = 0; i < NUM_COUNT; i++) {
6304         JSNApi::SetBundleName(vm_, str);
6305     }
6306     gettimeofday(&g_endTime, nullptr);
6307     TEST_TIME(JSValueRef::SetBundleName);
6308 }
6309 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_GetBundleName)6310 HWTEST_F_L0(JSNApiSplTest, JSValueRef_GetBundleName)
6311 {
6312     LocalScope scope(vm_);
6313     CalculateForTime();
6314     std::string str = "11";
6315     JSNApi::SetBundleName(vm_, str);
6316     gettimeofday(&g_beginTime, nullptr);
6317     for (int i = 0; i < NUM_COUNT; i++) {
6318         std::string res = JSNApi::GetBundleName(vm_);
6319     }
6320     gettimeofday(&g_endTime, nullptr);
6321     TEST_TIME(JSValueRef::GetBundleName);
6322 }
6323 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_GetModuleName)6324 HWTEST_F_L0(JSNApiSplTest, JSValueRef_GetModuleName)
6325 {
6326     LocalScope scope(vm_);
6327     CalculateForTime();
6328     std::string str = "11";
6329     gettimeofday(&g_beginTime, nullptr);
6330     for (int i = 0; i < NUM_COUNT; i++) {
6331         JSNApi::SetModuleName(vm_, str);
6332     }
6333     gettimeofday(&g_endTime, nullptr);
6334     TEST_TIME(JSValueRef::SetModuleName);
6335 }
6336 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_SetModuleName)6337 HWTEST_F_L0(JSNApiSplTest, JSValueRef_SetModuleName)
6338 {
6339     LocalScope scope(vm_);
6340     CalculateForTime();
6341     std::string str = "11";
6342     JSNApi::SetModuleName(vm_, str);
6343     gettimeofday(&g_beginTime, nullptr);
6344     for (int i = 0; i < NUM_COUNT; i++) {
6345         std::string res = JSNApi::GetModuleName(vm_);
6346     }
6347     gettimeofday(&g_endTime, nullptr);
6348     TEST_TIME(JSValueRef::GetModuleName);
6349 }
6350 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_SetLoop)6351 HWTEST_F_L0(JSNApiSplTest, JSValueRef_SetLoop)
6352 {
6353     LocalScope scope(vm_);
6354     CalculateForTime();
6355     void *data = reinterpret_cast<void *>(BuiltinsFunction::FunctionPrototypeInvokeSelf);
6356     gettimeofday(&g_beginTime, nullptr);
6357     for (int i = 0; i < NUM_COUNT; i++) {
6358         JSNApi::SetLoop(vm_, data);
6359     }
6360     gettimeofday(&g_endTime, nullptr);
6361     TEST_TIME(JSValueRef::SetLoop);
6362 }
6363 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_InitForConcurrentFunction)6364 HWTEST_F_L0(JSNApiSplTest, JSValueRef_InitForConcurrentFunction)
6365 {
6366     LocalScope scope(vm_);
6367     CalculateForTime();
6368     NativePointerCallback deleter = nullptr;
6369     void *cb = reinterpret_cast<void *>(BuiltinsFunction::FunctionPrototypeInvokeSelf);
6370     bool callNative = true;
6371     size_t nativeBindingsize = 15;
6372     Local<FunctionRef> res =
6373         FunctionRef::NewClassFunction(vm_, FunCallback, deleter, cb, callNative, nativeBindingsize);
6374     ASSERT_TRUE(res->IsFunction(vm_));
6375     Local<JSValueRef> res1 = res->GetFunctionPrototype(vm_);
6376     void *taskInfo = nullptr;
6377     gettimeofday(&g_beginTime, nullptr);
6378     for (int i = 0; i < NUM_COUNT; i++) {
6379         JSNApi::InitForConcurrentFunction(vm_, res1, taskInfo);
6380     }
6381     gettimeofday(&g_endTime, nullptr);
6382     TEST_TIME(JSValueRef::InitForConcurrentFunction);
6383 }
6384 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_Rethrow)6385 HWTEST_F_L0(JSNApiSplTest, JSValueRef_Rethrow)
6386 {
6387     LocalScope scope(vm_);
6388     CalculateForTime();
6389     gettimeofday(&g_beginTime, nullptr);
6390     for (int i = 0; i < NUM_COUNT; i++) {
6391         TryCatch tryCatch(vm_);
6392         tryCatch.Rethrow();
6393     }
6394     gettimeofday(&g_endTime, nullptr);
6395     TEST_TIME(JSValueRef::Rethrow);
6396 }
6397 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_InitForConcurrentThread)6398 HWTEST_F_L0(JSNApiSplTest, JSValueRef_InitForConcurrentThread)
6399 {
6400     LocalScope scope(vm_);
6401     CalculateForTime();
6402     void *data = reinterpret_cast<void *>(BuiltinsFunction::FunctionPrototypeInvokeSelf);
6403     ConcurrentCallback concurrentCallback_ { nullptr };
6404     gettimeofday(&g_beginTime, nullptr);
6405     for (int i = 0; i < NUM_COUNT; i++) {
6406         JSNApi::InitForConcurrentThread(vm_, concurrentCallback_, data);
6407     }
6408     gettimeofday(&g_endTime, nullptr);
6409     TEST_TIME(JSValueRef::InitForConcurrentThread);
6410 }
6411 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_JsiRuntimeCallInfo)6412 HWTEST_F_L0(JSNApiSplTest, JSValueRef_JsiRuntimeCallInfo)
6413 {
6414     LocalScope scope(vm_);
6415     CalculateForTime();
6416     gettimeofday(&g_beginTime, nullptr);
6417     for (int i = 0; i < NUM_COUNT; i++) {
6418         JsiRuntimeCallInfo();
6419     }
6420     gettimeofday(&g_endTime, nullptr);
6421     TEST_TIME(JSValueRef::JsiRuntimeCallInfo);
6422 }
6423 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_GetThread)6424 HWTEST_F_L0(JSNApiSplTest, JSValueRef_GetThread)
6425 {
6426     LocalScope scope(vm_);
6427     CalculateForTime();
6428     JsiRuntimeCallInfo object;
6429     gettimeofday(&g_beginTime, nullptr);
6430     for (int i = 0; i < NUM_COUNT; i++) {
6431         object.GetThread();
6432     }
6433     gettimeofday(&g_endTime, nullptr);
6434     TEST_TIME(JSValueRef::GetThread);
6435 }
6436 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_GetArgsNumber)6437 HWTEST_F_L0(JSNApiSplTest, JSValueRef_GetArgsNumber)
6438 {
6439     LocalScope scope(vm_);
6440     CalculateForTime();
6441     JsiRuntimeCallInfo object;
6442     gettimeofday(&g_beginTime, nullptr);
6443     for (int i = 0; i < NUM_COUNT; i++) {
6444         object.GetArgsNumber();
6445     }
6446     gettimeofday(&g_endTime, nullptr);
6447     TEST_TIME(JSValueRef::GetArgsNumber);
6448 }
6449 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_HasCaught_True)6450 HWTEST_F_L0(JSNApiSplTest, JSValueRef_HasCaught_True)
6451 {
6452     LocalScope scope(vm_);
6453     CalculateForTime();
6454     Local<StringRef> message = StringRef::NewFromUtf8(vm_, "ErrorTest");
6455     Local<JSValueRef> error = Exception::Error(vm_, message);
6456     JSNApi::ThrowException(vm_, error);
6457     TryCatch tryCatch(vm_);
6458     ASSERT_TRUE(tryCatch.HasCaught());
6459     vm_->GetJSThread()->ClearException();
6460     JSNApi::ThrowException(vm_, error);
6461     gettimeofday(&g_beginTime, nullptr);
6462     for (int i = 0; i < NUM_COUNT; i++) {
6463         tryCatch.HasCaught();
6464     }
6465     gettimeofday(&g_endTime, nullptr);
6466     TEST_TIME(JSValueRef::HasCaught);
6467 }
6468 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_HasCaught_False)6469 HWTEST_F_L0(JSNApiSplTest, JSValueRef_HasCaught_False)
6470 {
6471     LocalScope scope(vm_);
6472     CalculateForTime();
6473     Local<StringRef> message = StringRef::NewFromUtf8(vm_, "ErrorTest");
6474     Local<JSValueRef> error = Exception::Error(vm_, message);
6475     JSNApi::ThrowException(vm_, error);
6476     TryCatch tryCatch(vm_);
6477     tryCatch.GetAndClearException();
6478     gettimeofday(&g_beginTime, nullptr);
6479     for (int i = 0; i < NUM_COUNT; i++) {
6480         tryCatch.HasCaught();
6481     }
6482     gettimeofday(&g_endTime, nullptr);
6483     TEST_TIME(JSValueRef::HasCaught);
6484 }
6485 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_Undefined)6486 HWTEST_F_L0(JSNApiSplTest, JSValueRef_Undefined)
6487 {
6488     LocalScope scope(vm_);
6489     CalculateForTime();
6490     uint32_t inputUnit32 = 32; // 32 = random number
6491     int num = 0;               // 0 = random number
6492     uint64_t maxUint64 = std::numeric_limits<uint64_t>::max();
6493     bool inputBool = true;
6494     std::string testUtf8 = "Hello world";
6495     Local<IntegerRef> intValue = IntegerRef::New(vm_, num);
6496     Local<NumberRef> resUnit32 = NumberRef::New(vm_, inputUnit32);
6497     Local<BigIntRef> maxBigintUint64 = BigIntRef::New(vm_, maxUint64);
6498     Local<BooleanRef> resBool = BooleanRef::New(vm_, inputBool);
6499     Local<StringRef> stringUtf8 = StringRef::NewFromUtf8(vm_, testUtf8.c_str());
6500     gettimeofday(&g_beginTime, nullptr);
6501     for (int i = 0; i < NUM_COUNT; i++) {
6502         intValue->Undefined(vm_);
6503     }
6504     gettimeofday(&g_endTime, nullptr);
6505     TEST_TIME(JSValueRef::Undefined::IntegerRef);
6506     gettimeofday(&g_beginTime, nullptr);
6507     for (int i = 0; i < NUM_COUNT; i++) {
6508         resUnit32->Undefined(vm_);
6509     }
6510     gettimeofday(&g_endTime, nullptr);
6511     TEST_TIME(JSValueRef::Undefined::NumberRef);
6512     gettimeofday(&g_beginTime, nullptr);
6513     for (int i = 0; i < NUM_COUNT; i++) {
6514         maxBigintUint64->Undefined(vm_);
6515     }
6516     gettimeofday(&g_endTime, nullptr);
6517     TEST_TIME(JSValueRef::Undefined::BigIntRef);
6518     gettimeofday(&g_beginTime, nullptr);
6519     for (int i = 0; i < NUM_COUNT; i++) {
6520         resBool->Undefined(vm_);
6521     }
6522     gettimeofday(&g_endTime, nullptr);
6523     TEST_TIME(JSValueRef::Undefined::BooleanRef);
6524     gettimeofday(&g_beginTime, nullptr);
6525     for (int i = 0; i < NUM_COUNT; i++) {
6526         stringUtf8->Undefined(vm_);
6527     }
6528     gettimeofday(&g_endTime, nullptr);
6529     TEST_TIME(JSValueRef::Undefined::StringRef);
6530     gettimeofday(&g_beginTime, nullptr);
6531     for (int i = 0; i < NUM_COUNT; i++) {
6532         JSValueRef::Undefined(vm_);
6533     }
6534     gettimeofday(&g_endTime, nullptr);
6535     TEST_TIME(JSValueRef::Undefined);
6536 }
6537 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_Null)6538 HWTEST_F_L0(JSNApiSplTest, JSValueRef_Null)
6539 {
6540     LocalScope scope(vm_);
6541     CalculateForTime();
6542     uint32_t inputUnit32 = 32; // 32 = random number
6543     int num = 0;               // 0 = random number
6544     uint64_t maxUint64 = std::numeric_limits<uint64_t>::max();
6545     bool inputBool = true;
6546     std::string testUtf8 = "Hello world";
6547     Local<IntegerRef> intValue = IntegerRef::New(vm_, num);
6548     Local<NumberRef> resUnit32 = NumberRef::New(vm_, inputUnit32);
6549     Local<BigIntRef> maxBigintUint64 = BigIntRef::New(vm_, maxUint64);
6550     Local<BooleanRef> resBool = BooleanRef::New(vm_, inputBool);
6551     Local<StringRef> stringUtf8 = StringRef::NewFromUtf8(vm_, testUtf8.c_str());
6552     gettimeofday(&g_beginTime, nullptr);
6553     for (int i = 0; i < NUM_COUNT; i++) {
6554         intValue->Null(vm_);
6555     }
6556     gettimeofday(&g_endTime, nullptr);
6557     TEST_TIME(JSValueRef::Null::IntegerRef);
6558     gettimeofday(&g_beginTime, nullptr);
6559     for (int i = 0; i < NUM_COUNT; i++) {
6560         resUnit32->Null(vm_);
6561     }
6562     gettimeofday(&g_endTime, nullptr);
6563     TEST_TIME(JSValueRef::Null::NumberRef);
6564     gettimeofday(&g_beginTime, nullptr);
6565     for (int i = 0; i < NUM_COUNT; i++) {
6566         maxBigintUint64->Null(vm_);
6567     }
6568     gettimeofday(&g_endTime, nullptr);
6569     TEST_TIME(JSValueRef::Null::BigIntRef);
6570     gettimeofday(&g_beginTime, nullptr);
6571     for (int i = 0; i < NUM_COUNT; i++) {
6572         resBool->Null(vm_);
6573     }
6574     gettimeofday(&g_endTime, nullptr);
6575     TEST_TIME(JSValueRef::Null::BooleanRef);
6576     gettimeofday(&g_beginTime, nullptr);
6577     for (int i = 0; i < NUM_COUNT; i++) {
6578         stringUtf8->Null(vm_);
6579     }
6580     gettimeofday(&g_endTime, nullptr);
6581     TEST_TIME(JSValueRef::Null::StringRef);
6582     gettimeofday(&g_beginTime, nullptr);
6583     for (int i = 0; i < NUM_COUNT; i++) {
6584         JSValueRef::Null(vm_);
6585     }
6586     gettimeofday(&g_endTime, nullptr);
6587     TEST_TIME(JSValueRef::Null);
6588 }
6589 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_True)6590 HWTEST_F_L0(JSNApiSplTest, JSValueRef_True)
6591 {
6592     LocalScope scope(vm_);
6593     CalculateForTime();
6594     uint32_t inputUnit32 = 32; // 32 = random number
6595     int num = 0;               // 0 = random number
6596     uint64_t maxUint64 = std::numeric_limits<uint64_t>::max();
6597     bool inputBool = true;
6598     std::string testUtf8 = "Hello world";
6599     Local<IntegerRef> intValue = IntegerRef::New(vm_, num);
6600     Local<NumberRef> resUnit32 = NumberRef::New(vm_, inputUnit32);
6601     Local<BigIntRef> maxBigintUint64 = BigIntRef::New(vm_, maxUint64);
6602     Local<BooleanRef> resBool = BooleanRef::New(vm_, inputBool);
6603     Local<StringRef> stringUtf8 = StringRef::NewFromUtf8(vm_, testUtf8.c_str());
6604     gettimeofday(&g_beginTime, nullptr);
6605     for (int i = 0; i < NUM_COUNT; i++) {
6606         intValue->True(vm_);
6607     }
6608     gettimeofday(&g_endTime, nullptr);
6609     TEST_TIME(JSValueRef::True::IntegerRef);
6610     gettimeofday(&g_beginTime, nullptr);
6611     for (int i = 0; i < NUM_COUNT; i++) {
6612         resUnit32->True(vm_);
6613     }
6614     gettimeofday(&g_endTime, nullptr);
6615     TEST_TIME(JSValueRef::True::NumberRef);
6616     gettimeofday(&g_beginTime, nullptr);
6617     for (int i = 0; i < NUM_COUNT; i++) {
6618         maxBigintUint64->True(vm_);
6619     }
6620     gettimeofday(&g_endTime, nullptr);
6621     TEST_TIME(JSValueRef::True::BigIntRef);
6622     gettimeofday(&g_beginTime, nullptr);
6623     for (int i = 0; i < NUM_COUNT; i++) {
6624         resBool->True(vm_);
6625     }
6626     gettimeofday(&g_endTime, nullptr);
6627     TEST_TIME(JSValueRef::True::BooleanRef);
6628     gettimeofday(&g_beginTime, nullptr);
6629     for (int i = 0; i < NUM_COUNT; i++) {
6630         stringUtf8->True(vm_);
6631     }
6632     gettimeofday(&g_endTime, nullptr);
6633     TEST_TIME(JSValueRef::True::StringRef);
6634     gettimeofday(&g_beginTime, nullptr);
6635     for (int i = 0; i < NUM_COUNT; i++) {
6636         JSValueRef::True(vm_);
6637     }
6638     gettimeofday(&g_endTime, nullptr);
6639     TEST_TIME(JSValueRef::True);
6640 }
6641 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_ToBoolean)6642 HWTEST_F_L0(JSNApiSplTest, JSValueRef_ToBoolean)
6643 {
6644     LocalScope scope(vm_);
6645     CalculateForTime();
6646     uint32_t inputUnit32 = 32; // 32 = random number
6647     int num = 0;               // 0 = random number
6648     uint64_t maxUint64 = std::numeric_limits<uint64_t>::max();
6649     bool inputBool = true;
6650     std::string testUtf8 = "Hello world";
6651     Local<IntegerRef> intValue = IntegerRef::New(vm_, num);
6652     Local<NumberRef> resUnit32 = NumberRef::New(vm_, inputUnit32);
6653     Local<BigIntRef> maxBigintUint64 = BigIntRef::New(vm_, maxUint64);
6654     Local<BooleanRef> resBool = BooleanRef::New(vm_, inputBool);
6655     Local<StringRef> stringUtf8 = StringRef::NewFromUtf8(vm_, testUtf8.c_str());
6656     gettimeofday(&g_beginTime, nullptr);
6657     for (int i = 0; i < NUM_COUNT; i++) {
6658         intValue->ToBoolean(vm_);
6659     }
6660     gettimeofday(&g_endTime, nullptr);
6661     TEST_TIME(JSValueRef::ToBoolean::IntegerRef);
6662     gettimeofday(&g_beginTime, nullptr);
6663     for (int i = 0; i < NUM_COUNT; i++) {
6664         resUnit32->ToBoolean(vm_);
6665     }
6666     gettimeofday(&g_endTime, nullptr);
6667     TEST_TIME(JSValueRef::ToBoolean::NumberRef);
6668     gettimeofday(&g_beginTime, nullptr);
6669     for (int i = 0; i < NUM_COUNT; i++) {
6670         maxBigintUint64->ToBoolean(vm_);
6671     }
6672     gettimeofday(&g_endTime, nullptr);
6673     TEST_TIME(JSValueRef::ToBoolean::BigIntRef);
6674     gettimeofday(&g_beginTime, nullptr);
6675     for (int i = 0; i < NUM_COUNT; i++) {
6676         resBool->ToBoolean(vm_);
6677     }
6678     gettimeofday(&g_endTime, nullptr);
6679     TEST_TIME(JSValueRef::ToBoolean::BooleanRef);
6680     gettimeofday(&g_beginTime, nullptr);
6681     for (int i = 0; i < NUM_COUNT; i++) {
6682         stringUtf8->ToBoolean(vm_);
6683     }
6684     gettimeofday(&g_endTime, nullptr);
6685     TEST_TIME(JSValueRef::ToBoolean::StringRef);
6686 }
6687 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_ToObject)6688 HWTEST_F_L0(JSNApiSplTest, JSValueRef_ToObject)
6689 {
6690     LocalScope scope(vm_);
6691     CalculateForTime();
6692     uint32_t inputUnit32 = 32; // 32 = random number
6693     int num = 0;               // 0 = random number
6694     uint64_t maxUint64 = std::numeric_limits<uint64_t>::max();
6695     bool inputBool = true;
6696     std::string testUtf8 = "Hello world";
6697     Local<IntegerRef> intValue = IntegerRef::New(vm_, num);
6698     Local<NumberRef> resUnit32 = NumberRef::New(vm_, inputUnit32);
6699     Local<BigIntRef> maxBigintUint64 = BigIntRef::New(vm_, maxUint64);
6700     Local<BooleanRef> resBool = BooleanRef::New(vm_, inputBool);
6701     Local<StringRef> stringUtf8 = StringRef::NewFromUtf8(vm_, testUtf8.c_str());
6702     gettimeofday(&g_beginTime, nullptr);
6703     for (int i = 0; i < NUM_COUNT; i++) {
6704         intValue->ToObject(vm_);
6705     }
6706     gettimeofday(&g_endTime, nullptr);
6707     TEST_TIME(JSValueRef::ToObject::IntegerRef);
6708     gettimeofday(&g_beginTime, nullptr);
6709     for (int i = 0; i < NUM_COUNT; i++) {
6710         resUnit32->ToObject(vm_);
6711     }
6712     gettimeofday(&g_endTime, nullptr);
6713     TEST_TIME(JSValueRef::ToObject::NumberRef);
6714     gettimeofday(&g_beginTime, nullptr);
6715     for (int i = 0; i < NUM_COUNT; i++) {
6716         maxBigintUint64->ToObject(vm_);
6717     }
6718     gettimeofday(&g_endTime, nullptr);
6719     TEST_TIME(JSValueRef::ToObject::BigIntRef);
6720     gettimeofday(&g_beginTime, nullptr);
6721     for (int i = 0; i < NUM_COUNT; i++) {
6722         resBool->ToObject(vm_);
6723     }
6724     gettimeofday(&g_endTime, nullptr);
6725     TEST_TIME(JSValueRef::ToObject::BooleanRef);
6726     gettimeofday(&g_beginTime, nullptr);
6727     for (int i = 0; i < NUM_COUNT; i++) {
6728         stringUtf8->ToObject(vm_);
6729     }
6730     gettimeofday(&g_endTime, nullptr);
6731     TEST_TIME(JSValueRef::ToObject::StringRef);
6732 }
6733 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_ToString)6734 HWTEST_F_L0(JSNApiSplTest, JSValueRef_ToString)
6735 {
6736     LocalScope scope(vm_);
6737     CalculateForTime();
6738     uint32_t inputUnit32 = 32; // 32 = random number
6739     int num = 0;               // 0 = random number
6740     uint64_t maxUint64 = std::numeric_limits<uint64_t>::max();
6741     bool inputBool = true;
6742     std::string testUtf8 = "Hello world";
6743     Local<IntegerRef> intValue = IntegerRef::New(vm_, num);
6744     Local<NumberRef> resUnit32 = NumberRef::New(vm_, inputUnit32);
6745     Local<BigIntRef> maxBigintUint64 = BigIntRef::New(vm_, maxUint64);
6746     Local<BooleanRef> resBool = BooleanRef::New(vm_, inputBool);
6747     Local<StringRef> stringUtf8 = StringRef::NewFromUtf8(vm_, testUtf8.c_str());
6748     gettimeofday(&g_beginTime, nullptr);
6749     for (int i = 0; i < NUM_COUNT; i++) {
6750         intValue->ToString(vm_);
6751     }
6752     gettimeofday(&g_endTime, nullptr);
6753     TEST_TIME(JSValueRef::ToString::IntegerRef);
6754     gettimeofday(&g_beginTime, nullptr);
6755     for (int i = 0; i < NUM_COUNT; i++) {
6756         resUnit32->ToString(vm_);
6757     }
6758     gettimeofday(&g_endTime, nullptr);
6759     TEST_TIME(JSValueRef::ToString::NumberRef);
6760     gettimeofday(&g_beginTime, nullptr);
6761     for (int i = 0; i < NUM_COUNT; i++) {
6762         maxBigintUint64->ToString(vm_);
6763     }
6764     gettimeofday(&g_endTime, nullptr);
6765     TEST_TIME(JSValueRef::ToString::BigIntRef);
6766     gettimeofday(&g_beginTime, nullptr);
6767     for (int i = 0; i < NUM_COUNT; i++) {
6768         resBool->ToString(vm_);
6769     }
6770     gettimeofday(&g_endTime, nullptr);
6771     TEST_TIME(JSValueRef::ToString::BooleanRef);
6772     Local<JSValueRef> toTarget(stringUtf8);
6773     gettimeofday(&g_beginTime, nullptr);
6774     for (int i = 0; i < NUM_COUNT; i++) {
6775         toTarget->ToString(vm_);
6776     }
6777     gettimeofday(&g_endTime, nullptr);
6778     TEST_TIME(JSValueRef::ToString::StringRef);
6779 }
6780 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_IsFalse)6781 HWTEST_F_L0(JSNApiSplTest, JSValueRef_IsFalse)
6782 {
6783     LocalScope scope(vm_);
6784     CalculateForTime();
6785     uint32_t inputUnit32 = 32; // 32 = random number
6786     int num = 0;               // 0 = random number
6787     uint64_t maxUint64 = std::numeric_limits<uint64_t>::max();
6788     bool inputBool = false;
6789     std::string testUtf8 = "Hello world";
6790     Local<IntegerRef> intValue = IntegerRef::New(vm_, num);
6791     Local<NumberRef> resUnit32 = NumberRef::New(vm_, inputUnit32);
6792     Local<BigIntRef> maxBigintUint64 = BigIntRef::New(vm_, maxUint64);
6793     Local<BooleanRef> resBool = BooleanRef::New(vm_, inputBool);
6794     Local<StringRef> stringUtf8 = StringRef::NewFromUtf8(vm_, testUtf8.c_str());
6795     gettimeofday(&g_beginTime, nullptr);
6796     for (int i = 0; i < NUM_COUNT; i++) {
6797         intValue->IsFalse();
6798     }
6799     gettimeofday(&g_endTime, nullptr);
6800     TEST_TIME(JSValueRef::IsFalse::IntegerRef);
6801     gettimeofday(&g_beginTime, nullptr);
6802     for (int i = 0; i < NUM_COUNT; i++) {
6803         resUnit32->IsFalse();
6804     }
6805     gettimeofday(&g_endTime, nullptr);
6806     TEST_TIME(JSValueRef::IsFalse::NumberRef);
6807     gettimeofday(&g_beginTime, nullptr);
6808     for (int i = 0; i < NUM_COUNT; i++) {
6809         maxBigintUint64->IsFalse();
6810     }
6811     gettimeofday(&g_endTime, nullptr);
6812     TEST_TIME(JSValueRef::IsFalse::BigIntRef);
6813     gettimeofday(&g_beginTime, nullptr);
6814     for (int i = 0; i < NUM_COUNT; i++) {
6815         resBool->IsFalse();
6816     }
6817     gettimeofday(&g_endTime, nullptr);
6818     TEST_TIME(JSValueRef::IsFalse::BooleanRef);
6819     gettimeofday(&g_beginTime, nullptr);
6820     for (int i = 0; i < NUM_COUNT; i++) {
6821         stringUtf8->IsFalse();
6822     }
6823     gettimeofday(&g_endTime, nullptr);
6824     TEST_TIME(JSValueRef::IsFalse::StringRef);
6825 }
6826 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_IsNumber)6827 HWTEST_F_L0(JSNApiSplTest, JSValueRef_IsNumber)
6828 {
6829     LocalScope scope(vm_);
6830     CalculateForTime();
6831     uint32_t inputUnit32 = 32; // 32 = random number
6832     int num = 0;               // 0 = random number
6833     uint64_t maxUint64 = std::numeric_limits<uint64_t>::max();
6834     bool inputBool = true;
6835     std::string testUtf8 = "Hello world";
6836     Local<IntegerRef> intValue = IntegerRef::New(vm_, num);
6837     Local<NumberRef> resUnit32 = NumberRef::New(vm_, inputUnit32);
6838     Local<BigIntRef> maxBigintUint64 = BigIntRef::New(vm_, maxUint64);
6839     Local<BooleanRef> resBool = BooleanRef::New(vm_, inputBool);
6840     Local<StringRef> stringUtf8 = StringRef::NewFromUtf8(vm_, testUtf8.c_str());
6841     gettimeofday(&g_beginTime, nullptr);
6842     for (int i = 0; i < NUM_COUNT; i++) {
6843         intValue->IsNumber();
6844     }
6845     gettimeofday(&g_endTime, nullptr);
6846     TEST_TIME(JSValueRef::IsNumber::IntegerRef);
6847     gettimeofday(&g_beginTime, nullptr);
6848     for (int i = 0; i < NUM_COUNT; i++) {
6849         resUnit32->IsNumber();
6850     }
6851     gettimeofday(&g_endTime, nullptr);
6852     TEST_TIME(JSValueRef::IsNumber::NumberRef);
6853     gettimeofday(&g_beginTime, nullptr);
6854     for (int i = 0; i < NUM_COUNT; i++) {
6855         maxBigintUint64->IsNumber();
6856     }
6857     gettimeofday(&g_endTime, nullptr);
6858     TEST_TIME(JSValueRef::IsNumber::BigIntRef);
6859     gettimeofday(&g_beginTime, nullptr);
6860     for (int i = 0; i < NUM_COUNT; i++) {
6861         resBool->IsNumber();
6862     }
6863     gettimeofday(&g_endTime, nullptr);
6864     TEST_TIME(JSValueRef::IsNumber::BooleanRef);
6865     gettimeofday(&g_beginTime, nullptr);
6866     for (int i = 0; i < NUM_COUNT; i++) {
6867         stringUtf8->IsNumber();
6868     }
6869     gettimeofday(&g_endTime, nullptr);
6870     TEST_TIME(JSValueRef::IsNumber::StringRef);
6871 }
6872 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_IsBigInt)6873 HWTEST_F_L0(JSNApiSplTest, JSValueRef_IsBigInt)
6874 {
6875     LocalScope scope(vm_);
6876     CalculateForTime();
6877     uint32_t inputUnit32 = 32; // 32 = random number
6878     uint64_t maxUint64 = std::numeric_limits<uint64_t>::max();
6879     int64_t maxInt64 = std::numeric_limits<int64_t>::max();
6880     Local<IntegerRef> intValue = IntegerRef::New(vm_, 2147483646);
6881     Local<NumberRef> resUnit32 = NumberRef::New(vm_, inputUnit32);
6882     Local<NumberRef> resUnit64 = NumberRef::New(vm_, maxInt64);
6883     Local<BigIntRef> maxBigintUint64 = BigIntRef::New(vm_, maxUint64);
6884     Local<BigIntRef> maxBigintInt64 = BigIntRef::New(vm_, maxInt64);
6885     gettimeofday(&g_beginTime, nullptr);
6886     for (int i = 0; i < NUM_COUNT; i++) {
6887         intValue->IsBigInt(vm_);
6888     }
6889     gettimeofday(&g_endTime, nullptr);
6890     TEST_TIME(JSValueRef::IsBigInt::IntegerRef);
6891     gettimeofday(&g_beginTime, nullptr);
6892     for (int i = 0; i < NUM_COUNT; i++) {
6893         resUnit32->IsBigInt(vm_);
6894     }
6895     gettimeofday(&g_endTime, nullptr);
6896     TEST_TIME(JSValueRef::IsBigInt::NumberRef32);
6897     gettimeofday(&g_beginTime, nullptr);
6898     for (int i = 0; i < NUM_COUNT; i++) {
6899         resUnit64->IsBigInt(vm_);
6900     }
6901     gettimeofday(&g_endTime, nullptr);
6902     TEST_TIME(JSValueRef::IsBigInt::NumberRef64);
6903     gettimeofday(&g_beginTime, nullptr);
6904     for (int i = 0; i < NUM_COUNT; i++) {
6905         maxBigintUint64->IsBigInt(vm_);
6906     }
6907     gettimeofday(&g_endTime, nullptr);
6908     TEST_TIME(JSValueRef::IsBigInt::BigIntRefU64);
6909     gettimeofday(&g_beginTime, nullptr);
6910     for (int i = 0; i < NUM_COUNT; i++) {
6911         maxBigintInt64->IsBigInt(vm_);
6912     }
6913     gettimeofday(&g_endTime, nullptr);
6914     TEST_TIME(JSValueRef::IsBigInt::BigIntRefI64);
6915 }
6916 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_IsBigInt2)6917 HWTEST_F_L0(JSNApiSplTest, JSValueRef_IsBigInt2)
6918 {
6919     LocalScope scope(vm_);
6920     CalculateForTime();
6921     bool inputBool = true;
6922     std::string testUtf8 = "Hello world";
6923     Local<BooleanRef> resBool = BooleanRef::New(vm_, inputBool);
6924     Local<StringRef> stringUtf8 = StringRef::NewFromUtf8(vm_, testUtf8.c_str());
6925     gettimeofday(&g_beginTime, nullptr);
6926     for (int i = 0; i < NUM_COUNT; i++) {
6927         resBool->IsBigInt(vm_);
6928     }
6929     gettimeofday(&g_endTime, nullptr);
6930     TEST_TIME(JSValueRef::IsBigInt::BooleanRef);
6931     gettimeofday(&g_beginTime, nullptr);
6932     for (int i = 0; i < NUM_COUNT; i++) {
6933         stringUtf8->IsBigInt(vm_);
6934     }
6935     gettimeofday(&g_endTime, nullptr);
6936     TEST_TIME(JSValueRef::IsBigInt::StringRef);
6937 }
6938 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_IsArray)6939 HWTEST_F_L0(JSNApiSplTest, JSValueRef_IsArray)
6940 {
6941     LocalScope scope(vm_);
6942     CalculateForTime();
6943     uint32_t inputUnit32 = 32; // 32 = random number
6944     int num = 0;               // 0 = random number
6945     Local<IntegerRef> intValue = IntegerRef::New(vm_, num);
6946     Local<NumberRef> resUnit32 = NumberRef::New(vm_, inputUnit32);
6947     gettimeofday(&g_beginTime, nullptr);
6948     for (int i = 0; i < NUM_COUNT; i++) {
6949         intValue->IsArray(vm_);
6950     }
6951     gettimeofday(&g_endTime, nullptr);
6952     TEST_TIME(JSValueRef::IsArray::IntegerRef);
6953     gettimeofday(&g_beginTime, nullptr);
6954     for (int i = 0; i < NUM_COUNT; i++) {
6955         resUnit32->IsArray(vm_);
6956     }
6957     gettimeofday(&g_endTime, nullptr);
6958     TEST_TIME(JSValueRef::IsArray::NumberRef);
6959 }
6960 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_IsArray2)6961 HWTEST_F_L0(JSNApiSplTest, JSValueRef_IsArray2)
6962 {
6963     LocalScope scope(vm_);
6964     CalculateForTime();
6965     int num = 3; // 3 = ArrayBuffer Length
6966     uint64_t maxUint64 = std::numeric_limits<uint64_t>::max();
6967     std::string testUtf8 = "Hello world";
6968     Local<BigIntRef> maxBigintUint64 = BigIntRef::New(vm_, maxUint64);
6969     Local<StringRef> stringUtf8 = StringRef::NewFromUtf8(vm_, testUtf8.c_str());
6970     Local<ArrayRef> arrayObject = ArrayRef::New(vm_, num);
6971     gettimeofday(&g_beginTime, nullptr);
6972     for (int i = 0; i < NUM_COUNT; i++) {
6973         maxBigintUint64->IsArray(vm_);
6974     }
6975     gettimeofday(&g_endTime, nullptr);
6976     TEST_TIME(JSValueRef::IsArray::BigIntRef);
6977     gettimeofday(&g_beginTime, nullptr);
6978     for (int i = 0; i < NUM_COUNT; i++) {
6979         stringUtf8->IsArray(vm_);
6980     }
6981     gettimeofday(&g_endTime, nullptr);
6982     TEST_TIME(JSValueRef::IsArray::StringRef);
6983     gettimeofday(&g_beginTime, nullptr);
6984     for (int i = 0; i < NUM_COUNT; i++) {
6985         arrayObject->IsArray(vm_);
6986     }
6987     gettimeofday(&g_endTime, nullptr);
6988     TEST_TIME(JSValueRef::IsArray::ArrayRef);
6989 }
6990 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_IsJSArray)6991 HWTEST_F_L0(JSNApiSplTest, JSValueRef_IsJSArray)
6992 {
6993     LocalScope scope(vm_);
6994     CalculateForTime();
6995     uint32_t inputUnit32 = 32; // 32 = random number
6996     int num = 0;               // 0 = random number
6997     int length = 3;            // 3 = ArrayBuffer Length
6998     uint64_t maxUint64 = std::numeric_limits<uint64_t>::max();
6999     std::string testUtf8 = "Hello world";
7000     Local<IntegerRef> intValue = IntegerRef::New(vm_, num);
7001     Local<NumberRef> resUnit32 = NumberRef::New(vm_, inputUnit32);
7002     Local<BigIntRef> maxBigintUint64 = BigIntRef::New(vm_, maxUint64);
7003     Local<StringRef> stringUtf8 = StringRef::NewFromUtf8(vm_, testUtf8.c_str());
7004     Local<ArrayRef> arrayObject = ArrayRef::New(vm_, length);
7005     gettimeofday(&g_beginTime, nullptr);
7006     for (int i = 0; i < NUM_COUNT; i++) {
7007         intValue->IsJSArray(vm_);
7008     }
7009     gettimeofday(&g_endTime, nullptr);
7010     TEST_TIME(JSValueRef::IsJSArray::IntegerRef);
7011     gettimeofday(&g_beginTime, nullptr);
7012     for (int i = 0; i < NUM_COUNT; i++) {
7013         resUnit32->IsJSArray(vm_);
7014     }
7015     gettimeofday(&g_endTime, nullptr);
7016     TEST_TIME(JSValueRef::IsJSArray::NumberRef);
7017     gettimeofday(&g_beginTime, nullptr);
7018     for (int i = 0; i < NUM_COUNT; i++) {
7019         maxBigintUint64->IsJSArray(vm_);
7020     }
7021     gettimeofday(&g_endTime, nullptr);
7022     TEST_TIME(JSValueRef::IsJSArray::BigIntRef);
7023     gettimeofday(&g_beginTime, nullptr);
7024     for (int i = 0; i < NUM_COUNT; i++) {
7025         stringUtf8->IsJSArray(vm_);
7026     }
7027     gettimeofday(&g_endTime, nullptr);
7028     TEST_TIME(JSValueRef::IsJSArray::StringRef);
7029     gettimeofday(&g_beginTime, nullptr);
7030     for (int i = 0; i < NUM_COUNT; i++) {
7031         arrayObject->IsJSArray(vm_);
7032     }
7033     gettimeofday(&g_endTime, nullptr);
7034     TEST_TIME(JSValueRef::IsJSArray::ArrayRef);
7035 }
7036 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_IsJSArray2)7037 HWTEST_F_L0(JSNApiSplTest, JSValueRef_IsJSArray2)
7038 {
7039     LocalScope scope(vm_);
7040     CalculateForTime();
7041     JSArray *arr = JSArray::ArrayCreate(thread_, JSTaggedNumber(0)).GetObject<JSArray>();
7042     JSHandle<JSTaggedValue> obj(thread_, arr);
7043     Local<JSValueRef> JSArrayObject = JSNApiHelper::ToLocal<JSValueRef>(obj);
7044     gettimeofday(&g_beginTime, nullptr);
7045     for (int i = 0; i < NUM_COUNT; i++) {
7046         JSArrayObject->IsJSArray(vm_);
7047     }
7048     gettimeofday(&g_endTime, nullptr);
7049     TEST_TIME(JSValueRef::IsJSArray::JSArrayObject);
7050 }
7051 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_IsConstructor)7052 HWTEST_F_L0(JSNApiSplTest, JSValueRef_IsConstructor)
7053 {
7054     LocalScope scope(vm_);
7055     CalculateForTime();
7056     uint32_t inputUnit32 = 32; // 32 = random number
7057     int num = 0;               // 0 = random number
7058     Local<IntegerRef> intValue = IntegerRef::New(vm_, num);
7059     Local<NumberRef> resUnit32 = NumberRef::New(vm_, inputUnit32);
7060     gettimeofday(&g_beginTime, nullptr);
7061     for (int i = 0; i < NUM_COUNT; i++) {
7062         intValue->IsConstructor(vm_);
7063     }
7064     gettimeofday(&g_endTime, nullptr);
7065     TEST_TIME(JSValueRef::IsConstructor::IntegerRef);
7066     gettimeofday(&g_beginTime, nullptr);
7067     for (int i = 0; i < NUM_COUNT; i++) {
7068         resUnit32->IsConstructor(vm_);
7069     }
7070     gettimeofday(&g_endTime, nullptr);
7071     TEST_TIME(JSValueRef::IsConstructor::NumberRef);
7072 }
7073 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_IsConstructor2)7074 HWTEST_F_L0(JSNApiSplTest, JSValueRef_IsConstructor2)
7075 {
7076     LocalScope scope(vm_);
7077     CalculateForTime();
7078     uint64_t maxUint64 = std::numeric_limits<uint64_t>::max();
7079     std::string testUtf8 = "Hello world";
7080     Local<BigIntRef> maxBigintUint64 = BigIntRef::New(vm_, maxUint64);
7081     Local<StringRef> stringUtf8 = StringRef::NewFromUtf8(vm_, testUtf8.c_str());
7082     EcmaVM *ecmaVM = thread_->GetEcmaVM();
7083     JSHandle<GlobalEnv> env = ecmaVM->GetGlobalEnv();
7084     JSHandle<JSFunction> func = thread_->GetEcmaVM()->GetFactory()->NewJSFunction(env, static_cast<void *>(nullptr),
7085         FunctionKind::BASE_CONSTRUCTOR);
7086     JSHandle<JSObject> nullHandle(thread_, JSTaggedValue::Null());
7087     JSHandle<JSObject> obj = JSObject::ObjectCreate(thread_, nullHandle);
7088     JSHandle<JSTaggedValue> objValue(obj);
7089     [[maybe_unused]] bool makeConstructor = JSFunction::MakeConstructor(thread_, func, objValue);
7090     JSHandle<JSTaggedValue> funcHandle(func);
7091     Local<JSValueRef> funConstructor = JSNApiHelper::ToLocal<JSValueRef>(funcHandle);
7092     gettimeofday(&g_beginTime, nullptr);
7093     for (int i = 0; i < NUM_COUNT; i++) {
7094         maxBigintUint64->IsConstructor(vm_);
7095     }
7096     gettimeofday(&g_endTime, nullptr);
7097     TEST_TIME(JSValueRef::IsConstructor::BigIntRef);
7098     gettimeofday(&g_beginTime, nullptr);
7099     for (int i = 0; i < NUM_COUNT; i++) {
7100         stringUtf8->IsConstructor(vm_);
7101     }
7102     gettimeofday(&g_endTime, nullptr);
7103     TEST_TIME(JSValueRef::IsConstructor::StringRef);
7104     gettimeofday(&g_beginTime, nullptr);
7105     for (int i = 0; i < NUM_COUNT; i++) {
7106         funConstructor->IsConstructor(vm_);
7107     }
7108     gettimeofday(&g_endTime, nullptr);
7109     TEST_TIME(JSValueRef::IsConstructor::funConstructor);
7110 }
7111 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_IsDate)7112 HWTEST_F_L0(JSNApiSplTest, JSValueRef_IsDate)
7113 {
7114     LocalScope scope(vm_);
7115     CalculateForTime();
7116     uint32_t inputUnit32 = 32; // 32 = random number
7117     int num = 0;               // 0 = random number
7118     uint64_t maxUint64 = std::numeric_limits<uint64_t>::max();
7119     std::string testUtf8 = "Hello world";
7120     double timeRef = 1.1; // 1.1 = random number
7121     Local<IntegerRef> intValue = IntegerRef::New(vm_, num);
7122     Local<NumberRef> resUnit32 = NumberRef::New(vm_, inputUnit32);
7123     Local<BigIntRef> maxBigintUint64 = BigIntRef::New(vm_, maxUint64);
7124     Local<StringRef> stringUtf8 = StringRef::NewFromUtf8(vm_, testUtf8.c_str());
7125     Local<DateRef> dateRef = DateRef::New(vm_, timeRef);
7126     gettimeofday(&g_beginTime, nullptr);
7127     for (int i = 0; i < NUM_COUNT; i++) {
7128         intValue->IsDate(vm_);
7129     }
7130     gettimeofday(&g_endTime, nullptr);
7131     TEST_TIME(JSValueRef::IsDate::IntegerRef);
7132     gettimeofday(&g_beginTime, nullptr);
7133     for (int i = 0; i < NUM_COUNT; i++) {
7134         resUnit32->IsDate(vm_);
7135     }
7136     gettimeofday(&g_endTime, nullptr);
7137     TEST_TIME(JSValueRef::IsDate::NumberRef);
7138     gettimeofday(&g_beginTime, nullptr);
7139     for (int i = 0; i < NUM_COUNT; i++) {
7140         maxBigintUint64->IsDate(vm_);
7141     }
7142     gettimeofday(&g_endTime, nullptr);
7143     TEST_TIME(JSValueRef::IsDate::BigIntRef);
7144     gettimeofday(&g_beginTime, nullptr);
7145     for (int i = 0; i < NUM_COUNT; i++) {
7146         stringUtf8->IsDate(vm_);
7147     }
7148     gettimeofday(&g_endTime, nullptr);
7149     TEST_TIME(JSValueRef::IsDate::StringRef);
7150     gettimeofday(&g_beginTime, nullptr);
7151     for (int i = 0; i < NUM_COUNT; i++) {
7152         dateRef->IsDate(vm_);
7153     }
7154     gettimeofday(&g_endTime, nullptr);
7155     TEST_TIME(JSValueRef::IsDate::DateRef);
7156 }
7157 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_IsError)7158 HWTEST_F_L0(JSNApiSplTest, JSValueRef_IsError)
7159 {
7160     LocalScope scope(vm_);
7161     CalculateForTime();
7162     uint32_t inputUnit32 = 32; // 32 = random number
7163     int num = 0;               // 0 = random number
7164     uint64_t maxUint64 = std::numeric_limits<uint64_t>::max();
7165     std::string testUtf8 = "Hello world";
7166     Local<IntegerRef> intValue = IntegerRef::New(vm_, num);
7167     Local<NumberRef> resUnit32 = NumberRef::New(vm_, inputUnit32);
7168     Local<BigIntRef> maxBigintUint64 = BigIntRef::New(vm_, maxUint64);
7169     Local<StringRef> stringUtf8 = StringRef::NewFromUtf8(vm_, testUtf8.c_str());
7170     Local<StringRef> message = StringRef::NewFromUtf8(vm_, "ErrorTest");
7171     Local<JSValueRef> error = Exception::Error(vm_, message);
7172     gettimeofday(&g_beginTime, nullptr);
7173     for (int i = 0; i < NUM_COUNT; i++) {
7174         intValue->IsError(vm_);
7175     }
7176     gettimeofday(&g_endTime, nullptr);
7177     TEST_TIME(JSValueRef::IsError::IntegerRef);
7178     gettimeofday(&g_beginTime, nullptr);
7179     for (int i = 0; i < NUM_COUNT; i++) {
7180         resUnit32->IsError(vm_);
7181     }
7182     gettimeofday(&g_endTime, nullptr);
7183     TEST_TIME(JSValueRef::IsError::NumberRef);
7184     gettimeofday(&g_beginTime, nullptr);
7185     for (int i = 0; i < NUM_COUNT; i++) {
7186         maxBigintUint64->IsError(vm_);
7187     }
7188     gettimeofday(&g_endTime, nullptr);
7189     TEST_TIME(JSValueRef::IsError::BigIntRef);
7190     gettimeofday(&g_beginTime, nullptr);
7191     for (int i = 0; i < NUM_COUNT; i++) {
7192         stringUtf8->IsError(vm_);
7193     }
7194     gettimeofday(&g_endTime, nullptr);
7195     TEST_TIME(JSValueRef::IsError::StringRef);
7196     gettimeofday(&g_beginTime, nullptr);
7197     for (int i = 0; i < NUM_COUNT; i++) {
7198         error->IsError(vm_);
7199     }
7200     gettimeofday(&g_endTime, nullptr);
7201     TEST_TIME(JSValueRef::IsError::Exception::Error);
7202 }
7203 
HWTEST_F_L0(JSNApiSplTest,JSValueRef_IsMap)7204 HWTEST_F_L0(JSNApiSplTest, JSValueRef_IsMap)
7205 {
7206     LocalScope scope(vm_);
7207     CalculateForTime();
7208     uint32_t inputUnit32 = 32; // 32 = random number
7209     int num = 0;               // 0 = random number
7210     uint64_t maxUint64 = std::numeric_limits<uint64_t>::max();
7211     std::string testUtf8 = "Hello world";
7212     Local<IntegerRef> intValue = IntegerRef::New(vm_, num);
7213     Local<NumberRef> resUnit32 = NumberRef::New(vm_, inputUnit32);
7214     Local<BigIntRef> maxBigintUint64 = BigIntRef::New(vm_, maxUint64);
7215     Local<StringRef> stringUtf8 = StringRef::NewFromUtf8(vm_, testUtf8.c_str());
7216     Local<MapRef> mapRef = MapRef::New(vm_);
7217     gettimeofday(&g_beginTime, nullptr);
7218     for (int i = 0; i < NUM_COUNT; i++) {
7219         intValue->IsMap(vm_);
7220     }
7221     gettimeofday(&g_endTime, nullptr);
7222     TEST_TIME(JSValueRef::IsMap::IntegerRef);
7223     gettimeofday(&g_beginTime, nullptr);
7224     for (int i = 0; i < NUM_COUNT; i++) {
7225         resUnit32->IsMap(vm_);
7226     }
7227     gettimeofday(&g_endTime, nullptr);
7228     TEST_TIME(JSValueRef::IsMap::NumberRef);
7229     gettimeofday(&g_beginTime, nullptr);
7230     for (int i = 0; i < NUM_COUNT; i++) {
7231         maxBigintUint64->IsMap(vm_);
7232     }
7233     gettimeofday(&g_endTime, nullptr);
7234     TEST_TIME(JSValueRef::IsMap::BigIntRef);
7235     gettimeofday(&g_beginTime, nullptr);
7236     for (int i = 0; i < NUM_COUNT; i++) {
7237         stringUtf8->IsMap(vm_);
7238     }
7239     gettimeofday(&g_endTime, nullptr);
7240     TEST_TIME(JSValueRef::IsMap::StringRef);
7241     gettimeofday(&g_beginTime, nullptr);
7242     for (int i = 0; i < NUM_COUNT; i++) {
7243         mapRef->IsMap(vm_);
7244     }
7245     gettimeofday(&g_endTime, nullptr);
7246     TEST_TIME(JSValueRef::IsMap::MapRef);
7247 }
7248 
HWTEST_F_L0(JSNApiSplTest,Local_operator01)7249 HWTEST_F_L0(JSNApiSplTest, Local_operator01)
7250 {
7251     LocalScope scope(vm_);
7252     CalculateForTime();
7253     uint32_t inputUnit32 = 32; // 32 = random number
7254     int num = 13;              // 13 = random number
7255     int length = 3;            // 3 = ArrayBufer length
7256     uint64_t maxUint64 = std::numeric_limits<uint64_t>::max();
7257     std::string testUtf8 = "Hello world";
7258     Local<IntegerRef> intValue = IntegerRef::New(vm_, num);
7259     Local<NumberRef> resUnit32 = NumberRef::New(vm_, inputUnit32);
7260     Local<BigIntRef> maxBigintUint64 = BigIntRef::New(vm_, maxUint64);
7261     Local<StringRef> stringUtf8 = StringRef::NewFromUtf8(vm_, testUtf8.c_str());
7262     Local<ArrayRef> arrayObject = ArrayRef::New(vm_, length);
7263     gettimeofday(&g_beginTime, nullptr);
7264     for (int i = 0; i < NUM_COUNT; i++) {
7265         Local<JSValueRef> integerVaule(intValue);
7266     }
7267     gettimeofday(&g_endTime, nullptr);
7268     TEST_TIME(Local::Operator::IntegerRef);
7269     gettimeofday(&g_beginTime, nullptr);
7270     for (int i = 0; i < NUM_COUNT; i++) {
7271         Local<JSValueRef> NumberVaule(resUnit32);
7272     }
7273     gettimeofday(&g_endTime, nullptr);
7274     TEST_TIME(Local::Operator::NumberRef);
7275     gettimeofday(&g_beginTime, nullptr);
7276     for (int i = 0; i < NUM_COUNT; i++) {
7277         Local<JSValueRef> bigIntVaule(maxBigintUint64);
7278     }
7279     gettimeofday(&g_endTime, nullptr);
7280     TEST_TIME(Local::Operator::BigIntRef);
7281     gettimeofday(&g_beginTime, nullptr);
7282     for (int i = 0; i < NUM_COUNT; i++) {
7283         Local<JSValueRef> stringVaule(stringUtf8);
7284     }
7285     gettimeofday(&g_endTime, nullptr);
7286     TEST_TIME(Local::Operator::StringRef);
7287     gettimeofday(&g_beginTime, nullptr);
7288     for (int i = 0; i < NUM_COUNT; i++) {
7289         Local<JSValueRef> arrayVaule(arrayObject);
7290     }
7291     gettimeofday(&g_endTime, nullptr);
7292     TEST_TIME(Local::Operator::ArrayRef);
7293 }
7294 
HWTEST_F_L0(JSNApiSplTest,Local_operator02)7295 HWTEST_F_L0(JSNApiSplTest, Local_operator02)
7296 {
7297     LocalScope scope(vm_);
7298     CalculateForTime();
7299     uint32_t inputUnit32 = 32; // 32 = random number
7300     int num = 13;              // 13 = random number
7301     int length = 3;            // 3 = ArrayBufer length
7302     uint64_t maxUint64 = std::numeric_limits<uint64_t>::max();
7303     std::string testUtf8 = "Hello world";
7304     Local<IntegerRef> intValue = IntegerRef::New(vm_, num);
7305     Local<NumberRef> resUnit32 = NumberRef::New(vm_, inputUnit32);
7306     Local<BigIntRef> maxBigintUint64 = BigIntRef::New(vm_, maxUint64);
7307     Local<StringRef> stringUtf8 = StringRef::NewFromUtf8(vm_, testUtf8.c_str());
7308     Local<ArrayRef> arrayObject = ArrayRef::New(vm_, length);
7309     gettimeofday(&g_beginTime, nullptr);
7310     for (int i = 0; i < NUM_COUNT; i++) {
7311         intValue->IsNull();
7312     }
7313     gettimeofday(&g_endTime, nullptr);
7314     TEST_TIME(Local::Operator2::IntegerRef);
7315     gettimeofday(&g_beginTime, nullptr);
7316     for (int i = 0; i < NUM_COUNT; i++) {
7317         resUnit32->IsNull();
7318     }
7319     gettimeofday(&g_endTime, nullptr);
7320     TEST_TIME(Local::Operator2::NumberRef);
7321     gettimeofday(&g_beginTime, nullptr);
7322     for (int i = 0; i < NUM_COUNT; i++) {
7323         maxBigintUint64->IsNull();
7324     }
7325     gettimeofday(&g_endTime, nullptr);
7326     TEST_TIME(Local::Operator2::BigIntRef);
7327     gettimeofday(&g_beginTime, nullptr);
7328     for (int i = 0; i < NUM_COUNT; i++) {
7329         stringUtf8->IsNull();
7330     }
7331     gettimeofday(&g_endTime, nullptr);
7332     TEST_TIME(Local::Operator2::StringRef);
7333     gettimeofday(&g_beginTime, nullptr);
7334     for (int i = 0; i < NUM_COUNT; i++) {
7335         arrayObject->IsNull();
7336     }
7337     gettimeofday(&g_endTime, nullptr);
7338     TEST_TIME(Local::Operator2::ArrayRef);
7339 }
7340 
HWTEST_F_L0(JSNApiSplTest,Local_IsEmpty)7341 HWTEST_F_L0(JSNApiSplTest, Local_IsEmpty)
7342 {
7343     LocalScope scope(vm_);
7344     CalculateForTime();
7345     uint32_t inputUnit32 = 32; // 32 = random number
7346     int num = 13;              // 13 = random number
7347     uint64_t maxUint64 = std::numeric_limits<uint64_t>::max();
7348     std::string testUtf8 = "Hello world";
7349     Local<IntegerRef> intValue = IntegerRef::New(vm_, num);
7350     Local<NumberRef> resUnit32 = NumberRef::New(vm_, inputUnit32);
7351     Local<BigIntRef> maxBigintUint64 = BigIntRef::New(vm_, maxUint64);
7352     Local<StringRef> stringUtf8 = StringRef::NewFromUtf8(vm_, testUtf8.c_str());
7353     Local<JSValueRef> JSvalue;
7354     gettimeofday(&g_beginTime, nullptr);
7355     for (int i = 0; i < NUM_COUNT; i++) {
7356         intValue.IsEmpty();
7357     }
7358     gettimeofday(&g_endTime, nullptr);
7359     TEST_TIME(Local::IsEmpty::IntegerRef);
7360     gettimeofday(&g_beginTime, nullptr);
7361     for (int i = 0; i < NUM_COUNT; i++) {
7362         resUnit32.IsEmpty();
7363     }
7364     gettimeofday(&g_endTime, nullptr);
7365     TEST_TIME(Local::IsEmpty::NumberRef);
7366     gettimeofday(&g_beginTime, nullptr);
7367     for (int i = 0; i < NUM_COUNT; i++) {
7368         maxBigintUint64.IsEmpty();
7369     }
7370     gettimeofday(&g_endTime, nullptr);
7371     TEST_TIME(Local::IsEmpty::BigIntRef);
7372     gettimeofday(&g_beginTime, nullptr);
7373     for (int i = 0; i < NUM_COUNT; i++) {
7374         stringUtf8.IsEmpty();
7375     }
7376     gettimeofday(&g_endTime, nullptr);
7377     TEST_TIME(Local::IsEmpty::StringRef);
7378     gettimeofday(&g_beginTime, nullptr);
7379     for (int i = 0; i < NUM_COUNT; i++) {
7380         JSvalue.IsEmpty();
7381     }
7382     gettimeofday(&g_endTime, nullptr);
7383     TEST_TIME(Local::IsEmpty);
7384 }
7385 
HWTEST_F_L0(JSNApiSplTest,Local_IsNull)7386 HWTEST_F_L0(JSNApiSplTest, Local_IsNull)
7387 {
7388     LocalScope scope(vm_);
7389     CalculateForTime();
7390     int num = 13; // 13 = random number
7391     Local<IntegerRef> intValue = IntegerRef::New(vm_, num);
7392     Local<JSValueRef> JSvalue;
7393     gettimeofday(&g_beginTime, nullptr);
7394     for (int i = 0; i < NUM_COUNT; i++) {
7395         intValue.IsNull();
7396     }
7397     gettimeofday(&g_endTime, nullptr);
7398     TEST_TIME(Local::IsNull::IntegerRef);
7399     gettimeofday(&g_beginTime, nullptr);
7400     for (int i = 0; i < NUM_COUNT; i++) {
7401         JSvalue.IsNull();
7402     }
7403     gettimeofday(&g_endTime, nullptr);
7404     TEST_TIME(Local::IsNull);
7405 }
7406 
HWTEST_F_L0(JSNApiSplTest,CopyableGlobal_ToLocal)7407 HWTEST_F_L0(JSNApiSplTest, CopyableGlobal_ToLocal)
7408 {
7409     LocalScope scope(vm_);
7410     CalculateForTime();
7411     int num = 13; // 13 = random number
7412     Local<IntegerRef> intValue = IntegerRef::New(vm_, num);
7413     CopyableGlobal<IntegerRef> copyGlobal(vm_, intValue);
7414     gettimeofday(&g_beginTime, nullptr);
7415     for (int i = 0; i < NUM_COUNT; i++) {
7416         copyGlobal.ToLocal();
7417     }
7418     gettimeofday(&g_endTime, nullptr);
7419     TEST_TIME(CopyableGlobal::ToLocal);
7420 }
7421 
HWTEST_F_L0(JSNApiSplTest,CopyableGlobal_Empty)7422 HWTEST_F_L0(JSNApiSplTest, CopyableGlobal_Empty)
7423 {
7424     LocalScope scope(vm_);
7425     CalculateForTime();
7426     int num = 13; // 13 = random number
7427     Local<IntegerRef> intValue = IntegerRef::New(vm_, num);
7428     CopyableGlobal<IntegerRef> copyGlobal(vm_, intValue);
7429     EXPECT_FALSE(copyGlobal.IsEmpty());
7430     gettimeofday(&g_beginTime, nullptr);
7431     for (int i = 0; i < NUM_COUNT; i++) {
7432         copyGlobal.Empty();
7433     }
7434     gettimeofday(&g_endTime, nullptr);
7435     TEST_TIME(CopyableGlobal::Empty);
7436     EXPECT_TRUE(copyGlobal.IsEmpty());
7437 }
7438 
HWTEST_F_L0(JSNApiSplTest,CopyableGlobal_operator)7439 HWTEST_F_L0(JSNApiSplTest, CopyableGlobal_operator)
7440 {
7441     LocalScope scope(vm_);
7442     CalculateForTime();
7443     int num = 13; // 13 = random number
7444     Local<IntegerRef> intValue = IntegerRef::New(vm_, num);
7445     CopyableGlobal<IntegerRef> copyGlobal(vm_, intValue);
7446     gettimeofday(&g_beginTime, nullptr);
7447     for (int i = 0; i < NUM_COUNT; i++) {
7448         (*copyGlobal)->IsInt();
7449     }
7450     gettimeofday(&g_endTime, nullptr);
7451     TEST_TIME(CopyableGlobal::Operator);
7452     EXPECT_TRUE((*copyGlobal)->IsInt());
7453     gettimeofday(&g_beginTime, nullptr);
7454     for (int i = 0; i < NUM_COUNT; i++) {
7455         copyGlobal->IsInt();
7456     }
7457     gettimeofday(&g_endTime, nullptr);
7458     TEST_TIME(CopyableGlobal::Operator2);
7459     EXPECT_TRUE(copyGlobal->IsInt());
7460 }
7461 
HWTEST_F_L0(JSNApiSplTest,CopyableGlobal_IsEmpty)7462 HWTEST_F_L0(JSNApiSplTest, CopyableGlobal_IsEmpty)
7463 {
7464     LocalScope scope(vm_);
7465     CalculateForTime();
7466     std::string testUtf8 = "Hello world";
7467     int num = 13; // 13 = random number
7468     Local<IntegerRef> intValue = IntegerRef::New(vm_, num);
7469     Local<StringRef> stringUtf8 = StringRef::NewFromUtf8(vm_, testUtf8.c_str());
7470     CopyableGlobal<StringRef> copyGlbString(vm_, stringUtf8);
7471     CopyableGlobal<IntegerRef> copyGlobal(vm_, intValue);
7472     gettimeofday(&g_beginTime, nullptr);
7473     for (int i = 0; i < NUM_COUNT; i++) {
7474         copyGlbString.IsEmpty();
7475     }
7476     gettimeofday(&g_endTime, nullptr);
7477     TEST_TIME(CopyableGlobal::IsEmpty::StringRef::first);
7478     gettimeofday(&g_beginTime, nullptr);
7479     for (int i = 0; i < NUM_COUNT; i++) {
7480         copyGlobal.IsEmpty();
7481     }
7482     gettimeofday(&g_endTime, nullptr);
7483     TEST_TIME(CopyableGlobal::IsEmpty::IntegerRef);
7484     copyGlbString.Empty();
7485     gettimeofday(&g_beginTime, nullptr);
7486     for (int i = 0; i < NUM_COUNT; i++) {
7487         copyGlbString.IsEmpty();
7488     }
7489     gettimeofday(&g_endTime, nullptr);
7490     TEST_TIME(CopyableGlobal::IsEmpty::StringRef::Second);
7491 }
7492 
HWTEST_F_L0(JSNApiSplTest,CopyableGlobal_SetWeak_IsWeak_ClearWeak)7493 HWTEST_F_L0(JSNApiSplTest, CopyableGlobal_SetWeak_IsWeak_ClearWeak)
7494 {
7495     LocalScope scope(vm_);
7496     CalculateForTime();
7497     std::string testUtf8 = "Hello world";
7498     Local<StringRef> stringUtf8 = StringRef::NewFromUtf8(vm_, testUtf8.c_str());
7499     CopyableGlobal<JSValueRef> copyGlobalback(vm_, stringUtf8);
7500     gettimeofday(&g_beginTime, nullptr);
7501     for (int i = 0; i < NUM_COUNT; i++) {
7502         copyGlobalback.IsWeak();
7503     }
7504     gettimeofday(&g_endTime, nullptr);
7505     TEST_TIME(CopyableGlobal::IsWeak::First);
7506     gettimeofday(&g_beginTime, nullptr);
7507     for (int i = 0; i < NUM_COUNT; i++) {
7508         copyGlobalback.SetWeak();
7509     }
7510     gettimeofday(&g_endTime, nullptr);
7511     TEST_TIME(CopyableGlobal::SetWeak);
7512     gettimeofday(&g_beginTime, nullptr);
7513     for (int i = 0; i < NUM_COUNT; i++) {
7514         copyGlobalback.IsWeak();
7515     }
7516     gettimeofday(&g_endTime, nullptr);
7517     TEST_TIME(CopyableGlobal::IsWeak::Second);
7518     gettimeofday(&g_beginTime, nullptr);
7519     for (int i = 0; i < NUM_COUNT; i++) {
7520         copyGlobalback.ClearWeak();
7521     }
7522     gettimeofday(&g_endTime, nullptr);
7523     TEST_TIME(CopyableGlobal::ClearWeak);
7524     gettimeofday(&g_beginTime, nullptr);
7525     for (int i = 0; i < NUM_COUNT; i++) {
7526         copyGlobalback.IsWeak();
7527     }
7528     gettimeofday(&g_endTime, nullptr);
7529     TEST_TIME(CopyableGlobal::IsWeak::three);
7530 }
7531 
HWTEST_F_L0(JSNApiSplTest,CopyableGlobal_SetWeakCallback)7532 HWTEST_F_L0(JSNApiSplTest, CopyableGlobal_SetWeakCallback)
7533 {
7534     LocalScope scope(vm_);
7535     CalculateForTime();
7536     uint32_t inputUnit32 = 32; // 32 = random number
7537     uint64_t maxUint64 = std::numeric_limits<uint64_t>::max();
7538     double doubleSize = 1.1; // 1.1 = random number
7539     long longSize = 123456;  // 123456 = random number
7540     std::string testUtf8 = "Hello world";
7541     Local<StringRef> stringUtf8 = StringRef::NewFromUtf8(vm_, testUtf8.c_str());
7542     CopyableGlobal<JSValueRef> copyGlobalStr(vm_, stringUtf8);
7543     gettimeofday(&g_beginTime, nullptr);
7544     for (int i = 0; i < NUM_COUNT; i++) {
7545         copyGlobalStr.SetWeakCallback(&inputUnit32, FreeGlobalCallBack<uint32_t>,
7546                 NativeFinalizeCallback<uint32_t>);
7547     }
7548     gettimeofday(&g_endTime, nullptr);
7549     TEST_TIME(CopyableGlobal::SetWeakCallback::Uint32);
7550     gettimeofday(&g_beginTime, nullptr);
7551     for (int i = 0; i < NUM_COUNT; i++) {
7552         copyGlobalStr.SetWeakCallback(&maxUint64, FreeGlobalCallBack<uint64_t>,
7553                 NativeFinalizeCallback<uint64_t>);
7554     }
7555     gettimeofday(&g_endTime, nullptr);
7556     TEST_TIME(CopyableGlobal::SetWeakCallback::Uint64);
7557     gettimeofday(&g_beginTime, nullptr);
7558     for (int i = 0; i < NUM_COUNT; i++) {
7559         copyGlobalStr.SetWeakCallback(&doubleSize, FreeGlobalCallBack<double>,
7560                 NativeFinalizeCallback<double>);
7561     }
7562     gettimeofday(&g_endTime, nullptr);
7563     TEST_TIME(CopyableGlobal::SetWeakCallback::Double);
7564     gettimeofday(&g_beginTime, nullptr);
7565     for (int i = 0; i < NUM_COUNT; i++) {
7566         copyGlobalStr.SetWeakCallback(&longSize, FreeGlobalCallBack<long>,
7567                 NativeFinalizeCallback<long>);
7568     }
7569     gettimeofday(&g_endTime, nullptr);
7570     TEST_TIME(CopyableGlobal::SetWeakCallback::Long);
7571     gettimeofday(&g_beginTime, nullptr);
7572     for (int i = 0; i < NUM_COUNT; i++) {
7573         copyGlobalStr.SetWeakCallback(&testUtf8, FreeGlobalCallBack<std::string>,
7574                 NativeFinalizeCallback<std::string>);
7575     }
7576     gettimeofday(&g_endTime, nullptr);
7577     TEST_TIME(CopyableGlobal::SetWeakCallback::String);
7578 }
7579 
HWTEST_F_L0(JSNApiSplTest,BigIntRef_New)7580 HWTEST_F_L0(JSNApiSplTest, BigIntRef_New)
7581 {
7582     LocalScope scope(vm_);
7583     CalculateForTime();
7584     uint64_t maxUint64 = std::numeric_limits<uint64_t>::max();
7585     uint64_t minUint64 = std::numeric_limits<uint64_t>::min();
7586     int64_t maxInt64 = std::numeric_limits<int64_t>::max();
7587     int64_t minInt64 = std::numeric_limits<int64_t>::min();
7588     gettimeofday(&g_beginTime, nullptr);
7589     for (int i = 0; i < NUM_COUNT; i++) {
7590         BigIntRef::New(vm_, maxUint64);
7591     }
7592     gettimeofday(&g_endTime, nullptr);
7593     TEST_TIME(BigIntRef::New::Uint64::Max);
7594     gettimeofday(&g_beginTime, nullptr);
7595     for (int i = 0; i < NUM_COUNT; i++) {
7596         BigIntRef::New(vm_, minUint64);
7597     }
7598     gettimeofday(&g_endTime, nullptr);
7599     TEST_TIME(BigIntRef::New::Uint64::Min);
7600     gettimeofday(&g_beginTime, nullptr);
7601     for (int i = 0; i < NUM_COUNT; i++) {
7602         BigIntRef::New(vm_, maxInt64);
7603     }
7604     gettimeofday(&g_endTime, nullptr);
7605     TEST_TIME(BigIntRef::New::Int64::Max);
7606     gettimeofday(&g_beginTime, nullptr);
7607     for (int i = 0; i < NUM_COUNT; i++) {
7608         BigIntRef::New(vm_, minInt64);
7609     }
7610     gettimeofday(&g_endTime, nullptr);
7611     TEST_TIME(BigIntRef::New::Int64::Min);
7612 }
7613 
HWTEST_F_L0(JSNApiSplTest,BigIntRef_CreateBigWords)7614 HWTEST_F_L0(JSNApiSplTest, BigIntRef_CreateBigWords)
7615 {
7616     LocalScope scope(vm_);
7617     CalculateForTime();
7618     bool sign = false;
7619     uint32_t size = 3; // 3 = random number
7620     const uint64_t words[3] = {
7621         std::numeric_limits<uint64_t>::min() - 1,
7622         std::numeric_limits<uint64_t>::min(),
7623         std::numeric_limits<uint64_t>::max(),
7624     };
7625     gettimeofday(&g_beginTime, nullptr);
7626     for (int i = 0; i < NUM_COUNT; i++) {
7627         BigIntRef::CreateBigWords(vm_, sign, size, words);
7628     }
7629     gettimeofday(&g_endTime, nullptr);
7630     TEST_TIME(BigIntRef::CreateBigWords);
7631 }
7632 
HWTEST_F_L0(JSNApiSplTest,BigIntRef_GetWordsArraySize)7633 HWTEST_F_L0(JSNApiSplTest, BigIntRef_GetWordsArraySize)
7634 {
7635     LocalScope scope(vm_);
7636     CalculateForTime();
7637     bool sign = false;
7638     uint32_t size = 3; // 3 = random number
7639     const uint64_t words[3] = {
7640         std::numeric_limits<uint64_t>::min() - 1,
7641         std::numeric_limits<uint64_t>::min(),
7642         std::numeric_limits<uint64_t>::max(),
7643     };
7644     Local<JSValueRef> bigWords = BigIntRef::CreateBigWords(vm_, sign, size, words);
7645     Local<BigIntRef> bigWordsRef(bigWords);
7646     gettimeofday(&g_beginTime, nullptr);
7647     for (int i = 0; i < NUM_COUNT; i++) {
7648         bigWordsRef->GetWordsArraySize(vm_);
7649     }
7650     gettimeofday(&g_endTime, nullptr);
7651     TEST_TIME(BigIntRef::GetWordsArraySize);
7652 }
7653 
HWTEST_F_L0(JSNApiSplTest,BigIntRef_GetWordsArray)7654 HWTEST_F_L0(JSNApiSplTest, BigIntRef_GetWordsArray)
7655 {
7656     LocalScope scope(vm_);
7657     CalculateForTime();
7658     bool sign = false;
7659     uint32_t size = 3; // 3 = random number
7660     const uint64_t words[3] = {
7661         std::numeric_limits<uint64_t>::min() - 1,
7662         std::numeric_limits<uint64_t>::min(),
7663         std::numeric_limits<uint64_t>::max(),
7664     };
7665     Local<JSValueRef> bigWords = BigIntRef::CreateBigWords(vm_, sign, size, words);
7666     Local<BigIntRef> bigWordsRef(bigWords);
7667     bool resultSignBit = true;
7668     uint64_t *resultWords = new uint64_t[3]();
7669     gettimeofday(&g_beginTime, nullptr);
7670     for (int i = 0; i < NUM_COUNT; i++) {
7671         bigWordsRef->GetWordsArray(vm_, &resultSignBit, size, resultWords);
7672     }
7673     gettimeofday(&g_endTime, nullptr);
7674     TEST_TIME(BigIntRef::GetWordsArray::Uint64);
7675 }
7676 
HWTEST_F_L0(JSNApiSplTest,BigIntRef_BigIntToInt64)7677 HWTEST_F_L0(JSNApiSplTest, BigIntRef_BigIntToInt64)
7678 {
7679     LocalScope scope(vm_);
7680     CalculateForTime();
7681     uint64_t maxUint64 = std::numeric_limits<uint64_t>::max();
7682     Local<BigIntRef> maxBigintUint64 = BigIntRef::New(vm_, maxUint64);
7683     int64_t toNum;
7684     bool lossless = true;
7685     gettimeofday(&g_beginTime, nullptr);
7686     for (int i = 0; i < NUM_COUNT; i++) {
7687         maxBigintUint64->BigIntToInt64(vm_, &toNum, &lossless);
7688     }
7689     gettimeofday(&g_endTime, nullptr);
7690     TEST_TIME(BigIntRef::BigIntToInt64);
7691 }
7692 
HWTEST_F_L0(JSNApiSplTest,BigIntRef_BigIntToUint64)7693 HWTEST_F_L0(JSNApiSplTest, BigIntRef_BigIntToUint64)
7694 {
7695     LocalScope scope(vm_);
7696     CalculateForTime();
7697     uint64_t maxUint64 = std::numeric_limits<uint64_t>::max();
7698     Local<BigIntRef> maxBigintUint64 = BigIntRef::New(vm_, maxUint64);
7699     uint64_t toNum;
7700     bool lossless = true;
7701     gettimeofday(&g_beginTime, nullptr);
7702     for (int i = 0; i < NUM_COUNT; i++) {
7703         maxBigintUint64->BigIntToUint64(vm_, &toNum, &lossless);
7704     }
7705     gettimeofday(&g_endTime, nullptr);
7706     TEST_TIME(BigIntRef::BigIntToUint64);
7707 }
7708 
HWTEST_F_L0(JSNApiSplTest,SymbolRef_New)7709 HWTEST_F_L0(JSNApiSplTest, SymbolRef_New)
7710 {
7711     LocalScope scope(vm_);
7712     CalculateForTime();
7713     std::string testUtf8 = "Hello world";
7714     Local<StringRef> description = StringRef::NewFromUtf8(vm_, testUtf8.c_str());
7715     gettimeofday(&g_beginTime, nullptr);
7716     for (int i = 0; i < NUM_COUNT; i++) {
7717         SymbolRef::New(vm_, description);
7718     }
7719     gettimeofday(&g_endTime, nullptr);
7720     TEST_TIME(SymbolRef::New::StringRef);
7721 }
7722 
HWTEST_F_L0(JSNApiSplTest,SymbolRef_GetDescription)7723 HWTEST_F_L0(JSNApiSplTest, SymbolRef_GetDescription)
7724 {
7725     LocalScope scope(vm_);
7726     CalculateForTime();
7727     std::string testUtf8 = "Hello world";
7728     Local<StringRef> description = StringRef::NewFromUtf8(vm_, testUtf8.c_str());
7729     Local<SymbolRef> symbol = SymbolRef::New(vm_, description);
7730     gettimeofday(&g_beginTime, nullptr);
7731     for (int i = 0; i < NUM_COUNT; i++) {
7732         symbol->GetDescription(vm_);
7733     }
7734     gettimeofday(&g_endTime, nullptr);
7735     TEST_TIME(SymbolRef::GetDescription);
7736 }
7737 
HWTEST_F_L0(JSNApiSplTest,NativePointerRef_New)7738 HWTEST_F_L0(JSNApiSplTest, NativePointerRef_New)
7739 {
7740     LocalScope scope(vm_);
7741     CalculateForTime();
7742     void *vps = static_cast<void *>(new std::string("test"));
7743     void *vpd = new double(123.456);
7744     void *vpc = new char('a');
7745     void *vpl = new long(123456);
7746     void *vpi = new int(123);
7747     gettimeofday(&g_beginTime, nullptr);
7748     for (int i = 0; i < NUM_COUNT; i++) {
7749         NativePointerRef::New(vm_, vps);
7750     }
7751     gettimeofday(&g_endTime, nullptr);
7752     TEST_TIME(NativePointerRef::New::String);
7753     gettimeofday(&g_beginTime, nullptr);
7754     for (int i = 0; i < NUM_COUNT; i++) {
7755         NativePointerRef::New(vm_, vpd);
7756     }
7757     gettimeofday(&g_endTime, nullptr);
7758     TEST_TIME(NativePointerRef::New::Double);
7759     gettimeofday(&g_beginTime, nullptr);
7760     for (int i = 0; i < NUM_COUNT; i++) {
7761         NativePointerRef::New(vm_, vpc);
7762     }
7763     gettimeofday(&g_endTime, nullptr);
7764     TEST_TIME(NativePointerRef::New::Char);
7765     gettimeofday(&g_beginTime, nullptr);
7766     for (int i = 0; i < NUM_COUNT; i++) {
7767         NativePointerRef::New(vm_, vpl);
7768     }
7769     gettimeofday(&g_endTime, nullptr);
7770     TEST_TIME(NativePointerRef::New::Long);
7771     gettimeofday(&g_beginTime, nullptr);
7772     for (int i = 0; i < NUM_COUNT; i++) {
7773         NativePointerRef::New(vm_, vpi);
7774     }
7775     gettimeofday(&g_endTime, nullptr);
7776     TEST_TIME(NativePointerRef::New::Int);
7777 }
7778 
HWTEST_F_L0(JSNApiSplTest,NativePointerRef_New_Fun)7779 HWTEST_F_L0(JSNApiSplTest, NativePointerRef_New_Fun)
7780 {
7781     LocalScope scope(vm_);
7782     CalculateForTime();
7783     NativePointerCallback callBack = nullptr;
7784     void *vps = static_cast<void *>(new std::string("test"));
7785     void *vps1 = static_cast<void *>(new std::string("test"));
7786     void *vpd = new double(123.456);
7787     void *vpd1 = new double(123.456);
7788     void *vpc = new char('a');
7789     void *vpc1 = new char('e');
7790     void *vpl = new long(123456);
7791     void *vpl1 = new long(123456);
7792     void *vpi = new int(123);
7793     void *vpi1 = new int(123);
7794     gettimeofday(&g_beginTime, nullptr);
7795     for (int i = 0; i < NUM_COUNT; i++) {
7796         NativePointerRef::New(vm_, vps, callBack, vps1, 0);
7797     }
7798     gettimeofday(&g_endTime, nullptr);
7799     TEST_TIME(NativePointerRef::New::Fun::String);
7800     gettimeofday(&g_beginTime, nullptr);
7801     for (int i = 0; i < NUM_COUNT; i++) {
7802         NativePointerRef::New(vm_, vpd, callBack, vpd1, 0);
7803     }
7804     gettimeofday(&g_endTime, nullptr);
7805     TEST_TIME(NativePointerRef::New::Fun::Double);
7806     gettimeofday(&g_beginTime, nullptr);
7807     for (int i = 0; i < NUM_COUNT; i++) {
7808         NativePointerRef::New(vm_, vpc, callBack, vpc1, 0);
7809     }
7810     gettimeofday(&g_endTime, nullptr);
7811     TEST_TIME(NativePointerRef::New::Fun::Char);
7812     gettimeofday(&g_beginTime, nullptr);
7813     for (int i = 0; i < NUM_COUNT; i++) {
7814         NativePointerRef::New(vm_, vpl, callBack, vpl1, 0);
7815     }
7816     gettimeofday(&g_endTime, nullptr);
7817     TEST_TIME(NativePointerRef::New::Fun::Long);
7818     gettimeofday(&g_beginTime, nullptr);
7819     for (int i = 0; i < NUM_COUNT; i++) {
7820         NativePointerRef::New(vm_, vpi, callBack, vpi1, 0);
7821     }
7822     gettimeofday(&g_endTime, nullptr);
7823     TEST_TIME(NativePointerRef::New::Fun::Int);
7824 }
7825 
HWTEST_F_L0(JSNApiSplTest,NativePointerRef_Value)7826 HWTEST_F_L0(JSNApiSplTest, NativePointerRef_Value)
7827 {
7828     LocalScope scope(vm_);
7829     CalculateForTime();
7830     void *vps = static_cast<void *>(new std::string("test"));
7831     void *vps1 = static_cast<void *>(new std::string("test"));
7832     void *vpd = new double(123.456);
7833     void *vpd1 = new double(123.456);
7834     void *vpc = new char('a');
7835     void *vpc1 = new char('c');
7836     void *vpl = new long(123456);
7837     void *vpl1 = new long(123456);
7838     void *vpi = new int(123);
7839     void *vpi1 = new int(123);
7840     Local<NativePointerRef> res_vps = NativePointerRef::New(vm_, vps, NativeAreaAllocator::FreeBufferFunc, vps1, 0);
7841     Local<NativePointerRef> res_vpd = NativePointerRef::New(vm_, vpd, NativeAreaAllocator::FreeBufferFunc, vpd1, 0);
7842     Local<NativePointerRef> res_vpc = NativePointerRef::New(vm_, vpc, NativeAreaAllocator::FreeBufferFunc, vpc1, 0);
7843     Local<NativePointerRef> res_vpl = NativePointerRef::New(vm_, vpl, NativeAreaAllocator::FreeBufferFunc, vpl1, 0);
7844     Local<NativePointerRef> res_vpi = NativePointerRef::New(vm_, vpi, NativeAreaAllocator::FreeBufferFunc, vpi1, 0);
7845     gettimeofday(&g_beginTime, nullptr);
7846     for (int i = 0; i < NUM_COUNT; i++) {
7847         res_vps->Value();
7848     }
7849     gettimeofday(&g_endTime, nullptr);
7850     TEST_TIME(NativePointerRef::Value::String);
7851     gettimeofday(&g_beginTime, nullptr);
7852     for (int i = 0; i < NUM_COUNT; i++) {
7853         res_vpd->Value();
7854     }
7855     gettimeofday(&g_endTime, nullptr);
7856     TEST_TIME(NativePointerRef::Value::Double);
7857     gettimeofday(&g_beginTime, nullptr);
7858     for (int i = 0; i < NUM_COUNT; i++) {
7859         res_vpc->Value();
7860     }
7861     gettimeofday(&g_endTime, nullptr);
7862     TEST_TIME(NativePointerRef::Value::Char);
7863     gettimeofday(&g_beginTime, nullptr);
7864     for (int i = 0; i < NUM_COUNT; i++) {
7865         res_vpl->Value();
7866     }
7867     gettimeofday(&g_endTime, nullptr);
7868     TEST_TIME(NativePointerRef::Value::Long);
7869     gettimeofday(&g_beginTime, nullptr);
7870     for (int i = 0; i < NUM_COUNT; i++) {
7871         res_vpi->Value();
7872     }
7873     gettimeofday(&g_endTime, nullptr);
7874     TEST_TIME(NativePointerRef::Value::Int);
7875 }
7876 
HWTEST_F_L0(JSNApiSplTest,FunctionRef_New)7877 HWTEST_F_L0(JSNApiSplTest, FunctionRef_New)
7878 {
7879     LocalScope scope(vm_);
7880     CalculateForTime();
7881     gettimeofday(&g_beginTime, nullptr);
7882     for (int i = 0; i < NUM_COUNT; i++) {
7883         FunctionRef::New(vm_, FunCallback);
7884     }
7885     gettimeofday(&g_endTime, nullptr);
7886     TEST_TIME(FunctionRef::New);
7887 }
7888 
HWTEST_F_L0(JSNApiSplTest,FunctionRef_NewClassFunction)7889 HWTEST_F_L0(JSNApiSplTest, FunctionRef_NewClassFunction)
7890 {
7891     LocalScope scope(vm_);
7892     CalculateForTime();
7893     gettimeofday(&g_beginTime, nullptr);
7894     for (int i = 0; i < NUM_COUNT; i++) {
7895         FunctionRef::NewClassFunction(vm_, FunCallback, nullptr, nullptr);
7896     }
7897     gettimeofday(&g_endTime, nullptr);
7898     TEST_TIME(FunctionRef::NewClassFunction);
7899 }
7900 
HWTEST_F_L0(JSNApiSplTest,FunctionRef_Call)7901 HWTEST_F_L0(JSNApiSplTest, FunctionRef_Call)
7902 {
7903     LocalScope scope(vm_);
7904     CalculateForTime();
7905     uint32_t inputUnit32 = 32; // 32 = random number
7906     uint64_t maxUint64 = std::numeric_limits<uint64_t>::max();
7907     Local<IntegerRef> intValue = IntegerRef::New(vm_, 0);
7908     Local<JSValueRef> targetBool = BooleanRef::New(vm_, false);
7909     Local<NumberRef> resUnit32 = NumberRef::New(vm_, inputUnit32);
7910     Local<BigIntRef> maxBigintUint64 = BigIntRef::New(vm_, maxUint64);
7911     std::vector<Local<JSValueRef>> argumentsInt;
7912     std::vector<Local<JSValueRef>> argumentsBool;
7913     std::vector<Local<JSValueRef>> argumentsNum;
7914     std::vector<Local<JSValueRef>> argumentsBig;
7915     argumentsInt.emplace_back(intValue);
7916     argumentsBool.emplace_back(targetBool);
7917     argumentsNum.emplace_back(resUnit32);
7918     argumentsBig.emplace_back(maxBigintUint64);
7919     Local<FunctionRef> callback = FunctionRef::New(vm_, FunCallback);
7920     gettimeofday(&g_beginTime, nullptr);
7921     for (int i = 0; i < NUM_COUNT; i++) {
7922         callback->Call(vm_, JSValueRef::Undefined(vm_), argumentsInt.data(), argumentsInt.size());
7923     }
7924     gettimeofday(&g_endTime, nullptr);
7925     TEST_TIME(FunctionRef::Call::IntegerRef);
7926     gettimeofday(&g_beginTime, nullptr);
7927     for (int i = 0; i < NUM_COUNT; i++) {
7928         callback->Call(vm_, JSValueRef::Undefined(vm_), argumentsBool.data(), argumentsBool.size());
7929     }
7930     gettimeofday(&g_endTime, nullptr);
7931     TEST_TIME(FunctionRef::Call::BooleanRef);
7932     gettimeofday(&g_beginTime, nullptr);
7933     for (int i = 0; i < NUM_COUNT; i++) {
7934         callback->Call(vm_, JSValueRef::Undefined(vm_), argumentsNum.data(), argumentsNum.size());
7935     }
7936     gettimeofday(&g_endTime, nullptr);
7937     TEST_TIME(FunctionRef::Call::NumberRef);
7938     gettimeofday(&g_beginTime, nullptr);
7939     for (int i = 0; i < NUM_COUNT; i++) {
7940         callback->Call(vm_, JSValueRef::Undefined(vm_), argumentsBig.data(), argumentsBig.size());
7941     }
7942     gettimeofday(&g_endTime, nullptr);
7943     TEST_TIME(FunctionRef::Call::BigIntRef);
7944 }
7945 
HWTEST_F_L0(JSNApiSplTest,FunctionRef_Call2)7946 HWTEST_F_L0(JSNApiSplTest, FunctionRef_Call2)
7947 {
7948     LocalScope scope(vm_);
7949     CalculateForTime();
7950     std::string testUtf8 = "Hello world";
7951     Local<StringRef> stringUtf8 = StringRef::NewFromUtf8(vm_, testUtf8.c_str());
7952     std::vector<Local<JSValueRef>> argumentsStr;
7953     argumentsStr.emplace_back(stringUtf8);
7954     Local<FunctionRef> callback = FunctionRef::New(vm_, FunCallback);
7955     gettimeofday(&g_beginTime, nullptr);
7956     for (int i = 0; i < NUM_COUNT; i++) {
7957         callback->Call(vm_, JSValueRef::Undefined(vm_), argumentsStr.data(), argumentsStr.size());
7958     }
7959     gettimeofday(&g_endTime, nullptr);
7960     TEST_TIME(FunctionRef::Call::StringRef);
7961 }
7962 
HWTEST_F_L0(JSNApiSplTest,FunctionRef_Constructor)7963 HWTEST_F_L0(JSNApiSplTest, FunctionRef_Constructor)
7964 {
7965     LocalScope scope(vm_);
7966     CalculateForTime();
7967     Local<FunctionRef> cls = FunctionRef::NewClassFunction(vm_, FunCallback, nullptr, nullptr);
7968     Local<JSValueRef> argv[1];          // 1 = Array Size
7969     int num = 13;                      // 13 = random number
7970     argv[0] = NumberRef::New(vm_, num); // 0 = The first element
7971     gettimeofday(&g_beginTime, nullptr);
7972     for (int i = 0; i < NUM_COUNT; i++) {
7973         cls->Constructor(vm_, argv, 1);
7974     }
7975     gettimeofday(&g_endTime, nullptr);
7976     TEST_TIME(FunctionRef::Constructor);
7977 }
7978 
HWTEST_F_L0(JSNApiSplTest,FunctionRef_GetFunctionPrototype)7979 HWTEST_F_L0(JSNApiSplTest, FunctionRef_GetFunctionPrototype)
7980 {
7981     LocalScope scope(vm_);
7982     CalculateForTime();
7983     JSHandle<GlobalEnv> env = vm_->GetGlobalEnv();
7984     JSHandle<JSTaggedValue> set = env->GetBuiltinsSetFunction();
7985     Local<FunctionRef> setLocal = JSNApiHelper::ToLocal<FunctionRef>(set);
7986     gettimeofday(&g_beginTime, nullptr);
7987     for (int i = 0; i < NUM_COUNT; i++) {
7988         [[maybe_unused]] Local<JSValueRef> funcPrototype = setLocal->GetFunctionPrototype(vm_);
7989     }
7990     gettimeofday(&g_endTime, nullptr);
7991     TEST_TIME(FunctionRef::GetFunctionPrototype);
7992 }
7993 
HWTEST_F_L0(JSNApiSplTest,FunctionRef_Inherit)7994 HWTEST_F_L0(JSNApiSplTest, FunctionRef_Inherit)
7995 {
7996     LocalScope scope(vm_);
7997     CalculateForTime();
7998     JSHandle<GlobalEnv> env = vm_->GetGlobalEnv();
7999     JSHandle<JSTaggedValue> set = env->GetBuiltinsSetFunction();
8000     Local<FunctionRef> setLocal = JSNApiHelper::ToLocal<FunctionRef>(set);
8001     JSHandle<JSTaggedValue> map = env->GetBuiltinsMapFunction();
8002     Local<FunctionRef> mapLocal = JSNApiHelper::ToLocal<FunctionRef>(map);
8003     gettimeofday(&g_beginTime, nullptr);
8004     for (int i = 0; i < NUM_COUNT; i++) {
8005         mapLocal->Inherit(vm_, setLocal);
8006     }
8007     gettimeofday(&g_endTime, nullptr);
8008     TEST_TIME(FunctionRef::Inherit);
8009 }
8010 
HWTEST_F_L0(JSNApiSplTest,FunctionRef_SetName)8011 HWTEST_F_L0(JSNApiSplTest, FunctionRef_SetName)
8012 {
8013     LocalScope scope(vm_);
8014     CalculateForTime();
8015     Local<FunctionRef> res = FunctionRef::NewClassFunction(vm_, FunCallback, nullptr, nullptr);
8016     Local<StringRef> origin = StringRef::NewFromUtf8(vm_, "origin test");
8017     gettimeofday(&g_beginTime, nullptr);
8018     for (int i = 0; i < NUM_COUNT; i++) {
8019         res->SetName(vm_, origin);
8020     }
8021     gettimeofday(&g_endTime, nullptr);
8022     TEST_TIME(FunctionRef::SetName);
8023 }
8024 
HWTEST_F_L0(JSNApiSplTest,FunctionRef_GetName)8025 HWTEST_F_L0(JSNApiSplTest, FunctionRef_GetName)
8026 {
8027     LocalScope scope(vm_);
8028     CalculateForTime();
8029     Local<FunctionRef> res = FunctionRef::NewClassFunction(vm_, FunCallback, nullptr, nullptr);
8030     Local<StringRef> origin = StringRef::NewFromUtf8(vm_, "origin test");
8031     res->SetName(vm_, origin);
8032     gettimeofday(&g_beginTime, nullptr);
8033     for (int i = 0; i < NUM_COUNT; i++) {
8034         res->GetName(vm_);
8035     }
8036     gettimeofday(&g_endTime, nullptr);
8037     TEST_TIME(FunctionRef::GetName);
8038 }
8039 
HWTEST_F_L0(JSNApiSplTest,FunctionRef_IsNative)8040 HWTEST_F_L0(JSNApiSplTest, FunctionRef_IsNative)
8041 {
8042     LocalScope scope(vm_);
8043     CalculateForTime();
8044     Local<FunctionRef> res = FunctionRef::NewClassFunction(vm_, FunCallback, nullptr, nullptr);
8045     gettimeofday(&g_beginTime, nullptr);
8046     for (int i = 0; i < NUM_COUNT; i++) {
8047         res->IsNative(vm_);
8048     }
8049     gettimeofday(&g_endTime, nullptr);
8050     TEST_TIME(FunctionRef::IsNative);
8051 }
8052 
HWTEST_F_L0(JSNApiSplTest,ArrayRef_New)8053 HWTEST_F_L0(JSNApiSplTest, ArrayRef_New)
8054 {
8055     LocalScope scope(vm_);
8056     CalculateForTime();
8057     gettimeofday(&g_beginTime, nullptr);
8058     for (int i = 0; i < NUM_COUNT; i++) {
8059         Local<ArrayRef> arrayObj = ArrayRef::New(vm_, 3);
8060         EXPECT_TRUE(arrayObj->IsArray(vm_));
8061     }
8062     gettimeofday(&g_endTime, nullptr);
8063     TEST_TIME(ArrayRef::New);
8064 }
8065 
HWTEST_F_L0(JSNApiSplTest,ArrayRef_Length)8066 HWTEST_F_L0(JSNApiSplTest, ArrayRef_Length)
8067 {
8068     LocalScope scope(vm_);
8069     CalculateForTime();
8070     Local<ArrayRef> arrayObj = ArrayRef::New(vm_, 3);
8071     gettimeofday(&g_beginTime, nullptr);
8072     for (int i = 0; i < NUM_COUNT; i++) {
8073         arrayObj->Length(vm_);
8074     }
8075     gettimeofday(&g_endTime, nullptr);
8076     TEST_TIME(ArrayRef::Length);
8077 }
8078 
HWTEST_F_L0(JSNApiSplTest,ArrayRef_SetValueAt)8079 HWTEST_F_L0(JSNApiSplTest, ArrayRef_SetValueAt)
8080 {
8081     LocalScope scope(vm_);
8082     CalculateForTime();
8083     Local<ArrayRef> arrayObj = ArrayRef::New(vm_, 1);
8084     uint32_t inputUnit32 = 32;
8085     uint64_t maxUint64 = std::numeric_limits<uint64_t>::max();
8086     std::string testUtf8 = "Hello world";
8087     Local<IntegerRef> intValue = IntegerRef::New(vm_, 0);
8088     Local<JSValueRef> targetBool = BooleanRef::New(vm_, false);
8089     Local<NumberRef> resUnit32 = NumberRef::New(vm_, inputUnit32);
8090     Local<BigIntRef> maxBigintUint64 = BigIntRef::New(vm_, maxUint64);
8091     Local<StringRef> stringUtf8 = StringRef::NewFromUtf8(vm_, testUtf8.c_str());
8092     gettimeofday(&g_beginTime, nullptr);
8093     for (int i = 0; i < NUM_COUNT; i++) {
8094         ArrayRef::SetValueAt(vm_, arrayObj, 0, intValue);
8095     }
8096     gettimeofday(&g_endTime, nullptr);
8097     TEST_TIME(ArrayRef::SetValueAt::IntegerRef);
8098     gettimeofday(&g_beginTime, nullptr);
8099     for (int i = 0; i < NUM_COUNT; i++) {
8100         ArrayRef::SetValueAt(vm_, arrayObj, 0, targetBool);
8101     }
8102     gettimeofday(&g_endTime, nullptr);
8103     TEST_TIME(ArrayRef::SetValueAt::BooleanRef);
8104     gettimeofday(&g_beginTime, nullptr);
8105     for (int i = 0; i < NUM_COUNT; i++) {
8106         ArrayRef::SetValueAt(vm_, arrayObj, 0, resUnit32);
8107     }
8108     gettimeofday(&g_endTime, nullptr);
8109     TEST_TIME(ArrayRef::SetValueAt::NumberRef);
8110     gettimeofday(&g_beginTime, nullptr);
8111     for (int i = 0; i < NUM_COUNT; i++) {
8112         ArrayRef::SetValueAt(vm_, arrayObj, 0, maxBigintUint64);
8113     }
8114     gettimeofday(&g_endTime, nullptr);
8115     TEST_TIME(ArrayRef::SetValueAt::BigIntRef);
8116     gettimeofday(&g_beginTime, nullptr);
8117     for (int i = 0; i < NUM_COUNT; i++) {
8118         ArrayRef::SetValueAt(vm_, arrayObj, 0, stringUtf8);
8119     }
8120     gettimeofday(&g_endTime, nullptr);
8121     TEST_TIME(ArrayRef::SetValueAt::StringRef);
8122 }
8123 
HWTEST_F_L0(JSNApiSplTest,ArrayRef_GetValueAt)8124 HWTEST_F_L0(JSNApiSplTest, ArrayRef_GetValueAt)
8125 {
8126     LocalScope scope(vm_);
8127     CalculateForTime();
8128     Local<ArrayRef> arrayObj = ArrayRef::New(vm_, 1);
8129     std::string testUtf8 = "Hello world";
8130     Local<StringRef> stringUtf8 = StringRef::NewFromUtf8(vm_, testUtf8.c_str());
8131     ArrayRef::SetValueAt(vm_, arrayObj, 0, stringUtf8);
8132     gettimeofday(&g_beginTime, nullptr);
8133     for (int i = 0; i < NUM_COUNT; i++) {
8134         ArrayRef::GetValueAt(vm_, arrayObj, 0);
8135     }
8136     gettimeofday(&g_endTime, nullptr);
8137     TEST_TIME(ArrayRef::GetValueAt::StringRef);
8138 }
8139 
HWTEST_F_L0(JSNApiSplTest,CopyableGlobal_GetEcmaVM)8140 HWTEST_F_L0(JSNApiSplTest, CopyableGlobal_GetEcmaVM)
8141 {
8142     LocalScope scope(vm_);
8143     CalculateForTime();
8144     Local<IntegerRef> intValue = IntegerRef::New(vm_, 13);
8145     CopyableGlobal<IntegerRef> copyGlobal(vm_, intValue);
8146     gettimeofday(&g_beginTime, nullptr);
8147     for (int i = 0; i < NUM_COUNT; i++) {
8148         copyGlobal.GetEcmaVM();
8149     }
8150     gettimeofday(&g_endTime, nullptr);
8151     TEST_TIME(CopyableGlobal::GetEcmaVM);
8152 }
8153 }
8154