2008-07-02 Cameron Zwarich <cwzwarich@uwaterloo.ca>
authorcwzwarich@webkit.org <cwzwarich@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 3 Jul 2008 00:04:19 +0000 (00:04 +0000)
committercwzwarich@webkit.org <cwzwarich@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 3 Jul 2008 00:04:19 +0000 (00:04 +0000)
        Reviewed by Darin.

        Bug 19776: Number.toExponential() is incorrect for numbers between 0.1 and 1
        <https://bugs.webkit.org/show_bug.cgi?id=19776>

        Perform the sign check for the exponent on the actual exponent value,
        which is 1 less than the value of decimalPoint, instead of on the value
        of decimalPoint itself.

        JavaScriptCore:

        * kjs/NumberPrototype.cpp:
        (KJS::exponentialPartToString):

        LayoutTests:

        * fast/js/number-toExponential-expected.txt:
        * fast/js/resources/number-toExponential.js:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@34961 268f45cc-cd09-0410-ab3c-d52691b4dbfc

JavaScriptCore/ChangeLog
JavaScriptCore/kjs/NumberPrototype.cpp
LayoutTests/ChangeLog
LayoutTests/fast/js/number-toExponential-expected.txt
LayoutTests/fast/js/resources/number-toExponential.js

index 4dc769fa626c2bd611bd1067c51acc479cdb0093..536caa9ad4550cda2bffe946898da3925f582adc 100644 (file)
@@ -1,3 +1,17 @@
+2008-07-02  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
+
+        Reviewed by Darin.
+
+        Bug 19776: Number.toExponential() is incorrect for numbers between 0.1 and 1
+        <https://bugs.webkit.org/show_bug.cgi?id=19776>
+
+        Perform the sign check for the exponent on the actual exponent value,
+        which is 1 less than the value of decimalPoint, instead of on the value
+        of decimalPoint itself.
+
+        * kjs/NumberPrototype.cpp:
+        (KJS::exponentialPartToString):
+
 2008-07-02  Kevin McCullough  <kmccullough@apple.com>
 
         Reviewed by Darin.
index 4859114530600d1e267e663cdc6c2bd36921bca7..b15a16cb85c267f54a24f2d145b39d460005ad6e 100644 (file)
@@ -289,10 +289,10 @@ static void fractionalPartToString(char* buf, int& i, const char* result, int re
 static void exponentialPartToString(char* buf, int& i, int decimalPoint)
 {
     buf[i++] = 'e';
-    buf[i++] = (decimalPoint >= 0) ? '+' : '-';
     // decimalPoint can't be more than 3 digits decimal given the
     // nature of float representation
     int exponential = decimalPoint - 1;
+    buf[i++] = (exponential >= 0) ? '+' : '-';
     if (exponential < 0)
         exponential *= -1;
     if (exponential >= 100)
index a4dc6a28d63dec9fda5e3d27990cf4678c11a192..b8ee1e7acf7cbe93dd5369853243e57b5ad80ce0 100644 (file)
@@ -1,3 +1,13 @@
+2008-07-02  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
+
+        Reviewed by Darin.
+
+        Bug 19776: Number.toExponential() is incorrect for numbers between 0.1 and 1
+        <https://bugs.webkit.org/show_bug.cgi?id=19776>
+
+        * fast/js/number-toExponential-expected.txt:
+        * fast/js/resources/number-toExponential.js:
+
 2008-07-02  Mark Rowe  <mrowe@apple.com>
 
         Rubber-stamped by Oliver Hunt.
index 7d30eba7c633c601a0629a7c7ae0d60de2c7f63b..c789e6d6fb39e63f989cfe1517c18f5bb4a8ab11 100644 (file)
@@ -26,6 +26,11 @@ PASS (1234.567).toExponential(negInf) threw exception RangeError: toExponential(
 PASS posInf.toExponential() is "Infinity"
 PASS negInf.toExponential() is "-Infinity"
 PASS nan.toExponential() is "NaN"
+PASS (0.01).toExponential() is "1e-2"
+PASS (0.1).toExponential() is "1e-1"
+PASS (0.9).toExponential() is "9e-1"
+PASS (0.9999).toExponential() is "9.999e-1"
+PASS (0.9999).toExponential(2) is "1.00e+0"
 PASS successfullyParsed is true
 
 TEST COMPLETE
index b2698c6d3f7d9977b9c648d7e3a1be7b6d4b5b0e..ad9cc31e530a46774a9e14d232364ee9176ea146 100644 (file)
@@ -41,4 +41,10 @@ shouldBeEqualToString("posInf.toExponential()", "Infinity");
 shouldBeEqualToString("negInf.toExponential()", "-Infinity");
 shouldBeEqualToString("nan.toExponential()", "NaN");
 
+shouldBeEqualToString("(0.01).toExponential()", "1e-2");
+shouldBeEqualToString("(0.1).toExponential()", "1e-1");
+shouldBeEqualToString("(0.9).toExponential()", "9e-1");
+shouldBeEqualToString("(0.9999).toExponential()", "9.999e-1");
+shouldBeEqualToString("(0.9999).toExponential(2)", "1.00e+0");
+
 var successfullyParsed = true;