• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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