private static NodeValue decimalDivide(BigDecimal d1, BigDecimal d2) { try { BigDecimal d3 = d1.divide(d2, DIVIDE_PRECISION, BigDecimal.ROUND_FLOOR) ; return messAroundWithBigDecimalFormat(d3) ; } catch (ArithmeticException ex) { Log.warn(XSDFuncOp.class, "ArithmeticException in decimal divide - attempting to treat as doubles") ; BigDecimal d3 = new BigDecimal(d1.doubleValue() / d2.doubleValue()) ; return NodeValue.makeDecimal(d3) ; } }
@Test public void testSameValue3() { NodeValue nv1 = NodeValue.makeDecimal("1.5"); NodeValue nv2 = NodeValue.makeDecimal("1.6"); assertTrue("Same values (" + nv1 + "," + nv2 + ")", NodeValue.notSameAs(nv1, nv2)); assertFalse("Same values (" + nv1 + "," + nv2 + ")", NodeValue.sameAs(nv1, nv2)); NodeValue nv3 = NodeValue.makeDecimal("1.50"); assertTrue("Different values (" + nv1 + "," + nv3 + ")", NodeValue.sameAs(nv1, nv3)); assertFalse("Different values - notNotSame (" + nv1 + "," + nv3 + ")", NodeValue.notSameAs(nv1, nv3)); }
@Test public void testDecimal3() { NodeValue v1 = NodeValue.makeDecimal(new BigDecimal("1.3")); NodeValue v2 = NodeValue.makeNodeDecimal("1.3"); assertTrue("Not same decimal: " + v1 + " & " + v2, v1.getDecimal().compareTo(v2.getDecimal()) == 0); assertEquals("Not same decimal by equals: " + v1 + " & " + v2, v1, v2); }
@Test public void testSubtractDecimalInteger() { NodeValue nv1 = NodeValue.makeDecimal(3.5) ; NodeValue nv2 = NodeValue.makeInteger(2) ; NodeValue r = XSDFuncOp.numSubtract(nv1, nv2) ; assertTrue("Not a decimal: "+r, r.isDecimal()) ; assertTrue("Not a NodeValueDecimal: "+r, r instanceof NodeValueDecimal) ; assertTrue("Wrong result", NodeValue.sameAs(NodeValue.makeDecimal(1.5), r) ) ; }
@Test public void testCompare5() { NodeValue nv5 = NodeValue.makeInteger(5) ; NodeValue nv7 = NodeValue.makeDecimal(7) ; assertEquals("Does not compare "+nv5+" & "+nv7, NodeValue.CMP_LESS, NodeValue.compare(nv5, nv7) ) ; }
@Test public void testAbs3() { NodeValue nv = NodeValue.makeDecimal(2) ; NodeValue r = XSDFuncOp.abs(nv) ; assertTrue("Not a decimal: "+r, r.isDecimal()) ; assertTrue("Not a NodeValueDecimal: "+r, r instanceof NodeValueDecimal) ; assertEquals("Wrong result", 2, r.getDecimal().doubleValue(), accuracyExact_D ) ; }
@Test public void testAbs4() { NodeValue nv = NodeValue.makeDecimal(-2) ; NodeValue r = XSDFuncOp.abs(nv) ; assertTrue("Not a decimal: "+r, r.isDecimal()) ; assertTrue("Not a NodeValueDecimal: "+r, r instanceof NodeValueDecimal) ; assertEquals("Wrong result", 2, r.getDecimal().doubleValue(), accuracyExact_D ) ; }
@Test public void testCeiling2() { NodeValue nv = NodeValue.makeDecimal(-3.6) ; NodeValue r = XSDFuncOp.ceiling(nv) ; assertTrue("Not a decimal: "+r, r.isDecimal()) ; assertTrue("Not a NodeValueDecimal: "+r, r instanceof NodeValueDecimal) ; assertEquals("Wrong result", -3, r.getDecimal().longValue() ) ; }
@Test public void testCeiling1() { NodeValue nv = NodeValue.makeDecimal(2.6) ; NodeValue r = XSDFuncOp.ceiling(nv) ; assertTrue("Not a decimal: "+r, r.isDecimal()) ; assertTrue("Not a NodeValueDecimal: "+r, r instanceof NodeValueDecimal) ; assertEquals("Wrong result", 3, r.getDecimal().longValue()) ; }
@Test public void testFloor2() { NodeValue nv = NodeValue.makeDecimal(-3.6) ; NodeValue r = XSDFuncOp.floor(nv) ; assertTrue("Not a decimal: "+r, r.isDecimal()) ; assertTrue("Not a NodeValueDecimal: "+r, r instanceof NodeValueDecimal) ; assertEquals("Wrong result", -4, r.getDecimal().longValue() ) ; }
@Test public void testFloor1() { NodeValue nv = NodeValue.makeDecimal(2.6) ; NodeValue r = XSDFuncOp.floor(nv) ; assertTrue("Not a decimal: "+r, r.isDecimal()) ; assertTrue("Not a NodeValueDecimal: "+r, r instanceof NodeValueDecimal) ; assertEquals("Wrong result", 2, r.getDecimal().longValue()) ; }
@Test public void testAddIntegerDecimal() { NodeValue nv1 = NodeValue.makeInteger(5) ; NodeValue nv2 = NodeValue.makeDecimal(7) ; NodeValue r = XSDFuncOp.numAdd(nv1, nv2) ; assertTrue("Not a decimal: "+r, r.isDecimal()) ; assertTrue("Not a NodeValueDecimal: "+r, r instanceof NodeValueDecimal) ; assertEquals("Wrong result", 12, r.getDecimal().longValue()) ; }
@Test public void testMultiplyDecimalInteger() { NodeValue nv1 = NodeValue.makeDecimal(3.5) ; NodeValue nv2 = NodeValue.makeInteger(2) ; NodeValue r = XSDFuncOp.numMultiply(nv1, nv2) ; assertTrue("Not a decimal: "+r, r.isDecimal()) ; assertTrue("Not a NodeValueDecimal: "+r, r instanceof NodeValueDecimal) ; assertEquals("Wrong result", 7L, r.getDecimal().longValue()) ; }
@Test public void testAddDecimalInteger() { NodeValue nv1 = NodeValue.makeDecimal(7) ; NodeValue nv2 = NodeValue.makeInteger(5) ; NodeValue r = XSDFuncOp.numAdd(nv1, nv2) ; assertTrue("Not a decimal: "+r, r.isDecimal()) ; assertTrue("Not a NodeValueDecimal: "+r, r instanceof NodeValueDecimal) ; assertEquals("Wrong result", 12, r.getDecimal().longValue()) ; }
@Test public void testAddDecimalFloat() { NodeValue nv1 = NodeValue.makeDecimal(3.5) ; NodeValue nv2 = NodeValue.makeFloat(4.5f) ; NodeValue r = XSDFuncOp.numAdd(nv1, nv2) ; assertTrue("Not a Float: "+r, r.isFloat()) ; assertTrue("Not a NodeValueFloat: "+r, r instanceof NodeValueFloat) ; assertEquals("Wrong result", 8, r.getFloat(), accuracyExact_F) ; }
@Test public void testAddDoubleDecimal() { NodeValue nv1 = NodeValue.makeDouble(4.5) ; NodeValue nv2 = NodeValue.makeDecimal(3.5) ; NodeValue r = XSDFuncOp.numAdd(nv1, nv2) ; assertTrue("Not a double: "+r, r.isDouble()) ; assertTrue("Not a NodeValueDouble: "+r, r instanceof NodeValueDouble) ; assertEquals("Wrong result", 8, r.getDouble(), accuracyExact_D ) ; }
@Test public void testMultiplyDoubleDecimal() { NodeValue nv1 = NodeValue.makeDouble(4.5) ; NodeValue nv2 = NodeValue.makeDecimal(3.5) ; NodeValue r = XSDFuncOp.numMultiply(nv1, nv2) ; assertTrue("Not a double: "+r, r.isDouble()) ; assertTrue("Not a NodeValueDouble: "+r, r instanceof NodeValueDouble) ; assertEquals("Wrong result", 4.5d*3.5d, r.getDouble(), accuracyExact_D ) ; }
@Test public void testSubtractDoubleDecimal() { NodeValue nv1 = NodeValue.makeDouble(4.5) ; NodeValue nv2 = NodeValue.makeDecimal(3.5) ; NodeValue r = XSDFuncOp.numSubtract(nv1, nv2) ; assertTrue("Not a double: "+r, r.isDouble()) ; assertTrue("Not a NodeValueDouble: "+r, r instanceof NodeValueDouble) ; assertEquals("Wrong result", 1d, r.getDouble(), accuracyExact_D ) ; }
@Test public void testAddFloatDecimal() { NodeValue nv1 = NodeValue.makeFloat(4.5f) ; NodeValue nv2 = NodeValue.makeDecimal(3.5) ; NodeValue r = XSDFuncOp.numAdd(nv1, nv2) ; assertTrue("Not a Float: "+r, r.isFloat()) ; assertTrue("Not a NodeValueFloat: "+r, r instanceof NodeValueFloat) ; assertEquals("Wrong result", 8, r.getFloat(), accuracyExact_F) ; } @Test public void testAddDecimalDouble()
@Test public void testSameValue5() { NodeValue nv1 = NodeValue.makeDecimal("-1.5"); // Must be exact for // double and decimal NodeValue nv2 = NodeValue.makeDouble(1.5); assertTrue("Same values (" + nv1 + "," + nv2 + ")", NodeValue.notSameAs(nv1, nv2)); assertFalse("Same values (" + nv1 + "," + nv2 + ")", NodeValue.sameAs(nv1, nv2)); NodeValue nv3 = NodeValue.makeDouble(-1.5); assertTrue("Different values (" + nv1 + "," + nv3 + ")", NodeValue.sameAs(nv1, nv3)); assertFalse("Different values - notNotSame (" + nv1 + "," + nv3 + ")", NodeValue.notSameAs(nv1, nv3)); }