Index: test/mjsunit/harmony/typedarray-sort.js |
diff --git a/test/mjsunit/harmony/typedarray-sort.js b/test/mjsunit/harmony/typedarray-sort.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..f6f49ce5474012bb4c64d23839f47c312534c53b |
--- /dev/null |
+++ b/test/mjsunit/harmony/typedarray-sort.js |
@@ -0,0 +1,57 @@ |
+// 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-arrays |
+ |
+var typedArrayConstructors = [ |
+ Uint8Array, |
+ Int8Array, |
+ Uint16Array, |
+ Int16Array, |
+ Uint32Array, |
+ Int32Array, |
+ Uint8ClampedArray, |
+ Float32Array, |
+ Float64Array |
+]; |
+ |
+function assertArrayLikeEquals(value, expected, type) { |
+ assertEquals(value.__proto__, type.prototype); |
+ // Don't test value.length because we mess with that; |
+ // instead in certain callsites we check that length |
+ // is set appropriately. |
+ for (var i = 0; i < expected.length; ++i) { |
+ // Use Object.is to differentiate between +-0 |
+ assertSame(expected[i], value[i]); |
+ } |
+} |
+ |
+for (var constructor of typedArrayConstructors) { |
+ // Test default numerical sorting order |
+ var a = new constructor([100, 7, 45]) |
+ assertEquals(a.sort(), a); |
+ assertArrayLikeEquals(a, [7, 45, 100], constructor); |
+ assertEquals(a.length, 3); |
+ |
+ // For arrays of floats, certain handling of +-0/NaN |
+ if (constructor === Float32Array || constructor === Float64Array) { |
+ var b = new constructor([+0, -0, NaN, -0, NaN, +0]) |
+ b.sort(); |
+ assertArrayLikeEquals(b, [-0, -0, +0, +0, NaN, NaN], constructor); |
+ assertEquals(b.length, 6); |
+ } |
+ |
+ // Custom sort--backwards |
+ a.sort(function(x, y) { return y - x; }); |
+ assertArrayLikeEquals(a, [100, 45, 7], constructor); |
+ |
+ // Basic TypedArray method properties: |
+ // Length field is ignored |
+ Object.defineProperty(a, 'length', {value: 1}); |
+ assertEquals(a.sort(), a); |
+ assertArrayLikeEquals(a, [7, 45, 100], constructor); |
+ assertEquals(a.length, 1); |
+ // Method doesn't work on other objects |
+ assertThrows(function() { a.sort.call([]); }, TypeError); |
+} |