Reviewers: Dmitry Lomov (chromium),
Description:
Harmony: implement Math.trunc.
BUG=v8:2938
Please review this at https://codereview.chromium.org/28793002/
SVN Base: https://v8.googlecode.com/svn/branches/bleeding_edge
Affected files (+33, -16 lines):
M src/harmony-math.js
A + test/mjsunit/harmony/math-trunc.js
Index: src/harmony-math.js
diff --git a/src/harmony-math.js b/src/harmony-math.js
index
2e9b42a75e7cf368af023c29baaf9cd24663a3b8..dd7bfc47034d9c8588a273ceaca5462c0862ae25
100644
--- a/src/harmony-math.js
+++ b/src/harmony-math.js
@@ -37,12 +37,22 @@ function MathSign(x) {
}
+function MathTrunc(x) {
+ if (!IS_NUMBER(x)) x = NonNumberToNumber(x);
+ if (x > 0) return MathFloor(x);
+ if (x < 0) return MathCeil(x);
+ if (x === 0) return x;
+ return NAN;
+}
+
+
function ExtendMath() {
%CheckIsBootstrapping();
// Set up the non-enumerable functions on the Math object.
InstallFunctions($Math, DONT_ENUM, $Array(
- "sign", MathSign
+ "sign", MathSign,
+ "trunc", MathTrunc
));
}
Index: test/mjsunit/harmony/math-trunc.js
diff --git a/test/mjsunit/harmony/math-sign.js
b/test/mjsunit/harmony/math-trunc.js
similarity index 59%
copy from test/mjsunit/harmony/math-sign.js
copy to test/mjsunit/harmony/math-trunc.js
index
4ace53d4ffe6ecb67cb8356e2408ef7f05e924a8..ed91ed1380f54ff46cf7b125dae87863b54baee7
100644
--- a/test/mjsunit/harmony/math-sign.js
+++ b/test/mjsunit/harmony/math-trunc.js
@@ -27,18 +27,25 @@
// Flags: --harmony-maths
-assertEquals("Infinity", String(1/Math.sign(0)));
-assertEquals("-Infinity", String(1/Math.sign(-0)));
-assertEquals(1, Math.sign(100));
-assertEquals(-1, Math.sign(-199));
-assertEquals(1, Math.sign(100.1));
-assertTrue(isNaN(Math.sign("abc")));
-assertTrue(isNaN(Math.sign({})));
-assertEquals(0, Math.sign([]));
-assertEquals(1, Math.sign([1]));
-assertEquals(-1, Math.sign([-100.1]));
-assertTrue(isNaN(Math.sign([1, 1])));
-assertEquals(1, Math.sign({ toString: function() { return "100"; } }));
-assertEquals(1, Math.sign({ toString: function() { return 100; } }));
-assertEquals(-1, Math.sign({ valueOf: function() { return -1.1; } }));
-assertEquals(-1, Math.sign({ valueOf: function() { return "-1.1"; } }));
+assertEquals("Infinity", String(1/Math.trunc(0)));
+assertEquals("-Infinity", String(1/Math.trunc(-0)));
+assertEquals("Infinity", String(1/Math.trunc(Math.PI/4)));
+assertEquals("-Infinity", String(1/Math.trunc(-Math.sqrt(2)/2)));
+assertEquals(100, Math.trunc(100));
+assertEquals(-199, Math.trunc(-199));
+assertEquals(100, Math.trunc(100.1));
+assertTrue(isNaN(Math.trunc("abc")));
+assertTrue(isNaN(Math.trunc({})));
+assertEquals(0, Math.trunc([]));
+assertEquals(1, Math.trunc([1]));
+assertEquals(-100, Math.trunc([-100.1]));
+assertTrue(isNaN(Math.trunc([1, 1])));
+assertEquals(-100, Math.trunc({ toString: function() { return "-100.3"; }
}));
+assertEquals(10, Math.trunc({ toString: function() { return 10.1; } }));
+assertEquals(-1, Math.trunc({ valueOf: function() { return -1.1; } }));
+assertEquals("-Infinity",
+ String(1/Math.trunc({ valueOf: function() { return "-0.1"; }
})));
+assertEquals("-Infinity", String(Math.trunc(-Infinity)));
+assertEquals("Infinity", String(Math.trunc(Infinity)));
+assertEquals("-Infinity", String(Math.trunc("-Infinity")));
+assertEquals("Infinity", String(Math.trunc("Infinity")));
--
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
---
You received this message because you are subscribed to the Google Groups "v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.