• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1/*
2 * Copyright (c) 2025 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/*
17 * @tc.name:obj_dictionarymode
18 * @tc.desc:test dictionary elements
19 * @tc.type: FUNC
20 * @tc.require: issueICNDYR
21 */
22
23
24{
25    let obj = {};
26    for (let i = 0; i < 100; i++) {
27        obj[i] = 0;
28    }
29    assert_equal(ArkTools.hasFastProperties(obj), true);
30    delete obj[0];
31    assert_equal(ArkTools.hasFastProperties(obj), false);
32}
33
34{
35    let arr = [];
36    for (let i = 0; i < 100; i++) {
37        arr[i] = 0;
38    }
39    assert_equal(ArkTools.hasFastProperties(arr), true);
40    delete arr[0];
41    assert_equal(ArkTools.hasFastProperties(arr), false);
42}
43
44{
45    let arr = new Array(2048);
46    assert_equal(ArkTools.hasFastProperties(arr), false);
47    for(let i=0;i<arr.length;i++) {
48        arr[i] = 0;
49    }
50    assert_equal(ArkTools.hasFastProperties(arr), true);
51}
52
53{
54    let obj1 = {};
55    assert_equal(ArkTools.hasFastProperties(obj1), true);
56}
57
58{
59    let obj2 = {};
60    for (let i = 0; i < 1000; i++) {
61        obj2['prop' + i] = i;
62    }
63    assert_equal(ArkTools.hasFastProperties(obj2), true);
64}
65
66{
67    let obj3 = { a: 1, b: 2, c: 3 };
68    delete obj3.b;
69    assert_equal(ArkTools.hasFastProperties(obj3), false);
70}
71
72{
73    let obj4 = {};
74    obj4['a'] = 1;
75    obj4['b'] = 2;
76    delete obj4['a'];
77    assert_equal(ArkTools.hasFastProperties(obj4), false);
78}
79
80{
81    let obj5 = {};
82    for (let i = 0; i < 100; i++) {
83        obj5[i] = i;
84        obj5['prop' + i] = 'value' + i;
85    }
86    assert_equal(ArkTools.hasFastProperties(obj5), true);
87    delete obj5[50];
88    assert_equal(ArkTools.hasFastProperties(obj5), false);
89}
90
91{
92    let arr1 = [];
93    assert_equal(ArkTools.hasFastProperties(arr1), true);
94}
95
96{
97    let arr2 = new Array(100).fill(0);
98    assert_equal(ArkTools.hasFastProperties(arr2), true);
99}
100
101{
102    let arr3 = new Array(100).fill(0);
103    delete arr3[50];
104    assert_equal(ArkTools.hasFastProperties(arr3), false);
105}
106
107{
108    let arr4 = [];
109    arr4[0] = 0;
110    arr4[1000] = 1000;
111    assert_equal(ArkTools.hasFastProperties(arr4), true);
112}
113
114{
115    let arr5 = new Array(100).fill(0);
116    arr5.prop = 'value';
117    assert_equal(ArkTools.hasFastProperties(arr5), true);
118    delete arr5.prop;
119    assert_equal(ArkTools.hasFastProperties(arr5), false);
120    delete arr5[50];
121    assert_equal(ArkTools.hasFastProperties(arr5), false);
122    arr5.fill(0);
123    assert_equal(ArkTools.hasFastProperties(arr5), true);
124}
125
126{
127    let arr6 = new Array(100).fill(0);
128    arr6.length = 1000;
129    assert_equal(ArkTools.hasFastProperties(arr6), true);
130    delete arr6[500];
131    assert_equal(ArkTools.hasFastProperties(arr6), true);
132}
133
134{
135    let arr7 = new Array(1024);
136    assert_equal(ArkTools.hasFastProperties(arr7), true);
137}
138
139{
140    let arr8 = new Array(2048);
141    assert_equal(ArkTools.hasFastProperties(arr8), false);
142}
143
144{
145    let objProto = { a: 1 };
146    let objEdge1 = Object.create(objProto);
147    assert_equal(ArkTools.hasFastProperties(objEdge1), true);
148    delete objProto.a;
149    assert_equal(ArkTools.hasFastProperties(objEdge1), true);
150}
151
152{
153    let objEdge2 = {};
154    Object.defineProperty(objEdge2, 'accessor', {
155        get() { return this.value; },
156        set(v) { this.value = v; }
157    });
158    assert_equal(ArkTools.hasFastProperties(objEdge2), true);
159    delete objEdge2.value;
160    assert_equal(ArkTools.hasFastProperties(objEdge2), true);
161}
162
163{
164    let arrayLike = { 0: 'a', 1: 'b', 2: 'c', length: 3 };
165    assert_equal(ArkTools.hasFastProperties(arrayLike), true);
166    delete arrayLike[1];
167    assert_equal(ArkTools.hasFastProperties(arrayLike), false);
168}
169test_end();