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