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_cideclare function print(arg:any, arg1?:any):string; 164514f5e3Sopenharmony_cideclare var ArkTools:any; 174514f5e3Sopenharmony_cifunction assert (expr: unknown, msg?: string): asserts expr { 184514f5e3Sopenharmony_ci if (!expr) throw new Error(msg); 194514f5e3Sopenharmony_ci} 204514f5e3Sopenharmony_ci 214514f5e3Sopenharmony_civar a : string = "12345"; 224514f5e3Sopenharmony_civar cr : string = "clashroyale"; 234514f5e3Sopenharmony_civar c = a + a.substring(2); 244514f5e3Sopenharmony_ciprint(c); 254514f5e3Sopenharmony_cia += a.substring(3); 264514f5e3Sopenharmony_ciprint(a); 274514f5e3Sopenharmony_cia = a + cr.substring(5); 284514f5e3Sopenharmony_ciprint(a); 294514f5e3Sopenharmony_ci 304514f5e3Sopenharmony_civar d = cr.substring(1) + a; 314514f5e3Sopenharmony_ciprint(d); 324514f5e3Sopenharmony_ci 334514f5e3Sopenharmony_cifunction test_undefined(message, message2, message3, message4) { 344514f5e3Sopenharmony_ci print(message + ', ' + message2 + ', ' + message3 + ', ' + message4); 354514f5e3Sopenharmony_ci} 364514f5e3Sopenharmony_citest_undefined('hello'); 374514f5e3Sopenharmony_ci 384514f5e3Sopenharmony_cilet as = "aaaaaaaa"; 394514f5e3Sopenharmony_cilet bs = "bbbbbbbb"; 404514f5e3Sopenharmony_cilet cs = "ccc"; 414514f5e3Sopenharmony_cilet abs = as + bs; 424514f5e3Sopenharmony_cilet abcs = abs + cs; 434514f5e3Sopenharmony_ciassert(abs == "aaaaaaaabbbbbbbb", "Error optimize string add"); 444514f5e3Sopenharmony_ciprint(abs == "aaaaaaaabbbbbbbbccc"); 454514f5e3Sopenharmony_ci 464514f5e3Sopenharmony_ci// multiple add case 474514f5e3Sopenharmony_civar Text1 = "[^-]*-"; 484514f5e3Sopenharmony_civar Text2 = Text1 + "([^-]" + Text1 + ")*-"; 494514f5e3Sopenharmony_civar Text3 = Text2 + ">?"; 504514f5e3Sopenharmony_civar Text4 = "<(!(--" + Text2 + ">|[^-]"; 514514f5e3Sopenharmony_ciprint(Text4); 524514f5e3Sopenharmony_ci 534514f5e3Sopenharmony_ci// loop opt case 544514f5e3Sopenharmony_civar stra = "aaaaaa"; 554514f5e3Sopenharmony_civar strb = "strb"; 564514f5e3Sopenharmony_ciprint(strb); 574514f5e3Sopenharmony_ciassert(ArkTools.isSlicedString(strb) == false, "Error optimize string add"); 584514f5e3Sopenharmony_cistrb = stra + "bbbbbbbb" 594514f5e3Sopenharmony_civar kk = 10; 604514f5e3Sopenharmony_civar strc = ""; 614514f5e3Sopenharmony_cifor (let i = 0; i < 3; i++) { 624514f5e3Sopenharmony_ci if (kk > 100) { 634514f5e3Sopenharmony_ci strc = strb + "c"; 644514f5e3Sopenharmony_ci } else { 654514f5e3Sopenharmony_ci strc = strb + "-"; 664514f5e3Sopenharmony_ci } 674514f5e3Sopenharmony_ci} 684514f5e3Sopenharmony_ciprint(strb); 694514f5e3Sopenharmony_cilet strbHasStringAddOpt: boolean = ArkTools.isSlicedString(strb); 704514f5e3Sopenharmony_ciassert(ArkTools.isSlicedString(strc) == false, "Error optimize string add"); 714514f5e3Sopenharmony_ci 724514f5e3Sopenharmony_ci// function call opt case 734514f5e3Sopenharmony_cifunction foo1(str) { 744514f5e3Sopenharmony_ci var strk = str + "kkk"; 754514f5e3Sopenharmony_ci for (let j = 0; j < 3; j++) { 764514f5e3Sopenharmony_ci if (strk.length > 5) { 774514f5e3Sopenharmony_ci var stre = str + "-"; 784514f5e3Sopenharmony_ci } else { 794514f5e3Sopenharmony_ci var stre = str + "+"; 804514f5e3Sopenharmony_ci } 814514f5e3Sopenharmony_ci } 824514f5e3Sopenharmony_ci} 834514f5e3Sopenharmony_cifoo1(strb); 844514f5e3Sopenharmony_ciprint(strb); 854514f5e3Sopenharmony_ci 864514f5e3Sopenharmony_ci// cocos app opt case 874514f5e3Sopenharmony_civar count = 9; 884514f5e3Sopenharmony_cifunction foo2(num) { 894514f5e3Sopenharmony_ci if (num < 0) { 904514f5e3Sopenharmony_ci return 3; 914514f5e3Sopenharmony_ci } else { 924514f5e3Sopenharmony_ci return "callthis"; 934514f5e3Sopenharmony_ci } 944514f5e3Sopenharmony_ci} 954514f5e3Sopenharmony_civar right = "hmos"; 964514f5e3Sopenharmony_ciif (count > 10) { 974514f5e3Sopenharmony_ci right += foo2(count); 984514f5e3Sopenharmony_ci} 994514f5e3Sopenharmony_civar e = "oooohhhhoooossss"; 1004514f5e3Sopenharmony_ciassert(ArkTools.isSlicedString(e) == false, "Error optimize string add"); 1014514f5e3Sopenharmony_cifor (var i = 0; i < count; i++) { 1024514f5e3Sopenharmony_ci e += right; 1034514f5e3Sopenharmony_ci} 1044514f5e3Sopenharmony_cilet eHasStringAddOpt: boolean = ArkTools.isSlicedString(e); 1054514f5e3Sopenharmony_ci 1064514f5e3Sopenharmony_cifunction foo3(str :string) { 1074514f5e3Sopenharmony_ci print(str); 1084514f5e3Sopenharmony_ci print(str.length); 1094514f5e3Sopenharmony_ci} 1104514f5e3Sopenharmony_ci 1114514f5e3Sopenharmony_cilet s:string = "aaaaaaaaaaaaaaaa" + "bbbbbbbbbbbbbb"; 1124514f5e3Sopenharmony_cilet s1:string = "aaaaaaaaaaaaaaaa" + "bbbbbbbbbbbbbb"; 1134514f5e3Sopenharmony_cilet ss:string = s + "-"; 1144514f5e3Sopenharmony_ci 1154514f5e3Sopenharmony_cifoo3(s); 1164514f5e3Sopenharmony_ciprint(s1 == s); 1174514f5e3Sopenharmony_ci 1184514f5e3Sopenharmony_ci// two const 1194514f5e3Sopenharmony_cilet str:string = "Hello World"; 1204514f5e3Sopenharmony_ciprint("Hello" + "World"); 1214514f5e3Sopenharmony_ciprint(str + "Hello"); 1224514f5e3Sopenharmony_ciprint("" + "" + "123" + ""); 1234514f5e3Sopenharmony_ci 1244514f5e3Sopenharmony_ci// one const 1254514f5e3Sopenharmony_cilet strs = ["OD", "Huawei", ""]; 1264514f5e3Sopenharmony_cifor (let i = 0; i<3; ++i) { 1274514f5e3Sopenharmony_ci let m:string = strs[i]; 1284514f5e3Sopenharmony_ci print("Hello, " + m); 1294514f5e3Sopenharmony_ci} 1304514f5e3Sopenharmony_ci 1314514f5e3Sopenharmony_ci// no const 1324514f5e3Sopenharmony_cifunction foo(flag) { 1334514f5e3Sopenharmony_ci let str = ["BUG", "full of bug"]; 1344514f5e3Sopenharmony_ci if (flag) { 1354514f5e3Sopenharmony_ci return str[0]; 1364514f5e3Sopenharmony_ci } else { 1374514f5e3Sopenharmony_ci return str[1]; 1384514f5e3Sopenharmony_ci } 1394514f5e3Sopenharmony_ci} 1404514f5e3Sopenharmony_cilet left:string = foo(true); 1414514f5e3Sopenharmony_cilet right1:string = foo(true); 1424514f5e3Sopenharmony_cilet right2:string = foo(false); 1434514f5e3Sopenharmony_ciprint(left + right1); 1444514f5e3Sopenharmony_ciprint(left + right2); 1454514f5e3Sopenharmony_ciprint(right2 + right2); 1464514f5e3Sopenharmony_ci 1474514f5e3Sopenharmony_cilet res1 = `string`; 1484514f5e3Sopenharmony_cifor (let i = 0; i < 10; i++) { 1494514f5e3Sopenharmony_ci res1 = res1 + i; 1504514f5e3Sopenharmony_ci} 1514514f5e3Sopenharmony_ciprint(res1); 1524514f5e3Sopenharmony_ci 1534514f5e3Sopenharmony_cilet res2 = `string`; 1544514f5e3Sopenharmony_cifor (let i = 0; i < 10; i++) { 1554514f5e3Sopenharmony_ci res2 = i + res2; 1564514f5e3Sopenharmony_ci} 1574514f5e3Sopenharmony_ciprint(res2); 1584514f5e3Sopenharmony_ci 1594514f5e3Sopenharmony_ciprint(true+""); 1604514f5e3Sopenharmony_ciprint(false+""); 1614514f5e3Sopenharmony_ciprint(undefined+""); 1624514f5e3Sopenharmony_ciprint(null+""); 1634514f5e3Sopenharmony_ci 1644514f5e3Sopenharmony_ciprint(""+true); 1654514f5e3Sopenharmony_ciprint(""+false); 1664514f5e3Sopenharmony_ciprint(""+undefined); 1674514f5e3Sopenharmony_ciprint(""+null); 1684514f5e3Sopenharmony_ci 1694514f5e3Sopenharmony_civar obj1 = { 1704514f5e3Sopenharmony_ci number: 6 1714514f5e3Sopenharmony_ci} 1724514f5e3Sopenharmony_ciprint(obj1.number+""); 1734514f5e3Sopenharmony_ci 1744514f5e3Sopenharmony_cia = `12`; 1754514f5e3Sopenharmony_cifor (let i = 0; i < 10; i++) { 1764514f5e3Sopenharmony_ci a += `${i}` 1774514f5e3Sopenharmony_ci} 1784514f5e3Sopenharmony_ciprint(a); 1794514f5e3Sopenharmony_ci 1804514f5e3Sopenharmony_ciif (ArkTools.isAOTCompiled(foo)) { 1814514f5e3Sopenharmony_ci // assert(strbHasStringAddOpt == true, "Not optimize string add"); 1824514f5e3Sopenharmony_ci // assert(eHasStringAddOpt == true, "Not optimize string add"); 1834514f5e3Sopenharmony_ci} 1844514f5e3Sopenharmony_ci 1854514f5e3Sopenharmony_ci// const utf-16 add test 1864514f5e3Sopenharmony_cilet cn_str:string = "中文测试字符串\n" 1874514f5e3Sopenharmony_cifunction foo4() { 1884514f5e3Sopenharmony_ci for (let i = 0; i < 20; i++) { 1894514f5e3Sopenharmony_ci cn_str += ("中文字符串测试一" + "中文字符串测试二\n") 1904514f5e3Sopenharmony_ci } 1914514f5e3Sopenharmony_ci print(cn_str) 1924514f5e3Sopenharmony_ci} 1934514f5e3Sopenharmony_cifoo4() 1944514f5e3Sopenharmony_ciprint("foo4 result:") 1954514f5e3Sopenharmony_ciprint(ArkTools.isAOTCompiled(foo4)) 1964514f5e3Sopenharmony_ciprint(ArkTools.isAOTDeoptimized(foo4)) 1974514f5e3Sopenharmony_ci 1984514f5e3Sopenharmony_ci// base += case 1994514f5e3Sopenharmony_cifunction foo5() { 2004514f5e3Sopenharmony_ci for (var e = "", i = 0; i < 20; i++) { 2014514f5e3Sopenharmony_ci e += "-"; 2024514f5e3Sopenharmony_ci } 2034514f5e3Sopenharmony_ci print(e) 2044514f5e3Sopenharmony_ci} 2054514f5e3Sopenharmony_ciprint("foo5 result:") 2064514f5e3Sopenharmony_cifoo5() 2074514f5e3Sopenharmony_ciprint(ArkTools.isAOTCompiled(foo5)) 2084514f5e3Sopenharmony_ciprint(ArkTools.isAOTDeoptimized(foo5))