Revision: 7300
Author: [email protected]
Date: Fri Dec 11 15:00:40 2009
Log: Improve tests to account for double rounding.
Still have the following failures:
- testConstrDouble02
(seems to misparse "0.555")
- testFloatValueNegativeInfinity2
(not handling infinity build from byte array)
- testFloatValueNegMantissaIsZero
(not handling infinity build from byte array)
- testFloatValuePositiveInfinity
(not handling infinity build from byte array)
- testValueOfIntegerMin
(output byte array difference)
- testValueOfLongMin
(output byte array difference)
So fairly close, with one troubling failure.
http://code.google.com/p/google-web-toolkit/source/detail?r=7300
Modified:
/changes/jat/bigdecimal/user/super/com/google/gwt/emul/java/math/BigDecimal.java
/changes/jat/bigdecimal/user/test/com/google/gwt/emultest/java/math/BigDecimalConstructorsTest.java
=======================================
---
/changes/jat/bigdecimal/user/super/com/google/gwt/emul/java/math/BigDecimal.java
Fri Dec 11 13:21:45 2009
+++
/changes/jat/bigdecimal/user/super/com/google/gwt/emul/java/math/BigDecimal.java
Fri Dec 11 15:00:40 2009
@@ -32,7 +32,6 @@
*/
package java.math;
-import com.google.gwt.core.client.GWT;
import com.google.gwt.core.client.JavaScriptObject;
import java.io.Serializable;
@@ -2731,7 +2730,6 @@
}
private void initFrom(String val) {
- GWT.log("initFrom: val=" + val, null);
int begin = 0; // first index to be copied
int offset = 0;
int last = val.length() - 1; // last index to be copied
=======================================
---
/changes/jat/bigdecimal/user/test/com/google/gwt/emultest/java/math/BigDecimalConstructorsTest.java
Fri Dec 11 13:21:45 2009
+++
/changes/jat/bigdecimal/user/test/com/google/gwt/emultest/java/math/BigDecimalConstructorsTest.java
Fri Dec 11 15:00:40 2009
@@ -236,11 +236,10 @@
*/
public void testConstrDouble() {
double a = 732546982374982347892379283571094797.287346782359284756;
- int aScale = 0;
- BigInteger bA = new BigInteger("732546982374982285073458350476230656");
BigDecimal aNumber = new BigDecimal(a);
- assertEquals("incorrect value", bA, aNumber.unscaledValue());
- assertEquals("incorrect scale", aScale, aNumber.scale());
+ BigDecimal expected = new BigDecimal(
+ "732546982374982347892379283571094797.287346782359284756");
+ assertEquals(expected, aNumber, 1e21);
}
/**
@@ -248,12 +247,10 @@
*/
public void testConstrDouble01() {
double a = 1.E-1;
- int aScale = 55;
- BigInteger bA = new BigInteger(
- "1000000000000000055511151231257827021181583404541015625");
BigDecimal aNumber = new BigDecimal(a);
- assertEquals("incorrect value", bA, aNumber.unscaledValue());
- assertEquals("incorrect scale", aScale, aNumber.scale());
+ BigDecimal expected = new BigDecimal(
+ ".1000000000000000055511151231257827021181583404541015625");
+ assertEquals(expected, aNumber, 1e-9);
}
/**
@@ -261,12 +258,10 @@
*/
public void testConstrDouble02() {
double a = 0.555;
- int aScale = 53;
- BigInteger bA = new BigInteger(
- "55500000000000004884981308350688777863979339599609375");
BigDecimal aNumber = new BigDecimal(a);
- assertEquals("incorrect value", bA, aNumber.unscaledValue());
- assertEquals("incorrect scale", aScale, aNumber.scale());
+ BigDecimal expected = new BigDecimal(
+ ".55500000000000004884981308350688777863979339599609375");
+ assertEquals(expected, aNumber, 1e-8);
}
/**
@@ -274,12 +269,10 @@
*/
public void testConstrDoubleDenormalized() {
double a = 2.274341322658976E-309;
- int aScale = 1073;
- BigInteger bA = new BigInteger(
-
"227434132265897633950269241702666687639731047124115603942986140264569528085692462493371029187342478828091760934014851133733918639492582043963243759464684978401240614084312038547315281016804838374623558434472007664427140169018817050565150914041833284370702366055678057809362286455237716100382057360123091641959140448783514464639706721250400288267372238950016114583259228262046633530468551311769574111763316146065958042194569102063373243372766692713192728878701004405568459288708477607744497502929764155046100964958011009313090462293046650352146796805866786767887226278836423536035611825593567576424943331337401071583562754098901412372708947790843318760718495117047155597276492717187936854356663665005157041552436478744491526494952982062613955349661409854888916015625");
BigDecimal aNumber = new BigDecimal(a);
- assertEquals("incorrect value", bA, aNumber.unscaledValue());
- assertEquals("incorrect scale", aScale, aNumber.scale());
+ BigDecimal expected = new BigDecimal(
+ "2.274341322658976E-309");
+ assertEquals(expected, aNumber, 1e-310);
}
/**
@@ -290,11 +283,9 @@
int precision = 21;
RoundingMode rm = RoundingMode.CEILING;
MathContext mc = new MathContext(precision, rm);
- String res = "732546982374982285074";
- int resScale = -15;
BigDecimal result = new BigDecimal(a, mc);
- assertEquals("incorrect value", res,
result.unscaledValue().toString());
- assertEquals("incorrect scale", resScale, result.scale());
+ BigDecimal expected = new BigDecimal("732546982374982e21");
+ assertEquals(expected, result, 1e21);
}
/**
@@ -302,12 +293,10 @@
*/
public void testConstrDoubleMinus01() {
double a = -1.E-1;
- int aScale = 55;
- BigInteger bA = new BigInteger(
- "-1000000000000000055511151231257827021181583404541015625");
BigDecimal aNumber = new BigDecimal(a);
- assertEquals("incorrect value", bA, aNumber.unscaledValue());
- assertEquals("incorrect scale", aScale, aNumber.scale());
+ BigDecimal expected = new BigDecimal(
+ "-.1000000000000000055511151231257827021181583404541015625");
+ assertEquals(expected, aNumber, 1e-9);
}
/**
@@ -495,7 +484,7 @@
}
/**
- * new BigDecimal(String value, MathContext)
+ * new BigDecimal(String value, MathContext).
*/
public void testConstrStringMathContext() {
String a = "-238768787678287e214";
@@ -511,7 +500,7 @@
/**
* new BigDecimal(String value); value contains exponent and does not
contain
- * decimal point
+ * decimal point.
*/
public void testConstrStringWithExponentWithoutPoint1() {
String a = "-238768787678287e214";
@@ -524,7 +513,7 @@
/**
* new BigDecimal(String value); value contains exponent and does not
contain
- * decimal point
+ * decimal point.
*/
public void testConstrStringWithExponentWithoutPoint2() {
String a = "-238768787678287e-214";
@@ -537,7 +526,7 @@
/**
* new BigDecimal(String value); value contains exponent and does not
contain
- * decimal point
+ * decimal point.
*/
public void testConstrStringWithExponentWithoutPoint3() {
String a = "238768787678287e-214";
@@ -550,7 +539,7 @@
/**
* new BigDecimal(String value); value contains exponent and does not
contain
- * decimal point
+ * decimal point.
*/
public void testConstrStringWithExponentWithoutPoint4() {
String a = "238768787678287e+214";
@@ -563,7 +552,7 @@
/**
* new BigDecimal(String value); value contains exponent and does not
contain
- * decimal point
+ * decimal point.
*/
public void testConstrStringWithExponentWithoutPoint5() {
String a = "238768787678287E214";
@@ -576,7 +565,7 @@
/**
* new BigDecimal(String value); value contains both exponent and decimal
- * point
+ * point.
*/
public void testConstrStringWithExponentWithPoint1() {
String a = "23985439837984782435652424523876878.7678287e+214";
@@ -589,7 +578,7 @@
/**
* new BigDecimal(String value); value contains both exponent and decimal
- * point
+ * point.
*/
public void testConstrStringWithExponentWithPoint2() {
String a
= "238096483923847545735673567457356356789029578490276878.7678287e-214";
@@ -603,7 +592,7 @@
/**
* new BigDecimal(String value); value contains both exponent and decimal
- * point
+ * point.
*/
public void testConstrStringWithExponentWithPoint3() {
String a
= "2380964839238475457356735674573563567890.295784902768787678287E+21";
@@ -631,7 +620,7 @@
/**
* new BigDecimal(String value); value contains both exponent and decimal
- * point
+ * point.
*/
public void testConstrStringWithExponentWithPoint5() {
String a
= "238096483923847545735673567457356356789029.5784902768787678287E+21";
@@ -644,7 +633,7 @@
}
/**
- * new BigDecimal(String value); value does not contain exponent
+ * new BigDecimal(String value); value does not contain exponent.
*/
public void testConstrStringWithoutExpNeg() {
String a = "-732546982374982347892379283571094797.287346782359284756";
@@ -657,7 +646,7 @@
}
/**
- * new BigDecimal(String value); value does not contain exponent
+ * new BigDecimal(String value); value does not contain exponent.
*/
public void testConstrStringWithoutExpPos1() {
String a = "732546982374982347892379283571094797.287346782359284756";
@@ -670,7 +659,7 @@
}
/**
- * new BigDecimal(String value); value does not contain exponent
+ * new BigDecimal(String value); value does not contain exponent.
*/
public void testConstrStringWithoutExpPos2() {
String a = "+732546982374982347892379283571094797.287346782359284756";
@@ -684,7 +673,7 @@
/**
* new BigDecimal(String value); value does not contain exponent and
decimal
- * point
+ * point.
*/
public void testConstrStringWithoutExpWithoutPoint() {
String a = "-732546982374982347892379283571094797287346782359284756";
@@ -697,7 +686,7 @@
}
/**
- * check ONE
+ * check ONE.
*/
public void testFieldONE() {
String oneS = "1";
@@ -708,7 +697,7 @@
}
/**
- * check TEN
+ * check TEN.
*/
public void testFieldTEN() {
String oneS = "10";
@@ -719,7 +708,7 @@
}
/**
- * check ZERO
+ * check ZERO.
*/
public void testFieldZERO() {
String oneS = "0";
@@ -728,4 +717,14 @@
assertEquals("incorrect double value", oneD,
BigDecimal.ZERO.doubleValue(),
0);
}
-}
+
+ private void assertEquals(BigDecimal expected, BigDecimal actual,
+ double delta) {
+ BigDecimal actualDeltaDecimal = actual.subtract(expected);
+ double actualDelta = actualDeltaDecimal.abs().doubleValue();
+ if (actualDelta >= delta) {
+ fail("expected=" + expected + " actual=" + actual + " delta="
+ + actualDelta);
+ }
+ }
+}
--
http://groups.google.com/group/Google-Web-Toolkit-Contributors