• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1/**
2 * Copyright (c) 2024 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
16const elementsNum: int = 100;
17let testArrayInt: Array<int> = new Array<int>(elementsNum);
18let testArrayObj: Array<Object> = new Array<Object>(elementsNum);
19let testArrayStr: Array<String> = new Array<String>(elementsNum);
20let queueInt: BlockingQueue<int> = new BlockingQueue<int>();
21let queueObj: BlockingQueue<Object> = new BlockingQueue<Object>();
22let queueStr: BlockingQueue<String> = new BlockingQueue<String>();
23
24function wait(): int {
25    let i = 1
26    for (let j = 0; j < 3000; j++) {
27        i += j
28    }
29    return i
30}
31
32function pusherInt() {
33    for (let i = 0; i < elementsNum; i++) {
34        wait();
35        let el = (random() * 10000) as int;
36        testArrayInt[i] = el;
37        queueInt.push(el);
38    }
39}
40
41function pusherObj() {
42    for (let i = 0; i < elementsNum; i++) {
43        wait();
44        let el = new Object();
45        testArrayObj[i] = el;
46        queueObj.push(el);
47    }
48}
49
50function pusherStr() {
51    for (let i = 0; i < elementsNum; i++) {
52        wait();
53        if (i == 0) {
54            let el = String("abacaba");
55            testArrayStr[i] = el;
56            queueStr.push(el);
57        } else {
58            let el = testArrayStr[i - 1] + "aba";
59            testArrayStr[i] = el;
60            queueStr.push(el);
61        }
62    }
63}
64
65function popperInt(): Array<int> {
66    let arr = new Array<int>(elementsNum);
67    for (let i = 0; i < elementsNum; i++) {
68        let el = queueInt.front();
69        arr[i] = queueInt.pop();
70        assert el == arr[i];
71    }
72    return arr;
73}
74
75function popperObj(): Array<Object> {
76    let arr = new Array<Object>(elementsNum);
77    for (let i = 0; i < elementsNum; i++) {
78        let el = queueObj.front();
79        arr[i] = queueObj.pop();
80        assert el == arr[i];
81    }
82    return arr;
83}
84
85function popperStr(): Array<String> {
86    let arr = new Array<String>(elementsNum);
87    for (let i = 0; i < elementsNum; i++) {
88        let el = queueStr.front();
89        arr[i] = queueStr.pop();
90        assert el == arr[i];
91    }
92    return arr;
93}
94
95function concurrentPushPopTestInt() {
96    launch pusherInt();
97    let arrayToCheck = popperInt();
98    for (let i = 0; i < elementsNum; i++) {
99        assert testArrayInt[i] == arrayToCheck[i];
100    }
101    assert queueInt.size() == 0;
102}
103
104function concurrentPushPopTestObj() {
105    launch pusherObj();
106    let arrayToCheck = popperObj();
107    for (let i = 0; i < elementsNum; i++) {
108        assert testArrayObj[i] == arrayToCheck[i];
109    }
110    assert queueObj.size() == 0;
111}
112
113function concurrentPushPopTestStr() {
114    launch pusherStr();
115    let arrayToCheck = popperStr();
116    for (let i = 0; i < elementsNum; i++) {
117        assert testArrayStr[i] == arrayToCheck[i];
118    }
119    assert queueStr.size() == 0;
120}
121
122function simpleQueuePushPopFrontBackSizeEmptyTest() {
123    let arr: Array<int> = new Array<int>(elementsNum);
124    for (let i: int = 0; i < arr.length; ++i) {
125        let el = (random() * 10000) as int;
126        arr[i] = el;
127        queueInt.push(el);
128        assert el == queueInt.back();
129    }
130    let ind: int = 0;
131    while (!queueInt.empty()) {
132        let el = queueInt.front();
133        assert el == queueInt.pop();
134        assert el == arr[ind++];
135    }
136    assert ind == arr.length;
137    assert queueInt.size() == 0;
138}
139
140function main() {
141    simpleQueuePushPopFrontBackSizeEmptyTest();
142    concurrentPushPopTestInt(); // Concurrent test for Int type
143    concurrentPushPopTestObj(); // Concurrent test for Object type
144    concurrentPushPopTestStr(); // Concurrent test for String type
145}
146