1/* 2 * Copyright (c) 2024 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 16function AssertTrue(value) { 17 if (!value) { 18 throw new Error('Assertion failed: expected true'); 19 } 20} 21 22function AssertFalse(value) { 23 if (value) { 24 throw new Error('Assertion failed: expected false'); 25 } 26} 27 28let array1 = [0,,2,,4,,]; 29let array2 = [0.5,,2.5,,NaN,,]; 30let array3 = new Array(7); 31array3[1] = 1; 32array3[4] = 5.588; 33array3[6] = NaN; 34let array4 = new Array(5); 35array4[1] = 1; 36array4[2] = "asc"; 37array4[3] = NaN; 38array4[4] = 9.0; 39AssertTrue(array1.includes(0)); 40AssertTrue(array1.includes(4)); 41AssertTrue(array1.includes()); 42AssertTrue(array2.includes(0.5)); 43AssertTrue(array2.includes(2.5)); 44AssertTrue(array2.includes(NaN)); 45AssertTrue(array2.includes(undefined)); 46AssertTrue(array3.includes(1)); 47AssertTrue(array3.includes(5.588)); 48AssertTrue(array3.includes(NaN)); 49AssertTrue(array3.includes()); 50AssertTrue(array4.includes(1)); 51AssertTrue(array4.includes("asc")); 52AssertTrue(array4.includes(NaN)); 53AssertTrue(array4.includes(9.0)); 54 55 56var sample = [42.0000000, 0, 1, NaN]; 57AssertTrue(sample.includes(-0)); 58AssertTrue(sample.includes(42)); 59print(sample.indexOf(-0)); 60print(sample.indexOf(42)); 61 62var toStrObj = { 63 toString: function() { 64 return 0 65 } 66}; 67var one = 1; 68var _float = -(4 / 3); 69var a = new Array(false, undefined, null, "0", toStrObj, -1.3333333333333, "str", -0, true, +0, one, 1, 0, false, _float, -(4 / 3)); 70print(a.indexOf(0)); 71print([-0].indexOf(+0)); 72 73AssertTrue([1, 2, 3].includes(2)); 74AssertFalse([1, 2, 3].includes(4)); 75AssertTrue([1, 2, NaN].includes(NaN)); 76AssertTrue([1, 2, -0].includes(+0)); 77AssertTrue([1, 2, -0].includes(-0)); 78AssertTrue([1, 2, +0].includes(-0)); 79AssertTrue([1, 2, +0].includes(+0)); 80AssertFalse([1, 2, -Infinity].includes(+Infinity)); 81AssertTrue([1, 2, -Infinity].includes(-Infinity)); 82AssertFalse([1, 2, +Infinity].includes(-Infinity)); 83AssertTrue([1, 2, +Infinity].includes(+Infinity)); 84AssertFalse(["a", "b", "c"].includes({})); 85AssertFalse([{}, {}].includes({})); 86var obj = {}; 87AssertTrue([obj].includes(obj)); 88AssertFalse([obj].includes(obj, 1)); 89AssertTrue([obj, obj].includes(obj, 1)); 90AssertTrue([,,,].includes(undefined)); 91AssertTrue([12, 13].includes(13, -1)); 92AssertFalse([12, 13].includes(12, -1)); 93AssertTrue([12, 13].includes(12, -2)); 94 95 96const arr3 = [true, false, 0, 1]; 97print(arr3.indexOf(true) === 0); 98print(arr3.indexOf(false) === 1); 99 100const arr4 = [NaN, 1, 2, 3]; 101print(arr4.indexOf(NaN) === 0); 102 103const arr5 = [undefined, 1, 2, 3]; 104print(arr5.indexOf(undefined) === 0); 105print(arr5.indexOf(null) === 0); 106 107const arr7 = []; 108print(arr7.indexOf(1) === -1); 109 110const arr9 = [1, 2, 3, 1, 4]; 111print(arr9.indexOf(1) === 0,); 112 113const arr10 = [{ id: 1 }, { id: 2 }]; 114const obj1 = { id: 2 }; 115print(arr10.indexOf(obj1) === -1); 116 117const arr11 = [{ id: 1 }, { id: 2 }]; 118const obj2 = { id: 2 }; 119print(arr11.indexOf({ id: 2 }) === -1); 120 121const arr12 = [undefined, 1, 2, 3]; 122print(arr12.indexOf(undefined) === 0); 123 124const arr13 = [null, 1, 2, 3]; 125print(arr13.indexOf(null) === 0); 126 127const arr14 = [1, 2, 3, 4, 5]; 128print(arr14.indexOf(3, 2) === 2); 129print(arr14.indexOf(1, 2) === -1); 130 131const largeArr = new Array(1000).fill(0).concat(1); 132print(largeArr.indexOf(1) === 1000); 133 134const arr15 = [0, '0', false]; 135print(arr15.indexOf('0') === 1); 136print(arr15.indexOf(0) === 0); 137print(arr15.indexOf(false) === 2); 138 139const arr16 = ['', 'apple', 'banana']; 140print(arr16.indexOf('') === 0); 141 142const arr17 = ['', ,]; 143print(arr17.indexOf(undefined) === 0); 144print(arr17.indexOf() === 0); 145 146