You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by pa...@apache.org on 2018/02/11 13:58:37 UTC

[lang] LANG-1060: NumberUtils.isNumber assumes number starting with Zero is octal

Repository: commons-lang
Updated Branches:
  refs/heads/master 60412131f -> 2ce404940


LANG-1060: NumberUtils.isNumber assumes number starting with Zero is octal

Add additional tests (closes #314)


Project: http://git-wip-us.apache.org/repos/asf/commons-lang/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-lang/commit/2ce40494
Tree: http://git-wip-us.apache.org/repos/asf/commons-lang/tree/2ce40494
Diff: http://git-wip-us.apache.org/repos/asf/commons-lang/diff/2ce40494

Branch: refs/heads/master
Commit: 2ce40494073aa4e9bdcba4c39d24727b7141d227
Parents: 6041213
Author: Piotr Kosmala <pi...@ncdc.pl>
Authored: Sun Feb 11 14:32:13 2018 +0100
Committer: pascalschumacher <pa...@gmx.net>
Committed: Sun Feb 11 14:55:21 2018 +0100

----------------------------------------------------------------------
 .../commons/lang3/math/NumberUtilsTest.java     | 47 +++++++++++++++++++-
 1 file changed, 46 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/commons-lang/blob/2ce40494/src/test/java/org/apache/commons/lang3/math/NumberUtilsTest.java
----------------------------------------------------------------------
diff --git a/src/test/java/org/apache/commons/lang3/math/NumberUtilsTest.java b/src/test/java/org/apache/commons/lang3/math/NumberUtilsTest.java
index 376a579..7766d88 100644
--- a/src/test/java/org/apache/commons/lang3/math/NumberUtilsTest.java
+++ b/src/test/java/org/apache/commons/lang3/math/NumberUtilsTest.java
@@ -99,6 +99,12 @@ public class NumberUtilsTest {
         assertTrue("toFloat(String) 1 failed", NumberUtils.toFloat("-1.2345") == -1.2345f);
         assertTrue("toFloat(String) 2 failed", NumberUtils.toFloat("1.2345") == 1.2345f);
         assertTrue("toFloat(String) 3 failed", NumberUtils.toFloat("abc") == 0.0f);
+        // LANG-1060
+        assertTrue("toFloat(String) 4 failed", NumberUtils.toFloat("-001.2345") == -1.2345f);
+        assertTrue("toFloat(String) 5 failed", NumberUtils.toFloat("+001.2345") == 1.2345f);
+        assertTrue("toFloat(String) 6 failed", NumberUtils.toFloat("001.2345") == 1.2345f);
+        assertTrue("toFloat(String) 7 failed", NumberUtils.toFloat("000.00") == 0f);
+
         assertTrue("toFloat(Float.MAX_VALUE) failed", NumberUtils.toFloat(Float.MAX_VALUE+"") ==  Float.MAX_VALUE);
         assertTrue("toFloat(Float.MIN_VALUE) failed", NumberUtils.toFloat(Float.MIN_VALUE+"") == Float.MIN_VALUE);
         assertTrue("toFloat(empty) failed", NumberUtils.toFloat("") == 0.0f);
@@ -112,6 +118,10 @@ public class NumberUtilsTest {
     public void testToFloatStringF() {
         assertTrue("toFloat(String,int) 1 failed", NumberUtils.toFloat("1.2345", 5.1f) == 1.2345f);
         assertTrue("toFloat(String,int) 2 failed", NumberUtils.toFloat("a", 5.0f) == 5.0f);
+        // LANG-1060
+        assertTrue("toFloat(String,int) 3 failed", NumberUtils.toFloat("-001Z.2345", 5.0f) == 5.0f);
+        assertTrue("toFloat(String,int) 4 failed", NumberUtils.toFloat("+001AB.2345", 5.0f) == 5.0f);
+        assertTrue("toFloat(String,int) 5 failed", NumberUtils.toFloat("001Z.2345", 5.0f) == 5.0f);
     }
 
     /**
@@ -122,10 +132,19 @@ public class NumberUtilsTest {
         final String shouldBeFloat = "1.23";
         final String shouldBeDouble = "3.40282354e+38";
         final String shouldBeBigDecimal = "1.797693134862315759e+308";
-
         assertTrue(NumberUtils.createNumber(shouldBeFloat) instanceof Float);
         assertTrue(NumberUtils.createNumber(shouldBeDouble) instanceof Double);
         assertTrue(NumberUtils.createNumber(shouldBeBigDecimal) instanceof BigDecimal);
+        // LANG-1060
+        assertTrue(NumberUtils.createNumber("001.12") instanceof Float);
+        assertTrue(NumberUtils.createNumber("-001.12") instanceof Float);
+        assertTrue(NumberUtils.createNumber("+001.12") instanceof Float);
+        assertTrue(NumberUtils.createNumber("003.40282354e+38") instanceof Double);
+        assertTrue(NumberUtils.createNumber("-003.40282354e+38") instanceof Double);
+        assertTrue(NumberUtils.createNumber("+003.40282354e+38") instanceof Double);
+        assertTrue(NumberUtils.createNumber("0001.797693134862315759e+308") instanceof BigDecimal);
+        assertTrue(NumberUtils.createNumber("-001.797693134862315759e+308") instanceof BigDecimal);
+        assertTrue(NumberUtils.createNumber("+001.797693134862315759e+308") instanceof BigDecimal);
     }
     /**
      * Test for {@link NumberUtils#toDouble(String)}.
@@ -135,6 +154,12 @@ public class NumberUtilsTest {
         assertTrue("toDouble(String) 1 failed", NumberUtils.toDouble("-1.2345") == -1.2345d);
         assertTrue("toDouble(String) 2 failed", NumberUtils.toDouble("1.2345") == 1.2345d);
         assertTrue("toDouble(String) 3 failed", NumberUtils.toDouble("abc") == 0.0d);
+        // LANG-1060
+        assertTrue("toDouble(String) 4 failed", NumberUtils.toDouble("-001.2345") == -1.2345d);
+        assertTrue("toDouble(String) 5 failed", NumberUtils.toDouble("+001.2345") == 1.2345d);
+        assertTrue("toDouble(String) 6 failed", NumberUtils.toDouble("001.2345") == 1.2345d);
+        assertTrue("toDouble(String) 7 failed", NumberUtils.toDouble("000.00000") == 0d);
+
         assertTrue("toDouble(Double.MAX_VALUE) failed", NumberUtils.toDouble(Double.MAX_VALUE+"") == Double.MAX_VALUE);
         assertTrue("toDouble(Double.MIN_VALUE) failed", NumberUtils.toDouble(Double.MIN_VALUE+"") == Double.MIN_VALUE);
         assertTrue("toDouble(empty) failed", NumberUtils.toDouble("") == 0.0d);
@@ -148,6 +173,11 @@ public class NumberUtilsTest {
     public void testStringToDoubleStringD() {
         assertTrue("toDouble(String,int) 1 failed", NumberUtils.toDouble("1.2345", 5.1d) == 1.2345d);
         assertTrue("toDouble(String,int) 2 failed", NumberUtils.toDouble("a", 5.0d) == 5.0d);
+        // LANG-1060
+        assertTrue("toDouble(String,int) 3 failed", NumberUtils.toDouble("001.2345", 5.1d) == 1.2345d);
+        assertTrue("toDouble(String,int) 4 failed", NumberUtils.toDouble("-001.2345", 5.1d) == -1.2345d);
+        assertTrue("toDouble(String,int) 5 failed", NumberUtils.toDouble("+001.2345", 5.1d) == 1.2345d);
+        assertTrue("toDouble(String,int) 7 failed", NumberUtils.toDouble("000.00", 5.1d) == 0d);
     }
 
      /**
@@ -252,6 +282,21 @@ public class NumberUtilsTest {
         // LANG-1215
         assertEquals("createNumber(String) LANG-1215 failed",
                 Double.valueOf("193343.82"), NumberUtils.createNumber("193343.82"));
+        // LANG-1060
+        assertEquals("createNumber(String) LANG-1060a failed", Double.valueOf("001234.5678"), NumberUtils.createNumber("001234.5678"));
+        assertEquals("createNumber(String) LANG-1060b failed", Double.valueOf("+001234.5678"), NumberUtils.createNumber("+001234.5678"));
+        assertEquals("createNumber(String) LANG-1060c failed", Double.valueOf("-001234.5678"), NumberUtils.createNumber("-001234.5678"));
+        assertEquals("createNumber(String) LANG-1060d failed", Double.valueOf("0000.00000"), NumberUtils.createNumber("0000.00000d"));
+        assertEquals("createNumber(String) LANG-1060e failed", Float.valueOf("001234.56"), NumberUtils.createNumber("001234.56"));
+        assertEquals("createNumber(String) LANG-1060f failed", Float.valueOf("+001234.56"), NumberUtils.createNumber("+001234.56"));
+        assertEquals("createNumber(String) LANG-1060g failed", Float.valueOf("-001234.56"), NumberUtils.createNumber("-001234.56"));
+        assertEquals("createNumber(String) LANG-1060h failed", Float.valueOf("0000.10"), NumberUtils.createNumber("0000.10"));
+        assertEquals("createNumber(String) LANG-1060i failed", Float.valueOf("001.1E20"), NumberUtils.createNumber("001.1E20"));
+        assertEquals("createNumber(String) LANG-1060j failed", Float.valueOf("+001.1E20"), NumberUtils.createNumber("+001.1E20"));
+        assertEquals("createNumber(String) LANG-1060k failed", Float.valueOf("-001.1E20"), NumberUtils.createNumber("-001.1E20"));
+        assertEquals("createNumber(String) LANG-1060l failed", Double.valueOf("001.1E200"), NumberUtils.createNumber("001.1E200"));
+        assertEquals("createNumber(String) LANG-1060m failed", Double.valueOf("+001.1E200"), NumberUtils.createNumber("+001.1E200"));
+        assertEquals("createNumber(String) LANG-1060n failed", Double.valueOf("-001.1E200"), NumberUtils.createNumber("-001.1E200"));
     }
 
     @Test