| // Copyright (C) 2016 the V8 project authors. All rights reserved. |
| // This code is governed by the BSD license found in the LICENSE file. |
| |
| /*--- |
| esid: sec-array.prototype.includes |
| description: length value coerced on ToLength |
| info: | |
| 22.1.3.11 Array.prototype.includes ( searchElement [ , fromIndex ] ) |
| |
| ... |
| 2. Let len be ? ToLength(? Get(O, "length")). |
| ... |
| |
| 7.1.15 ToLength ( argument ) |
| |
| 1. Let len be ? ToInteger(argument). |
| 2. If len ≤ +0, return +0. |
| 3. If len is +∞, return 253-1. |
| 4. Return min(len, 253-1). |
| ---*/ |
| |
| var obj = { |
| "0": "a", |
| "1": "b" |
| }; |
| |
| obj.length = 0.1; |
| assert.sameValue([].includes.call(obj, "a"), false, "0.1"); |
| |
| obj.length = 0.99; |
| assert.sameValue([].includes.call(obj, "a"), false, "0.99"); |
| |
| obj.length = 1.00001; |
| assert.sameValue([].includes.call(obj, "a"), true, "1.00001"); |
| |
| obj.length = 1.1; |
| assert.sameValue([].includes.call(obj, "a"), true, "1.1"); |
| |
| obj.length = "0"; |
| assert.sameValue([].includes.call(obj, "a"), false, "string '0'"); |
| |
| obj.length = "1"; |
| assert.sameValue([].includes.call(obj, "a"), true, "string '1', item found"); |
| |
| obj.length = "1"; |
| assert.sameValue([].includes.call(obj, "b"), false, "string '1', item not found"); |
| |
| obj.length = "2"; |
| assert.sameValue([].includes.call(obj, "b"), true, "string '2', item found"); |
| |
| obj.length = ""; |
| assert.sameValue([].includes.call(obj, "a"), false, "the empty string"); |
| |
| obj.length = undefined; |
| assert.sameValue([].includes.call(obj, "a"), false, "undefined"); |
| |
| obj.length = NaN; |
| assert.sameValue([].includes.call(obj, "a"), false, "NaN"); |
| |
| obj.length = []; |
| assert.sameValue([].includes.call(obj, "a"), false, "[]"); |
| |
| obj.length = [1]; |
| assert.sameValue([].includes.call(obj, "a"), true, "[1]"); |
| |
| obj.length = null; |
| assert.sameValue([].includes.call(obj, "a"), false, "null"); |
| |
| obj.length = false; |
| assert.sameValue([].includes.call(obj, "a"), false, "false"); |
| |
| obj.length = true; |
| assert.sameValue([].includes.call(obj, "a"), true, "true"); |
| |
| obj.length = { |
| valueOf: function() { |
| return 2; |
| } |
| }; |
| assert.sameValue([].includes.call(obj, "b"), true, "ordinary object.valueOf"); |
| |
| obj.length = { |
| toString: function() { |
| return 2; |
| } |
| }; |
| assert.sameValue([].includes.call(obj, "b"), true, "ordinary object.toString"); |