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 success : int = 0; 17const fail : int = 1; 18 19function main(): int { 20 let failures: int = 0; 21 failures += check((): int => { return key() }, "key"); 22 failures += check((): int => { return values() }, "values"); 23 failures += check((): int => { return iterator() }, "iterator"); 24 failures += check((): int => { return findWithFuncArg1() }, "findWithFuncArg1"); 25 failures += check((): int => { return findWithFuncArg2() }, "findWithFuncArg2"); 26 failures += check((): int => { return findWithFuncArg3ArrayNumber() }, "findWithFuncArg3ArrayNumber"); 27 return check(failures, "All tests run"); 28} 29 30 31const d: Number[] = [10, -1, 237, -5, 148, 65, 3, 34, 0, 12]; 32const dd: Number[] = [1, 0, 3, 4, 0, 6]; 33 34function key(): int { 35 let arr = new Array<Number>; 36 let iterator = arr.keys(); 37 let i: int = 0; 38 while (true) { 39 const v = iterator.next(); 40 if (v.done) { 41 if (i > 0){ 42 return fail; 43 }; 44 break; 45 } 46 i = i + 1; 47 } 48 for (i = 0; i < dd.length; ++i) { 49 arr.push(dd[i]); 50 } 51 iterator = arr.keys(); 52 let idx: Number = 0; 53 while (true) { 54 const v = iterator.next(); 55 if (v.done) { 56 if ((idx != arr.length) || (idx != dd.length)) { 57 return fail; 58 } 59 return success; 60 } 61 if ((v.value != idx) || (v.value == undefined)) { 62 return fail; 63 } 64 idx = idx + 1; 65 } 66} 67 68function values(): int { 69 let arr = new Array<Number>; 70 let iterator = arr.values(); 71 let i: int = 0; 72 while (true) { 73 const v = iterator.next(); 74 if (v.done) { 75 if ((i != 0) && (i != arr.length)) { 76 return fail; 77 } 78 break; 79 } 80 i++; 81 } 82 for (let i: int = 0; i < d.length; ++i) { 83 arr.push(d[i]) 84 } 85 iterator = arr.values(); 86 i = 0; 87 while (true) { 88 const v = iterator.next(); 89 if (v.done) { 90 if ((i > 0) && (i != arr.length)) { 91 return fail; 92 } 93 return success; 94 } 95 if (v.value != arr.at(i)) { 96 return fail; 97 } 98 i++; 99 } 100} 101 102function iterator(): int { 103 let arr = new Array<Number>; 104 let iterator = arr.$_iterator(); 105 let i: int = 0; 106 while (true) { 107 const v = iterator.next(); 108 if (v.done) { 109 if ((i > 0) && (i != arr.length)) { 110 return fail; 111 } 112 break; 113 } 114 i++; 115 } 116 for (let i: int = 0; i < d.length; ++i) { 117 arr.push(d[i]); 118 } 119 iterator = arr.$_iterator(); 120 i = 0; 121 while (true) { 122 const v = iterator.next(); 123 if (v.done) { 124 if ((i > 0) && (i != arr.length)) { 125 return fail; 126 } 127 return success; 128 } 129 if (v.value != arr.at(i)) { 130 return fail; 131 } 132 i++; 133 } 134} 135 136function findWithFuncArg1(): int { 137 let arr = new Array<Number>; 138 for (let i: int = 0; i < d.length as int; ++i) { 139 arr.push(d[i]); 140 } 141 const fnPositive = (elem: number): boolean => { return elem == 12; }; 142 const fnNegative = (elem: number): boolean => { return elem < 0; }; 143 const fnUndefined = (elem: Number): boolean => { return elem == undefined; }; 144 const fnNull = (elem: Number): boolean => { return elem == null; }; 145 if (arr.find(fnPositive) != 12) { return fail; } 146 if (arr.find(fnNegative) != -1) { return fail; } 147 if (arr.find(fnUndefined) != undefined) { return fail; } 148 if (arr.find(fnNull) != undefined) { return fail; } 149 return success; 150} 151 152function findWithFuncArg2(): int { 153 let arr = new Array<Number>; 154 for (let i: int = 0; i < d.length; ++i) { 155 arr.push(d[i]); 156 } 157 const fnPositive = (elem: number, index: number): boolean => { 158 return elem == 12 && index > 0; 159 }; 160 const fnNegative = (elem: number, index: number): boolean => { 161 return elem < 0 && index > 0; 162 }; 163 const fnUndefined = (elem: Number, index: number): boolean => { 164 return elem == undefined && index < 0; 165 }; 166 const fnNull = (elem: Number, index: number): boolean => { 167 return elem == null && index > 0; 168 }; 169 if (arr.find(fnPositive) != 12) { return fail; } 170 if (arr.find(fnNegative) != -1) { return fail; } 171 if (arr.find(fnUndefined) != undefined) { return fail; } 172 if (arr.find(fnNull) != undefined) { return fail; } 173 return success; 174} 175 176function findWithFuncArg3ArrayNumber(): int { 177 let arr = new Array<Number>; 178 for (let i: int = 0; i < d.length; ++i) { 179 arr.push(d[i]); 180 } 181 const fnPositive = (elem: number, index: number, obj: Array<Number>): boolean => { 182 return obj[index] == elem && elem == 12 && index > 0; 183 }; 184 const fnNegative = (elem: number, index: number, obj: Array<Number>): boolean => { 185 return obj[index] == elem && elem < 0 && index > 0; 186 }; 187 const fnUndefined = (elem: Number, index: number, obj: Array<Number>): boolean => { 188 return obj[index] == elem && elem == undefined && index < 0; 189 }; 190 const fnNull = (elem: Number, index: number, obj: Array<Number>): boolean => { 191 return obj[index] == elem && elem == null && index > 0; 192 }; 193 if (arr.find(fnPositive) != 12) { return fail; } 194 if (arr.find(fnNegative) != -1) { return fail; } 195 if (arr.find(fnUndefined) != undefined) { return fail; } 196 if (arr.find(fnNull) != undefined) { return fail; } 197 return success; 198} 199 200function check(result: int, message: String): int { 201 if (result == success) { 202 return success; 203 } 204 console.println("\nFAILED: " + message); 205 return fail; 206} 207 208function check(fn: () => int, message: String): int { 209 let result: int = 0; 210 try { 211 result = fn(); 212 } catch(e) { 213 console.println("FAILED: " + message + " => Exception catched: " + e); 214 return fail; 215 } 216 if (result == success) { 217 return success; 218 } 219 console.println("\nFAILED: " + message); 220 return fail; 221} 222