1/* 2 * Copyright (c) 2023 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 16/* 17 * @tc.name:async 18 * @tc.desc:test async function 19 * @tc.type: FUNC 20 * @tc.require: issueI5NO8G issueI8FBM3 21 */ 22var array = [,]; 23function map() { 24 return array.map(x => x + 1); 25} 26array.__proto__.push(5); 27var narr = map(); 28print(JSON.stringify(Object.getOwnPropertyDescriptor(narr, 0))); 29print(narr[0], 6); 30 31let arr=new Array(10); 32map=arr.map(()=>{}); 33print(map.at(9)); 34 35// Species constructor is used to create [] 36// So not should use ElementAccessor::Set (elements.length == 0) 37var instance = []; 38var Ctor = function() { 39 return instance; 40}; 41var a = [1, 2, 3, 4, 5]; 42a.constructor = {}; 43a.constructor[Symbol.species] = Ctor; 44var result = a.map(function() {}); 45print(result == instance); 46{ 47 const v1 = new BigInt64Array(); 48 const v2 = [65537,-1,4096,-9007199254740990,-268435456,6,-29705,128,-6]; 49 function f3() { 50 v2["pop"](); 51 return f3; 52 } 53 let a = v2.map(f3()); 54 print(a.length) 55} 56 57{ 58 const v0 = [0,1,2,3,4,5,6,7,8,9,10]; 59 const mapEd = v0.map(() =>{ 60 Object.defineProperty(Array.prototype, '8',{value: 42, writable :false }); 61 return 8; 62 }) 63 print(v0) 64} 65 66{ 67 const arr1 = [1, 2, 3, '4', 5]; 68 const result1 = arr1.map(item => typeof item === 'string' ? parseInt(item) : item * 2); 69 print(result1); // [2, 4, 6, 4, 10] 70 71 const arr2 = [1, 2, 3]; 72 const result2 = arr2.map(num => Array(num).fill(num)); 73 print(result2); // [[1], [2, 2], [3, 3, 3]] 74 75 const arr3 = [1, 2, 3, 4]; 76 const result3 = arr3.map(num => { 77 if (num === 3) return undefined; 78 return num; 79 }).filter(item => item !== undefined); 80 print(result3); // [1, 2, 4] 81 82 const arr4 = [1, 2, 3, 4, 5]; 83 const result4 = arr4.map((num, index, array) => { 84 if (index === 2) array.push(6); 85 return num * 2; 86 }); 87 print(result4); // [2, 4, 6, 8, 10] 88}