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();