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