1/* 2 * Copyright (c) 2022 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 */ 15declare function print(arg:any):string; 16{ 17 // test new builtin array 18 let array1 = new Array(); 19 let array2 = new Array(1); 20 21 print(array1.length); 22 print(array2.length); 23 24 // test call builtin constructor 25 print(Array().length); // c++ path 26 print(Array(1).length); // c++ path 27 28 try { 29 let array3 = new Array(-1); 30 print(array3.length); 31 } catch (e) { 32 print("throw exception"); 33 } 34 35 try { 36 let array3 = new Array(2.1); 37 print(array3.length); 38 } catch (e) { 39 print("throw exception"); 40 } 41 42 try { 43 let array3 = new Array(4294967296); 44 print(array3.length); 45 } catch (e) { 46 print("throw exception"); 47 } 48} 49 50function unshift() { 51 for (var i = 0; i < 10; i++) { 52 [0, 0, 0, 0, 0, 0, 0].unshift(0); 53 [0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0].unshift(0); 54 } 55} 56 57function forEach() { 58 let array = []; 59 for (let i = 0; i < 10; i++) array.push(i); 60 array.forEach(function(item){ 61 item += 1; 62 }); 63} 64 65function spliced() { 66 let array = []; 67 for (let i = 0; i < 10; i++) array.push(i); 68 array.splice(0, 10); 69} 70 71function toSpliced() { 72 let array = []; 73 for (let i = 0; i < 10; i++) array.push(i); 74 let b = array.toSpliced(0, 2); 75} 76 77function some() { 78 let array = []; 79 for (let i = 0; i < 10; i++) array.push(i); 80 for (let i = 0; i < 10; i++) { 81 const condition = (element) => element < 10; 82 array.some(condition); 83 } 84} 85 86function every() { 87 let array = []; 88 for (let i = 0; i < 10; i++) array.push(i); 89 const condition = (element) => element < 10; 90 array.every(condition); 91} 92 93function reduceRight() { 94 const array1 = [ 95 [0, 1], 96 [2, 3], 97 [4, 5], 98 ]; 99 for (let i = 0; i < 5; i++) { 100 const result = array1.reduceRight((accumulator, currentValue) => 101 accumulator.concat(currentValue), 102 ); 103 } 104} 105 106function findLastIndex() { 107 let array = []; 108 for (let i = 0; i < 10; i++) array.push(i); 109 for (let i = 0; i < 10; i++) { 110 const condition = (element) => element < 10; 111 array.findLastIndex(condition); 112 } 113} 114 115function findLast() { 116 let array = []; 117 for (let i = 0; i < 10; i++) array.push(i); 118 for (let i = 0; i < 10; i++) { 119 const condition = (element) => element < 10; 120 array.findLast(condition); 121 } 122} 123 124function flatMap() { 125 let array = []; 126 for (let i = 0; i < 10; i++) array.push(i); 127 for (let i = 0; i < 10; i++) { 128 array.flatMap((num) => (num % 2 == 0 ? [num, num] : num)); 129 } 130} 131 132function testGenericFastPath() { 133 for (var i = 0; i < 10; i++) { 134 let a = [0, 0, , undefined, 0, 0, 0]; // elementsKind is generic 135 a.unshift(0); // undefined can set array generic 136 } 137} 138 139function testGenericSlowPath() { 140 for (var i = 0; i < 10; i++) { 141 let a = [0, 0, , undefined, 0, 0, 0]; 142 a.x = 1; // elementsKind is generic but transition 143 a.unshift(0); 144 } 145} 146 147unshift(); 148forEach(); 149spliced(); 150toSpliced(); 151some(); 152every(); 153reduceRight(); 154findLastIndex(); 155findLast(); 156flatMap(); 157testGenericFastPath(); 158testGenericSlowPath();