13af6ab5fSopenharmony_ci/*
23af6ab5fSopenharmony_ci * Copyright (c) 2023-2024 Huawei Device Co., Ltd.
33af6ab5fSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
43af6ab5fSopenharmony_ci * you may not use this file except in compliance with the License.
53af6ab5fSopenharmony_ci * You may obtain a copy of the License at
63af6ab5fSopenharmony_ci *
73af6ab5fSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0
83af6ab5fSopenharmony_ci *
93af6ab5fSopenharmony_ci * Unless required by applicable law or agreed to in writing, software
103af6ab5fSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
113af6ab5fSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
123af6ab5fSopenharmony_ci * See the License for the specific language governing permissions and
133af6ab5fSopenharmony_ci * limitations under the License.
143af6ab5fSopenharmony_ci */
153af6ab5fSopenharmony_ci
163af6ab5fSopenharmony_cifunction main(): void {
173af6ab5fSopenharmony_ci  let a : double = 2147483649.0;    // 2^31 + 1
183af6ab5fSopenharmony_ci  assert a as float == 2147483648;  // rounded
193af6ab5fSopenharmony_ci  assert a as long == 2147483649;
203af6ab5fSopenharmony_ci  assert a as int == 2147483647;    // 2^31 - 1 == MAX_INT == 0xFFFFFFFF
213af6ab5fSopenharmony_ci  assert a as short == -1;          // 0xFFFF
223af6ab5fSopenharmony_ci  assert a as char == c'\uFFFF';
233af6ab5fSopenharmony_ci  assert a as byte == -1;           // 0xFF
243af6ab5fSopenharmony_ci
253af6ab5fSopenharmony_ci  a = -2147483649.0                 // 2^31 + 1
263af6ab5fSopenharmony_ci  assert a as float == -2147483648; // rounded
273af6ab5fSopenharmony_ci  assert a as long == -2147483649;
283af6ab5fSopenharmony_ci  assert a as int == -2147483648;   // -2^31 == MIN_INT == 0x10000000
293af6ab5fSopenharmony_ci  assert a as short == 0;
303af6ab5fSopenharmony_ci  assert a as char == c'\u0000';
313af6ab5fSopenharmony_ci  assert a as byte == 0;
323af6ab5fSopenharmony_ci
333af6ab5fSopenharmony_ci  let b : float = 70000.9921875;
343af6ab5fSopenharmony_ci  assert b as double == 70000.9921875;
353af6ab5fSopenharmony_ci  assert b as long == 70000;           // rounded, 70000 == 0x11170
363af6ab5fSopenharmony_ci  assert b as int == 70000;
373af6ab5fSopenharmony_ci  assert b as short == 4464;           // 4464 == 0x1170
383af6ab5fSopenharmony_ci  assert b as char == c'\u1170';
393af6ab5fSopenharmony_ci  assert b as byte == 112;             // 112 == 0x70
403af6ab5fSopenharmony_ci
413af6ab5fSopenharmony_ci  let c : long = 1193046;              // 1193046 == 0x123456
423af6ab5fSopenharmony_ci  assert c as int == 1193046;
433af6ab5fSopenharmony_ci  assert c as short == 13398;          // 13398 == 0x3456
443af6ab5fSopenharmony_ci  assert c as char == c'\u3456';
453af6ab5fSopenharmony_ci  assert c as byte == 86;              // 86 == 0x56
463af6ab5fSopenharmony_ci
473af6ab5fSopenharmony_ci  let d : int = 126977;                // 65537 == 0x1F001
483af6ab5fSopenharmony_ci  assert d as short == -4095;          // -4095 == 0xF001
493af6ab5fSopenharmony_ci  assert d as char == c'\uF001';
503af6ab5fSopenharmony_ci  assert d as byte == 1;               // 1 == 0x01
513af6ab5fSopenharmony_ci
523af6ab5fSopenharmony_ci  let e : short = -30875;              // -30875 == 0x8765
533af6ab5fSopenharmony_ci  assert e as double == -30875.0;
543af6ab5fSopenharmony_ci  assert e as float == -30875.0;
553af6ab5fSopenharmony_ci  assert e as long == -30875;          // -30875 == 0xFFFFFFFFFFFF8765
563af6ab5fSopenharmony_ci  assert e as int == -30875;           // -30875 == 0xFFFF8765
573af6ab5fSopenharmony_ci  assert e as char == c'\u8765';
583af6ab5fSopenharmony_ci  assert e as byte == 101;             // 101 == 0x65
593af6ab5fSopenharmony_ci
603af6ab5fSopenharmony_ci  let f : char = c'\uF001';
613af6ab5fSopenharmony_ci  assert f as double == 61441.0;
623af6ab5fSopenharmony_ci  assert f as float == 61441.0;
633af6ab5fSopenharmony_ci  assert f as long == 61441;            // 61441 == 0x000000000000F001
643af6ab5fSopenharmony_ci  assert f as int == 61441;             // 61441 == 0x0000F001
653af6ab5fSopenharmony_ci  assert f as short == 0xf001 as short; // -4095 == 0xF001
663af6ab5fSopenharmony_ci  assert f as short == -4095;
673af6ab5fSopenharmony_ci
683af6ab5fSopenharmony_ci  let g : byte = -128;
693af6ab5fSopenharmony_ci  assert g as double == -128.0;
703af6ab5fSopenharmony_ci  assert g as float == -128.0;
713af6ab5fSopenharmony_ci  assert g as long == -128;
723af6ab5fSopenharmony_ci  assert g as int == -128;
733af6ab5fSopenharmony_ci  assert g as short == -128;
743af6ab5fSopenharmony_ci  assert g as char == c'\uFF80';
753af6ab5fSopenharmony_ci  assert (-128) as byte == -128
763af6ab5fSopenharmony_ci  assert (-129) as byte == 127
773af6ab5fSopenharmony_ci
783af6ab5fSopenharmony_ci  let i : boolean = true;
793af6ab5fSopenharmony_ci  assert i as boolean == true;
803af6ab5fSopenharmony_ci
813af6ab5fSopenharmony_ci  i = false;
823af6ab5fSopenharmony_ci  assert i as boolean == false;
833af6ab5fSopenharmony_ci
843af6ab5fSopenharmony_ci  assert 4294967296.0 as byte == -1;
853af6ab5fSopenharmony_ci  assert 4294967296.0 as char == c'\uFFFF';
863af6ab5fSopenharmony_ci  assert 4294967296.0 as short == -1;
873af6ab5fSopenharmony_ci  assert 4294967296.0 as int == Int.MAX_VALUE;
883af6ab5fSopenharmony_ci  assert 4294967296.0 as long == 4294967296;
893af6ab5fSopenharmony_ci  assert -4294967296.0 as byte == 0;
903af6ab5fSopenharmony_ci  assert -4294967296.0 as char == c'\u0000';
913af6ab5fSopenharmony_ci  assert -4294967296.0 as short == 0;
923af6ab5fSopenharmony_ci  assert -4294967296.0 as int == Int.MIN_VALUE;
933af6ab5fSopenharmony_ci  assert -4294967296.0 as long == -4294967296;
943af6ab5fSopenharmony_ci
953af6ab5fSopenharmony_ci  return;
963af6ab5fSopenharmony_ci}
97