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_civar x = [1,2.5,NaN,undefined,null,false,true,"ark"]
184514f5e3Sopenharmony_ci//aot: [trace] aot inline builtin: Array.prototype.find, caller function name:func_main_0@builtinArrayFindFindIndex
194514f5e3Sopenharmony_civar inlineFind = x.find(x=>{
204514f5e3Sopenharmony_ci  return x === "ark"
214514f5e3Sopenharmony_ci})
224514f5e3Sopenharmony_ci//aot: [trace] aot inline builtin: Array.prototype.find, caller function name:func_main_0@builtinArrayFindFindIndex
234514f5e3Sopenharmony_civar inlineNotFind = x.find(x=>{
244514f5e3Sopenharmony_ci  return x === "a_rk"
254514f5e3Sopenharmony_ci})
264514f5e3Sopenharmony_ci//aot: [trace] aot inline builtin: Array.prototype.findIndex, caller function name:func_main_0@builtinArrayFindFindIndex
274514f5e3Sopenharmony_civar inlineFindIndex = x.findIndex(x=>{
284514f5e3Sopenharmony_ci  return x === "ark"
294514f5e3Sopenharmony_ci})
304514f5e3Sopenharmony_ci//aot: [trace] aot inline builtin: Array.prototype.findIndex, caller function name:func_main_0@builtinArrayFindFindIndex
314514f5e3Sopenharmony_civar inlineNotFindIndex = x.findIndex(x=>{
324514f5e3Sopenharmony_ci  return x === "a_rk"
334514f5e3Sopenharmony_ci})
344514f5e3Sopenharmony_ci
354514f5e3Sopenharmony_ciprint(inlineFind) //: ark
364514f5e3Sopenharmony_ciprint(inlineNotFind) //: undefined
374514f5e3Sopenharmony_ciprint(inlineFindIndex) //: 7
384514f5e3Sopenharmony_ciprint(inlineNotFindIndex) //: -1
394514f5e3Sopenharmony_ci
404514f5e3Sopenharmony_ci//aot: [trace] aot inline builtin: Array.prototype.find, caller function name:func_main_0@builtinArrayFindFindIndex
414514f5e3Sopenharmony_civar inlineFindNumber = x.find(x=>{
424514f5e3Sopenharmony_ci  return x == "1"
434514f5e3Sopenharmony_ci})
444514f5e3Sopenharmony_ci//aot: [trace] aot inline builtin: Array.prototype.find, caller function name:func_main_0@builtinArrayFindFindIndex
454514f5e3Sopenharmony_civar inlineNotFindNumber = x.find(x=>{
464514f5e3Sopenharmony_ci  return x === "1"
474514f5e3Sopenharmony_ci})
484514f5e3Sopenharmony_ci//aot: [trace] aot inline builtin: Array.prototype.findIndex, caller function name:func_main_0@builtinArrayFindFindIndex
494514f5e3Sopenharmony_civar inlineFindNumberIndex = x.findIndex(x=>{
504514f5e3Sopenharmony_ci  return x > 1
514514f5e3Sopenharmony_ci})
524514f5e3Sopenharmony_ci//aot: [trace] aot inline builtin: Array.prototype.findIndex, caller function name:func_main_0@builtinArrayFindFindIndex
534514f5e3Sopenharmony_civar inlineNotFindNumberIndex = x.findIndex(x=>{
544514f5e3Sopenharmony_ci  return x < false
554514f5e3Sopenharmony_ci})
564514f5e3Sopenharmony_ci
574514f5e3Sopenharmony_ciprint(inlineFindNumber) //: 1
584514f5e3Sopenharmony_ciprint(inlineNotFindNumber) //: undefined
594514f5e3Sopenharmony_ciprint(inlineFindNumberIndex) //: 1
604514f5e3Sopenharmony_ciprint(inlineNotFindNumberIndex) //: -1
614514f5e3Sopenharmony_ci
624514f5e3Sopenharmony_ci// Check inside try-block
634514f5e3Sopenharmony_citry {
644514f5e3Sopenharmony_ci  //aot: [trace] aot inline builtin: Array.prototype.find, caller function name:func_main_0@builtinArrayFindFindIndex
654514f5e3Sopenharmony_ci  print(x.find(x => true)) //: 1
664514f5e3Sopenharmony_ci  //aot: [trace] aot inline builtin: Array.prototype.findIndex, caller function name:func_main_0@builtinArrayFindFindIndex
674514f5e3Sopenharmony_ci  print(x.findIndex(x => true)) //: 0
684514f5e3Sopenharmony_ci} catch(e) {
694514f5e3Sopenharmony_ci}
704514f5e3Sopenharmony_ci
714514f5e3Sopenharmony_ci// Check without args
724514f5e3Sopenharmony_citry {
734514f5e3Sopenharmony_ci  print(x.find())
744514f5e3Sopenharmony_ci} catch(e) {
754514f5e3Sopenharmony_ci  print(e) //: TypeError: the predicate is not callable.
764514f5e3Sopenharmony_ci}
774514f5e3Sopenharmony_citry {
784514f5e3Sopenharmony_ci  print(x.findIndex())
794514f5e3Sopenharmony_ci} catch(e) {
804514f5e3Sopenharmony_ci  print(e) //: TypeError: the predicate is not callable.
814514f5e3Sopenharmony_ci}
824514f5e3Sopenharmony_ci
834514f5e3Sopenharmony_ci//aot: [trace] aot inline builtin: Array.prototype.find, caller function name:func_main_0@builtinArrayFindFindIndex
844514f5e3Sopenharmony_ciprint(x.find(() => {})) //: undefined
854514f5e3Sopenharmony_ci//aot: [trace] aot inline builtin: Array.prototype.find, caller function name:func_main_0@builtinArrayFindFindIndex
864514f5e3Sopenharmony_ciprint(x.find(x => true)) //: 1
874514f5e3Sopenharmony_ci//aot: [trace] aot inline builtin: Array.prototype.find, caller function name:func_main_0@builtinArrayFindFindIndex
884514f5e3Sopenharmony_ciprint(x.find(x => false)) //: undefined
894514f5e3Sopenharmony_ci//aot: [trace] aot inline builtin: Array.prototype.find, caller function name:func_main_0@builtinArrayFindFindIndex
904514f5e3Sopenharmony_ciprint(x.find((x,y) => {})) //: undefined
914514f5e3Sopenharmony_ci//aot: [trace] aot inline builtin: Array.prototype.find, caller function name:func_main_0@builtinArrayFindFindIndex
924514f5e3Sopenharmony_ciprint(x.find((x,y) => x == true)) //: 1
934514f5e3Sopenharmony_ci//aot: [trace] aot inline builtin: Array.prototype.find, caller function name:func_main_0@builtinArrayFindFindIndex
944514f5e3Sopenharmony_ciprint(x.find(x => x == true, 0)) //: 1
954514f5e3Sopenharmony_ci
964514f5e3Sopenharmony_ci//aot: [trace] aot inline builtin: Array.prototype.findIndex, caller function name:func_main_0@builtinArrayFindFindIndex
974514f5e3Sopenharmony_ciprint(x.findIndex(() => {})) //: -1
984514f5e3Sopenharmony_ci//aot: [trace] aot inline builtin: Array.prototype.findIndex, caller function name:func_main_0@builtinArrayFindFindIndex
994514f5e3Sopenharmony_ciprint(x.findIndex(x => true)) //: 0
1004514f5e3Sopenharmony_ci//aot: [trace] aot inline builtin: Array.prototype.findIndex, caller function name:func_main_0@builtinArrayFindFindIndex
1014514f5e3Sopenharmony_ciprint(x.findIndex(x => false)) //: -1
1024514f5e3Sopenharmony_ci//aot: [trace] aot inline builtin: Array.prototype.findIndex, caller function name:func_main_0@builtinArrayFindFindIndex
1034514f5e3Sopenharmony_ciprint(x.findIndex((x,y) => {})) //: -1
1044514f5e3Sopenharmony_ci//aot: [trace] aot inline builtin: Array.prototype.findIndex, caller function name:func_main_0@builtinArrayFindFindIndex
1054514f5e3Sopenharmony_ciprint(x.findIndex((x,y) => x == true)) //: 0
1064514f5e3Sopenharmony_ci//aot: [trace] aot inline builtin: Array.prototype.findIndex, caller function name:func_main_0@builtinArrayFindFindIndex
1074514f5e3Sopenharmony_ciprint(x.findIndex(x => x == true, 0)) //: 0
1084514f5e3Sopenharmony_ci
1094514f5e3Sopenharmony_ci
1104514f5e3Sopenharmony_ci// Replace standard builtin
1114514f5e3Sopenharmony_cifunction replace(a : any) {
1124514f5e3Sopenharmony_ci  return a;
1134514f5e3Sopenharmony_ci}
1144514f5e3Sopenharmony_ci
1154514f5e3Sopenharmony_cilet newArr = [1, 2]
1164514f5e3Sopenharmony_cilet true_find = newArr.find
1174514f5e3Sopenharmony_cilet true_findIndex = newArr.findIndex
1184514f5e3Sopenharmony_cinewArr.find = replace
1194514f5e3Sopenharmony_cinewArr.findIndex = replace
1204514f5e3Sopenharmony_ci
1214514f5e3Sopenharmony_ciprint(newArr.find(x => {})); //: Cannot get source code of funtion
1224514f5e3Sopenharmony_cinewArr.find = true_find
1234514f5e3Sopenharmony_ciprint(newArr.findIndex(x => { return x == 11 })); //: Cannot get source code of funtion
1244514f5e3Sopenharmony_cinewArr.findIndex = true_findIndex
1254514f5e3Sopenharmony_ci
1264514f5e3Sopenharmony_ci//aot: [trace] Check Type: BuiltinInstanceHClassMismatch
1274514f5e3Sopenharmony_ciprint(newArr.find(x => true)); //: 1
1284514f5e3Sopenharmony_ciprint(newArr.findIndex(x => true)); //: 0
1294514f5e3Sopenharmony_ci
1304514f5e3Sopenharmony_cifunction findCase1() {
1314514f5e3Sopenharmony_ci  print('case 1 find') //: case 1 find
1324514f5e3Sopenharmony_ci  let arr1 = [1, 2]
1334514f5e3Sopenharmony_ci  let arr2 = [1, 2]
1344514f5e3Sopenharmony_ci  arr2.garbage = function(x: any): any {
1354514f5e3Sopenharmony_ci    return undefined;
1364514f5e3Sopenharmony_ci  }
1374514f5e3Sopenharmony_ci  //aot: [trace] aot inline builtin: Array.prototype.find, caller function name:#*#findCase1@builtinArrayFindFindIndex
1384514f5e3Sopenharmony_ci  print(arr1.find(x => x == 1)); //: 1
1394514f5e3Sopenharmony_ci  print(arr2.find(x => x == 1)); //aot: [trace] Check Type: BuiltinInstanceHClassMismatch
1404514f5e3Sopenharmony_ci                                 //: 1
1414514f5e3Sopenharmony_ci}
1424514f5e3Sopenharmony_cifunction findIndexCase1() {
1434514f5e3Sopenharmony_ci  print('case 1 findIndex') //: case 1 findIndex
1444514f5e3Sopenharmony_ci  let arr1 = [1, 2]
1454514f5e3Sopenharmony_ci  let arr2 = [1, 2]
1464514f5e3Sopenharmony_ci  arr2.garbage = function(x: any): any {
1474514f5e3Sopenharmony_ci    return undefined;
1484514f5e3Sopenharmony_ci  }
1494514f5e3Sopenharmony_ci  //aot: [trace] aot inline builtin: Array.prototype.findIndex, caller function name:#*#findIndexCase1@builtinArrayFindFindIndex
1504514f5e3Sopenharmony_ci  print(arr1.findIndex(x => x == 1)); //: 0
1514514f5e3Sopenharmony_ci  print(arr2.findIndex(x => x == 1)); //aot: [trace] Check Type: BuiltinInstanceHClassMismatch
1524514f5e3Sopenharmony_ci                                      //: 0
1534514f5e3Sopenharmony_ci}
1544514f5e3Sopenharmony_cifindCase1()
1554514f5e3Sopenharmony_cifindIndexCase1()
1564514f5e3Sopenharmony_ci
1574514f5e3Sopenharmony_ci
1584514f5e3Sopenharmony_cifunction findCase2() {
1594514f5e3Sopenharmony_ci  print('case 2 find') //: case 2 find
1604514f5e3Sopenharmony_ci  let arr1 = [1, 2]
1614514f5e3Sopenharmony_ci  let arr2 = [1, 2]
1624514f5e3Sopenharmony_ci  arr2.find = function(x: any) {
1634514f5e3Sopenharmony_ci    return x
1644514f5e3Sopenharmony_ci  }
1654514f5e3Sopenharmony_ci
1664514f5e3Sopenharmony_ci  //aot: [trace] aot inline builtin: Object.getPrototypeOf, caller function name:#*#findCase2@builtinArrayFindFindIndex
1674514f5e3Sopenharmony_ci  print(Object.getPrototypeOf(arr2) === Array.prototype) //: true
1684514f5e3Sopenharmony_ci
1694514f5e3Sopenharmony_ci  //aot: [trace] aot inline builtin: Array.prototype.find, caller function name:#*#findCase2@builtinArrayFindFindIndex
1704514f5e3Sopenharmony_ci  print(arr1.find(x => x == 1)); //: 1
1714514f5e3Sopenharmony_ci  print(arr2.find(x => x == 1)); //: Cannot get source code of funtion
1724514f5e3Sopenharmony_ci}
1734514f5e3Sopenharmony_cifunction findIndexCase2() {
1744514f5e3Sopenharmony_ci  print('case 2 findIndex') //: case 2 findIndex
1754514f5e3Sopenharmony_ci  let arr1 = [1, 2]
1764514f5e3Sopenharmony_ci  let arr2 = [1, 2]
1774514f5e3Sopenharmony_ci
1784514f5e3Sopenharmony_ci  //aot: [trace] aot inline builtin: Object.getPrototypeOf, caller function name:#*#findIndexCase2@builtinArrayFindFindIndex
1794514f5e3Sopenharmony_ci  print(Object.getPrototypeOf(arr2) === Array.prototype) //: true
1804514f5e3Sopenharmony_ci  arr2.findIndex = function(x: any) {
1814514f5e3Sopenharmony_ci    return x
1824514f5e3Sopenharmony_ci  }
1834514f5e3Sopenharmony_ci
1844514f5e3Sopenharmony_ci  //aot: [trace] aot inline builtin: Array.prototype.findIndex, caller function name:#*#findIndexCase2@builtinArrayFindFindIndex
1854514f5e3Sopenharmony_ci  print(arr1.findIndex(x => x == 1)); //: 0
1864514f5e3Sopenharmony_ci  print(arr2.findIndex(x => x == 1)); //: Cannot get source code of funtion
1874514f5e3Sopenharmony_ci}
1884514f5e3Sopenharmony_cifindCase2()
1894514f5e3Sopenharmony_cifindIndexCase2()
1904514f5e3Sopenharmony_ci
1914514f5e3Sopenharmony_ci
1924514f5e3Sopenharmony_cifunction findCase3() {
1934514f5e3Sopenharmony_ci  print('case 3 find') //: case 3 find
1944514f5e3Sopenharmony_ci  let marr = [1, 2]
1954514f5e3Sopenharmony_ci  let true_find = marr.find
1964514f5e3Sopenharmony_ci  let mimicArray = {
1974514f5e3Sopenharmony_ci    find: true_find,
1984514f5e3Sopenharmony_ci  }
1994514f5e3Sopenharmony_ci
2004514f5e3Sopenharmony_ci  //aot: [trace] aot inline builtin: Array.prototype.find, caller function name:#*#findCase3@builtinArrayFindFindIndex
2014514f5e3Sopenharmony_ci  print(marr.find(x => x == 1)); //: 1
2024514f5e3Sopenharmony_ci  Object.setPrototypeOf(marr, mimicArray)
2034514f5e3Sopenharmony_ci
2044514f5e3Sopenharmony_ci  print(marr.find(x => x == 1)); //aot: [trace] Check Type: BuiltinInstanceHClassMismatch
2054514f5e3Sopenharmony_ci                                 //: 1
2064514f5e3Sopenharmony_ci}
2074514f5e3Sopenharmony_cifunction findIndexCase3() {
2084514f5e3Sopenharmony_ci  print('case 3 findIndex') //: case 3 findIndex
2094514f5e3Sopenharmony_ci
2104514f5e3Sopenharmony_ci  let marr = [1, 2]
2114514f5e3Sopenharmony_ci  let true_findIndex = marr.findIndex
2124514f5e3Sopenharmony_ci
2134514f5e3Sopenharmony_ci  let mimicArray = {
2144514f5e3Sopenharmony_ci    findIndex: true_findIndex
2154514f5e3Sopenharmony_ci  }
2164514f5e3Sopenharmony_ci
2174514f5e3Sopenharmony_ci  print(marr.findIndex(x => x == 1)); //aot: [trace] Check Type: NotStableArray1
2184514f5e3Sopenharmony_ci                                      //: 0
2194514f5e3Sopenharmony_ci
2204514f5e3Sopenharmony_ci  Object.setPrototypeOf(marr, mimicArray)
2214514f5e3Sopenharmony_ci
2224514f5e3Sopenharmony_ci  print(marr.findIndex(x => x == 1)); //: 0
2234514f5e3Sopenharmony_ci}
2244514f5e3Sopenharmony_cifindCase3()
2254514f5e3Sopenharmony_cifindIndexCase3()
2264514f5e3Sopenharmony_ci
2274514f5e3Sopenharmony_ci
2284514f5e3Sopenharmony_cifunction findCase4() {
2294514f5e3Sopenharmony_ci  print('case 4 find') //: case 4 find
2304514f5e3Sopenharmony_ci  let arr1 = [1, 2]
2314514f5e3Sopenharmony_ci  let arr2 = [1, 2]
2324514f5e3Sopenharmony_ci  let notArray = {
2334514f5e3Sopenharmony_ci    find(x: any) {
2344514f5e3Sopenharmony_ci        return x(0)
2354514f5e3Sopenharmony_ci    }
2364514f5e3Sopenharmony_ci  }
2374514f5e3Sopenharmony_ci  Object.setPrototypeOf(arr2, notArray)
2384514f5e3Sopenharmony_ci
2394514f5e3Sopenharmony_ci  //aot: [trace] Check Type: NotStableArray1
2404514f5e3Sopenharmony_ci  print(arr1.find(x => x == 1)); //: 1
2414514f5e3Sopenharmony_ci  //aot: [trace] aot inline function name: #*@6*#^1@builtinArrayFindFindIndex caller function name: #*@6*#find@builtinArrayFindFindIndex
2424514f5e3Sopenharmony_ci  print(arr2.find(x => x == 1)); //: false
2434514f5e3Sopenharmony_ci}
2444514f5e3Sopenharmony_cifunction findIndexCase4() {
2454514f5e3Sopenharmony_ci  print('case 4 findIndex') //: case 4 findIndex
2464514f5e3Sopenharmony_ci  let arr1 = [1, 2]
2474514f5e3Sopenharmony_ci  let arr2 = [1, 2]
2484514f5e3Sopenharmony_ci  let notArray = {
2494514f5e3Sopenharmony_ci    findIndex(x: any) {
2504514f5e3Sopenharmony_ci      return x(0)
2514514f5e3Sopenharmony_ci    }
2524514f5e3Sopenharmony_ci  }
2534514f5e3Sopenharmony_ci  Object.setPrototypeOf(arr2, notArray)
2544514f5e3Sopenharmony_ci
2554514f5e3Sopenharmony_ci  //aot: [trace] Check Type: NotStableArray1
2564514f5e3Sopenharmony_ci  print(arr1.findIndex(x => x == 1)); //: 0
2574514f5e3Sopenharmony_ci  //aot: [trace] aot inline function name: #*@7*#^1@builtinArrayFindFindIndex caller function name: #*@7*#findIndex@builtinArrayFindFindIndex
2584514f5e3Sopenharmony_ci  print(arr2.findIndex(x => x == 1)); //: false
2594514f5e3Sopenharmony_ci}
2604514f5e3Sopenharmony_cifindCase4()
2614514f5e3Sopenharmony_cifindIndexCase4()
2624514f5e3Sopenharmony_ci
2634514f5e3Sopenharmony_ci
2644514f5e3Sopenharmony_cifunction findCase5() {
2654514f5e3Sopenharmony_ci  print('case 5 find') //: case 5 find
2664514f5e3Sopenharmony_ci  let arr1 = [1, 2]
2674514f5e3Sopenharmony_ci  Array.prototype.find = function(x: any) {
2684514f5e3Sopenharmony_ci    return x(1)
2694514f5e3Sopenharmony_ci  }
2704514f5e3Sopenharmony_ci
2714514f5e3Sopenharmony_ci  //aot: [trace] Check Type: NotStableArray1
2724514f5e3Sopenharmony_ci  //aot: [trace] aot inline function name: #*@8*#^1@builtinArrayFindFindIndex caller function name: #*@8*#@builtinArrayFindFindIndex
2734514f5e3Sopenharmony_ci  print(arr1.find(x => x == 1)); //: true
2744514f5e3Sopenharmony_ci}
2754514f5e3Sopenharmony_cifunction findIndexCase5() {
2764514f5e3Sopenharmony_ci  print('case 5 findIndex') //: case 5 findIndex
2774514f5e3Sopenharmony_ci  let arr1 = [1, 2]
2784514f5e3Sopenharmony_ci  Array.prototype.findIndex = function(x: any) {
2794514f5e3Sopenharmony_ci    return x(1)
2804514f5e3Sopenharmony_ci  }
2814514f5e3Sopenharmony_ci
2824514f5e3Sopenharmony_ci  //aot: [trace] Check Type: NotStableArray1
2834514f5e3Sopenharmony_ci  //aot: [trace] aot inline function name: #*@9*#^1@builtinArrayFindFindIndex caller function name: #*@9*#@builtinArrayFindFindIndex
2844514f5e3Sopenharmony_ci  print(arr1.findIndex(x => x == 1));  //: true
2854514f5e3Sopenharmony_ci}
2864514f5e3Sopenharmony_cifindCase5()
2874514f5e3Sopenharmony_cifindIndexCase5()