diff options
Diffstat (limited to 'deps/v8/test/mjsunit/harmony/array-length.js')
-rw-r--r-- | deps/v8/test/mjsunit/harmony/array-length.js | 208 |
1 files changed, 208 insertions, 0 deletions
diff --git a/deps/v8/test/mjsunit/harmony/array-length.js b/deps/v8/test/mjsunit/harmony/array-length.js new file mode 100644 index 0000000000..df488196ff --- /dev/null +++ b/deps/v8/test/mjsunit/harmony/array-length.js @@ -0,0 +1,208 @@ +// Copyright 2015 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Flags: --harmony-tolength + +// Test array functions do not cause infinite loops when length is negative, +// max_value, etc. + +// ArrayToString + +var o = { length: Number.MIN_VALUE }; +var result = Array.prototype.toString.call(o); +assertEquals("[object Object]", result); + +// ArrayToLocaleString + +var o = { length: Number.MIN_VALUE }; +var result = Array.prototype.toLocaleString.call(o); +assertEquals("", result); + +// ArrayJoin + +var o = { length: Number.MIN_VALUE }; +var result = Array.prototype.join.call(o); +assertEquals(0, result.length); + +// ArrayPush + +var o = { length: Number.MIN_VALUE }; +Array.prototype.push.call(o, 1); +assertEquals(1, o.length); +assertEquals(1, o[0]); + +var o = { length: Number.MAX_VALUE }; +Array.prototype.push.call(o, 1); +assertEquals(o.length, Number.MAX_SAFE_INTEGER + 1); +assertEquals(1, o[Number.MAX_SAFE_INTEGER]); + +Array.prototype.push.call(o, 2); +assertEquals(o.length, Number.MAX_SAFE_INTEGER + 1); +assertEquals(2, o[Number.MAX_SAFE_INTEGER]); + +// ArrayPop + +var o = { length: 0 }; +Array.prototype.pop.call(o); +assertEquals(0, o.length); + +var o = { length: Number.MIN_VALUE }; +Array.prototype.pop.call(o); +assertEquals(0, o.length); + +var o = { length: Number.MAX_VALUE }; +Array.prototype.pop.call(o); +assertEquals(o.length, Number.MAX_SAFE_INTEGER - 1); + +// ArrayReverse + +var o = { 0: 'foo', length: Number.MIN_VALUE } +var result = Array.prototype.reverse.call(o); +assertEquals('object', typeof(result)); +assertEquals(Number.MIN_VALUE, result.length); +assertEquals(Number.MIN_VALUE, o.length); + +// ArrayShift + +var o = { 0: "foo", length: Number.MIN_VALUE } +var result = Array.prototype.shift.call(o); +assertEquals(undefined, result); +assertEquals(0, o.length); + +// ArrayUnshift + +var o = { length: 0 }; +Array.prototype.unshift.call(o); +assertEquals(0, o.length); + +var o = { length: 0 }; +Array.prototype.unshift.call(o, 'foo'); +assertEquals('foo', o[0]); +assertEquals(1, o.length); + +var o = { length: Number.MIN_VALUE }; +Array.prototype.unshift.call(o); +assertEquals(0, o.length); + +var o = { length: Number.MIN_VALUE }; +Array.prototype.unshift.call(o, 'foo'); +assertEquals('foo', o[0]); +assertEquals(1, o.length); + +// ArraySplice + +var o = { length: Number.MIN_VALUE }; +Array.prototype.splice.call(o); +assertEquals(0, o.length); + +var o = { length: Number.MIN_VALUE }; +Array.prototype.splice.call(o, 0, 10, ['foo']); +assertEquals(['foo'], o[0]); +assertEquals(1, o.length); + +var o = { length: Number.MIN_VALUE }; +Array.prototype.splice.call(o, -1); +assertEquals(0, o.length); + +var o = { length: Number.MAX_SAFE_INTEGER }; +Array.prototype.splice.call(o, -1); +assertEquals(Number.MAX_SAFE_INTEGER - 1, o.length); + +// ArraySlice + +var o = { length: Number.MIN_VALUE }; +var result = Array.prototype.slice.call(o); +assertEquals(0, result.length); + +var o = { length: Number.MIN_VALUE }; +var result = Array.prototype.slice.call(o, Number.MAX_VALUE); +assertEquals(0, result.length); + +var o = { length: Number.MAX_VALUE }; +var result = Array.prototype.slice.call(o, Number.MAX_VALUE - 1); +assertEquals(0, result.length); + +// ArrayIndexOf + +var o = { length: Number.MIN_VALUE }; +var result = Array.prototype.indexOf.call(o); +assertEquals(-1, result); + +var o = { length: Number.MAX_SAFE_INTEGER } +o[Number.MAX_SAFE_INTEGER - 1] = "foo" +var result = Array.prototype.indexOf.call(o, + "foo", Number.MAX_SAFE_INTEGER - 2); +assertEquals(Number.MAX_SAFE_INTEGER - 1, result); + +var o = { length: Number.MAX_SAFE_INTEGER }; +o[Number.MAX_SAFE_INTEGER - 1] = "foo"; +var result = Array.prototype.indexOf.call(o, "foo", -1); +assertEquals(Number.MAX_SAFE_INTEGER - 1, result); + +// ArrayLastIndexOf + +var o = { length: Number.MIN_VALUE }; +var result = Array.prototype.lastIndexOf.call(o); +assertEquals(-1, result); + +var o = { length: Number.MAX_SAFE_INTEGER } +o[Number.MAX_SAFE_INTEGER - 1] = "foo" +var result = Array.prototype.lastIndexOf.call(o, + "foo", Number.MAX_SAFE_INTEGER); +assertEquals(Number.MAX_SAFE_INTEGER - 1, result); + +var o = { length: Number.MAX_SAFE_INTEGER }; +o[Number.MAX_SAFE_INTEGER - 1] = "foo"; +var result = Array.prototype.lastIndexOf.call(o, "foo", -1); +assertEquals(Number.MAX_SAFE_INTEGER - 1, result); + +// ArrayFilter + +var func = function(v) { return v; } + +var o = { length: Number.MIN_VALUE }; +Array.prototype.filter.call(o, func); +assertEquals(Number.MIN_VALUE, o.length); + +// ArrayForEach + +var o = { length: Number.MIN_VALUE }; +Array.prototype.forEach.call(o, func); +assertEquals(Number.MIN_VALUE, o.length); + +// ArraySome + +var o = { length: Number.MIN_VALUE }; +Array.prototype.some.call(o, func); +assertEquals(Number.MIN_VALUE, o.length); + +// ArrayEvery + +var o = { length: Number.MIN_VALUE }; +Array.prototype.every.call(o, func); +assertEquals(Number.MIN_VALUE, o.length); + +// ArrayMap + +var o = { length: Number.MIN_VALUE }; +Array.prototype.map.call(o, func); +assertEquals(Number.MIN_VALUE, o.length); + +// ArrayReduce + +var o = { length: Number.MIN_VALUE }; +Array.prototype.reduce.call(o, func, 0); +assertEquals(Number.MIN_VALUE, o.length); + +// ArrayReduceRight + +var o = { length: Number.MIN_VALUE }; +Array.prototype.reduceRight.call(o, func, 0); +assertEquals(Number.MIN_VALUE, o.length); + +// ArrayFill + +var o = { length: Number.MIN_VALUE }; +Array.prototype.fill(o, 0); +assertEquals(Number.MIN_VALUE, o.length); |