1/* 2 * Copyright (c) 2023-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 16function main(): void { 17 let a : double = 2147483649.0; // 2^31 + 1 18 assert a as float == 2147483648; // rounded 19 assert a as long == 2147483649; 20 assert a as int == 2147483647; // 2^31 - 1 == MAX_INT == 0xFFFFFFFF 21 assert a as short == -1; // 0xFFFF 22 assert a as char == c'\uFFFF'; 23 assert a as byte == -1; // 0xFF 24 25 a = -2147483649.0 // 2^31 + 1 26 assert a as float == -2147483648; // rounded 27 assert a as long == -2147483649; 28 assert a as int == -2147483648; // -2^31 == MIN_INT == 0x10000000 29 assert a as short == 0; 30 assert a as char == c'\u0000'; 31 assert a as byte == 0; 32 33 let b : float = 70000.9921875; 34 assert b as double == 70000.9921875; 35 assert b as long == 70000; // rounded, 70000 == 0x11170 36 assert b as int == 70000; 37 assert b as short == 4464; // 4464 == 0x1170 38 assert b as char == c'\u1170'; 39 assert b as byte == 112; // 112 == 0x70 40 41 let c : long = 1193046; // 1193046 == 0x123456 42 assert c as int == 1193046; 43 assert c as short == 13398; // 13398 == 0x3456 44 assert c as char == c'\u3456'; 45 assert c as byte == 86; // 86 == 0x56 46 47 let d : int = 126977; // 65537 == 0x1F001 48 assert d as short == -4095; // -4095 == 0xF001 49 assert d as char == c'\uF001'; 50 assert d as byte == 1; // 1 == 0x01 51 52 let e : short = -30875; // -30875 == 0x8765 53 assert e as double == -30875.0; 54 assert e as float == -30875.0; 55 assert e as long == -30875; // -30875 == 0xFFFFFFFFFFFF8765 56 assert e as int == -30875; // -30875 == 0xFFFF8765 57 assert e as char == c'\u8765'; 58 assert e as byte == 101; // 101 == 0x65 59 60 let f : char = c'\uF001'; 61 assert f as double == 61441.0; 62 assert f as float == 61441.0; 63 assert f as long == 61441; // 61441 == 0x000000000000F001 64 assert f as int == 61441; // 61441 == 0x0000F001 65 assert f as short == 0xf001 as short; // -4095 == 0xF001 66 assert f as short == -4095; 67 68 let g : byte = -128; 69 assert g as double == -128.0; 70 assert g as float == -128.0; 71 assert g as long == -128; 72 assert g as int == -128; 73 assert g as short == -128; 74 assert g as char == c'\uFF80'; 75 assert (-128) as byte == -128 76 assert (-129) as byte == 127 77 78 let i : boolean = true; 79 assert i as boolean == true; 80 81 i = false; 82 assert i as boolean == false; 83 84 assert 4294967296.0 as byte == -1; 85 assert 4294967296.0 as char == c'\uFFFF'; 86 assert 4294967296.0 as short == -1; 87 assert 4294967296.0 as int == Int.MAX_VALUE; 88 assert 4294967296.0 as long == 4294967296; 89 assert -4294967296.0 as byte == 0; 90 assert -4294967296.0 as char == c'\u0000'; 91 assert -4294967296.0 as short == 0; 92 assert -4294967296.0 as int == Int.MIN_VALUE; 93 assert -4294967296.0 as long == -4294967296; 94 95 return; 96} 97