summaryrefslogtreecommitdiff
path: root/deps/v8/test/mjsunit/array-reverse.js
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/test/mjsunit/array-reverse.js')
-rw-r--r--deps/v8/test/mjsunit/array-reverse.js70
1 files changed, 70 insertions, 0 deletions
diff --git a/deps/v8/test/mjsunit/array-reverse.js b/deps/v8/test/mjsunit/array-reverse.js
new file mode 100644
index 0000000000..11aeb60cac
--- /dev/null
+++ b/deps/v8/test/mjsunit/array-reverse.js
@@ -0,0 +1,70 @@
+// Copyright 2018 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.
+
+assertArrayEquals([], [].reverse());
+assertArrayEquals([8, 6, 4, 2], [2, 4, 6, 8].reverse());
+assertArrayEquals([0.8, 0.6, 0.4], [0.4, 0.6, 0.8].reverse());
+assertArrayEquals(["str4", "str3", "str2"], ["str2", "str3", "str4"].reverse());
+
+assertArrayEquals([4,3,,1], [1,,3,4].reverse());
+assertArrayEquals([4,,2,1], [1,2,,4].reverse());
+assertArrayEquals([5,,3,,1], [1,,3,,5].reverse());
+
+function TestReverseWithObject() {
+ let obj = { length: 5 };
+ obj[0] = "foo";
+ obj[3] = "bar";
+ Array.prototype.reverse.call(obj);
+
+ assertArrayEquals([,"bar",,,"foo"], obj);
+}
+TestReverseWithObject();
+
+function TestReverseWithPrototypeChain() {
+ let proto = { 0: "foo", 19: "bar" };
+ let obj = { length: 20, 5: "foobar", __proto__: proto };
+ Array.prototype.reverse.call(obj);
+
+ assertEquals("bar", obj[0]);
+ assertEquals("foobar", obj[14]);
+ assertEquals("foo", obj[19]);
+}
+TestReverseWithPrototypeChain();
+
+function TestReverseWithTypedArrays() {
+ const constructors = [
+ Uint8Array,
+ Int8Array,
+ Uint16Array,
+ Int16Array,
+ Uint32Array,
+ Int32Array,
+ Uint8ClampedArray,
+ Float32Array,
+ Float64Array
+ ];
+
+ for (const constructor of constructors) {
+ const array_odd = new constructor([1, 2, 3]);
+ Array.prototype.reverse.call(array_odd);
+ assertArrayEquals([3, 2, 1], array_odd, constructor);
+
+ const array_even = new constructor([1, 2, 3, 4]);
+ Array.prototype.reverse.call(array_even);
+ assertArrayEquals([4, 3, 2, 1], array_even, constructor);
+
+ // Array.prototype.reverse respects shadowing length on TypedArrays.
+ const array = new constructor([1, 2, 3, 4]);
+ Object.defineProperty(array, 'length', {value: 2});
+ Array.prototype.reverse.call(array);
+
+ assertArrayEquals([2, 1], array, constructor);
+
+ const array_shadowed_length = new constructor([1, 2]);
+ Object.defineProperty(array_shadowed_length, 'length', {value: 5});
+
+ assertThrows(() => Array.prototype.reverse.call(array_shadowed_length));
+ }
+}
+TestReverseWithTypedArrays();