blob: a3c868474a83db91172128e4ae38276c6f64cb17 [file] [log] [blame]
// 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");