1/*
2 * Copyright (c) 2023 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 */
15declare function print(arg:any):void;
16
17function testcase1() {
18    let testArray: Int32Array = new Int32Array([1, 2, 3]);
19    let len: number = testArray.length;
20    let a: number = testArray[0];
21    let res: number = 5 + len;
22    print(res)
23}
24
25function testcase2() {
26    let testArray: Int32Array = new Int32Array([1, 2, 3]);
27    let a: number = testArray[0];
28    let len: number = testArray.length - 1;
29    let res: number = 6 + len;
30    print(res)
31}
32
33function testcase3() {
34    let testArray: Int32Array = new Int32Array([1, 2, 3]);
35    let len: number = testArray.length;
36    let sum: number = 0;
37    for(let i = 0; i < len; i++) {
38        print(i + 1);
39        sum += testArray[i];
40    }
41}
42
43function testcase4() {
44    let testArray: Int32Array = new Int32Array([1, 2, 3]);
45    let len: number = testArray.length - 1;
46    let sum: number = 0;
47    for(let i = 0; i < len; i++) {
48        sum += testArray[i];
49        print(i + 1);
50    }
51}
52
53function testcase5() {
54    let testArray: number[] = [1, 2, 3];
55    let a: number = testArray[0];
56    let res: number = 5 + testArray.length;
57    print(res);
58}
59
60function testcase6() {
61    let testArray: number[] = [1, 2, 3];
62    let len: number = testArray.length - 1;
63    let sum: number = 0;
64    let i: number = 0;
65    for(let i = 0; i < len; i++) {
66        sum += testArray[i];
67        print(i + 1);
68    }
69}
70
71//mod CheckRightIsZero
72function testcase7() {
73    const a: number= 20;
74    let b: number = 5 % a;// not gen CheckRightIsZero
75    let c: number = 5 % b;// gen CheckRightIsZero
76}
77
78//mul_with_overcheck
79function testcase8(a:number, x:number) {
80    let z = a >>> 1;
81    let b: number = z % 10;//range[0, 4095]
82
83    let c: number = 10 * b;//not gen mul_with_overcheck, range[0,262143]
84    let d: number = c * b;//not gen mul_with_overcheck, range[0,1073741823]
85    let e: number = d * c;//gen mul_with_overcheck
86
87    x = x >>> 1;
88    let h: number = x * x;//gen mul_with_overcheck
89}
90
91testcase1();  // 8
92testcase2();  // 8
93
94testcase3();
95testcase4();
96
97testcase5(); 
98testcase6();
99
100testcase7();
101testcase8(4, 107341001);//deopt