xref: /arkcompiler/ets_runtime/test/aottest/ic/ic.ts (revision 4514f5e3)
14514f5e3Sopenharmony_ci/*
24514f5e3Sopenharmony_ci * Copyright (c) 2023 Huawei Device Co., Ltd.
34514f5e3Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
44514f5e3Sopenharmony_ci * you may not use this file except in compliance with the License.
54514f5e3Sopenharmony_ci * You may obtain a copy of the License at
64514f5e3Sopenharmony_ci *
74514f5e3Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
84514f5e3Sopenharmony_ci *
94514f5e3Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
104514f5e3Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
114514f5e3Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
124514f5e3Sopenharmony_ci * See the License for the specific language governing permissions and
134514f5e3Sopenharmony_ci * limitations under the License.
144514f5e3Sopenharmony_ci */
154514f5e3Sopenharmony_ci
164514f5e3Sopenharmony_cideclare function print(a:any):string;
174514f5e3Sopenharmony_ci
184514f5e3Sopenharmony_civar LOOP_TIME = 100;
194514f5e3Sopenharmony_ci
204514f5e3Sopenharmony_ciclass C {
214514f5e3Sopenharmony_ci    x:number;
224514f5e3Sopenharmony_ci    constructor() {
234514f5e3Sopenharmony_ci        this.x = 123;
244514f5e3Sopenharmony_ci    }
254514f5e3Sopenharmony_ci}
264514f5e3Sopenharmony_ci
274514f5e3Sopenharmony_cilet c1 = new C();
284514f5e3Sopenharmony_ciprint(c1.x);
294514f5e3Sopenharmony_ci
304514f5e3Sopenharmony_cilet c2 = new C();
314514f5e3Sopenharmony_ciprint(c2.x);
324514f5e3Sopenharmony_ci
334514f5e3Sopenharmony_ci
344514f5e3Sopenharmony_cifunction foo(p) {
354514f5e3Sopenharmony_ci    return p[1]
364514f5e3Sopenharmony_ci}
374514f5e3Sopenharmony_ci
384514f5e3Sopenharmony_ci{
394514f5e3Sopenharmony_ci	let a = [1, 2]
404514f5e3Sopenharmony_ci	let b = [1, 2.1, 3]
414514f5e3Sopenharmony_ci	for (let i = 0; i < 10000; i++) {
424514f5e3Sopenharmony_ci		var a1 = foo(a)
434514f5e3Sopenharmony_ci		var a2 = foo(b);
444514f5e3Sopenharmony_ci	}
454514f5e3Sopenharmony_ci	print(a1)
464514f5e3Sopenharmony_ci	print(a2)
474514f5e3Sopenharmony_ci}
484514f5e3Sopenharmony_ci
494514f5e3Sopenharmony_ci// test stownbyindex ic: (too many loop will fail at debug unittest timeout)
504514f5e3Sopenharmony_ciclass Attrs {
514514f5e3Sopenharmony_ci	constructor(a : number, b : number, c : number) {
524514f5e3Sopenharmony_ci		this.x = a;
534514f5e3Sopenharmony_ci		this.y = b;
544514f5e3Sopenharmony_ci		this.z = c;
554514f5e3Sopenharmony_ci	}
564514f5e3Sopenharmony_ci	x : number;
574514f5e3Sopenharmony_ci	y : number;
584514f5e3Sopenharmony_ci	z : number;
594514f5e3Sopenharmony_ci}
604514f5e3Sopenharmony_ci
614514f5e3Sopenharmony_cifor (let i = 0; i < LOOP_TIME; i++){
624514f5e3Sopenharmony_ci	for (let j = 0; j < 5; ++j) {
634514f5e3Sopenharmony_ci		var _attrs : Attrs[] = [
644514f5e3Sopenharmony_ci			new Attrs(1, 1, 1),
654514f5e3Sopenharmony_ci			new Attrs(2, 2, 2),
664514f5e3Sopenharmony_ci			new Attrs(3, 3, 3),
674514f5e3Sopenharmony_ci			new Attrs(4, 4, 4),
684514f5e3Sopenharmony_ci			new Attrs(5, 5, 5),
694514f5e3Sopenharmony_ci		];
704514f5e3Sopenharmony_ci		if (i == LOOP_TIME - 1) {
714514f5e3Sopenharmony_ci			print(_attrs[j].x);
724514f5e3Sopenharmony_ci		}
734514f5e3Sopenharmony_ci	}
744514f5e3Sopenharmony_ci}
754514f5e3Sopenharmony_ci
764514f5e3Sopenharmony_ciconst tests = [
774514f5e3Sopenharmony_ci	[99.99, "ark"],
784514f5e3Sopenharmony_ci	[-88.48, "brk"],
794514f5e3Sopenharmony_ci	[-1024, "crk"],
804514f5e3Sopenharmony_ci	[6666, "drk"],
814514f5e3Sopenharmony_ci];
824514f5e3Sopenharmony_ci
834514f5e3Sopenharmony_cifor (let i = 0; i < LOOP_TIME; i++){
844514f5e3Sopenharmony_ci    for (const [number, strData] of tests) {
854514f5e3Sopenharmony_ci		if (i == LOOP_TIME - 1) {
864514f5e3Sopenharmony_ci			print(number);
874514f5e3Sopenharmony_ci			print(strData);
884514f5e3Sopenharmony_ci		}
894514f5e3Sopenharmony_ci    }
904514f5e3Sopenharmony_ci}
914514f5e3Sopenharmony_ci
924514f5e3Sopenharmony_ciconst exceptions = {
934514f5e3Sopenharmony_ci	"minute" : {
944514f5e3Sopenharmony_ci	  	"-1" : "1 minute ago",
954514f5e3Sopenharmony_ci	  	'0' : 'this minute',
964514f5e3Sopenharmony_ci	  	"1" : "in 1 minute",
974514f5e3Sopenharmony_ci	},
984514f5e3Sopenharmony_ci	"second" : {
994514f5e3Sopenharmony_ci	  	"-1" : "1 second ago",
1004514f5e3Sopenharmony_ci	  	"0" : "now",
1014514f5e3Sopenharmony_ci	  	"1" : "in 1 second",
1024514f5e3Sopenharmony_ci	},
1034514f5e3Sopenharmony_ci};
1044514f5e3Sopenharmony_ci
1054514f5e3Sopenharmony_ciconst units = [
1064514f5e3Sopenharmony_ci	"second",
1074514f5e3Sopenharmony_ci	"minute",
1084514f5e3Sopenharmony_ci];
1094514f5e3Sopenharmony_ci
1104514f5e3Sopenharmony_cifor (let i = 0; i < LOOP_TIME; i++){
1114514f5e3Sopenharmony_ci    for (const unit of units) {
1124514f5e3Sopenharmony_ci		const expected = unit in exceptions ?
1134514f5e3Sopenharmony_ci			[exceptions[unit]["1"], exceptions[unit]["0"], exceptions[unit]["0"], exceptions[unit]["-1"]] :
1144514f5e3Sopenharmony_ci			[`in 1 ${unit}`, `in 0 ${unit}s`, `0 ${unit}s ago`, `1 ${unit} ago`];
1154514f5e3Sopenharmony_ci		if (i == LOOP_TIME - 1) {
1164514f5e3Sopenharmony_ci			print(expected);
1174514f5e3Sopenharmony_ci		}
1184514f5e3Sopenharmony_ci    }
1194514f5e3Sopenharmony_ci}
1204514f5e3Sopenharmony_ci
1214514f5e3Sopenharmony_cifor (let i = 0; i < LOOP_TIME; i++){
1224514f5e3Sopenharmony_ci    Object.defineProperty(Array.prototype, '0', {
1234514f5e3Sopenharmony_ci        value: 42,
1244514f5e3Sopenharmony_ci    });
1254514f5e3Sopenharmony_ci    let arr = [, 2, 3];
1264514f5e3Sopenharmony_ci    arr.pop();
1274514f5e3Sopenharmony_ci	if (i == LOOP_TIME - 1) {
1284514f5e3Sopenharmony_ci		print(arr[1]);
1294514f5e3Sopenharmony_ci	}
1304514f5e3Sopenharmony_ci}
1314514f5e3Sopenharmony_ci
1324514f5e3Sopenharmony_ci
1334514f5e3Sopenharmony_cifor (let i = 0; i < LOOP_TIME; i++){
1344514f5e3Sopenharmony_ci    var a : any[] = [ ["ok"], [1, 2, 3] ];
1354514f5e3Sopenharmony_ci    var b = {
1364514f5e3Sopenharmony_ci        1 : ["yes", "no"],
1374514f5e3Sopenharmony_ci        "100" : [4, 5],
1384514f5e3Sopenharmony_ci    }
1394514f5e3Sopenharmony_ci	if (i == LOOP_TIME - 1) {
1404514f5e3Sopenharmony_ci		print(a[0][0]);
1414514f5e3Sopenharmony_ci		print(a[1][0]);
1424514f5e3Sopenharmony_ci		print(a[1][1]);
1434514f5e3Sopenharmony_ci		print(a[1][2]);
1444514f5e3Sopenharmony_ci		
1454514f5e3Sopenharmony_ci		print(b[1][0]);
1464514f5e3Sopenharmony_ci		print(b[1][1]);
1474514f5e3Sopenharmony_ci		print(b["100"][0]);
1484514f5e3Sopenharmony_ci		print(b["100"][1]);
1494514f5e3Sopenharmony_ci	}
1504514f5e3Sopenharmony_ci}
1514514f5e3Sopenharmony_ci
1524514f5e3Sopenharmony_ci
153