diff --git a/Src/java/engine-fhir/src/test/java/org/hl7/fhirpath/CQLOperationsR4Test.java b/Src/java/engine-fhir/src/test/java/org/hl7/fhirpath/CQLOperationsR4Test.java index 4721cfd8c..136bf4000 100644 --- a/Src/java/engine-fhir/src/test/java/org/hl7/fhirpath/CQLOperationsR4Test.java +++ b/Src/java/engine-fhir/src/test/java/org/hl7/fhirpath/CQLOperationsR4Test.java @@ -70,12 +70,8 @@ public static Object[][] dataMethod() { "cql/CqlArithmeticFunctionsTest/Divide/Divide1Q1Q", "cql/CqlArithmeticFunctionsTest/Ln/Ln1000D", "cql/CqlArithmeticFunctionsTest/Ln/Ln1000", - "cql/CqlArithmeticFunctionsTest/Log/Log1Base1", - "cql/CqlArithmeticFunctionsTest/MaxValue/DecimalMaxValue", - "cql/CqlArithmeticFunctionsTest/MinValue/DecimalMinValue", "cql/CqlArithmeticFunctionsTest/MinValue/LongMinValue", "cql/CqlArithmeticFunctionsTest/Multiply/Multiply1CMBy2CM", - "cql/CqlArithmeticFunctionsTest/Truncated Divide/TruncatedDivide10LBy3L", "cql/CqlComparisonOperatorsTest/Equal/QuantityEqCM1M01", "cql/CqlComparisonOperatorsTest/Equivalent/EquivEqCM1M01", "cql/CqlComparisonOperatorsTest/Greater/GreaterM1CM1", @@ -113,8 +109,6 @@ public static Object[][] dataMethod() { "cql/CqlListOperatorsTest/Equivalent/Equivalent123AndString123", "cql/CqlListOperatorsTest/Equivalent/EquivalentABCAnd123", "cql/CqlListOperatorsTest/Flatten/FlattenListNullAndNull", - "cql/CqlListOperatorsTest/IndexOf/IndexOfEmptyNull", - "cql/CqlListOperatorsTest/IndexOf/IndexOfNullIn1Null", "cql/CqlListOperatorsTest/NotEqual/NotEqual123AndABC", "cql/CqlListOperatorsTest/NotEqual/NotEqual123AndString123", "cql/CqlListOperatorsTest/NotEqual/NotEqualABCAnd123", @@ -140,10 +134,10 @@ public static Object[][] dataMethod() { "cql/CqlTypesTest/Time/TimeUpperBoundMillis", "cql/ValueLiteralsAndSelectors/Boolean/BooleanFalse", "cql/ValueLiteralsAndSelectors/Boolean/BooleanTrue", - "cql/ValueLiteralsAndSelectors/Decimal/Decimal10Pow28", - "cql/ValueLiteralsAndSelectors/Decimal/DecimalNeg10Pow28", + "cql/ValueLiteralsAndSelectors/Decimal/Decimal10Pow20", + "cql/ValueLiteralsAndSelectors/Decimal/DecimalNeg10Pow20", "cql/ValueLiteralsAndSelectors/Decimal/DecimalNegTenthStep", - "cql/ValueLiteralsAndSelectors/Decimal/DecimalPos10Pow28", + "cql/ValueLiteralsAndSelectors/Decimal/DecimalPos10Pow20", "cql/ValueLiteralsAndSelectors/Decimal/DecimalPosTenthStep", "cql/ValueLiteralsAndSelectors/Decimal/DecimalTenthStep", "cql/ValueLiteralsAndSelectors/Null/Null", diff --git a/Src/java/engine-fhir/src/test/resources/org/hl7/fhirpath/cql/CqlArithmeticFunctionsTest.xml b/Src/java/engine-fhir/src/test/resources/org/hl7/fhirpath/cql/CqlArithmeticFunctionsTest.xml index ff1a881dc..a667d780e 100644 --- a/Src/java/engine-fhir/src/test/resources/org/hl7/fhirpath/cql/CqlArithmeticFunctionsTest.xml +++ b/Src/java/engine-fhir/src/test/resources/org/hl7/fhirpath/cql/CqlArithmeticFunctionsTest.xml @@ -239,6 +239,10 @@ Log(1, 1) null + + Log(2, 1) + null + Log(1, 2) 0.0 diff --git a/Src/java/engine-fhir/src/test/resources/org/hl7/fhirpath/cql/ValueLiteralsAndSelectors.xml b/Src/java/engine-fhir/src/test/resources/org/hl7/fhirpath/cql/ValueLiteralsAndSelectors.xml index 8efd879b2..22df412dd 100644 --- a/Src/java/engine-fhir/src/test/resources/org/hl7/fhirpath/cql/ValueLiteralsAndSelectors.xml +++ b/Src/java/engine-fhir/src/test/resources/org/hl7/fhirpath/cql/ValueLiteralsAndSelectors.xml @@ -274,30 +274,30 @@ - - 9999999999999999999999999999.99999999 - 10*1000000000000000000000000000.00000000-0.00000001 + + 99999999999999999999.99999999 + 10*10000000000000000000.00000000-0.00000001 - - +9999999999999999999999999999.99999999 - +10*1000000000000000000000000000.00000000-0.00000001 + + +99999999999999999999.99999999 + +10*10000000000000000000.00000000-0.00000001 - - -9999999999999999999999999999.99999999 - -10*1000000000000000000000000000.00000000+0.00000001 + + -99999999999999999999.99999999 + -10*10000000000000000000.00000000+0.00000001 - - 10000000000000000000000000000.00000000 + + 100000000000000000000.00000000 - - +10000000000000000000000000000.00000000 + + +100000000000000000000.00000000 - - -10000000000000000000000000000.00000000 + + -100000000000000000000.00000000 diff --git a/Src/java/engine/src/main/java/org/opencds/cqf/cql/engine/elm/executing/IndexOfEvaluator.java b/Src/java/engine/src/main/java/org/opencds/cqf/cql/engine/elm/executing/IndexOfEvaluator.java index a94c18037..a7661b474 100644 --- a/Src/java/engine/src/main/java/org/opencds/cqf/cql/engine/elm/executing/IndexOfEvaluator.java +++ b/Src/java/engine/src/main/java/org/opencds/cqf/cql/engine/elm/executing/IndexOfEvaluator.java @@ -9,13 +9,13 @@ The operator uses the notion of equivalence to determine the index. The search is linear, and returns the index of the first element that is equivalent to the element being searched for. If the list is empty, or no element is found, the result is -1. -If the list argument is null, the result is null. +If either argument is null, the result is null. */ public class IndexOfEvaluator { public static Object indexOf(Object source, Object elementToFind, State state) { - if (source == null) { + if (source == null || elementToFind == null) { return null; } diff --git a/Src/java/engine/src/main/java/org/opencds/cqf/cql/engine/elm/executing/LogEvaluator.java b/Src/java/engine/src/main/java/org/opencds/cqf/cql/engine/elm/executing/LogEvaluator.java index eff0825d9..2fde963bd 100644 --- a/Src/java/engine/src/main/java/org/opencds/cqf/cql/engine/elm/executing/LogEvaluator.java +++ b/Src/java/engine/src/main/java/org/opencds/cqf/cql/engine/elm/executing/LogEvaluator.java @@ -20,14 +20,15 @@ public static Object log(Object left, Object right) { } if (left instanceof BigDecimal) { - Double base = Math.log(((BigDecimal) right).doubleValue()); - Double value = Math.log(((BigDecimal) left).doubleValue()); + double base = ((BigDecimal) right).doubleValue(); + double argument = ((BigDecimal) left).doubleValue(); - if (base == 0) { - return Value.verifyPrecision(new BigDecimal(value), null); + // Logarithm is not defined for base 1. + if (base == 1) { + return null; } - return Value.verifyPrecision(new BigDecimal(value / base), null); + return Value.verifyPrecision(BigDecimal.valueOf(Math.log(argument) / Math.log(base)), null); } throw new InvalidOperatorArgument( diff --git a/Src/java/engine/src/main/java/org/opencds/cqf/cql/engine/elm/executing/MaxValueEvaluator.java b/Src/java/engine/src/main/java/org/opencds/cqf/cql/engine/elm/executing/MaxValueEvaluator.java index 249090efe..d83b79201 100644 --- a/Src/java/engine/src/main/java/org/opencds/cqf/cql/engine/elm/executing/MaxValueEvaluator.java +++ b/Src/java/engine/src/main/java/org/opencds/cqf/cql/engine/elm/executing/MaxValueEvaluator.java @@ -13,7 +13,7 @@ The maximum operator is defined for the Integer, Long, Decimal, DateTime, and Time types. For Integer, maximum returns the maximum signed 32-bit integer, 231 - 1. For Long, maximum returns the maximum signed 64-bit Long, 263 - 1. -For Decimal, maximum returns the maximum representable decimal value, (1037 – 1) / 108 (9999999999999999999999999999.99999999). +For Decimal, maximum returns the maximum representable decimal value, (10^28 – 1) / 10^8 (99999999999999999999.99999999). For DateTime, maximum returns the maximum representable date/time value, DateTime(9999, 12, 31, 23, 59, 59, 999). For Time, maximum returns the maximum representable time value, Time(23, 59, 59, 999). For any other type, attempting to invoke maximum results in an error. diff --git a/Src/java/engine/src/main/java/org/opencds/cqf/cql/engine/elm/executing/MinValueEvaluator.java b/Src/java/engine/src/main/java/org/opencds/cqf/cql/engine/elm/executing/MinValueEvaluator.java index 538b0c03d..46194ebf3 100644 --- a/Src/java/engine/src/main/java/org/opencds/cqf/cql/engine/elm/executing/MinValueEvaluator.java +++ b/Src/java/engine/src/main/java/org/opencds/cqf/cql/engine/elm/executing/MinValueEvaluator.java @@ -13,7 +13,7 @@ The minimum operator is defined for the Integer, Long, Decimal, DateTime, and Time types. For Integer, minimum returns the minimum signed 32-bit integer, -231. For Long, minimum returns the minimum signed 32-bit integer, -263. -For Decimal, minimum returns the minimum representable decimal value, (-1037 – 1) / 108 (-9999999999999999999999999999.99999999). +For Decimal, minimum returns the minimum representable decimal value, (-10^28 + 1) / 10^8 (-99999999999999999999.99999999). For DateTime, minimum returns the minimum representable date/time value, DateTime(1, 1, 1, 0, 0, 0, 0). For Time, minimum returns the minimum representable time value, Time(0, 0, 0, 0). For any other type, attempting to invoke minimum results in an error. diff --git a/Src/java/engine/src/main/java/org/opencds/cqf/cql/engine/elm/executing/TruncatedDivideEvaluator.java b/Src/java/engine/src/main/java/org/opencds/cqf/cql/engine/elm/executing/TruncatedDivideEvaluator.java index 46ec40095..b39d5a0ee 100644 --- a/Src/java/engine/src/main/java/org/opencds/cqf/cql/engine/elm/executing/TruncatedDivideEvaluator.java +++ b/Src/java/engine/src/main/java/org/opencds/cqf/cql/engine/elm/executing/TruncatedDivideEvaluator.java @@ -9,6 +9,7 @@ /* div(left Integer, right Integer) Integer div(left Decimal, right Decimal) Decimal +div(left Long, right Long) Long div(left Quantity, right Quantity) Quantity The div operator performs truncated division of its arguments. @@ -29,6 +30,12 @@ public static Object div(Object left, Object right, State state) { } return (Integer) left / (Integer) right; + } else if (left instanceof Long) { + if ((Long) right == 0) { + return null; + } + + return (Long) left / (Long) right; } else if (left instanceof BigDecimal) { if (EqualEvaluator.equal(right, new BigDecimal("0.0"), state)) { return null; diff --git a/Src/java/engine/src/main/java/org/opencds/cqf/cql/engine/runtime/Value.java b/Src/java/engine/src/main/java/org/opencds/cqf/cql/engine/runtime/Value.java index 3b2af4aa0..0aea39e9c 100644 --- a/Src/java/engine/src/main/java/org/opencds/cqf/cql/engine/runtime/Value.java +++ b/Src/java/engine/src/main/java/org/opencds/cqf/cql/engine/runtime/Value.java @@ -9,10 +9,18 @@ public class Value { public static final Integer MAX_INT = Integer.MAX_VALUE; public static final Long MAX_LONG = Long.MAX_VALUE; - public static final BigDecimal MAX_DECIMAL = new BigDecimal("9999999999999999999999999999.99999999"); + + /** + * Set to (1028 - 1) / 108. + */ + public static final BigDecimal MAX_DECIMAL = new BigDecimal("99999999999999999999.99999999"); public static final Integer MIN_INT = Integer.MIN_VALUE; public static final Long MIN_LONG = Long.MIN_VALUE; - public static final BigDecimal MIN_DECIMAL = new BigDecimal("-9999999999999999999999999999.99999999"); + + /** + * Set to (-1028 + 1) / 108. + */ + public static final BigDecimal MIN_DECIMAL = new BigDecimal("-99999999999999999999.99999999"); private Value() {} diff --git a/Src/java/engine/src/test/java/org/opencds/cqf/cql/engine/execution/CqlArithmeticFunctionsTest.java b/Src/java/engine/src/test/java/org/opencds/cqf/cql/engine/execution/CqlArithmeticFunctionsTest.java index 55ce4310e..e156bc907 100644 --- a/Src/java/engine/src/test/java/org/opencds/cqf/cql/engine/execution/CqlArithmeticFunctionsTest.java +++ b/Src/java/engine/src/test/java/org/opencds/cqf/cql/engine/execution/CqlArithmeticFunctionsTest.java @@ -272,7 +272,7 @@ void log() { assertThat(value, is(nullValue())); value = engine.expression(library, "Log1Base1").value(); - assertThat((BigDecimal) value, comparesEqualTo(BigDecimal.valueOf(0d))); + assertThat(value, is(nullValue())); value = engine.expression(library, "Log1Base2").value(); assertThat((BigDecimal) value, comparesEqualTo(BigDecimal.valueOf(0d))); @@ -367,7 +367,7 @@ void maximum() { assertThat(value, is(Long.MAX_VALUE)); value = engine.expression(library, "DecimalMaxValue").value(); - assertEquals(0, ((BigDecimal) value).compareTo(new BigDecimal("9999999999999999999999999999.99999999"))); + assertEquals(0, ((BigDecimal) value).compareTo(new BigDecimal("99999999999999999999.99999999"))); value = engine.expression(library, "DateTimeMaxValue").value(); assertTrue(EquivalentEvaluator.equivalent(value, new DateTime(BigDecimal.ZERO, 9999, 12, 31, 23, 59, 59, 999))); @@ -389,7 +389,7 @@ void minimum() { assertThat(value, is(Long.MIN_VALUE)); value = engine.expression(library, "DecimalMinValue").value(); - assertEquals(0, ((BigDecimal) value).compareTo(new BigDecimal("-9999999999999999999999999999.99999999"))); + assertEquals(0, ((BigDecimal) value).compareTo(new BigDecimal("-99999999999999999999.99999999"))); value = engine.expression(library, "DateTimeMinValue").value(); assertTrue(EquivalentEvaluator.equivalent(value, new DateTime(BigDecimal.ZERO, 1, 1, 1, 0, 0, 0, 0))); diff --git a/Src/java/engine/src/test/java/org/opencds/cqf/cql/engine/execution/CqlValueLiteralsAndSelectorsTest.java b/Src/java/engine/src/test/java/org/opencds/cqf/cql/engine/execution/CqlValueLiteralsAndSelectorsTest.java index ee5397349..e159c0a3d 100644 --- a/Src/java/engine/src/test/java/org/opencds/cqf/cql/engine/execution/CqlValueLiteralsAndSelectorsTest.java +++ b/Src/java/engine/src/test/java/org/opencds/cqf/cql/engine/execution/CqlValueLiteralsAndSelectorsTest.java @@ -152,28 +152,28 @@ void all_value_literals_and_selectors() { new BigDecimal(0).subtract(new BigDecimal(0.00000001).setScale(8, RoundingMode.HALF_EVEN)))); assertThat(((Quantity) value).getUnit(), is("mg")); - // define QuantityMax: 9999999999999999999999999999.99999999 'mg' + // define QuantityMax: 99999999999999999999.99999999 'mg' value = results.forExpression("QuantityMax").value(); assertThat(value, instanceOf(Quantity.class)); assertThat( ((Quantity) value).getValue(), - comparesEqualTo(new BigDecimal("9999999999999999999999999999.99999999"))); + comparesEqualTo(new BigDecimal("99999999999999999999.99999999"))); assertThat(((Quantity) value).getUnit(), is("mg")); - // define QuantityPosMax: +9999999999999999999999999999.99999999 'mg' + // define QuantityPosMax: +99999999999999999999.99999999 'mg' value = results.forExpression("QuantityPosMax").value(); assertThat(value, instanceOf(Quantity.class)); assertThat( ((Quantity) value).getValue(), - comparesEqualTo(new BigDecimal("9999999999999999999999999999.99999999"))); + comparesEqualTo(new BigDecimal("99999999999999999999.99999999"))); assertThat(((Quantity) value).getUnit(), is("mg")); - // define QuantityMin: -9999999999999999999999999999.99999999 'mg' + // define QuantityMin: -99999999999999999999.99999999 'mg' value = results.forExpression("QuantityMin").value(); assertThat(value, instanceOf(Quantity.class)); assertThat( ((Quantity) value).getValue(), - comparesEqualTo(new BigDecimal("-9999999999999999999999999999.99999999"))); + comparesEqualTo(new BigDecimal("-99999999999999999999.99999999"))); assertThat(((Quantity) value).getUnit(), is("mg")); value = results.forExpression("DecimalZero").value(); @@ -330,14 +330,14 @@ void all_value_literals_and_selectors() { // assertThat(((BigDecimal)result).setScale(7, RoundingMode.HALF_EVEN), comparesEqualTo(new // BigDecimal(-1*Math.pow(10.0,-7)).setScale(7,RoundingMode.HALF_EVEN))); - // define DecimalMaxValue : 9999999999999999999999999999.99999999 + // define DecimalMaxValue : 99999999999999999999.99999999 value = results.forExpression("DecimalMaxValue").value(); - assertThat(((BigDecimal) value), comparesEqualTo(new BigDecimal("9999999999999999999999999999.99999999"))); - // define DecimalPosMaxValue : +9999999999999999999999999999.99999999 + assertThat(((BigDecimal) value), comparesEqualTo(new BigDecimal("99999999999999999999.99999999"))); + // define DecimalPosMaxValue : +99999999999999999999.99999999 value = results.forExpression("DecimalPosMaxValue").value(); - assertThat(((BigDecimal) value), comparesEqualTo(new BigDecimal("9999999999999999999999999999.99999999"))); - // define DecimalMinValue: -9999999999999999999999999999.99999999 + assertThat(((BigDecimal) value), comparesEqualTo(new BigDecimal("99999999999999999999.99999999"))); + // define DecimalMinValue: -99999999999999999999.99999999 value = results.forExpression("DecimalMinValue").value(); - assertThat(((BigDecimal) value), comparesEqualTo(new BigDecimal("-9999999999999999999999999999.99999999"))); + assertThat(((BigDecimal) value), comparesEqualTo(new BigDecimal("-99999999999999999999.99999999"))); } } diff --git a/Src/java/engine/src/test/java/org/opencds/cqf/cql/engine/execution/ListOperatorsTest.java b/Src/java/engine/src/test/java/org/opencds/cqf/cql/engine/execution/ListOperatorsTest.java index 193bd8faa..7eb0045e3 100644 --- a/Src/java/engine/src/test/java/org/opencds/cqf/cql/engine/execution/ListOperatorsTest.java +++ b/Src/java/engine/src/test/java/org/opencds/cqf/cql/engine/execution/ListOperatorsTest.java @@ -394,13 +394,13 @@ void all_interval_operators() { assertTrue(equivalent(value, new Time(15, 59, 59, 999))); value = results.forExpression("IndexOfEmptyNull").value(); - assertThat(value, is(-1)); + assertThat(value, is(nullValue())); value = results.forExpression("IndexOfNullEmpty").value(); assertThat(value, is(nullValue())); value = results.forExpression("IndexOfNullIn1Null").value(); - assertThat(value, is(1)); + assertThat(value, is(nullValue())); value = results.forExpression("IndexOf1In12").value(); assertThat(value, is(0)); diff --git a/Src/java/engine/src/test/resources/org/opencds/cqf/cql/engine/execution/CqlPerformanceTest.cql b/Src/java/engine/src/test/resources/org/opencds/cqf/cql/engine/execution/CqlPerformanceTest.cql index 54baf2603..09c3c3de1 100644 --- a/Src/java/engine/src/test/resources/org/opencds/cqf/cql/engine/execution/CqlPerformanceTest.cql +++ b/Src/java/engine/src/test/resources/org/opencds/cqf/cql/engine/execution/CqlPerformanceTest.cql @@ -482,7 +482,7 @@ define MinDateTime: minimum DateTime define MinTime: minimum Time define test_MinInteger: TestMessage(MinInteger = -2147483648, 'MinInteger', toString(-2147483648), toString(MinInteger)) -define test_MinDecimal: TestMessage(MinDecimal = -9999999999999999999999999999.99999999, 'MinDecimal', toString(-9999999999999999999999999999.99999999), toString(MinDecimal)) +define test_MinDecimal: TestMessage(MinDecimal = -99999999999999999999.99999999, 'MinDecimal', toString(-99999999999999999999.99999999), toString(MinDecimal)) define test_MinDate: TestMessage(MinDate = @0001-01-01, 'MinDate', toString(@0001-01-01), toString(MinDate)) define test_MinDateTime: TestMessage(MinDateTime = @0001-01-01T00:00:00.000Z, 'MinDateTime', toString(@0001-01-01T00:00:00.000Z), toString(MinDateTime)) define test_MinTime: TestMessage(MinTime = @T00:00:00.000, 'MinTime', toString(@T00:00:00.000), toString(MinTime)) @@ -495,7 +495,7 @@ define MaxDateTime: maximum DateTime define MaxTime: maximum Time define test_MaxInteger: TestMessage(MaxInteger = 2147483647, 'MaxInteger', toString(2147483647), toString(MaxInteger)) -define test_MaxDecimal: TestMessage(MaxDecimal = 9999999999999999999999999999.99999999, 'MaxDecimal', toString(9999999999999999999999999999.99999999), toString(MaxDecimal)) +define test_MaxDecimal: TestMessage(MaxDecimal = 99999999999999999999.99999999, 'MaxDecimal', toString(99999999999999999999.99999999), toString(MaxDecimal)) define test_MaxDate: TestMessage(MaxDate = @9999-12-31, 'MaxDate', toString(@9999-12-31), toString(MaxDate)) define test_MaxDateTime: TestMessage(MaxDateTime = @9999-12-31T23:59:59.999Z, 'MaxDateTime', toString(@9999-12-31T23:59:59.999Z), toString(MaxDateTime)) define test_MaxTime: TestMessage(MaxTime = @T23:59:59.999, 'MaxTime', toString(@T23:59:59.999), toString(MaxTime)) @@ -2546,8 +2546,8 @@ define Includes_PosInfEndNotIncludesIntIvl: Interval[0, null] includes Interval[ define Includes_UnknownEndIncludesIntIvl: Interval[0, null) includes Interval[0, 0] define Includes_UnknownEndMayIncludeIntIvl: Interval[0, null) includes Interval[1234, 5678] define Includes_UnknownEndNotIncludesIntIvl: Interval[0, null) includes Interval[-1234, 5678] -define Includes_NegInfBegIncludesDateIvl: Interval[null, DateTime(2013, 1, 1, 0, 0, 0, 0)) includes Interval[DateTime(1, 1, 1, 0, 0, 0, 0), DateTime(2000, 1, 1, 0, 0, 0, 0)] -define Includes_NegInfBegNotIncludesDateIvl: Interval[null, DateTime(2013, 1, 1, 0, 0, 0, 0)) includes Interval[DateTime(1, 1, 1, 0, 0, 0, 0), DateTime(2013, 1, 1, 0, 0, 0, 0)] +define Includes_NegInfBegIncludesDateIvl: Interval[null, DateTime(2013, 1, 1, 0, 0, 0, 0)) includes Interval[DateTime(1, 1, 1, 0, 0, 0, 0, 0), DateTime(2000, 1, 1, 0, 0, 0, 0)] +define Includes_NegInfBegNotIncludesDateIvl: Interval[null, DateTime(2013, 1, 1, 0, 0, 0, 0)) includes Interval[DateTime(1, 1, 1, 0, 0, 0, 0, 0), DateTime(2013, 1, 1, 0, 0, 0, 0)] define Includes_UnknownBegIncludesDateIvl: Interval(null, DateTime(2013, 1, 1, 0, 0, 0, 0)) includes Interval[DateTime(2012, 12, 31, 23, 59, 59, 999), DateTime(2012, 12, 31, 23, 59, 59, 999)] define Includes_UnknownBegMayIncludeDateIvl: Interval(null, DateTime(2013, 1, 1, 0, 0, 0, 0)) includes Interval[DateTime(1, 1, 1, 0, 0, 0, 0), DateTime(2000, 1, 1, 0, 0, 0, 0)] define Includes_UnknownBegNotIncludesDateIvl: Interval(null, DateTime(2013, 1, 1, 0, 0, 0, 0)) includes Interval[DateTime(1, 1, 1, 0, 0, 0, 0), DateTime(2013, 1, 1, 0, 0, 0, 0)] @@ -3818,7 +3818,7 @@ define QuantityMeterNullHighIntervalList: { Interval[ToQuantity('1 \'m\''),ToQua define CollapseQuantityNullHighUnitsWithinPerExpected : { Interval[ToQuantity('1 \'m\''), null] } define QuantityIntervalListWithNulls: { Interval[ToQuantity(4), ToQuantity(8)], Interval[null, ToQuantity(2)], Interval[ToQuantity(1), ToQuantity(4)], Interval[ToQuantity(7), null] } // TODO: should be { Interval[(null as Quantity), (null as Quantity)] } but that currently evaluates to null in the engine -define CollapseQuantityIntervalListWithNullsExpected: { Interval[null, 9999999999999999999999999999.99999999 '1'] } +define CollapseQuantityIntervalListWithNullsExpected: { Interval[null, 99999999999999999999.99999999 '1'] } define QuantityIntervalListWithNullLowNoOverlap: { Interval[ToQuantity(4), ToQuantity(8)], Interval[null, ToQuantity(2)] } define CollapseQuantityIntervalListWithNullLowNoOverlapExpected: { Interval[null, ToQuantity(2)], Interval[ToQuantity(4), ToQuantity(8)]} define QuantityIntervalListWithNullHighNoOverlap: { Interval[ToQuantity(4), null], Interval[ToQuantity(1), ToQuantity(2)] } @@ -4658,7 +4658,7 @@ define test_IndexOf_IndexOfThirdTuple: TestMessage(IndexOf_IndexOfThirdTuple = 2 define test_IndexOf_MultipleMatches: TestMessage(IndexOf_MultipleMatches = 3, 'IndexOf_MultipleMatches', toString(3), toString(IndexOf_MultipleMatches)) define test_IndexOf_ItemNotFound: TestMessage(IndexOf_ItemNotFound = -1, 'IndexOf_ItemNotFound', toString(-1), toString(IndexOf_ItemNotFound)) define test_IndexOf_NullList: TestMessage(IndexOf_NullList is null, 'IndexOf_NullList', 'null', toString(IndexOf_NullList)) -define test_IndexOf_NullItem: TestMessage(IndexOf_NullItem = -1, 'IndexOf_NullItem', toString(-1), toString(IndexOf_NullItem)) +define test_IndexOf_NullItem: TestMessage(IndexOf_NullItem is null, 'IndexOf_NullItem', 'null', toString(IndexOf_NullItem)) define test_IndexOf_ListCode: TestMessage(IndexOf_ListCode = 0, 'IndexOf_ListCode', toString(0), toString(IndexOf_ListCode)) define test_IndexOf_ListCodeUndefined: TestMessage(IndexOf_ListCodeUndefined = 0, 'IndexOf_ListCodeUndefined', toString(0), toString(IndexOf_ListCodeUndefined)) define test_IndexOf_ListWrongCode: TestMessage(IndexOf_ListWrongCode = -1, 'IndexOf_ListWrongCode', toString(-1), toString(IndexOf_ListWrongCode)) diff --git a/Src/java/engine/src/test/resources/org/opencds/cqf/cql/engine/execution/CqlTestSuite.cql b/Src/java/engine/src/test/resources/org/opencds/cqf/cql/engine/execution/CqlTestSuite.cql index 8b55ce0cf..862ad72de 100644 --- a/Src/java/engine/src/test/resources/org/opencds/cqf/cql/engine/execution/CqlTestSuite.cql +++ b/Src/java/engine/src/test/resources/org/opencds/cqf/cql/engine/execution/CqlTestSuite.cql @@ -482,7 +482,7 @@ define MinDateTime: minimum DateTime define MinTime: minimum Time define test_MinInteger: TestMessage(MinInteger = -2147483648, 'MinInteger', toString(-2147483648), toString(MinInteger)) -define test_MinDecimal: TestMessage(MinDecimal = -9999999999999999999999999999.99999999, 'MinDecimal', toString(-9999999999999999999999999999.99999999), toString(MinDecimal)) +define test_MinDecimal: TestMessage(MinDecimal = -99999999999999999999.99999999, 'MinDecimal', toString(-99999999999999999999.99999999), toString(MinDecimal)) define test_MinDate: TestMessage(MinDate = @0001-01-01, 'MinDate', toString(@0001-01-01), toString(MinDate)) define test_MinDateTime: TestMessage(MinDateTime = @0001-01-01T00:00:00.000Z, 'MinDateTime', toString(@0001-01-01T00:00:00.000Z), toString(MinDateTime)) define test_MinTime: TestMessage(MinTime = @T00:00:00.000, 'MinTime', toString(@T00:00:00.000), toString(MinTime)) @@ -495,7 +495,7 @@ define MaxDateTime: maximum DateTime define MaxTime: maximum Time define test_MaxInteger: TestMessage(MaxInteger = 2147483647, 'MaxInteger', toString(2147483647), toString(MaxInteger)) -define test_MaxDecimal: TestMessage(MaxDecimal = 9999999999999999999999999999.99999999, 'MaxDecimal', toString(9999999999999999999999999999.99999999), toString(MaxDecimal)) +define test_MaxDecimal: TestMessage(MaxDecimal = 99999999999999999999.99999999, 'MaxDecimal', toString(99999999999999999999.99999999), toString(MaxDecimal)) define test_MaxDate: TestMessage(MaxDate = @9999-12-31, 'MaxDate', toString(@9999-12-31), toString(MaxDate)) define test_MaxDateTime: TestMessage(MaxDateTime = @9999-12-31T23:59:59.999Z, 'MaxDateTime', toString(@9999-12-31T23:59:59.999Z), toString(MaxDateTime)) define test_MaxTime: TestMessage(MaxTime = @T23:59:59.999, 'MaxTime', toString(@T23:59:59.999), toString(MaxTime)) @@ -2546,8 +2546,8 @@ define Includes_PosInfEndNotIncludesIntIvl: Interval[0, null] includes Interval[ define Includes_UnknownEndIncludesIntIvl: Interval[0, null) includes Interval[0, 0] define Includes_UnknownEndMayIncludeIntIvl: Interval[0, null) includes Interval[1234, 5678] define Includes_UnknownEndNotIncludesIntIvl: Interval[0, null) includes Interval[-1234, 5678] -define Includes_NegInfBegIncludesDateIvl: Interval[null, DateTime(2013, 1, 1, 0, 0, 0, 0)) includes Interval[DateTime(1, 1, 1, 0, 0, 0, 0), DateTime(2000, 1, 1, 0, 0, 0, 0)] -define Includes_NegInfBegNotIncludesDateIvl: Interval[null, DateTime(2013, 1, 1, 0, 0, 0, 0)) includes Interval[DateTime(1, 1, 1, 0, 0, 0, 0), DateTime(2013, 1, 1, 0, 0, 0, 0)] +define Includes_NegInfBegIncludesDateIvl: Interval[null, DateTime(2013, 1, 1, 0, 0, 0, 0)) includes Interval[DateTime(1, 1, 1, 0, 0, 0, 0, 0), DateTime(2000, 1, 1, 0, 0, 0, 0)] +define Includes_NegInfBegNotIncludesDateIvl: Interval[null, DateTime(2013, 1, 1, 0, 0, 0, 0)) includes Interval[DateTime(1, 1, 1, 0, 0, 0, 0, 0), DateTime(2013, 1, 1, 0, 0, 0, 0)] define Includes_UnknownBegIncludesDateIvl: Interval(null, DateTime(2013, 1, 1, 0, 0, 0, 0)) includes Interval[DateTime(2012, 12, 31, 23, 59, 59, 999), DateTime(2012, 12, 31, 23, 59, 59, 999)] define Includes_UnknownBegMayIncludeDateIvl: Interval(null, DateTime(2013, 1, 1, 0, 0, 0, 0)) includes Interval[DateTime(1, 1, 1, 0, 0, 0, 0), DateTime(2000, 1, 1, 0, 0, 0, 0)] define Includes_UnknownBegNotIncludesDateIvl: Interval(null, DateTime(2013, 1, 1, 0, 0, 0, 0)) includes Interval[DateTime(1, 1, 1, 0, 0, 0, 0), DateTime(2013, 1, 1, 0, 0, 0, 0)] @@ -3818,7 +3818,7 @@ define QuantityMeterNullHighIntervalList: { Interval[ToQuantity('1 \'m\''),ToQua define CollapseQuantityNullHighUnitsWithinPerExpected : { Interval[ToQuantity('1 \'m\''), null] } define QuantityIntervalListWithNulls: { Interval[ToQuantity(4), ToQuantity(8)], Interval[null, ToQuantity(2)], Interval[ToQuantity(1), ToQuantity(4)], Interval[ToQuantity(7), null] } // TODO: should be { Interval[(null as Quantity), (null as Quantity)] } but that currently evaluates to null in the engine -define CollapseQuantityIntervalListWithNullsExpected: { Interval[null, 9999999999999999999999999999.99999999 '1'] } +define CollapseQuantityIntervalListWithNullsExpected: { Interval[null, 99999999999999999999.99999999 '1'] } define QuantityIntervalListWithNullLowNoOverlap: { Interval[ToQuantity(4), ToQuantity(8)], Interval[null, ToQuantity(2)] } define CollapseQuantityIntervalListWithNullLowNoOverlapExpected: { Interval[null, ToQuantity(2)], Interval[ToQuantity(4), ToQuantity(8)]} define QuantityIntervalListWithNullHighNoOverlap: { Interval[ToQuantity(4), null], Interval[ToQuantity(1), ToQuantity(2)] } @@ -4658,7 +4658,7 @@ define test_IndexOf_IndexOfThirdTuple: TestMessage(IndexOf_IndexOfThirdTuple = 2 define test_IndexOf_MultipleMatches: TestMessage(IndexOf_MultipleMatches = 3, 'IndexOf_MultipleMatches', toString(3), toString(IndexOf_MultipleMatches)) define test_IndexOf_ItemNotFound: TestMessage(IndexOf_ItemNotFound = -1, 'IndexOf_ItemNotFound', toString(-1), toString(IndexOf_ItemNotFound)) define test_IndexOf_NullList: TestMessage(IndexOf_NullList is null, 'IndexOf_NullList', 'null', toString(IndexOf_NullList)) -define test_IndexOf_NullItem: TestMessage(IndexOf_NullItem = -1, 'IndexOf_NullItem', toString(-1), toString(IndexOf_NullItem)) +define test_IndexOf_NullItem: TestMessage(IndexOf_NullItem is null, 'IndexOf_NullItem', 'null', toString(IndexOf_NullItem)) define test_IndexOf_ListCode: TestMessage(IndexOf_ListCode = 0, 'IndexOf_ListCode', toString(0), toString(IndexOf_ListCode)) define test_IndexOf_ListCodeUndefined: TestMessage(IndexOf_ListCodeUndefined = 0, 'IndexOf_ListCodeUndefined', toString(0), toString(IndexOf_ListCodeUndefined)) define test_IndexOf_ListWrongCode: TestMessage(IndexOf_ListWrongCode = -1, 'IndexOf_ListWrongCode', toString(-1), toString(IndexOf_ListWrongCode)) diff --git a/Src/java/engine/src/test/resources/org/opencds/cqf/cql/engine/execution/CqlValueLiteralsAndSelectorsTest.cql b/Src/java/engine/src/test/resources/org/opencds/cqf/cql/engine/execution/CqlValueLiteralsAndSelectorsTest.cql index e89d1e938..cb956194e 100644 --- a/Src/java/engine/src/test/resources/org/opencds/cqf/cql/engine/execution/CqlValueLiteralsAndSelectorsTest.cql +++ b/Src/java/engine/src/test/resources/org/opencds/cqf/cql/engine/execution/CqlValueLiteralsAndSelectorsTest.cql @@ -69,9 +69,9 @@ define DecimalNegTenStep : -0.0000001 define DecimalTenthStep : 0.000000001 define DecimalPosTenthStep : +0.000000001 define DecimalNegTenthStep : -0.000000001 -define DecimalMaxValue : 9999999999999999999999999999.99999999 -define DecimalPosMaxValue : +9999999999999999999999999999.99999999 -define DecimalMinValue: -9999999999999999999999999999.99999999 +define DecimalMaxValue : 99999999999999999999.99999999 +define DecimalPosMaxValue : +99999999999999999999.99999999 +define DecimalMinValue: -99999999999999999999.99999999 define QuantityZero: 0 'g' define QuantityPosZero: +0 'g' @@ -85,7 +85,7 @@ define QuantityNegSmall: -0.05 'mg' define QuantityStep: 0.00000001 'mg' define QuantityPosStep: +0.00000001 'mg' define QuantityNegStep: -0.00000001 'mg' -define QuantityMax: 9999999999999999999999999999.99999999 'mg' -define QuantityPosMax: +9999999999999999999999999999.99999999 'mg' -define QuantityMin: -9999999999999999999999999999.99999999 'mg' +define QuantityMax: 99999999999999999999.99999999 'mg' +define QuantityPosMax: +99999999999999999999.99999999 'mg' +define QuantityMin: -99999999999999999999.99999999 'mg'