• 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 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