• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1/*
2 * Copyright (c) 2025 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
16function istrue(v: Any) { return !!v }
17
18function erase<T>(v: T): Any {
19    return v;
20}
21
22class Klass {
23    public f: number;
24
25    constructor(f:number) {
26        this.f = f;
27    }
28}
29
30function foo(n: number): Klass | undefined {
31    if (n == 0) {
32        return undefined;
33    }
34    return new Klass(n);
35}
36
37enum Color {
38    Red,
39    Green,
40    Blue = 2147483647,
41    Yellow = -2147483648,
42}
43
44enum Color64 {
45    Red,
46    Green,
47    Blue = 9223372036854775807,
48    Yellow = -9223372036854775808,
49}
50
51enum ColorString {
52    Red = '',
53    Green = 'Green'
54}
55
56function testNormal() {
57    arktest.assertTrue(!istrue(new Byte(0 as byte)));
58    arktest.assertTrue(istrue(new Byte(1 as byte)));
59    arktest.assertTrue(!istrue(new Short(0 as short)));
60    arktest.assertTrue(istrue(new Short(1 as short)));
61    arktest.assertTrue(!istrue(new Int(0)));
62    arktest.assertTrue(istrue(new Int(1)));
63    arktest.assertTrue(!istrue(new Long(0)));
64    arktest.assertTrue(istrue(new Long(1)));
65    arktest.assertTrue(!istrue(new Float(0.0)));
66    arktest.assertTrue(istrue(new Float(0.5)));
67    arktest.assertTrue(!istrue(new Double(0.0)));
68    arktest.assertTrue(istrue(new Double(0.5)));
69    arktest.assertTrue(!istrue(new Char(0 as char)));
70    arktest.assertTrue(istrue(new Char(c'0')));
71    arktest.assertTrue(!istrue(''));
72    arktest.assertTrue(istrue('Hello'));
73    arktest.assertTrue(!istrue(false));
74    arktest.assertTrue(istrue(true));
75    arktest.assertTrue(!istrue(null));
76    arktest.assertTrue(!istrue(undefined));
77    arktest.assertTrue(!istrue(NaN));
78    arktest.assertTrue(!istrue(new bigint(0)));
79    arktest.assertTrue(istrue(new bigint(1)));
80    arktest.assertTrue(!istrue(foo(0)));
81    arktest.assertTrue(istrue(foo(1)));
82    arktest.assertTrue(!istrue(Color.Red));
83    arktest.assertTrue(istrue(Color.Green));
84    arktest.assertTrue(istrue(Color.Blue));
85    arktest.assertTrue(istrue(Color.Yellow));
86    arktest.assertTrue(!istrue(Color64.Red));
87    arktest.assertTrue(istrue(Color64.Green));
88    arktest.assertTrue(istrue(Color64.Blue));
89    arktest.assertTrue(istrue(Color64.Yellow));
90    arktest.assertTrue(!istrue(ColorString.Red));
91    arktest.assertTrue(istrue(ColorString.Green));
92    let a: bigint | null = 0n;
93    assertTrue(istrue(!a));
94}
95
96function testErase() {
97    arktest.assertTrue(!istrue(erase(new Byte(0 as byte))));
98    arktest.assertTrue(istrue(erase(new Byte(1 as byte))));
99    arktest.assertTrue(!istrue(erase(new Short(0 as short))));
100    arktest.assertTrue(istrue(erase(new Short(1 as short))));
101    arktest.assertTrue(!istrue(erase(new Int(0))));
102    arktest.assertTrue(istrue(erase(new Int(1))));
103    arktest.assertTrue(!istrue(erase(new Long(0))));
104    arktest.assertTrue(istrue(erase(new Long(1))));
105    arktest.assertTrue(!istrue(erase(new Float(0.0))));
106    arktest.assertTrue(istrue(erase(new Float(0.5))));
107    arktest.assertTrue(!istrue(erase(new Double(0.0))));
108    arktest.assertTrue(istrue(erase(new Double(0.5))));
109    arktest.assertTrue(!istrue(erase(new Char(0 as char))));
110    arktest.assertTrue(istrue(erase(new Char(c'0'))));
111    arktest.assertTrue(!istrue(erase('')));
112    arktest.assertTrue(istrue(erase('Hello')));
113    arktest.assertTrue(!istrue(erase(false)));
114    arktest.assertTrue(istrue(erase(true)));
115    arktest.assertTrue(!istrue(erase(null)));
116    arktest.assertTrue(!istrue(erase(undefined)));
117    arktest.assertTrue(!istrue(erase(NaN)));
118    arktest.assertTrue(!istrue(erase(new bigint(0))));
119    arktest.assertTrue(istrue(erase(new bigint(1))));
120    arktest.assertTrue(!istrue(erase(foo(0))));
121    arktest.assertTrue(istrue(erase(foo(1))));
122    arktest.assertTrue(!istrue(erase(Color.Red)));
123    arktest.assertTrue(istrue(erase(Color.Green)));
124    arktest.assertTrue(istrue(erase(Color.Blue)));
125    arktest.assertTrue(istrue(erase(Color.Yellow)));
126    arktest.assertTrue(!istrue(erase(Color64.Red)));
127    arktest.assertTrue(istrue(erase(Color64.Green)));
128    arktest.assertTrue(istrue(erase(Color64.Blue)));
129    arktest.assertTrue(istrue(erase(Color64.Yellow)));
130    arktest.assertTrue(!istrue(erase(ColorString.Red)));
131    arktest.assertTrue(istrue(erase(ColorString.Green)));
132    let a: bigint | null = 0n;
133    assertTrue(istrue(erase(!a)));
134}
135
136function testConditions() {
137    if (istrue(0)) {
138        assertTrue(false);
139    } else {
140        assertTrue(true);
141    }
142
143    if (istrue(1)) {
144        assertTrue(true);
145    } else {
146        assertTrue(false);
147    }
148}
149
150
151function testFunction() {
152    if (istrue((() => { let x: number = 0; return x })())) {
153        assertTrue(false);
154    } else {
155        assertTrue(true);
156    }
157}
158
159function testMemoryAllocationsWithIsTrue() {
160    const totalAllocations = 10000;
161    let allocations: Array<Object> = new Array<Object>(totalAllocations);
162    let count = 0;
163
164    for (let i = 0; i < totalAllocations; i++) {
165        allocations[i] = new ArrayBuffer(1024);
166        if (istrue(erase(new Int(1)))) {
167            count++
168        }
169    }
170    assertEQ(count, totalAllocations);
171}
172
173function main() {
174    testNormal();
175    testErase();
176    testConditions();
177    testFunction();
178    testMemoryAllocationsWithIsTrue();
179}
180