Index: test/mjsunit/samevalue.js |
diff --git a/test/mjsunit/samevalue.js b/test/mjsunit/samevalue.js |
index 229db0db4c32c1e2f2b25aa9487b5eae0e7f5c32..5e26908449be1179a5906e6d68f76cbef1846647 100644 |
--- a/test/mjsunit/samevalue.js |
+++ b/test/mjsunit/samevalue.js |
@@ -26,79 +26,115 @@ |
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
-// Flags: --expose-natives-as natives |
+// Flags: --expose-natives-as natives --harmony-simd |
// Test the SameValue internal method. |
var obj1 = {x: 10, y: 11, z: "test"}; |
var obj2 = {x: 10, y: 11, z: "test"}; |
var sameValue = natives.$sameValue; |
+var sameValueZero = natives.$sameValueZero; |
Dan Ehrenberg
2015/07/10 20:59:22
SUggestion: Make a version of sameValueZero which
bbudge
2015/07/10 21:40:48
Good idea. Done.
|
-assertTrue(sameValue(0, 0)); |
-assertTrue(sameValue(+0, +0)); |
-assertTrue(sameValue(-0, -0)); |
-assertTrue(sameValue(1, 1)); |
-assertTrue(sameValue(2, 2)); |
-assertTrue(sameValue(-1, -1)); |
-assertTrue(sameValue(0.5, 0.5)); |
-assertTrue(sameValue(true, true)); |
-assertTrue(sameValue(false, false)); |
-assertTrue(sameValue(NaN, NaN)); |
-assertTrue(sameValue(null, null)); |
-assertTrue(sameValue("foo", "foo")); |
-assertTrue(sameValue(obj1, obj1)); |
+// Calls SameValue and SameValueZero and verifies that their results match. |
+function sameValueBoth(a, b) { |
+ var result = sameValue(a, b); |
+ assertTrue(result === sameValueZero(a, b)); |
+ return result; |
+} |
+ |
+assertTrue(sameValueBoth(0, 0)); |
+assertTrue(sameValueBoth(+0, +0)); |
+assertTrue(sameValueBoth(-0, -0)); |
+assertTrue(sameValueBoth(1, 1)); |
+assertTrue(sameValueBoth(2, 2)); |
+assertTrue(sameValueBoth(-1, -1)); |
+assertTrue(sameValueBoth(0.5, 0.5)); |
+assertTrue(sameValueBoth(true, true)); |
+assertTrue(sameValueBoth(false, false)); |
+assertTrue(sameValueBoth(NaN, NaN)); |
+assertTrue(sameValueBoth(null, null)); |
+assertTrue(sameValueBoth("foo", "foo")); |
+assertTrue(sameValueBoth(obj1, obj1)); |
// Undefined values. |
-assertTrue(sameValue()); |
-assertTrue(sameValue(undefined, undefined)); |
- |
-assertFalse(sameValue(0,1)); |
-assertFalse(sameValue("foo", "bar")); |
-assertFalse(sameValue(obj1, obj2)); |
-assertFalse(sameValue(true, false)); |
- |
-assertFalse(sameValue(obj1, true)); |
-assertFalse(sameValue(obj1, "foo")); |
-assertFalse(sameValue(obj1, 1)); |
-assertFalse(sameValue(obj1, undefined)); |
-assertFalse(sameValue(obj1, NaN)); |
- |
-assertFalse(sameValue(undefined, true)); |
-assertFalse(sameValue(undefined, "foo")); |
-assertFalse(sameValue(undefined, 1)); |
-assertFalse(sameValue(undefined, obj1)); |
-assertFalse(sameValue(undefined, NaN)); |
- |
-assertFalse(sameValue(NaN, true)); |
-assertFalse(sameValue(NaN, "foo")); |
-assertFalse(sameValue(NaN, 1)); |
-assertFalse(sameValue(NaN, obj1)); |
-assertFalse(sameValue(NaN, undefined)); |
- |
-assertFalse(sameValue("foo", true)); |
-assertFalse(sameValue("foo", 1)); |
-assertFalse(sameValue("foo", obj1)); |
-assertFalse(sameValue("foo", undefined)); |
-assertFalse(sameValue("foo", NaN)); |
- |
-assertFalse(sameValue(true, 1)); |
-assertFalse(sameValue(true, obj1)); |
-assertFalse(sameValue(true, undefined)); |
-assertFalse(sameValue(true, NaN)); |
-assertFalse(sameValue(true, "foo")); |
- |
-assertFalse(sameValue(1, true)); |
-assertFalse(sameValue(1, obj1)); |
-assertFalse(sameValue(1, undefined)); |
-assertFalse(sameValue(1, NaN)); |
-assertFalse(sameValue(1, "foo")); |
+assertTrue(sameValueBoth()); |
+assertTrue(sameValueBoth(undefined, undefined)); |
+ |
+assertFalse(sameValueBoth(0,1)); |
+assertFalse(sameValueBoth("foo", "bar")); |
+assertFalse(sameValueBoth(obj1, obj2)); |
+assertFalse(sameValueBoth(true, false)); |
+ |
+assertFalse(sameValueBoth(obj1, true)); |
+assertFalse(sameValueBoth(obj1, "foo")); |
+assertFalse(sameValueBoth(obj1, 1)); |
+assertFalse(sameValueBoth(obj1, undefined)); |
+assertFalse(sameValueBoth(obj1, NaN)); |
+ |
+assertFalse(sameValueBoth(undefined, true)); |
+assertFalse(sameValueBoth(undefined, "foo")); |
+assertFalse(sameValueBoth(undefined, 1)); |
+assertFalse(sameValueBoth(undefined, obj1)); |
+assertFalse(sameValueBoth(undefined, NaN)); |
+ |
+assertFalse(sameValueBoth(NaN, true)); |
+assertFalse(sameValueBoth(NaN, "foo")); |
+assertFalse(sameValueBoth(NaN, 1)); |
+assertFalse(sameValueBoth(NaN, obj1)); |
+assertFalse(sameValueBoth(NaN, undefined)); |
+ |
+assertFalse(sameValueBoth("foo", true)); |
+assertFalse(sameValueBoth("foo", 1)); |
+assertFalse(sameValueBoth("foo", obj1)); |
+assertFalse(sameValueBoth("foo", undefined)); |
+assertFalse(sameValueBoth("foo", NaN)); |
+ |
+assertFalse(sameValueBoth(true, 1)); |
+assertFalse(sameValueBoth(true, obj1)); |
+assertFalse(sameValueBoth(true, undefined)); |
+assertFalse(sameValueBoth(true, NaN)); |
+assertFalse(sameValueBoth(true, "foo")); |
+ |
+assertFalse(sameValueBoth(1, true)); |
+assertFalse(sameValueBoth(1, obj1)); |
+assertFalse(sameValueBoth(1, undefined)); |
+assertFalse(sameValueBoth(1, NaN)); |
+assertFalse(sameValueBoth(1, "foo")); |
// Special string cases. |
-assertFalse(sameValue("1", 1)); |
-assertFalse(sameValue("true", true)); |
-assertFalse(sameValue("false", false)); |
-assertFalse(sameValue("undefined", undefined)); |
-assertFalse(sameValue("NaN", NaN)); |
+assertFalse(sameValueBoth("1", 1)); |
+assertFalse(sameValueBoth("true", true)); |
+assertFalse(sameValueBoth("false", false)); |
+assertFalse(sameValueBoth("undefined", undefined)); |
+assertFalse(sameValueBoth("NaN", NaN)); |
-// -0 and +0 are should be different |
+// SameValue considers -0 and +0 to be different. |
assertFalse(sameValue(+0, -0)); |
assertFalse(sameValue(-0, +0)); |
+ |
+// SameValueZero considers -0 and +0 to be the same. |
+assertTrue(sameValueZero(+0, -0)); |
+assertTrue(sameValueZero(-0, +0)); |
+ |
+// SIMD value types. |
+// All lanes checked. |
+assertTrue(sameValueBoth(SIMD.float32x4(1, 2, 3, 4), |
+ SIMD.float32x4(1, 2, 3, 4))); |
+assertFalse(sameValueBoth(SIMD.float32x4(1, 2, 3, 4), |
+ SIMD.float32x4(NaN, 2, 3, 4))); |
+assertFalse(sameValueBoth(SIMD.float32x4(1, 2, 3, 4), |
+ SIMD.float32x4(1, NaN, 3, 4))); |
+assertFalse(sameValueBoth(SIMD.float32x4(1, 2, 3, 4), |
+ SIMD.float32x4(1, 2, NaN, 4))); |
+assertFalse(sameValueBoth(SIMD.float32x4(1, 2, 3, 4), |
+ SIMD.float32x4(1, 2, 3, NaN))); |
+// Special values. |
+assertTrue(sameValueBoth(SIMD.float32x4(+0, -0, NaN, 1), |
+ SIMD.float32x4(+0, -0, NaN, 1))); |
+assertFalse(sameValue(SIMD.float32x4(+0, -0, NaN, 1), |
+ SIMD.float32x4(-0, -0, NaN, 1))); |
+assertFalse(sameValue(SIMD.float32x4(+0, -0, NaN, 1), |
+ SIMD.float32x4(+0, +0, NaN, 1))); |
+assertTrue(sameValueZero(SIMD.float32x4(+0, -0, NaN, 1), |
+ SIMD.float32x4(-0, -0, NaN, 1))); |
+assertTrue(sameValueZero(SIMD.float32x4(+0, -0, NaN, 1), |
+ SIMD.float32x4(+0, +0, NaN, 1))); |