14514f5e3Sopenharmony_ci/*
24514f5e3Sopenharmony_ci * Copyright (c) 2024 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(arg:any):string;
174514f5e3Sopenharmony_ci
184514f5e3Sopenharmony_cifunction testNumberParseFloat(a : any, shouldThrow = 0): any
194514f5e3Sopenharmony_ci{
204514f5e3Sopenharmony_ci    try {
214514f5e3Sopenharmony_ci        if (shouldThrow == 1) {
224514f5e3Sopenharmony_ci            throw Error("thr 1");
234514f5e3Sopenharmony_ci        }
244514f5e3Sopenharmony_ci        let x = Number.parseFloat(a);
254514f5e3Sopenharmony_ci        if (shouldThrow == 2) {
264514f5e3Sopenharmony_ci            throw Error("thr 2");
274514f5e3Sopenharmony_ci        }
284514f5e3Sopenharmony_ci        return x;
294514f5e3Sopenharmony_ci    } catch (e) {
304514f5e3Sopenharmony_ci        print("catch", "'" + e + "'", "in testNumberParseFloat");
314514f5e3Sopenharmony_ci        throw (e)
324514f5e3Sopenharmony_ci    } finally {
334514f5e3Sopenharmony_ci        print("exit testNumberParseFloat");
344514f5e3Sopenharmony_ci    }
354514f5e3Sopenharmony_ci}
364514f5e3Sopenharmony_ci
374514f5e3Sopenharmony_cifunction testParseFloat(a : any, shouldThrow = 0): any
384514f5e3Sopenharmony_ci{
394514f5e3Sopenharmony_ci    try {
404514f5e3Sopenharmony_ci        if (shouldThrow == 1) {
414514f5e3Sopenharmony_ci            throw Error("thr 1");
424514f5e3Sopenharmony_ci        }
434514f5e3Sopenharmony_ci        let x = parseFloat(a);
444514f5e3Sopenharmony_ci        if (shouldThrow == 2) {
454514f5e3Sopenharmony_ci            throw Error("thr 2");
464514f5e3Sopenharmony_ci        }
474514f5e3Sopenharmony_ci        return x;
484514f5e3Sopenharmony_ci    } catch (e) {
494514f5e3Sopenharmony_ci        print("catch", "'" + e + "'", "in testParseFloat");
504514f5e3Sopenharmony_ci        throw (e)
514514f5e3Sopenharmony_ci    } finally {
524514f5e3Sopenharmony_ci        print("exit testParseFloat");
534514f5e3Sopenharmony_ci    }
544514f5e3Sopenharmony_ci}
554514f5e3Sopenharmony_ci
564514f5e3Sopenharmony_ciprint(Number.parseFloat === parseFloat);
574514f5e3Sopenharmony_ci//: true
584514f5e3Sopenharmony_ci
594514f5e3Sopenharmony_cifunction test(a : any)
604514f5e3Sopenharmony_ci{
614514f5e3Sopenharmony_ci    let checks = [typeof a, a];
624514f5e3Sopenharmony_ci    print(checks)
634514f5e3Sopenharmony_ci}
644514f5e3Sopenharmony_ci
654514f5e3Sopenharmony_cifunction valueTest(testFunc : any) {
664514f5e3Sopenharmony_ci    test(testFunc("12"));
674514f5e3Sopenharmony_ci    test(testFunc("1.2"));
684514f5e3Sopenharmony_ci    test(testFunc(".2"));
694514f5e3Sopenharmony_ci    test(testFunc("-.2"));
704514f5e3Sopenharmony_ci    test(testFunc("2."));
714514f5e3Sopenharmony_ci    test(testFunc("-2."));
724514f5e3Sopenharmony_ci    test(testFunc("  \t \n-.2"));
734514f5e3Sopenharmony_ci    test(testFunc("-.2+2"));
744514f5e3Sopenharmony_ci    test(testFunc("12e-2"));
754514f5e3Sopenharmony_ci    test(testFunc("0.012E+2"));
764514f5e3Sopenharmony_ci    test(testFunc("."));
774514f5e3Sopenharmony_ci    test(testFunc("1.7976931348623159e+308"));
784514f5e3Sopenharmony_ci    test(testFunc("Infinity"));
794514f5e3Sopenharmony_ci    test(testFunc("-1.7976931348623159e+308"));
804514f5e3Sopenharmony_ci    test(testFunc("-Infinity"));
814514f5e3Sopenharmony_ci    test(testFunc("900719925474099267n"));
824514f5e3Sopenharmony_ci}
834514f5e3Sopenharmony_ci
844514f5e3Sopenharmony_civalueTest(testParseFloat)
854514f5e3Sopenharmony_ci//aot: [trace] aot inline builtin: Number.parseFloat, caller function name:#*#testParseFloat@builtinNumberParseFloat
864514f5e3Sopenharmony_ci//: exit testParseFloat
874514f5e3Sopenharmony_ci//aot: [trace] aot inline function name: #*#test@builtinNumberParseFloat caller function name: #*#valueTest@builtinNumberParseFloat
884514f5e3Sopenharmony_ci//: number,12
894514f5e3Sopenharmony_ci//aot: [trace] aot inline builtin: Number.parseFloat, caller function name:#*#testParseFloat@builtinNumberParseFloat
904514f5e3Sopenharmony_ci//: exit testParseFloat
914514f5e3Sopenharmony_ci//aot: [trace] aot inline function name: #*#test@builtinNumberParseFloat caller function name: #*#valueTest@builtinNumberParseFloat
924514f5e3Sopenharmony_ci//: number,1.2
934514f5e3Sopenharmony_ci//aot: [trace] aot inline builtin: Number.parseFloat, caller function name:#*#testParseFloat@builtinNumberParseFloat
944514f5e3Sopenharmony_ci//: exit testParseFloat
954514f5e3Sopenharmony_ci//aot: [trace] aot inline function name: #*#test@builtinNumberParseFloat caller function name: #*#valueTest@builtinNumberParseFloat
964514f5e3Sopenharmony_ci//: number,0.2
974514f5e3Sopenharmony_ci//aot: [trace] aot inline builtin: Number.parseFloat, caller function name:#*#testParseFloat@builtinNumberParseFloat
984514f5e3Sopenharmony_ci//: exit testParseFloat
994514f5e3Sopenharmony_ci//aot: [trace] aot inline function name: #*#test@builtinNumberParseFloat caller function name: #*#valueTest@builtinNumberParseFloat
1004514f5e3Sopenharmony_ci//: number,-0.2
1014514f5e3Sopenharmony_ci//aot: [trace] aot inline builtin: Number.parseFloat, caller function name:#*#testParseFloat@builtinNumberParseFloat
1024514f5e3Sopenharmony_ci//: exit testParseFloat
1034514f5e3Sopenharmony_ci//aot: [trace] aot inline function name: #*#test@builtinNumberParseFloat caller function name: #*#valueTest@builtinNumberParseFloat
1044514f5e3Sopenharmony_ci//: number,2
1054514f5e3Sopenharmony_ci//aot: [trace] aot inline builtin: Number.parseFloat, caller function name:#*#testParseFloat@builtinNumberParseFloat
1064514f5e3Sopenharmony_ci//: exit testParseFloat
1074514f5e3Sopenharmony_ci//aot: [trace] aot inline function name: #*#test@builtinNumberParseFloat caller function name: #*#valueTest@builtinNumberParseFloat
1084514f5e3Sopenharmony_ci//: number,-2
1094514f5e3Sopenharmony_ci//aot: [trace] aot inline builtin: Number.parseFloat, caller function name:#*#testParseFloat@builtinNumberParseFloat
1104514f5e3Sopenharmony_ci//: exit testParseFloat
1114514f5e3Sopenharmony_ci//: number,-0.2
1124514f5e3Sopenharmony_ci//aot: [trace] aot inline builtin: Number.parseFloat, caller function name:#*#testParseFloat@builtinNumberParseFloat
1134514f5e3Sopenharmony_ci//: exit testParseFloat
1144514f5e3Sopenharmony_ci//: number,-0.2
1154514f5e3Sopenharmony_ci//aot: [trace] aot inline builtin: Number.parseFloat, caller function name:#*#testParseFloat@builtinNumberParseFloat
1164514f5e3Sopenharmony_ci//: exit testParseFloat
1174514f5e3Sopenharmony_ci//: number,0.12
1184514f5e3Sopenharmony_ci//aot: [trace] aot inline builtin: Number.parseFloat, caller function name:#*#testParseFloat@builtinNumberParseFloat
1194514f5e3Sopenharmony_ci//: exit testParseFloat
1204514f5e3Sopenharmony_ci//: number,1.2
1214514f5e3Sopenharmony_ci//aot: [trace] aot inline builtin: Number.parseFloat, caller function name:#*#testParseFloat@builtinNumberParseFloat
1224514f5e3Sopenharmony_ci//: exit testParseFloat
1234514f5e3Sopenharmony_ci//: number,NaN
1244514f5e3Sopenharmony_ci//aot: [trace] aot inline builtin: Number.parseFloat, caller function name:#*#testParseFloat@builtinNumberParseFloat
1254514f5e3Sopenharmony_ci//: exit testParseFloat
1264514f5e3Sopenharmony_ci//: number,Infinity
1274514f5e3Sopenharmony_ci//aot: [trace] aot inline builtin: Number.parseFloat, caller function name:#*#testParseFloat@builtinNumberParseFloat
1284514f5e3Sopenharmony_ci//: exit testParseFloat
1294514f5e3Sopenharmony_ci//: number,Infinity
1304514f5e3Sopenharmony_ci//aot: [trace] aot inline builtin: Number.parseFloat, caller function name:#*#testParseFloat@builtinNumberParseFloat
1314514f5e3Sopenharmony_ci//: exit testParseFloat
1324514f5e3Sopenharmony_ci//: number,-Infinity
1334514f5e3Sopenharmony_ci//aot: [trace] aot inline builtin: Number.parseFloat, caller function name:#*#testParseFloat@builtinNumberParseFloat
1344514f5e3Sopenharmony_ci//: exit testParseFloat
1354514f5e3Sopenharmony_ci//: number,-Infinity
1364514f5e3Sopenharmony_ci//aot: [trace] aot inline builtin: Number.parseFloat, caller function name:#*#testParseFloat@builtinNumberParseFloat
1374514f5e3Sopenharmony_ci//: exit testParseFloat
1384514f5e3Sopenharmony_ci//: number,900719925474099300
1394514f5e3Sopenharmony_ci
1404514f5e3Sopenharmony_civalueTest(testNumberParseFloat)
1414514f5e3Sopenharmony_ci//aot: [trace] aot inline builtin: Number.parseFloat, caller function name:#*#testNumberParseFloat@builtinNumberParseFloat
1424514f5e3Sopenharmony_ci//: exit testNumberParseFloat
1434514f5e3Sopenharmony_ci//aot: [trace] aot inline function name: #*#test@builtinNumberParseFloat caller function name: #*#valueTest@builtinNumberParseFloat
1444514f5e3Sopenharmony_ci//: number,12
1454514f5e3Sopenharmony_ci//aot: [trace] aot inline builtin: Number.parseFloat, caller function name:#*#testNumberParseFloat@builtinNumberParseFloat
1464514f5e3Sopenharmony_ci//: exit testNumberParseFloat
1474514f5e3Sopenharmony_ci//aot: [trace] aot inline function name: #*#test@builtinNumberParseFloat caller function name: #*#valueTest@builtinNumberParseFloat
1484514f5e3Sopenharmony_ci//: number,1.2
1494514f5e3Sopenharmony_ci//aot: [trace] aot inline builtin: Number.parseFloat, caller function name:#*#testNumberParseFloat@builtinNumberParseFloat
1504514f5e3Sopenharmony_ci//: exit testNumberParseFloat
1514514f5e3Sopenharmony_ci//aot: [trace] aot inline function name: #*#test@builtinNumberParseFloat caller function name: #*#valueTest@builtinNumberParseFloat
1524514f5e3Sopenharmony_ci//: number,0.2
1534514f5e3Sopenharmony_ci//aot: [trace] aot inline builtin: Number.parseFloat, caller function name:#*#testNumberParseFloat@builtinNumberParseFloat
1544514f5e3Sopenharmony_ci//: exit testNumberParseFloat
1554514f5e3Sopenharmony_ci//aot: [trace] aot inline function name: #*#test@builtinNumberParseFloat caller function name: #*#valueTest@builtinNumberParseFloat
1564514f5e3Sopenharmony_ci//: number,-0.2
1574514f5e3Sopenharmony_ci//aot: [trace] aot inline builtin: Number.parseFloat, caller function name:#*#testNumberParseFloat@builtinNumberParseFloat
1584514f5e3Sopenharmony_ci//: exit testNumberParseFloat
1594514f5e3Sopenharmony_ci//aot: [trace] aot inline function name: #*#test@builtinNumberParseFloat caller function name: #*#valueTest@builtinNumberParseFloat
1604514f5e3Sopenharmony_ci//: number,2
1614514f5e3Sopenharmony_ci//aot: [trace] aot inline builtin: Number.parseFloat, caller function name:#*#testNumberParseFloat@builtinNumberParseFloat
1624514f5e3Sopenharmony_ci//: exit testNumberParseFloat
1634514f5e3Sopenharmony_ci//aot: [trace] aot inline function name: #*#test@builtinNumberParseFloat caller function name: #*#valueTest@builtinNumberParseFloat
1644514f5e3Sopenharmony_ci//: number,-2
1654514f5e3Sopenharmony_ci//aot: [trace] aot inline builtin: Number.parseFloat, caller function name:#*#testNumberParseFloat@builtinNumberParseFloat
1664514f5e3Sopenharmony_ci//: exit testNumberParseFloat
1674514f5e3Sopenharmony_ci//: number,-0.2
1684514f5e3Sopenharmony_ci//aot: [trace] aot inline builtin: Number.parseFloat, caller function name:#*#testNumberParseFloat@builtinNumberParseFloat
1694514f5e3Sopenharmony_ci//: exit testNumberParseFloat
1704514f5e3Sopenharmony_ci//: number,-0.2
1714514f5e3Sopenharmony_ci//aot: [trace] aot inline builtin: Number.parseFloat, caller function name:#*#testNumberParseFloat@builtinNumberParseFloat
1724514f5e3Sopenharmony_ci//: exit testNumberParseFloat
1734514f5e3Sopenharmony_ci//: number,0.12
1744514f5e3Sopenharmony_ci//aot: [trace] aot inline builtin: Number.parseFloat, caller function name:#*#testNumberParseFloat@builtinNumberParseFloat
1754514f5e3Sopenharmony_ci//: exit testNumberParseFloat
1764514f5e3Sopenharmony_ci//: number,1.2
1774514f5e3Sopenharmony_ci//aot: [trace] aot inline builtin: Number.parseFloat, caller function name:#*#testNumberParseFloat@builtinNumberParseFloat
1784514f5e3Sopenharmony_ci//: exit testNumberParseFloat
1794514f5e3Sopenharmony_ci//: number,NaN
1804514f5e3Sopenharmony_ci//aot: [trace] aot inline builtin: Number.parseFloat, caller function name:#*#testNumberParseFloat@builtinNumberParseFloat
1814514f5e3Sopenharmony_ci//: exit testNumberParseFloat
1824514f5e3Sopenharmony_ci//: number,Infinity
1834514f5e3Sopenharmony_ci//aot: [trace] aot inline builtin: Number.parseFloat, caller function name:#*#testNumberParseFloat@builtinNumberParseFloat
1844514f5e3Sopenharmony_ci//: exit testNumberParseFloat
1854514f5e3Sopenharmony_ci//: number,Infinity
1864514f5e3Sopenharmony_ci//aot: [trace] aot inline builtin: Number.parseFloat, caller function name:#*#testNumberParseFloat@builtinNumberParseFloat
1874514f5e3Sopenharmony_ci//: exit testNumberParseFloat
1884514f5e3Sopenharmony_ci//: number,-Infinity
1894514f5e3Sopenharmony_ci//aot: [trace] aot inline builtin: Number.parseFloat, caller function name:#*#testNumberParseFloat@builtinNumberParseFloat
1904514f5e3Sopenharmony_ci//: exit testNumberParseFloat
1914514f5e3Sopenharmony_ci//: number,-Infinity
1924514f5e3Sopenharmony_ci//aot: [trace] aot inline builtin: Number.parseFloat, caller function name:#*#testNumberParseFloat@builtinNumberParseFloat
1934514f5e3Sopenharmony_ci//: exit testNumberParseFloat
1944514f5e3Sopenharmony_ci//: number,900719925474099300
1954514f5e3Sopenharmony_ci
1964514f5e3Sopenharmony_ci// Check deopt:
1974514f5e3Sopenharmony_cilet obj = {};
1984514f5e3Sopenharmony_ciobj.toString = function () : string {
1994514f5e3Sopenharmony_ci    return "22";
2004514f5e3Sopenharmony_ci}
2014514f5e3Sopenharmony_citest(testParseFloat(obj));
2024514f5e3Sopenharmony_ci//aot: [trace] aot inline builtin: Number.parseFloat, caller function name:#*#testParseFloat@builtinNumberParseFloat
2034514f5e3Sopenharmony_ci//aot: [trace] Check Type: NotString1
2044514f5e3Sopenharmony_ci//: exit testParseFloat
2054514f5e3Sopenharmony_ci//aot: [trace] aot inline function name: #*#test@builtinNumberParseFloat caller function name: func_main_0@builtinNumberParseFloat
2064514f5e3Sopenharmony_ci//: number,22
2074514f5e3Sopenharmony_citest(testNumberParseFloat(obj));
2084514f5e3Sopenharmony_ci//aot: [trace] aot inline builtin: Number.parseFloat, caller function name:#*#testNumberParseFloat@builtinNumberParseFloat
2094514f5e3Sopenharmony_ci//aot: [trace] Check Type: NotString1
2104514f5e3Sopenharmony_ci//: exit testNumberParseFloat
2114514f5e3Sopenharmony_ci//aot: [trace] aot inline function name: #*#test@builtinNumberParseFloat caller function name: func_main_0@builtinNumberParseFloat
2124514f5e3Sopenharmony_ci//: number,22
2134514f5e3Sopenharmony_ci
2144514f5e3Sopenharmony_ciobj = new Number(22);
2154514f5e3Sopenharmony_citest(testParseFloat(obj));
2164514f5e3Sopenharmony_ci//aot: [trace] aot inline builtin: Number.parseFloat, caller function name:#*#testParseFloat@builtinNumberParseFloat
2174514f5e3Sopenharmony_ci//aot: [trace] Check Type: NotString1
2184514f5e3Sopenharmony_ci//: exit testParseFloat
2194514f5e3Sopenharmony_ci//aot: [trace] aot inline function name: #*#test@builtinNumberParseFloat caller function name: func_main_0@builtinNumberParseFloat
2204514f5e3Sopenharmony_ci//: number,22
2214514f5e3Sopenharmony_citest(testNumberParseFloat(obj));
2224514f5e3Sopenharmony_ci//aot: [trace] aot inline builtin: Number.parseFloat, caller function name:#*#testNumberParseFloat@builtinNumberParseFloat
2234514f5e3Sopenharmony_ci//aot: [trace] Check Type: NotString1
2244514f5e3Sopenharmony_ci//: exit testNumberParseFloat
2254514f5e3Sopenharmony_ci//aot: [trace] aot inline function name: #*#test@builtinNumberParseFloat caller function name: func_main_0@builtinNumberParseFloat
2264514f5e3Sopenharmony_ci//: number,22
2274514f5e3Sopenharmony_ci
2284514f5e3Sopenharmony_ci// Check deopt with throw:
2294514f5e3Sopenharmony_citry {
2304514f5e3Sopenharmony_ci    test(testParseFloat(obj, 1));
2314514f5e3Sopenharmony_ci} catch (e) {}
2324514f5e3Sopenharmony_ci//: catch 'Error: thr 1' in testParseFloat
2334514f5e3Sopenharmony_ci//: exit testParseFloat
2344514f5e3Sopenharmony_citry {
2354514f5e3Sopenharmony_ci    test(testNumberParseFloat(obj, 1));
2364514f5e3Sopenharmony_ci} catch (e) {}
2374514f5e3Sopenharmony_ci//: catch 'Error: thr 1' in testNumberParseFloat
2384514f5e3Sopenharmony_ci//: exit testNumberParseFloat
2394514f5e3Sopenharmony_ci
2404514f5e3Sopenharmony_citry {
2414514f5e3Sopenharmony_ci    test(testParseFloat(obj, 2));
2424514f5e3Sopenharmony_ci} catch (e) {}
2434514f5e3Sopenharmony_ci//aot: [trace] aot inline builtin: Number.parseFloat, caller function name:#*#testParseFloat@builtinNumberParseFloat
2444514f5e3Sopenharmony_ci//aot: [trace] Check Type: NotString1
2454514f5e3Sopenharmony_ci//: catch 'Error: thr 2' in testParseFloat
2464514f5e3Sopenharmony_ci//: exit testParseFloat
2474514f5e3Sopenharmony_citry {
2484514f5e3Sopenharmony_ci    test(testNumberParseFloat(obj, 2));
2494514f5e3Sopenharmony_ci} catch (e) {}
2504514f5e3Sopenharmony_ci//aot: [trace] aot inline builtin: Number.parseFloat, caller function name:#*#testNumberParseFloat@builtinNumberParseFloat
2514514f5e3Sopenharmony_ci//aot: [trace] Check Type: NotString1
2524514f5e3Sopenharmony_ci//: catch 'Error: thr 2' in testNumberParseFloat
2534514f5e3Sopenharmony_ci//: exit testNumberParseFloat
2544514f5e3Sopenharmony_ci
2554514f5e3Sopenharmony_ci// Check replace:
2564514f5e3Sopenharmony_ciNumber.parseFloat = () => { throw "CheckReplace" }
2574514f5e3Sopenharmony_ci
2584514f5e3Sopenharmony_citest(testParseFloat("1"));
2594514f5e3Sopenharmony_ci
2604514f5e3Sopenharmony_ci//aot: [trace] aot inline builtin: Number.parseFloat, caller function name:#*#testParseFloat@builtinNumberParseFloat
2614514f5e3Sopenharmony_ci//: exit testParseFloat
2624514f5e3Sopenharmony_ci//aot: [trace] aot inline function name: #*#test@builtinNumberParseFloat caller function name: func_main_0@builtinNumberParseFloat
2634514f5e3Sopenharmony_ci//: number,1
2644514f5e3Sopenharmony_ci
2654514f5e3Sopenharmony_citry {
2664514f5e3Sopenharmony_ci    test(testNumberParseFloat("1"));
2674514f5e3Sopenharmony_ci} catch (e) {
2684514f5e3Sopenharmony_ci    if (e != "CheckReplace") throw Error();
2694514f5e3Sopenharmony_ci}
2704514f5e3Sopenharmony_ci//aot: [trace] Check Type: NotCallTarget1
2714514f5e3Sopenharmony_ci//: catch 'CheckReplace' in testNumberParseFloat
2724514f5e3Sopenharmony_ci//: exit testNumberParseFloat
273