• 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:
21 */
22import {testdProxyArray1}  from "./utility";
23
24const INT32_MAX = 2 ** 31 - 1;  // 表示2^31-1,是int32能表达的最大值
25
26var Deque = undefined;
27if (globalThis["ArkPrivate"] != undefined) {
28    Deque = ArkPrivate.Load(ArkPrivate.Deque);
29    let deque = new Deque();
30    let proxy = new Proxy(deque, {});
31    let res = true
32    let testArray = []
33    let map = new Map();
34    for(let i = 0; i < 10; i++) {
35        testArray.push(i)
36    }
37    for(let i = 9; i >= 0; --i) {
38        proxy.insertFront(i)
39    }
40
41    res = true
42    for(let i = 0; i < testArray.length; i++) {
43        if (proxy[i] !== testArray[i]) {
44            res = false
45        }
46    }
47    map.set("test deque insertFront:", res)
48
49    for(let i = 10; i < 20; i++) {
50        proxy.insertEnd(i)
51        testArray.push(i)
52    }
53
54    res = true
55    for(let i = 0; i < testArray.length; i++) {
56        if (proxy[i] !== testArray[i]) {
57            res = false
58        }
59    }
60    map.set("test deque insertEnd:", res)
61
62    res = true
63    proxy.forEach((i, d) => {
64        if (d !== testArray[i]) {
65            res = false
66        }
67    })
68
69    map.set("test deque forEach:", res)
70
71    res = true
72    let j = 0
73    for (const data of proxy) {
74      if (data !== testArray[j]) {
75        res = false
76      }
77      j++;
78    }
79    map.set("test deque for of:", res);
80
81    testdProxyArray1(proxy, res, testArray);
82    map.set("test deque Symbol.iterator:", res)
83
84    map.set("test deque has:",  proxy.has(7))
85    map.set("test deque popFirst:",  proxy.getFirst() === 0)
86    map.set("test deque popLast:",  proxy.getLast() === 19)
87    map.set("test deque popFirst:",  proxy.popFirst() === 0)
88    map.set("test deque popLast:",  proxy.popLast() === 19)
89
90    try {
91        let myDeque = new Deque();
92        myDeque.insertEnd(1);
93        myDeque[INT32_MAX + 1];
94    } catch(err) {
95        let overFlowTest = (err == "BusinessError: The type of \"index\" must be small integer.");
96        map.set("test Deque[i] overFlowTest:", overFlowTest);
97    }
98
99    try {
100        let deque = new Deque();
101        deque.insertFront("a")
102        deque.insertFront("b")
103        deque.insertFront("c")
104        let result = deque.getFirst();
105        map.set("testInsertFront0001 failed, first element:" + result, result === "c");
106    } catch (err) {
107        map.set("testInsertFront0001 failed, error code:" + err.code, false);
108    }
109
110    try {
111        let deque = new Deque();
112        deque.insertFront(1)
113        deque.insertFront(2)
114        deque.insertFront(3)
115        let result = deque.getFirst();
116        map.set("testInsertFront0002 failed, first element:" + result, result === 3);
117    } catch (err) {
118        map.set("testInsertFront0002 failed, error code:" + err.code, false);
119    }
120
121    try {
122        let deque = new Deque();
123        let a = {
124          name: "Dylon", age: "13"
125        };
126        let b = {
127          name: "Joe", age: "14"
128        };
129        let c = {
130          name: "Lucy", age: "15"
131        };
132        deque.insertFront(a)
133        deque.insertFront(b)
134        deque.insertFront(c)
135        let result = deque.getFirst();
136        map.set("testInsertFront0003 failed, first element:" + result, result === c);
137    } catch (err) {
138        map.set("testInsertFront0003 failed, error code:" + err.code, false);
139    }
140
141    try {
142        let deque = new Deque();
143        let a = {
144          name: "Dylon", age: "13"
145        };
146        let b = 'a'
147        let c = 1
148        deque.insertFront(a)
149        deque.insertFront(b)
150        deque.insertFront(c)
151        let result = deque.getFirst();
152        map.set("testInsertFront0004 failed, first element:" + result, result === c);
153    } catch (err) {
154        map.set("testInsertFront0004 failed, error code:" + err.code, false);
155    }
156
157    try {
158        let deque = new Deque();
159        deque.insertEnd("a")
160        deque.insertEnd("b")
161        deque.insertEnd("c")
162        let result = deque.getLast();
163        map.set("testInsertEnd0005 failed, last element:" + result, result === "c");
164    } catch (err) {
165        map.set("testInsertEnd0005 failed, error code:" + err.code + " error message:" + err.message, false);
166    }
167
168    try {
169        let deque = new Deque();
170        deque.insertEnd(1)
171        deque.insertEnd(2)
172        deque.insertEnd(3)
173        let result = deque.getLast();
174        map.set("testInsertEnd0006 failed, last element:" + result, result === 3);
175    } catch (err) {
176        map.set("testInsertEnd0006 failed, error code:" + err.code, false);
177    }
178
179    try {
180        let deque = new Deque();
181        let a = {
182          name: "Dylon", age: "13"
183        };
184        let b = {
185          name: "Joe", age: "14"
186        };
187        let c = {
188          name: "Lucy", age: "15"
189        };
190        deque.insertEnd(a)
191        deque.insertEnd(b)
192        deque.insertEnd(c)
193        let result = deque.getLast();
194        map.set("testInsertEnd0007 failed, last element:" + result, result === c);
195    } catch (err) {
196        map.set("testInsertEnd0007 failed, error code:" + err.code, false);
197    }
198
199    try {
200        let deque = new Deque();
201        let a = {
202          name: "Dylon", age: "13"
203        };
204        let b = 'a'
205        let c = 1
206        deque.insertEnd(a)
207        deque.insertEnd(b)
208        deque.insertEnd(c)
209        let result = deque.getLast();
210        map.set("testInsertEnd0008 failed, last element:" + result, result === c);
211    } catch (err) {
212        map.set("testInsertEnd0008 failed, error code:" + err.code, false);
213    }
214
215    let flag = undefined;
216    function elements(value, key, map) {
217        if (!value) {
218            if (!flag) {
219                flag = [];
220            }
221            flag.push(key);
222        }
223    }
224    map.forEach(elements);
225    var arr1 = [];
226    let myTest = new Deque();
227    for (let i = 0; i < 10; i++) {
228        myTest.insertEnd(i);
229    }
230    for (let i = 0; i < 5; i++) {
231        myTest.popFirst();
232    }
233    myTest.forEach(
234        function myFunc(item, index, arr) {
235            arr1.push(item);
236        }
237    );
238    for (let j = 5; j < 10; j++) {
239        if (arr1[j - 5] != j) {
240            print("Deque forEach first argv fail");
241        }
242    }
243
244    let de = new Deque();
245    try {
246        de.forEach(123);
247    } catch(err) {
248        if (err.name != "BusinessError") {
249            print("Deque forEach throw error fail");
250        }
251    }
252    let test1 = new Deque();
253    for (let k = 0; k < 10; k++) {
254        test1.insertEnd(k);
255    }
256    var keyName = "";
257    for (const key in test1) {
258        keyName += key;
259    }
260    if (keyName != "0123456789") {
261        print("Deque for in fail")
262    }
263    if (!flag) {
264        print("Test Deque success!!!");
265    } else {
266        print("Test Deque fail: " + flag);
267    }
268    const v1 = new Deque();
269    const v2 = [Deque,Deque];
270    class C4{
271    ["100"] = v2
272    }
273    const v5 = new C4();
274    Object.assign(v1,v5)
275    print(JSON.stringify(v1))
276    const v6 = new Deque()
277    try {
278        v6[4294967295]
279    } catch (error) {
280        print(error)
281    }
282    let v22;
283    class C11 extends Deque {
284
285    }
286    v22 = new C11()
287    v22[2295334561] = 0
288    print(v22.length)
289    class C44 extends Deque{
290        constructor(a) {
291            super()
292            super[a] = 11
293            const o10 = {
294                ...this
295            }
296        }
297    }
298    new C44(38062)
299
300    /*
301     * @tc.name: checkcontainerloadhclass
302     * @tc.desc: Test ContainersDequeStubBuilder::ForEach whether judge isHeapObject
303     *           before loading hClass.
304     * @tc.type: FUNC
305     * @tc.require: issueIBQ709
306     */
307    {
308        let v1 = new Deque(0);
309        let arr1 = [1];
310        try {
311            Reflect.apply(v1.forEach, 123, arr1);
312        } catch (e) {
313            print(e);
314        }
315    }
316}
317export let dequeRes = "Test Deque done";
318