You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by ml...@apache.org on 2006/04/26 07:05:30 UTC

svn commit: r397091 - in /incubator/harmony/enhanced/classlib/trunk/modules/math: make/common/build.xml src/main/java/java/math/BigDecimal.java src/main/java/java/math/BigInteger.java src/test/java/tests/api/java/math/BigDecimalTest.java

Author: mloenko
Date: Tue Apr 25 22:05:28 2006
New Revision: 397091

URL: http://svn.apache.org/viewcvs?rev=397091&view=rev
Log:
final fix for HARMONY-319
BigDecimal and Biginteger test failures should be fixed

Modified:
    incubator/harmony/enhanced/classlib/trunk/modules/math/make/common/build.xml
    incubator/harmony/enhanced/classlib/trunk/modules/math/src/main/java/java/math/BigDecimal.java
    incubator/harmony/enhanced/classlib/trunk/modules/math/src/main/java/java/math/BigInteger.java
    incubator/harmony/enhanced/classlib/trunk/modules/math/src/test/java/tests/api/java/math/BigDecimalTest.java

Modified: incubator/harmony/enhanced/classlib/trunk/modules/math/make/common/build.xml
URL: http://svn.apache.org/viewcvs/incubator/harmony/enhanced/classlib/trunk/modules/math/make/common/build.xml?rev=397091&r1=397090&r2=397091&view=diff
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/math/make/common/build.xml (original)
+++ incubator/harmony/enhanced/classlib/trunk/modules/math/make/common/build.xml Tue Apr 25 22:05:28 2006
@@ -96,10 +96,6 @@
             <batchtest todir="${hy.tests.reports}" haltonfailure="no">
                 <fileset dir="${hy.math.src.test.java}">
                     <include name="**/*Test.java" />
-                    <!-- This test seems to loop -->
-                    <exclude name="**/api/java/math/BigDecimalTest.java" />
-                    <!-- This test fails -->
-                    <exclude name="**/api/java/math/BigIntegerTest.java" />
                 </fileset>
             </batchtest>
         </junit>

Modified: incubator/harmony/enhanced/classlib/trunk/modules/math/src/main/java/java/math/BigDecimal.java
URL: http://svn.apache.org/viewcvs/incubator/harmony/enhanced/classlib/trunk/modules/math/src/main/java/java/math/BigDecimal.java?rev=397091&r1=397090&r2=397091&view=diff
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/math/src/main/java/java/math/BigDecimal.java (original)
+++ incubator/harmony/enhanced/classlib/trunk/modules/math/src/main/java/java/math/BigDecimal.java Tue Apr 25 22:05:28 2006
@@ -266,6 +266,10 @@
             }
             if (symbol == '+') {
                 count++;
+                symbol = in[count];
+                if(symbol == '-') {
+                    throw new NumberFormatException("exponent is not signed integer");
+                }
             }
             exponent = new String(in, count, endIndex - count + 1);
             int exp = 0;
@@ -408,6 +412,10 @@
         int strLen = value.length();
         String unscaled;
         String exponent;
+        
+        if(strLen == 0) {
+            throw new NumberFormatException("empty string");
+        }
         char symbol = value.charAt(0);
         int startPoint = symbol == '+' ? 1 : 0;
         
@@ -442,6 +450,10 @@
             }
             if (symbol == '+') {
                 count++;
+                symbol = value.charAt(count);
+                if(symbol == '-') {
+                    throw new NumberFormatException("exponent is not signed integer");
+                }
             }
             exponent = value.substring(count, strLen);
             int exp = 0;
@@ -1323,11 +1335,11 @@
         boolean negNumber = intVal.signum() < 0;
         int startPoint = negNumber ? 2 : 1;
         int endPoint = intString.length();
-        int exponent = -scale + intString.length() - (negNumber ? 2 : 1);
+        int exponent = -scale + intString.length() - startPoint;
         StringBuffer result = new StringBuffer(intString);
         if (scale > 0 && exponent >= -6) {
             if (exponent >= 0) {
-                result.insert(exponent + (negNumber ? 2 : 1), '.');
+                result.insert(exponent + startPoint, '.');
             } else {
                 char zeros[] = new char[-exponent + 1];
                 zeros[0] = '0';
@@ -1384,12 +1396,12 @@
         boolean negNumber = intVal.signum() < 0;
         int startPoint = negNumber ? 2 : 1;
         int endPoint = intString.length();
-        int dotPosition = -scale + intString.length() - (negNumber ? 2 : 1);
+        int dotPosition = -scale + intString.length() - startPoint;
         StringBuffer result = new StringBuffer(intString);
         char zeros[];
         if (scale > 0) {
             if (dotPosition >= 0) {
-                result.insert(dotPosition + (negNumber ? 2 : 1), '.');
+                result.insert(dotPosition + startPoint, '.');
             } else {
                 zeros = new char[-dotPosition + 1];
                 zeros[0] = '0';

Modified: incubator/harmony/enhanced/classlib/trunk/modules/math/src/main/java/java/math/BigInteger.java
URL: http://svn.apache.org/viewcvs/incubator/harmony/enhanced/classlib/trunk/modules/math/src/main/java/java/math/BigInteger.java?rev=397091&r1=397090&r2=397091&view=diff
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/math/src/main/java/java/math/BigInteger.java (original)
+++ incubator/harmony/enhanced/classlib/trunk/modules/math/src/main/java/java/math/BigInteger.java Tue Apr 25 22:05:28 2006
@@ -67,26 +67,6 @@
     /**
      * @com.intel.drl.spec_ref
      */
-    private int bitCount = -1;
-    
-    /**
-     * @com.intel.drl.spec_ref
-     */
-    private int bitLength = -1;
-    
-    /**
-     * @com.intel.drl.spec_ref
-     */
-    private int lowestSetBit = -2;
-    
-    /**
-     * @com.intel.drl.spec_ref
-     */
-    private int firstNonzeroByteNum = -2;
-    
-    /**
-     * @com.intel.drl.spec_ref
-     */
     private byte[] magnitude;
     
     /**
@@ -423,18 +403,6 @@
     }
 
     /**
-     * Counts the bit length of an unsigned int value 
-     */
-    private static int getBitLength(int value) {
-        int bitLen = 32;
-        int topOne = 0x80000000;
-        while (((value & topOne) == 0) && bitLen-- > 0) {
-            topOne >>>= 1;
-        }
-        return bitLen;
-    }
-
-    /**
      * Gets the number of radix-based digits that fits in an integer
      * @param radix the radix of the numerical system
      * @return the number of digits 
@@ -730,7 +698,7 @@
         if (numberBitLength < 0) {
             throw new IllegalArgumentException("negative bit length");
         }
-        boolean stripLeadingZeroes = true;
+        boolean stripLeadingZeroes = numberBitLength > 0;
         constructRandomly(numberBitLength, rand, stripLeadingZeroes);
     }
 
@@ -1173,6 +1141,9 @@
      */
     public int compareTo(BigInteger that) {
         if (this.sign == that.sign) {
+           	if(this.sign == 0) {
+           		return 0;
+           	}
             int compareResult = compareMagnitude(this.digits,
                     this.numberLength, that.digits, that.numberLength);
             if (this.sign == 1) {
@@ -1194,7 +1165,7 @@
      */
     private void constructRandomly(int numberBitLength, Random rand,
             boolean stripLeadingZeroes) {
-        sign = 1;
+    	sign = numberBitLength == 0 ? 0 : 1;
         int numberOfDigits = numberBitLength >> 5;
         int numberOfTopBits = numberBitLength & 31;
         if (numberOfTopBits > 0) {
@@ -1207,7 +1178,6 @@
         }
         if (numberOfTopBits > 0) {
             digits[numberLength - 1] &= ((1 << numberOfTopBits) - 1);
-            int q = numberLength - 1;
         }
         if (stripLeadingZeroes) {
             cutOffLeadingZeroes();

Modified: incubator/harmony/enhanced/classlib/trunk/modules/math/src/test/java/tests/api/java/math/BigDecimalTest.java
URL: http://svn.apache.org/viewcvs/incubator/harmony/enhanced/classlib/trunk/modules/math/src/test/java/tests/api/java/math/BigDecimalTest.java?rev=397091&r1=397090&r2=397091&view=diff
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/math/src/test/java/tests/api/java/math/BigDecimalTest.java (original)
+++ incubator/harmony/enhanced/classlib/trunk/modules/math/src/test/java/tests/api/java/math/BigDecimalTest.java Tue Apr 25 22:05:28 2006
@@ -135,6 +135,23 @@
 		} catch (NumberFormatException e) {
 		}
 	}
+    
+    /**
+     * @tests java.math.BigDecimal#BigDecimal(char[])
+     */
+    public void test_constructor_CC_plus_minus_exp() {
+        try {
+            new BigDecimal("+35e+-2".toCharArray());          
+            fail("NumberFormatException expected");
+        } catch (NumberFormatException e) {
+        }
+        
+        try {
+            new BigDecimal("-35e-+2".toCharArray());          
+            fail("NumberFormatException expected");
+        } catch (NumberFormatException e) {
+        }
+    }
 
 	/**
 	 * @tests java.math.BigDecimal#abs()