blob: c1e82b9da585ec184f9caa3f44c6bea8673ed692 [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");