1/*
2 * Copyright (c) 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
16declare function print(str:any):string;
17declare var ArkTools:any;
18var b:Boolean = new Boolean(2);
19print(b);
20
21var n:Number = new Number(123);
22print(n);
23
24var o:Object = new Object("newobj");
25print(o);
26
27var a:Array<number> = new Array(10);
28print(a.length);
29
30class TClass {
31    dd: number;
32
33    div(v1: number[]): number {
34        return 1.0 / v1[0];
35    }
36    constructor(p1: number[]) {
37        let d = this.div(p1);
38        this.dd = d / 1.0;
39    }
40}
41
42let p1: number[] = [-10, 10, -10];
43new TClass(p1);
44
45function foo() {
46    print(new.target.name);
47    return "pass";
48}
49
50function fun() {
51    return "pass";
52}
53
54function foo1(a: any) {
55    print(new.target.name);
56    return a;
57}
58
59function func1(value: number): number {
60    print(new.target.name);
61    print(value);
62    return value;
63}
64
65function funcv(value: number, value1: number, value2: number, value3: number, value4: number, value5: number, value6: number, value7: number): number {
66    print(new.target.name);
67    print(value);
68    print(value1);
69    print(value2);
70    print(value3);
71    print(value4);
72    return 100;
73}
74
75class A {
76    public mode: number = 1;
77
78    constructor() {
79        print("A:constructor!");
80        print(new.target.name);
81        const size = 50;
82        this.mode = 4;
83    }
84
85    update (): void {
86        print(new.target);
87        print("A update");
88    }
89}
90
91class D extends A {
92    public len: number = 1;
93
94    constructor() {
95        super();
96        super.update();
97        print("D:constructor!");
98        print(new.target.name);
99        const size = 50;
100        this.len = 10;
101    }
102}
103
104class B {
105    public mode: number = 1;
106
107    constructor(dt: number, dt1: number, dt2: number) {
108        print("B:constructor!");
109        print(dt);
110        print(dt1);
111        print(new.target.name);
112        const size = 50;
113        this.mode = 4;
114    }
115    
116    update (dt: number, dt1: number): void {
117        print(new.target);
118        this.mode = dt1;
119        print(dt);
120    }
121}
122
123class C extends B {
124    public color: number = 5;
125
126    constructor(dt: number, dt1: number, dt2: number) {
127        super(dt, dt1, dt2);
128        super.update(dt, dt1);
129        print("C:constructor!");
130        print(new.target.name);
131        this.color = dt2;
132    }
133}
134
135
136function funcAsm(value: number, value1: number, value2: number): number {
137    print(new.target.name);
138    print(value);
139    print(value1);
140    var s: A = new A(1, 4);
141    var s1: B = new B(2, 3);
142    return value;
143}
144
145
146function Parent(name: string): void{
147    print(new.target);
148    this.name = name;
149    this.arr = [1,2,3];
150}
151
152// 2
153function Child(name: string, age: number): void {
154    print(new.target.name);
155    Parent.call(this, name)
156    this.age = age;
157}
158
159var systems: A = new A(1);
160var systems1: B = new B(2, 3);
161var systems1: D = new D();
162var systems2: C = new C(4, 5);
163new foo();
164new foo1(new Boolean(2));
165new func1(1);
166new funcAsm(4, 5, 6);
167new funcv(0, 1, 2, 3, 4, 5, 6, 7);
168new funcv(0, 1, 2, 3, 4, 5);
169new Child("jjj", 15);
170print(ArkTools.isAOTCompiled(fun));
171new fun();
172print(ArkTools.isAOTCompiled(fun));
173print(ArkTools.isAOTCompiled(foo));
174print(ArkTools.isAOTCompiled(foo1));
175print(ArkTools.isAOTCompiled(funcAsm));
176print(ArkTools.isAOTCompiled(funcv));
177print(ArkTools.isAOTCompiled(Child));
178print(ArkTools.isAOTCompiled(Parent));
179print(ArkTools.isAOTCompiled(A));
180print(ArkTools.isAOTCompiled(D));
181print(ArkTools.isAOTCompiled(C));
182print(ArkTools.isAOTCompiled(D));
183