ATLAS-1613: fix for bigdecimal value handling to avoid casting to long (#2 - fix for unittest failures)
diff --git a/intg/src/main/java/org/apache/atlas/type/AtlasBuiltInTypes.java b/intg/src/main/java/org/apache/atlas/type/AtlasBuiltInTypes.java
index 8658e8b..0b124b2 100644
--- a/intg/src/main/java/org/apache/atlas/type/AtlasBuiltInTypes.java
+++ b/intg/src/main/java/org/apache/atlas/type/AtlasBuiltInTypes.java
@@ -414,7 +414,7 @@
} else if (obj instanceof BigInteger) {
return new BigDecimal((BigInteger) obj);
} else if (obj instanceof Number) {
- return BigDecimal.valueOf(((Number) obj).doubleValue());
+ return obj.equals(0) ? BigDecimal.ZERO : BigDecimal.valueOf(((Number) obj).doubleValue());
} else {
try {
return new BigDecimal(obj.toString());
diff --git a/intg/src/test/java/org/apache/atlas/type/TestAtlasBigDecimalType.java b/intg/src/test/java/org/apache/atlas/type/TestAtlasBigDecimalType.java
index 8538b80..d13fc1e 100644
--- a/intg/src/test/java/org/apache/atlas/type/TestAtlasBigDecimalType.java
+++ b/intg/src/test/java/org/apache/atlas/type/TestAtlasBigDecimalType.java
@@ -32,12 +32,12 @@
private final AtlasBigDecimalType bigDecimalType = new AtlasBigDecimalType();
private final Object[] validValues = {
null, Byte.valueOf((byte)1), Short.valueOf((short)1), Integer.valueOf(1), Long.valueOf(1L), Float.valueOf(1),
- Double.valueOf(1), BigInteger.valueOf(1), BigDecimal.valueOf(1), "1",
+ Double.valueOf(1), BigInteger.valueOf(1), BigDecimal.valueOf(1.0), "1.0",
};
private final Object[] negativeValues = {
Byte.valueOf((byte)-1), Short.valueOf((short)-1), Integer.valueOf(-1), Long.valueOf(-1L), Float.valueOf(-1),
- Double.valueOf(-1), BigInteger.valueOf(-1), BigDecimal.valueOf(-1), "-1",
+ Double.valueOf(-1), BigInteger.valueOf(-1), BigDecimal.valueOf(-1.0), "-1.0",
};
private final Object[] invalidValues = { "", "12ab", "abcd", "-12ab" };
@@ -77,14 +77,23 @@
BigDecimal normalizedValue = bigDecimalType.getNormalizedValue(value);
assertNotNull(normalizedValue, "value=" + value);
- assertEquals(normalizedValue, BigDecimal.valueOf(1), "value=" + value);
+
+ if (value instanceof BigInteger) {
+ assertEquals(normalizedValue, BigDecimal.valueOf(1), "value=" + value);
+ } else {
+ assertEquals(normalizedValue, BigDecimal.valueOf(1.0), "value=" + value);
+ }
}
for (Object value : negativeValues) {
BigDecimal normalizedValue = bigDecimalType.getNormalizedValue(value);
assertNotNull(normalizedValue, "value=" + value);
- assertEquals(normalizedValue, BigDecimal.valueOf(-1), "value=" + value);
+ if (value instanceof BigInteger) {
+ assertEquals(normalizedValue, BigDecimal.valueOf(-1), "value=" + value);
+ } else {
+ assertEquals(normalizedValue, BigDecimal.valueOf(-1.0), "value=" + value);
+ }
}
for (Object value : invalidValues) {