Skip to content

Commit 0150639

Browse files
author
John J. Aylward
committed
update the new coercion test to use actual values and show the parseDouble method is not robust enough for large numbers
1 parent bdb1163 commit 0150639

File tree

1 file changed

+9
-7
lines changed

1 file changed

+9
-7
lines changed

src/test/java/org/json/junit/JSONObjectTest.java

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import static org.junit.Assert.assertEquals;
44
import static org.junit.Assert.assertFalse;
5+
import static org.junit.Assert.assertNotEquals;
56
import static org.junit.Assert.assertNull;
67
import static org.junit.Assert.assertTrue;
78
import static org.mockito.Mockito.mock;
@@ -2016,13 +2017,14 @@ public void jsonObjectOptStringConversion() {
20162017
assertTrue("unexpected optNumber value",jo.optNumber("int",BigInteger.ZERO).longValue()==123l);
20172018

20182019
// Test type coercion from larger to smaller
2019-
final BigDecimal largeValue = new BigDecimal("19007199254740993.35481234487103587486413587843213584");
2020-
assertEquals(largeValue,jo.optBigDecimal("largeNumber", null));
2021-
assertEquals(largeValue.toBigInteger(),jo.optBigInteger("largeNumber", null));
2022-
assertEquals(largeValue.doubleValue(), jo.optDouble("largeNumber"), 0.0d);
2023-
assertEquals(largeValue.floatValue(), jo.optFloat("largeNumber"), 0.0f);
2024-
assertEquals(largeValue.longValue(), jo.optLong("largeNumber"));
2025-
assertEquals(largeValue.intValue(), jo.optInt("largeNumber"));
2020+
assertEquals(new BigInteger("19007199254740993"), jo.optBigInteger("largeNumber",null));
2021+
assertEquals(1.9007199254740992E16, jo.optDouble("largeNumber"),0.0);
2022+
assertEquals(1.90071995E16f, jo.optFloat("largeNumber"),0.0f);
2023+
assertEquals(19007199254740993l, jo.optLong("largeNumber"));
2024+
assertEquals(1874919425, jo.optInt("largeNumber"));
2025+
2026+
// the integer portion of the actual value is larger than a double can hold.
2027+
assertNotEquals((long)Double.parseDouble("19007199254740993.35481234487103587486413587843213584"), jo.optLong("largeNumber"));
20262028
}
20272029

20282030
/**

0 commit comments

Comments
 (0)