]> source.dussan.org Git - poi.git/commitdiff
Bug 57915: Fix Dev2Hex for numbers larger than Integer.MAX_VALUE and less than Intege...
authorDominik Stadler <centic@apache.org>
Thu, 17 Sep 2015 19:23:25 +0000 (19:23 +0000)
committerDominik Stadler <centic@apache.org>
Thu, 17 Sep 2015 19:23:25 +0000 (19:23 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1703672 13f79535-47bb-0310-9956-ffa450edef68

src/java/org/apache/poi/ss/formula/functions/Dec2Hex.java
src/testcases/org/apache/poi/ss/formula/functions/TestDec2Hex.java

index 54a624652d6dcde4729671391f10fbac7daa1a09..6318f984609120d6c36868d44fd1f5d111bc75c5 100644 (file)
@@ -112,7 +112,7 @@ public final class Dec2Hex extends Var1or2ArgFunction implements FreeRefFunction
             hex = String.format(Locale.ROOT, "%0"+placesNumber+"X", number1.intValue());\r
         }\r
         else {\r
-            hex = Integer.toHexString(number1.intValue());\r
+            hex = Long.toHexString(number1.longValue());\r
         }\r
 \r
         if (number1 < 0) {\r
index f860aff2a51fd2494f9c83609b50723c60e1ce00..e9b6c44e6a58b5a554e8856ca7ddc66b6fc830ce 100644 (file)
@@ -81,6 +81,28 @@ public final class TestDec2Hex extends TestCase {
 
                confirmValue("Converts decimal -54 to hexadecimal, 2 is ignored","-54", "2",  "FFFFFFFFCA");
                confirmValue("places is optionnal","-54", "FFFFFFFFCA");
+               
+               confirmValue("Converts normal decimal number to hexadecimal", "100", "64");
+        
+               String maxInt = Integer.toString(Integer.MAX_VALUE);
+        assertEquals("2147483647", maxInt);
+        confirmValue("Converts INT_MAX to hexadecimal", maxInt, "7FFFFFFF");
+
+        String minInt = Integer.toString(Integer.MIN_VALUE);
+        assertEquals("-2147483648", minInt);
+        confirmValue("Converts INT_MIN to hexadecimal", minInt, "FF80000000");
+
+        String maxIntPlusOne = Long.toString(((long)Integer.MAX_VALUE)+1);
+        assertEquals("2147483648", maxIntPlusOne);
+        confirmValue("Converts INT_MAX + 1 to hexadecimal", maxIntPlusOne, "80000000");
+        
+        String maxLong = Long.toString(549755813887l);
+        assertEquals("549755813887", maxLong);
+        confirmValue("Converts the max supported value to hexadecimal", maxLong, "7FFFFFFFFF");
+        
+        String minLong = Long.toString(-549755813888l);
+        assertEquals("-549755813888", minLong);
+        confirmValue("Converts the min supported value to hexadecimal", minLong, "FF80000000");
        }
 
     public void testErrors() {