Details
-
Bug
-
Status: Closed
-
Minor
-
Resolution: Fixed
-
None
-
None
Description
When implementing the java.lang.Number interface with a custom class, the groovy NumberMath class file's instanceof check do not find a math, and it defaults to IntegerMath. I believe the default should be BigDecimal for best-effort compatibility.
Also when comparing BigDecimal to a true Float or Double, FloatingPointMath is used, not BigDecimalMath.
to reproduce:
static class MyNumber extends Number { def n MyNumber(n) { this.n = n } int intValue(){n} long longValue(){n} float floatValue(){n} double doubleValue(){n} int hashCode(){-n} boolean equals(other) { if (other instanceof MyNumber) { return n==other.n} return false } String toString() {return Double.toString(floatValue())} } void testGetMathCustom() { //assert getMath(50.0G, Float.valueOf("1.0")) == BigDecimalMath.INSTANCE; //assert getMath(50G, Float.valueOf("1.0")) == BigDecimalMath.INSTANCE; MyNumber num = new MyNumber(42); assert getMath(num) == BigDecimalMath.INSTANCE; assert getMath(num, 25) == BigDecimalMath.INSTANCE; }
Attachments
Issue Links
- relates to
-
GROOVY-7608 Comparison of decimal subclasses of Number with == fails
- Closed
- links to