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
24var Queue = undefined;
25if (globalThis["ArkPrivate"] != undefined) {
26    Queue = ArkPrivate.Load(ArkPrivate.Queue);
27    let v4 = new Queue();
28    v4[3829299154] = Queue;
29    print(v4.length);
30    let queue = new Queue();
31    let proxy = new Proxy(queue, {});
32    let res = true
33    let testArray = []
34    let map = new Map();
35    for(let i = 0; i < 10; i++) {
36        proxy.add(i)
37        testArray.push(i)
38    }
39
40    res = true
41    for(let i = 0; i < testArray.length; i++) {
42        if (proxy[i] !== testArray[i]) {
43            res = false
44        }
45    }
46    map.set("test queue add:", res)
47
48    res = true
49    proxy.forEach((i, d) => {
50        if (d !== testArray[i]) {
51            res = false
52        }
53    })
54
55    map.set("test queue forEach:", res)
56
57    res = true
58    let j = 0
59    for (const data of proxy) {
60      if (data !== testArray[j]) {
61        res = false
62      }
63      j++;
64    }
65    map.set("test queue for of:", res)
66    testdProxyArray1(proxy, res, testArray);
67
68    map.set("test queue Symbol.iterator:", res)
69
70    map.set("test queue popFirst:",  proxy.getFirst() === 0)
71    map.set("test queue pop:",  proxy.pop() === 0)
72
73    try {
74        let myQueue = new Queue();
75        myQueue.add(1);
76        myQueue[2147483648];
77    } catch(err) {
78        let overFlowTest = (err == "BusinessError: The type of \"index\" must be small integer.");
79        map.set("test Queue[i] overFlowTest:", overFlowTest);
80    }
81
82    let flag = undefined;
83    function elements(value, key, map) {
84        if (!value) {
85            if (!flag) {
86                flag = [];
87            }
88            flag.push(key);
89        }
90    }
91
92    let myTest = new Queue();
93    var arr1 = [];
94    for (var i = 0; i < 10; i++) {
95        myTest.add(i);
96    }
97    for (var i = 0; i < 5; i++) {
98        myTest.pop();
99    }
100    myTest.forEach(
101        function myFunc(item, index, arr) {
102            arr1.push(item);
103        }
104    );
105    for (let j = 5; j < 10; j++) {
106        if (arr1[j - 5] != j) {
107            print("Queue forEach first argv fail");
108        }
109    }
110
111    let de = new Queue();
112    try {
113        de.forEach(123);
114    } catch(err) {
115        if (err.name != "BusinessError") {
116            print("Queue forEach throw error fail");
117        }
118    }
119    let test1 = new Queue();
120    for (let k = 0; k < 10; k++) {
121        test1.add(k);
122    }
123    var keyName = "";
124    for (const key in test1) {
125        keyName += key;
126    }
127    if (keyName != "0123456789") {
128        print("Queue for in fail")
129    }
130    map.forEach(elements);
131    if (!flag) {
132        print("Test Queue success!!!");
133    } else {
134        print("Test Queue fail: " + flag);
135    }
136
137    let size_test = new Queue();
138    for (var i = 0; i < 6; i++) {
139        size_test.add(i);
140    }
141    print(size_test.length);
142
143    const v1 = [Queue,Queue,Queue,Queue];
144    const v2 = new Queue();
145    const v3 = [-63084,3,536870889,-1926,29182,-4294967296,1222477883];
146    const v5 = [v1];
147    try {
148        Reflect.apply(v3.unshift, v2, v5);
149    } catch(error) {
150        print(error);
151    }
152    const v6 = new Queue()
153    function f2(a3) {
154        return a3
155    }
156    const o5 = {
157        "get" : f2,
158    }
159    const v7 = new Proxy(v6, o5)
160    try {
161        v7[1073741823]
162    } catch (error) {
163        print(error)
164    }
165}
166export let queueRes = "Test Queue done";
167