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