1/* 2 * Copyright (c) 2022 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:container 18 * @tc.desc:test container 19 * @tc.type: FUNC 20 * @tc.require: issueI5NO8G 21 */ 22var FastVector = undefined; 23if (globalThis["ArkPrivate"] != undefined) { 24 FastVector = ArkPrivate.Load(ArkPrivate.Vector); 25 26 let map = new Map(); 27 let vector = new FastVector(); 28 vector.add(4); // index is 0 29 vector.add(3); 30 vector.add(1); 31 vector.add(5); 32 vector.add(14); 33 let res = vector.toString(); 34 map.set("test add and toString:", res); 35 // test insert, length, get, getIndexOf 36 vector.insert(2, 2); 37 map.set("test length:", vector.length == 6); 38 map.set("test get(index is 2):", vector.get(2) == 2); 39 map.set("test get(index is 3):", vector.get(3) !== 3); // false 40 map.set("test getIndexOf(target is 3):", vector.getIndexOf(3) == 1); // true 41 map.set("test getIndexOf(target is 2):", vector.getIndexOf(2) !== 5); // false 42 // test isEmpty 43 map.set("test isEmpty:", !vector.isEmpty()); 44 45 let vec = vector.clone(); 46 // test clear 47 vector.clear(); 48 map.set("test clear:", vector.isEmpty()); 49 // // test set, clone 50 vec.set(2, 8); 51 map.set("test set:", vec.get(2) == 8 && vec.length == 6); 52 // trimToCurrentLength 53 vec.trimToCurrentLength(); 54 map.set("test trimToCurrentLength1:", vec.getCapacity() === 6); 55 vec.trimToCurrentLength(); 56 map.set("test trimToCurrentLength2:", vec.getCapacity() === 6); 57 // test subvector 58 let subVec = vec.subVector(0, 3); 59 map.set("test subVector and tostring:", subVec.toString()); 60 // test replaceAllElements 61 subVec.replaceAllElements((item, index) => { 62 return (item = 2 * item); 63 }); 64 map.set("test replaceAllElements:", subVec.toString() == "8,6,16"); 65 // GetFirstElement 66 map.set("test GetFirstElement:", subVec.getFirstElement() == 8 && 67 vec.getFirstElement() == 4); 68 69 let arr = [4, 3, 8, 1, 5, 14]; 70 for (let i = 0; i < vector.length; i++) { 71 map.set("for of " + arr[i], vec.get(i) == arr[i]); 72 } 73 74 let flag = false; 75 try { 76 vec["aa"] = 3; 77 } catch (e) { 78 flag = true; 79 } 80 81 map.set("test vector throw error", flag); 82 83 let vector1 = new FastVector(); 84 let proxy = new Proxy(vector1, {}); 85 let testArray = [] 86 res = true 87 for(let i = 0; i<10; i++) { 88 proxy.add(i) 89 testArray.push(i) 90 } 91 92 for(let i = 0; i < testArray.length; i++) { 93 if (proxy[i] !== testArray[i]) { 94 res = false 95 } 96 } 97 map.set("test vector add:", res) 98 99 map.set("test vector has:", proxy.has(2)) 100 map.set("test vector getCapacity:", proxy.getCapacity() === 10) 101 map.set("test vector getLastIndexOf:", proxy.getLastIndexOf(1) === 1) 102 map.set("test vector getIndexOf:", proxy.getIndexOf(5) === 5) 103 map.set("test vector getFirstElement:", proxy.getFirstElement() === 0) 104 map.set("test vector getLastElement:", proxy.getLastElement() === 9) 105 map.set("test vector getLastIndexFrom:", proxy.getLastIndexFrom(1, 5) === 1) 106 map.set("test vector getIndexFrom:", proxy.getIndexFrom(5, 1) === 5) 107 108 let array = proxy.convertToArray() 109 res = true 110 for(let i = 0; i < testArray.length; i++) { 111 if (array[i] !== testArray[i]) { 112 res = false 113 } 114 } 115 map.set("test vector convertToArray:", res) 116 117 let newVector = proxy.clone() 118 res = true 119 for(let i = 0; i < testArray.length; i++) { 120 if (newVector[i] !== testArray[i]) { 121 res = false 122 } 123 } 124 map.set("test vector clone:", res) 125 126 proxy.insert(999, 3) 127 testArray.splice(3, 0, 999) 128 res = true 129 for(let i = 0; i < testArray.length; i++) { 130 if (proxy[i] !== testArray[i]) { 131 res = false 132 } 133 } 134 map.set("test vector insert:", res) 135 136 proxy.removeByIndex(9) 137 testArray.splice(9, 1) 138 res = true 139 for(let i = 0; i < testArray.length; i++) { 140 if (proxy[i] !== testArray[i]) { 141 res = false 142 } 143 } 144 map.set("test vector removeByIndex:", res) 145 146 const removeRes = proxy.remove(6) 147 testArray.splice(7, 1) 148 res = true 149 for(let i = 0; i < testArray.length; i++) { 150 if (proxy[i] !== testArray[i]) { 151 res = false 152 } 153 } 154 map.set("test vector remove:", res) 155 map.set("test vector removeRes:", removeRes) 156 157 proxy.removeByRange(1, 3) 158 testArray.splice(1, 2) 159 res = true 160 for(let i = 0; i < testArray.length; i++) { 161 if (proxy[i] !== testArray[i]) { 162 res = false 163 } 164 } 165 map.set("test vector removeByRange:", res) 166 167 res = true 168 proxy.forEach((value, index) => { 169 if (value !== testArray[index]) { 170 res = false 171 } 172 }) 173 174 map.set("test vector forEach:", res) 175 176 proxy.replaceAllElements((item, index) => { 177 return item * 2 178 }) 179 res = true 180 for(let i = 0; i < testArray.length; i++) { 181 if (proxy[i] !== testArray[i] * 2) { 182 res = false 183 } 184 } 185 map.set("test vector replaceAllElements:", res) 186 187 res = true 188 let subVector = proxy.subVector(1, 3) 189 const newtestArray = testArray.slice(1, 3) 190 for(let i = 0; i < subVector.length; i++) { 191 if (newtestArray[i] * 2 !== subVector[i]) { 192 res = false 193 } 194 } 195 map.set("test vector subVector:", res) 196 197 res = true 198 let j = 0 199 for (const data of proxy) { 200 if (data !== testArray[j] * 2) { 201 res = false 202 } 203 j++; 204 } 205 map.set("test vector for of:", res) 206 207 let itr = proxy[Symbol.iterator](); 208 let tmp = undefined; 209 let testArray1 = [] 210 do { 211 tmp = itr.next().value; 212 testArray1.push(tmp); 213 } while (tmp != undefined); 214 215 for (let k = 0; k < proxy.length; k++) { 216 if (testArray1[k] !== testArray[k] * 2) { 217 res = false 218 } 219 } 220 map.set("test vector Symbol.iterator:", res) 221 222 let vector2 = new FastVector(); 223 let proxy1 = new Proxy(vector2, {}); 224 proxy1.add(4); 225 proxy1.add(3); 226 proxy1.add(1); 227 proxy1.add(2); 228 proxy1.add(0); 229 proxy1.sort((a,b) => a-b); 230 res = true 231 for (let i = 0; i < 5; i++) { 232 if (proxy1[i] !== i) { 233 res = false 234 } 235 } 236 map.set("test vector sort:", res) 237 238 map.set("test vector get:", proxy1.get(2) === 2) 239 proxy1.set(3, 7) 240 map.set("test vector set and get:", proxy1.get(3) === 7) 241 242 proxy1.clear() 243 map.set("test vector clear:", proxy1.length === 0) 244 map.set("test vector isEmpty:", proxy1.isEmpty()) 245 proxy1.add(4); 246 proxy1.add(3); 247 proxy1.add(1); 248 proxy1.add(2); 249 proxy1.add(0); 250 map.set("test vector toString:", proxy1.toString() == "4,3,1,2,0"); 251 252 res = true 253 let arr1 = [-1, -1, -1, -1, -1]; 254 proxy1.copyToArray(arr1); 255 let a = [4, 3, 1, 2, 0]; 256 for (let i = 0; i < a.length; i++) { 257 if (arr1[i] !== a[i]) { 258 res = false 259 } 260 } 261 map.set("test vector copyToArray:", res); 262 263 proxy1.sort((a,b) => a-b); 264 res = true 265 for (let i = 0; i < 5; i++) { 266 if (proxy1[i] !== i) { 267 res = false 268 } 269 } 270 map.set("test vector sort:", res) 271 272 proxy1.increaseCapacityTo(20) 273 map.set("test vector increaseCapacityTo:", proxy1.getCapacity() === 20) 274 275 proxy1.trimToCurrentLength() 276 map.set("test vector trimToCurrentLength:", proxy1.getCapacity() === 5) 277 278 let v = new FastVector(); 279 for (let i = 0; i < 10; i++) { 280 v.add(i); 281 } 282 v.replaceAllElements((value, key, t) => { 283 if (key == 8) { 284 t.clear(); 285 t.trimToCurrentLength(); 286 return 0; 287 } 288 return value; 289 }, v); 290 map.set("test vector replaceAllElements redefine:", v.length == 0); 291 292 flag = undefined; 293 function elements(value, key, map) { 294 if (!value) { 295 if (!flag) { 296 flag = []; 297 } 298 flag.push(key); 299 } 300 } 301 302 let de = new FastVector(); 303 try { 304 de.forEach(123); 305 } catch(err) { 306 if (err.name != "TypeError") { 307 print("Vector forEach throw error fail"); 308 } 309 } 310 map.forEach(elements); 311 let test1 = new FastVector(); 312 for (let k = 0; k < 10; k++) { 313 test1.add(k); 314 } 315 var keyName = ""; 316 for (const key in test1) { 317 keyName += key; 318 } 319 if (keyName != "0123456789") { 320 print("Vector for in fail") 321 } 322 if (!flag) { 323 print("Test Vector success!!!"); 324 } else { 325 print("Test Vector fail: " + flag); 326 } 327} 328