From 18dd839f3f99324f66cc25b92758a2f17aa4ca5d Mon Sep 17 00:00:00 2001 From: Dylan Hall Date: Tue, 29 Sep 2026 13:04:55 -0400 Subject: [PATCH 1/9] build spec-tests improvements --- specification.version | 1 + test/generator/build.gradle | 5 +++-- test/spec-tests/generate-cql.js | 19 ++++++++++++++----- test/spec-tests/skip-list.txt | 12 +----------- 4 files changed, 19 insertions(+), 18 deletions(-) create mode 100644 specification.version diff --git a/specification.version b/specification.version new file mode 100644 index 000000000..359a5b952 --- /dev/null +++ b/specification.version @@ -0,0 +1 @@ +2.0.0 \ No newline at end of file diff --git a/test/generator/build.gradle b/test/generator/build.gradle index 028ed6a39..c72db73f9 100644 --- a/test/generator/build.gradle +++ b/test/generator/build.gradle @@ -5,12 +5,13 @@ java { } repositories { + mavenLocal() mavenCentral() } dependencies { - implementation group: 'org.cqframework', name: 'cql-to-elm-cli', version: '4.2.0' - implementation group: 'org.cqframework', name: 'cql-to-elm', version: '4.2.0' + implementation group: 'org.cqframework', name: 'cql-to-elm-cli', version: '5.3.0-dehalltest' + implementation group: 'org.cqframework', name: 'cql-to-elm', version: '5.3.0-dehalltest' implementation group: 'net.sf.jopt-simple', name: 'jopt-simple', version: '4.7' implementation group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.18.0' } diff --git a/test/spec-tests/generate-cql.js b/test/spec-tests/generate-cql.js index e6e03956a..140a8a706 100644 --- a/test/spec-tests/generate-cql.js +++ b/test/spec-tests/generate-cql.js @@ -3,6 +3,8 @@ const fs = require('fs'); const path = require('path'); const convert = require('xml-js'); +const cqlSpecVersion = fs.readFileSync(path.join(__dirname, '../../specification.version'), 'utf-8'); + // First read the skiplist and build a map of skipped tests const skippedTestMap = new Map(); const skipListText = fs.readFileSync(path.join(__dirname, 'skip-list.txt'), 'utf-8'); @@ -85,6 +87,17 @@ fs.readdirSync(path.join(__dirname, 'xml')).forEach(file => { processedSkips.add(`${suiteName}.${groupName}.${testName}`); } else if (test.library != null) { skipped = 'Test tag not supported in cql-execution test runner'; + } else if (test.expression._attributes && test.expression._attributes.invalid) { + const invalid = test.expression._attributes.invalid; + if (invalid === 'syntax') { + skipped = 'Test includes an intentional syntax error; it cannot be parsed or translated' + } else if (invalid === 'semantic') { + skipped = 'Test includes an intentional semantic error; it parses but does not translate' + } + } else if (test._attributes && test._attributes.version > cqlSpecVersion) { + skipped = `Test targets minimum CQL version ${test.version} which is higher than configured library target ${cqlSpecVersion}` + } else if (test._attributes && test._attributes.versionTo < cqlSpecVersion) { + skipped = `Test targets maximum CQL version ${test.version} which is lower than configured library target ${cqlSpecVersion}` } if (skipped != null) { cql += ` skipped: '${skipped.replace(/'/g, "\\'").trim()}'\n`; @@ -96,11 +109,7 @@ fs.readdirSync(path.join(__dirname, 'xml')).forEach(file => { if (test.expression != null) { cql += ` expression: ${test.expression._text}`; if (test.expression._attributes && test.expression._attributes.invalid) { - if (test.expression._attributes.invalid == 'true') { - cql += ',\n invalid: true'; - } else if (test.expression._attributes.invalid == 'semantic') { - cql += ",\n invalid: 'semantic'"; - } + cql += `,\n invalid: ${test.expression._attributes.invalid}`; } } if (test.output != null) { diff --git a/test/spec-tests/skip-list.txt b/test/spec-tests/skip-list.txt index c6fcfa927..f8415fbd5 100644 --- a/test/spec-tests/skip-list.txt +++ b/test/spec-tests/skip-list.txt @@ -1,8 +1,5 @@ # Invalid CQL (does not translate) -CqlTypesTest.Time.TimeUpperBoundHours Intentional Translator error: Invalid time input (T24:59:59.999). Use ISO 8601 time representation (hh:mm:ss.fff) -CqlTypesTest.Time.TimeUpperBoundMinutes Translator error: Invalid time input[...] -CqlTypesTest.Time.TimeUpperBoundSeconds Translator error: Invalid time input[...] -"CqlDateTimeOperatorsTest.Uncertainty tests.TimeDurationBetweenHourDiffPrecision" Translator error: Syntax error at Z +"CqlDateTimeOperatorsTest.Uncertainty tests.TimeDurationBetweenHourDiffPrecision" Translator error: Syntax error at Z. Test is marked as invalid "true" but should be "syntax" # Invalid Translation (translates, but translates wrong) CqlAggregateTest.AggregateTests.RolledOutIntervals CQL adds an integer to a date ("S + duration in days of X"). Should be "S + Quantity{ value: duration in days of X, unit: 'days' }". Translator translates it, but probably shouldn't. @@ -55,7 +52,6 @@ CqlArithmeticFunctionsTest.LowBoundary.LowBoundaryNullPrecision Wron # Equivalent answer but represented differently than expected output # Incorrect answer -CqlComparisonOperatorsTest.Equal.DateTimeEqNull Wrong answer (true vs null - due to not evaluating DateTime(null) as null) "CqlComparisonOperatorsTest.Unit Comparison.TestQuantityMonthEqualMo" Wrong answer: Quantity =/~ should have special semantics for calendar-based units "CqlComparisonOperatorsTest.Unit Comparison.TestQuantityMonthNotEqualMo" Wrong answer: Quantity =/~ should have special semantics for calendar-based units "CqlComparisonOperatorsTest.Unit Comparison.TestQuantityMonthEquivalentMo" Wrong answer: Quantity =/~ should have special semantics for calendar-based units @@ -96,9 +92,3 @@ CqlArithmeticFunctionsTest.Modulo.Modulo10By3Quantity Modulo not CqlListOperatorsTest.Slice Slice not implemented # Legacy Behavior (Test targets an earlier version of CQL) -CqlDateTimeOperatorsTest.DateTimeComponentFrom.DateTimeComponentFromTimezoneOffset Translator error: Timezone keyword is only valid in 1.3 or lower -CqlArithmeticFunctionsTest.Predecessor.PredecessorOf1D Test targets <= 1.5.3. As of 2.0 Successor of Decimal is precision-aware. -CqlArithmeticFunctionsTest.Predecessor.PredecessorOf101D Test targets <= 1.5.3. As of 2.0 Successor of Decimal is precision-aware -CqlArithmeticFunctionsTest.Predecessor.PredecessorOf1QCM Test targets <= 1.5.3. As of 2.0 Successor of Decimal is precision-aware -CqlArithmeticFunctionsTest.Successor.SuccessorOf1D Test targets <= 1.5.3. As of 2.0 Successor of Decimal is precision-aware -CqlArithmeticFunctionsTest.Successor.SuccessorOf101D Test targets <= 1.5.3. As of 2.0 Successor of Decimal is precision-aware \ No newline at end of file From 3a2ffe5ed3376110b6044b013c397900873f1b0c Mon Sep 17 00:00:00 2001 From: Dylan Hall Date: Tue, 29 Sep 2026 13:08:11 -0400 Subject: [PATCH 2/9] fix prettier --- test/spec-tests/generate-cql.js | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/test/spec-tests/generate-cql.js b/test/spec-tests/generate-cql.js index 140a8a706..8efcc9659 100644 --- a/test/spec-tests/generate-cql.js +++ b/test/spec-tests/generate-cql.js @@ -3,7 +3,10 @@ const fs = require('fs'); const path = require('path'); const convert = require('xml-js'); -const cqlSpecVersion = fs.readFileSync(path.join(__dirname, '../../specification.version'), 'utf-8'); +const cqlSpecVersion = fs.readFileSync( + path.join(__dirname, '../../specification.version'), + 'utf-8' +); // First read the skiplist and build a map of skipped tests const skippedTestMap = new Map(); @@ -90,14 +93,14 @@ fs.readdirSync(path.join(__dirname, 'xml')).forEach(file => { } else if (test.expression._attributes && test.expression._attributes.invalid) { const invalid = test.expression._attributes.invalid; if (invalid === 'syntax') { - skipped = 'Test includes an intentional syntax error; it cannot be parsed or translated' + skipped = 'Test includes an intentional syntax error; it cannot be parsed or translated'; } else if (invalid === 'semantic') { - skipped = 'Test includes an intentional semantic error; it parses but does not translate' + skipped = 'Test includes an intentional semantic error; it parses but does not translate'; } } else if (test._attributes && test._attributes.version > cqlSpecVersion) { - skipped = `Test targets minimum CQL version ${test.version} which is higher than configured library target ${cqlSpecVersion}` + skipped = `Test targets minimum CQL version ${test.version} which is higher than configured library target ${cqlSpecVersion}`; } else if (test._attributes && test._attributes.versionTo < cqlSpecVersion) { - skipped = `Test targets maximum CQL version ${test.version} which is lower than configured library target ${cqlSpecVersion}` + skipped = `Test targets maximum CQL version ${test.version} which is lower than configured library target ${cqlSpecVersion}`; } if (skipped != null) { cql += ` skipped: '${skipped.replace(/'/g, "\\'").trim()}'\n`; From 5bbb8acffd1e0a1ae1c1eed3196880ae7879bb26 Mon Sep 17 00:00:00 2001 From: Dylan Hall Date: Mon, 5 Oct 2026 11:11:34 -0400 Subject: [PATCH 3/9] replace included cql-tests files with git submodule to cql-tests-runner --- .gitmodules | 3 + .mocharc.json | 3 +- .oxlintrc.json | 3 +- .prettierignore | 2 + test/spec-tests/cql-tests-runner | 1 + test/spec-tests/generate-cql.js | 23 +- test/spec-tests/skip-list.txt | 9 +- .../xml/CqlAggregateFunctionsTest.xml | 313 --- test/spec-tests/xml/CqlAggregateTest.xml | 107 - .../xml/CqlArithmeticFunctionsTest.xml | 1113 --------- .../xml/CqlComparisonOperatorsTest.xml | 1126 --------- .../xml/CqlConditionalOperatorsTest.xml | 121 - .../xml/CqlDateTimeOperatorsTest.xml | 1807 -------------- .../CqlErrorsAndMessagingOperatorsTest.xml | 28 - .../xml/CqlIntervalOperatorsTest.xml | 2179 ----------------- test/spec-tests/xml/CqlListOperatorsTest.xml | 1310 ---------- .../xml/CqlLogicalOperatorsTest.xml | 216 -- .../xml/CqlNullologicalOperatorsTest.xml | 127 - test/spec-tests/xml/CqlOverloadMatching.xml | 16 - test/spec-tests/xml/CqlQueryTests.xml | 74 - .../spec-tests/xml/CqlStringOperatorsTest.xml | 468 ---- test/spec-tests/xml/CqlTypeOperatorsTest.xml | 218 -- test/spec-tests/xml/CqlTypesTest.xml | 228 -- .../xml/ValueLiteralsAndSelectors.xml | 433 ---- test/spec-tests/xml/testSchema.xsd | 156 -- test/tsconfig.json | 3 +- 26 files changed, 39 insertions(+), 10048 deletions(-) create mode 100644 .gitmodules create mode 160000 test/spec-tests/cql-tests-runner delete mode 100644 test/spec-tests/xml/CqlAggregateFunctionsTest.xml delete mode 100644 test/spec-tests/xml/CqlAggregateTest.xml delete mode 100644 test/spec-tests/xml/CqlArithmeticFunctionsTest.xml delete mode 100644 test/spec-tests/xml/CqlComparisonOperatorsTest.xml delete mode 100644 test/spec-tests/xml/CqlConditionalOperatorsTest.xml delete mode 100644 test/spec-tests/xml/CqlDateTimeOperatorsTest.xml delete mode 100644 test/spec-tests/xml/CqlErrorsAndMessagingOperatorsTest.xml delete mode 100644 test/spec-tests/xml/CqlIntervalOperatorsTest.xml delete mode 100644 test/spec-tests/xml/CqlListOperatorsTest.xml delete mode 100644 test/spec-tests/xml/CqlLogicalOperatorsTest.xml delete mode 100644 test/spec-tests/xml/CqlNullologicalOperatorsTest.xml delete mode 100644 test/spec-tests/xml/CqlOverloadMatching.xml delete mode 100644 test/spec-tests/xml/CqlQueryTests.xml delete mode 100644 test/spec-tests/xml/CqlStringOperatorsTest.xml delete mode 100644 test/spec-tests/xml/CqlTypeOperatorsTest.xml delete mode 100644 test/spec-tests/xml/CqlTypesTest.xml delete mode 100644 test/spec-tests/xml/ValueLiteralsAndSelectors.xml delete mode 100644 test/spec-tests/xml/testSchema.xsd diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 000000000..6696c2f30 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "test/spec-tests/cql-tests-runner"] + path = test/spec-tests/cql-tests-runner + url = https://github.com/cqframework/cql-tests-runner diff --git a/.mocharc.json b/.mocharc.json index 5340a4ff4..2aea54368 100644 --- a/.mocharc.json +++ b/.mocharc.json @@ -1,5 +1,6 @@ { - "ignore": ["test/spec-tests/*.js"], + "ignore": ["test/spec-tests/*.js", "test/spec-tests/cql-tests-runner/**"], + "watch-ignore": ["node_modules", ".git", "test/spec-tests/cql-tests-runner"], "extension": ["ts"], "require": ["tsx/cjs", "./test/should-extensions.ts"] } diff --git a/.oxlintrc.json b/.oxlintrc.json index 7742f07ce..0bc0758aa 100644 --- a/.oxlintrc.json +++ b/.oxlintrc.json @@ -10,7 +10,8 @@ "**/lib", "**/lib-test", "**/dist", - "test-server/**" + "test-server/**", + "test/spec-tests/cql-tests-runner/**" ], "rules": { "no-loss-of-precision": "off", diff --git a/.prettierignore b/.prettierignore index 823ca7344..ffc58dd54 100644 --- a/.prettierignore +++ b/.prettierignore @@ -7,6 +7,8 @@ node_modules coverage # the following uses its own prettier config test-server +# upstream submodule is maintained separately +test/spec-tests/cql-tests-runner # the following are generated by the test generator test/elm/*/data.js test/elm/external/Included.js diff --git a/test/spec-tests/cql-tests-runner b/test/spec-tests/cql-tests-runner new file mode 160000 index 000000000..3698c3433 --- /dev/null +++ b/test/spec-tests/cql-tests-runner @@ -0,0 +1 @@ +Subproject commit 3698c3433bfd228d9a8966e71bef6b33dd0a75b4 diff --git a/test/spec-tests/generate-cql.js b/test/spec-tests/generate-cql.js index 8efcc9659..dc957e532 100644 --- a/test/spec-tests/generate-cql.js +++ b/test/spec-tests/generate-cql.js @@ -27,13 +27,23 @@ skipListText.split(/[\r\n]+/).forEach(line => { skippedTestMap.set(match[1].replace(/(^")|("$)/g, ''), match[2]); }); -fs.readdirSync(path.join(__dirname, 'xml')).forEach(file => { +const inputDir = path.join(__dirname, 'cql-tests-runner/cql-tests/tests/cql'); +const outputDir = path.join(__dirname, 'cql'); + +if (!fs.existsSync(inputDir)) { + console.error('ERROR: cql-tests under the cql-tests-runner submodule not found!'); + console.error( + 'Have you loaded the submodules by running `git submodule update --init --recursive` ?' + ); +} + +fs.readdirSync(inputDir).forEach(file => { if (!file.endsWith('.xml')) { return; } // Read the XML file - const xmlFile = path.join(__dirname, 'xml', file); + const xmlFile = path.join(inputDir, file); let xmlJS; try { const xml = fs.readFileSync(xmlFile, 'utf-8'); @@ -129,15 +139,17 @@ fs.readdirSync(path.join(__dirname, 'xml')).forEach(file => { }); // Write the CQL - const cqlFile = path.join(__dirname, 'cql', file.replace(/xml$/, 'cql')); + const cqlFile = path.join(outputDir, file.replace(/xml$/, 'cql')); fs.writeFileSync(cqlFile, cql, 'utf-8'); console.log('Generated', cqlFile); }); +let exitError = false; if (invalidLines.size > 0) { console.error(); console.error('Invalid lines in skip-list.txt:'); invalidLines.forEach(l => console.error(`> ${l}`)); + exitError = true; } processedSkips.forEach(s => skippedTestMap.delete(s)); @@ -145,4 +157,9 @@ if (skippedTestMap.size > 0) { console.error(); console.error('Unmatched tests in skip-list.txt:'); Array.from(skippedTestMap.keys()).forEach(k => console.error(`> ${k}`)); + exitError = true; +} + +if (exitError) { + process.exit(1); } diff --git a/test/spec-tests/skip-list.txt b/test/spec-tests/skip-list.txt index f8415fbd5..5401a086b 100644 --- a/test/spec-tests/skip-list.txt +++ b/test/spec-tests/skip-list.txt @@ -3,9 +3,13 @@ # Invalid Translation (translates, but translates wrong) CqlAggregateTest.AggregateTests.RolledOutIntervals CQL adds an integer to a date ("S + duration in days of X"). Should be "S + Quantity{ value: duration in days of X, unit: 'days' }". Translator translates it, but probably shouldn't. +CqlIntervalOperatorsTest.Overlaps.TestMaxIntervalOverlapsTrue To get the desired result, the translator needs to case the Interval[null, null] operand as Interval. See https://github.com/cqframework/clinical_quality_language/issues/1856 +CqlIntervalOperatorsTest.OverlapsBefore.TestMaxIntervalOverlapsBeforeTrue To get the desired result, the translator needs to case the Interval[null, null] operand as Interval. +CqlIntervalOperatorsTest.OverlapsAfter.TestMaxIntervalOverlapsAfterTrue To get the desired result, the translator needs to case the Interval[null, null] operand as Interval. +CqlIntervalOperatorsTest.Starts.TestMaxIntervalStartsFalse To get the desired result, the translator needs to case the Interval[null, null] operand as Interval. +CqlIntervalOperatorsTest.Union.TestUnionMaxInterval To get the desired result, the translator needs to case the Interval[null, null] operand as Interval. # Incorrect Expected Output -CqlIntervalOperatorsTest.In.TestInNullBoundaries Wrong output: According to spec, comparison against null closed boundaries should result in true CqlIntervalOperatorsTest.ProperContains.TimeProperContainsPrecisionFalse Wrong output: According to spec, a contained point is properly contained as long as the interval is not a unit interval CqlIntervalOperatorsTest.ProperContains.TimeProperContainsFalse Wrong output: According to spec, a contained point is properly contained as long as the interval is not a unit interval CqlIntervalOperatorsTest.ProperIn.TimeProperInPrecisionFalse Wrong output: According to spec, a contained point is properly in as long as the interval is not a unit interval @@ -18,11 +22,11 @@ CqlIntervalOperatorsTest.Intersect.TestIntersectNull Wrong output: Ex "CqlIntervalOperatorsTest.Included In.DateTimeIncludedInNull" Wrong output: @2017-09-01T00:00:00 is equal to the lower bound @2017-09-01T00:00:00.000 since missing milliseconds compare as 0, so the interval is included; expected true, not null. CqlIntervalOperatorsTest.ProperContains.TimeProperContainsNull Wrong output: @T12:00:00 is before the lower bound @T12:00:00.001 since missing milliseconds compare as 0; expected false, not null. CqlIntervalOperatorsTest.ProperIn.TimeProperInNull Wrong output: @T12:00:00 is before the lower bound @T12:00:00.001 since missing milliseconds compare as 0; expected false, not null. +CqlIntervalOperatorsTest.PointFrom.TestPointFromUnknownIntervalNull Wrong output: Per the spec, "attempting to extract a point from the maximum interval (Interval[null, null]) will result in an error." CqlListOperatorsTest.Equal.EqualNullNull Wrong output: According to spec, if either list contains a null, the result is null CqlListOperatorsTest.Sort.simpleSortAsc Wrong output: Queries return distinct lists by default; need to use "all" to retain duplicates CqlListOperatorsTest.Sort.simpleSortDesc Wrong output: Queries return distinct lists by default; need to use "all" to retain duplicates -CqlIntervalOperatorsTest.PointFrom.TestPointFromNull Wrong output: Interval[null, null] is not a unit interval, nor is it null "CqlStringOperatorsTest.toString tests.QuantityToString" Wrong output: Spec says Quantity and Decimal ToString must always contain a decimal point and at least 1 digit on each side. Note this requirement itself also causes issues by introducing precision in the string that may not exist in the original Decimal. Future spec changes may make this test's expected value correct. CqlArithmeticFunctionsTest.Power.Power0To0 Wrong output: As of CQL 2.0, Power always returns Decimal CqlArithmeticFunctionsTest.Power.Power2To2 Wrong output: As of CQL 2.0, Power always returns Decimal @@ -52,6 +56,7 @@ CqlArithmeticFunctionsTest.LowBoundary.LowBoundaryNullPrecision Wron # Equivalent answer but represented differently than expected output # Incorrect answer +CqlComparisonOperatorsTest.Equal.DateTimeEqNull Wrong answer (true vs null - due to not evaluating DateTime(null) as null) "CqlComparisonOperatorsTest.Unit Comparison.TestQuantityMonthEqualMo" Wrong answer: Quantity =/~ should have special semantics for calendar-based units "CqlComparisonOperatorsTest.Unit Comparison.TestQuantityMonthNotEqualMo" Wrong answer: Quantity =/~ should have special semantics for calendar-based units "CqlComparisonOperatorsTest.Unit Comparison.TestQuantityMonthEquivalentMo" Wrong answer: Quantity =/~ should have special semantics for calendar-based units diff --git a/test/spec-tests/xml/CqlAggregateFunctionsTest.xml b/test/spec-tests/xml/CqlAggregateFunctionsTest.xml deleted file mode 100644 index b6369f9b3..000000000 --- a/test/spec-tests/xml/CqlAggregateFunctionsTest.xml +++ /dev/null @@ -1,313 +0,0 @@ - - - - - - - - AllTrue({true,true}) - true - - - - AllTrue({true,false}) - false - - - - AllTrue({false,true}) - false - - - - AllTrue({true,false,true}) - false - - - - AllTrue({false,true,false}) - false - - - - AllTrue({null,true,true}) - true - - - - AllTrue({}) - true - - - - AllTrue(null) - true - - - - - - - AnyTrue({true,true}) - true - - - - AnyTrue({false,false}) - false - - - - AnyTrue({true,false,true}) - true - - - - AnyTrue({false,true,false}) - true - - - - AnyTrue({true,false}) - true - - - - AnyTrue({false,true}) - true - - - - AnyTrue({null,true}) - true - - - - AnyTrue({null,false}) - false - - - - AnyTrue({}) - false - - - - AnyTrue(null) - false - - - - - - - Avg({ 1.0, 2.0, 3.0, 6.0 }) - 3.0 - - - - - - - - Product({5L, 4L, 5L}) - 100L - - - - - - - Count({ 15, 5, 99, null, 1 }) - 4 - - - - - Count({ DateTime(2014), DateTime(2001), DateTime(2010) }) - 3 - - - - - Count({ @T15:59:59.999, @T05:59:59.999, @T20:59:59.999 }) - 3 - - - - Count({}) - 0 - - - - - - - Max({ 5, 12, 1, 15, 0, 4, 90, 44 }) - 90 - - - - - Max({ 5L, 12L, 1L, 15L, 0L, 4L, 90L, 44L }) - 90L - - - - Max({ 'hi', 'bye', 'zebra' }) - 'zebra' - - - - - Max({ DateTime(2012, 10, 5), DateTime(2012, 9, 5), DateTime(2012, 10, 6) }) - @2012-10-06T - - - - - Max({ @T15:59:59.999, @T05:59:59.999, @T20:59:59.999 }) - @T20:59:59.999 - - - - - - - Median({6.0, 5.0, 4.0, 3.0, 2.0, 1.0}) - 3.5 - - - - - - - Min({5, 12, 1, 15, 0, 4, 90, 44}) - 0 - - - - - Min({5L, 12L, 1L, 15L, 0L, 4L, 90L, 44L}) - 0L - - - - Min({'hi', 'bye', 'zebra'}) - 'bye' - - - - - Min({ DateTime(2012, 10, 5), DateTime(2012, 9, 5), DateTime(2012, 10, 6) }) - @2012-09-05T - - - - - Min({ @T15:59:59.999, @T05:59:59.999, @T20:59:59.999 }) - @T05:59:59.999 - - - - - - - Mode({ 2, 1, 8, 2, 9, 1, 9, 9 }) - 9 - - - - - Mode({ DateTime(2012, 10, 5), DateTime(2012, 9, 5), DateTime(2012, 10, 6), DateTime(2012, 9, 5) }) - @2012-09-05T - - - - - Mode({ DateTime(2012, 10, 5), DateTime(2012, 10, 5), DateTime(2012, 10, 6), DateTime(2012, 9, 5) }) - @2012-10-05T - - - - - Mode({ @T15:59:59.999, @T05:59:59.999, @T20:59:59.999, @T05:59:59.999 }) - @T05:59:59.999 - - - - - - - PopulationStdDev({ 1.0, 2.0, 3.0, 4.0, 5.0 }) - 1.41421356 - - - - - PopulationStdDev({ null as Quantity, null as Quantity, null as Quantity }) - null - - - - - - - PopulationVariance({ 1.0, 2.0, 3.0, 4.0, 5.0 }) - 2.0 - - - - PopulationVariance({ null as Quantity, null as Quantity, null as Quantity }) - null - - - - - - - StdDev({ 1.0, 2.0, 3.0, 4.0, 5.0 }) - 1.58113883 - - - - - StdDev({ null as Quantity, null as Quantity, null as Quantity }) - null - - - - - - - Sum({ 6.0, 2.0, 3.0, 4.0, 5.0 }) - 20.0 - - - - - Sum({ 6L, 2L, 3L, 4L, 5L }) - 20L - - - - - Sum({1 'ml',2 'ml',3 'ml',4 'ml',5 'ml'}) - 15 'ml' - - - - Sum({ null, 1, null }) - 1 - - - - - - - Variance({ 1.0, 2.0, 3.0, 4.0, 5.0 }) - 2.5 - - - diff --git a/test/spec-tests/xml/CqlAggregateTest.xml b/test/spec-tests/xml/CqlAggregateTest.xml deleted file mode 100644 index 749bbb811..000000000 --- a/test/spec-tests/xml/CqlAggregateTest.xml +++ /dev/null @@ -1,107 +0,0 @@ - - - - - - - - - ({ 1, 2, 3, 4, 5 }) Num aggregate Result starting 1: Result * Num - 120 - - - - - - ({ - Interval[@2012-01-01, @2012-02-28], - Interval[@2012-02-01, @2012-03-31], - Interval[@2012-03-01, @2012-04-30] - }) M - aggregate R starting (null as List<Interval<DateTime>>): R union ({ - M X - let S: Max({ end of Last(R) + 1 day, start of X }), - E: S + Quantity{ value: duration in days of X, unit: 'days' } - return Interval[S, E] - }) - - - { - Interval[@2012-01-01, @2012-02-28], - Interval[@2012-02-29, @2012-04-28], - Interval[@2012-04-29, @2012-06-28] - } - - - - - - - ({ 1, 2, 3, 4, 5 }) Num - aggregate Result starting 1: Result + Num - - 16 - - - - - - - ({ 1, 2, 3, 4, 5 }) Num - aggregate Result: Coalesce(Result, 0) + Num - - 15 - - - - - - - ({ 1, 1, 2, 2, 2, 3, 4, 4, 5 }) Num - aggregate all Result: Coalesce(Result, 0) + Num - - 24 - - - - - - - ({ 1, 1, 2, 2, 2, 3, 4, 4, 5 }) Num - aggregate distinct Result: Coalesce(Result, 0) + Num - - 15 - - - - - - - from ({1}) X, ({2}) Y, ({3}) Z - aggregate Agg: Coalesce(Agg, 0) + X + Y + Z - - 6 - - - - - - from ({1, 2}) X, ({1, 2}) Y, ({1, 2}) Z - aggregate Agg starting 0: Agg + X + Y + Z - - 36 - - - - - - - from ({1, 2, 2, 1}) X, ({1, 2, 1, 2}) Y, ({2, 1, 2, 1}) Z - aggregate distinct Agg starting 1: Agg + X + Y + Z - - 37 - - - - diff --git a/test/spec-tests/xml/CqlArithmeticFunctionsTest.xml b/test/spec-tests/xml/CqlArithmeticFunctionsTest.xml deleted file mode 100644 index f10620f70..000000000 --- a/test/spec-tests/xml/CqlArithmeticFunctionsTest.xml +++ /dev/null @@ -1,1113 +0,0 @@ - - - - - - - - Abs(null as Integer) - null - - - Abs(0) - 0 - - - Abs(-1) - 1 - - - Abs(-1.0) - 1.0 - - - Abs(0.0) - 0.0 - - - - Abs(-1.0'cm') - 1.0'cm' - - - - Abs(-1L) - 1L - - - - - - 1 + null - null - - - 1 + 1 - 2 - - - - 1L + 2L - 3L - - - 1.0 + 1.0 - 2.0 - - - - 1'g/cm3' + 1'g/cm3' - 2.0'g/cm3' - - - 1 + 2.0 - 3.0 - - - - 1L + 1L - 2L - - - - - - Ceiling(null as Decimal) - null - - - Ceiling(1.0) - 1 - - - Ceiling(1.1) - 2 - - - Ceiling(-0.1) - 0 - - - Ceiling(-1.0) - -1 - - - Ceiling(-1.1) - -1 - - - Ceiling(1) - 1 - - - Ceiling(2147483647) - 2147483647 - - - Ceiling(2147483647.0) - 2147483647 - - - Ceiling(2147483647.2) - null - - - Ceiling(2147483648) - null - - - Ceiling(2147483648.2) - null - - - Ceiling(-2147483648) - -2147483648 - - - Ceiling(-2147483648.0) - -2147483648 - - - Ceiling(-2147483648.2) - -2147483648 - - - Ceiling(-2147483649) - null - - - Ceiling(-2147483649.2) - null - - - - - - 1 / null - null - - - 1 / 0 - null - - - 0 / 1 - 0.0 - - - 1 / 1 - 1.0 - - - - 1L / 1L - 1.0 - - - 1.0 / 1.0 - 1.0 - - - - Round(10 / 3, 8) - 3.33333333 - - - - 1'g/cm3' / 1.0 - 1.0'g/cm3' - - - - - - 1'g/cm3' / 1'g/cm3' - 1.0'1' - - - - - - - - 10 / 5.0 - 2.0 - - - 10 / 5 - 2.0 - - - - 10.0 'g' / 5 - 2.0'g' - - - - - - Floor(null as Decimal) - null - - - Floor(1) - 1 - - - Floor(1.0) - 1 - - - Floor(1.1) - 1 - - - Floor(-0.1) - -1 - - - Floor(-1.0) - -1 - - - Floor(-1.1) - -2 - - - Floor(2) - 2 - - - Floor(2147483647) - 2147483647 - - - Floor(2147483647.0) - 2147483647 - - - Floor(2147483647.2) - 2147483647 - - - Floor(2147483648) - null - - - Floor(2147483648.2) - null - - - Floor(-2147483648) - -2147483648 - - - Floor(-2147483648.0) - -2147483648 - - - Floor(-2147483648.2) - null - - - Floor(-2147483649) - null - - - Floor(-2147483649.2) - null - - - - - - Exp(null as Decimal) - null - - - Exp(0) - 1.0 - - - Exp(-0) - 1.0 - - - - Round(Exp(1), 8) - 2.71828183 - - - - - Round(Exp(1L), 8) - 2.71828183 - - - - Round(Exp(-1), 8) - 0.36787944 - - - Exp(1000) - - - - Exp(1000.0) - - - - - - - - HighBoundary(1.587, 8) - 1.58799999 - - - HighBoundary(@2014, 6) - @2014-12 - - - HighBoundary(@2014-01-01T08, 17) - @2014-01-01T08:59:59.999 - - - HighBoundary(@T10:30, 9) - @T10:30:59.999 - - - HighBoundary(null as Decimal, 8) - null - - - HighBoundary(1.58888, null) - 1.58888999 - - - - - - Log(null, null) - null - - - Log(1, null) - null - - - Log(1, 1) - null - - - Log(2, 1) - null - - - Log(1, 2) - 0.0 - - - Log(1, 100) - 0.0 - - - - Log(1L, 100L) - 0.0 - - - Log(16, 2) - 4.0 - - - Log(0.125, 2) - -3.0 - - - - - - - LowBoundary(1.587, 8) - 1.58700000 - - - LowBoundary(@2014, 6) - @2014-01 - - - LowBoundary(@2014-01-01T08, 17) - @2014-01-01T08:00:00.000 - - - LowBoundary(@T10:30, 9) - @T10:30:00.000 - - - LowBoundary(null as Decimal, 8) - null - - - LowBoundary(1.58888, null) - 1.58888000 - - - - - - Ln(null) - null - - - Ln(0) - - - - Ln(-0) - - - - Ln(1) - 0.0 - - - - Ln(1L) - 0.0 - - - Ln(-1) - null - - - - Round(Ln(1000), 8) - 6.90775528 - - - - Round(Ln(1000.0), 8) - 6.90775528 - - - - - - minimum Integer - -2147483648 - - - - - minimum Long - -9223372036854775808L - - - minimum Decimal - -99999999999999999999.99999999 - - - - - minimum DateTime - @0001-01-01T00:00:00.000Z - - - - minimum Date - @0001-01-01 - - - - minimum Time - @T00:00:00.000 - - - minimum Boolean - - - - - - - maximum Integer - 2147483647 - - - - maximum Long - 9223372036854775807L - - - maximum Decimal - 99999999999999999999.99999999 - - - - - maximum DateTime - @9999-12-31T23:59:59.999Z - - - - maximum Date - @9999-12-31 - - - - maximum Time - @T23:59:59.999 - - - maximum Boolean - - - - - - - 1 mod null - null - - - 0 mod 0 - null - - - 4 mod 2 - 0 - - - - 4L mod 2L - 0L - - - 4.0 mod 2.0 - 0.0 - - - 10 mod 3 - 1 - - - 10.0 mod 3.0 - 1.0 - - - 10 mod 3.0 - 1.0 - - - 3.5 mod 3 - 0.5 - - - - - 3.5 'cm' mod 3 'cm' - 0.5 'cm' - - - - - 10.0 'g' mod 3.0 'g' - 1.0 'g' - - - - - 10.0 'g' mod 0.0 'g' - null - - - - - - 1 * null - null - - - 1 * 1 - 1 - - - - 2L * 3L - 6L - - - 1.0 * 2.0 - 2.0 - - - - 1 * 1L - 1L - - - 1 * 2.0 - 2.0 - - - - 1.0 'cm' * 2.0 'cm' - 2.0'cm2' - - - - - - - -(null as Integer) - null - - - -0 - 0 - - - -(-0) - 0 - - - -1 - -1 - - - - -1L - -1L - - - - -9223372036854775807L - -9223372036854775807L - - - -(-1) - 1 - - - - -(-1L) - 1L - - - -(0.0) - 0.0 - - - -(-0.0) - 0.0 - - - -(1.0) - -1.0 - - - -(-1.0) - 1.0 - - - - -(1'cm') - -1.0'cm' - - - - - - - Precision(1.58700) - 5 - - - Precision(@2014) - 4 - - - Precision(@2014-01-05T10:30:00.000) - 17 - - - Precision(@T10:30) - 4 - - - Precision(@T10:30:00.000) - 9 - - - - - - - predecessor of (null as Integer) - null - - - predecessor of 0 - -1 - - - predecessor of 1 - 0 - - - - predecessor of 1L - 0L - - - predecessor of 1.0 - 0.99999999 - - - predecessor of 1.01 - 1.00999999 - - - predecessor of 1.0 - 0.9 - - - predecessor of 1.01 - 1.00 - - - - predecessor of 1.0 'cm' - 0.99999999'cm' - - - - predecessor of 1.0 'cm' - 0.9'cm' - - - predecessor of DateTime(2000,1,1) - @1999-12-31T - - - predecessor of @T12:00:00.000 - @T11:59:59.999 - - - predecessor of DateTime(0001, 1, 1, 0, 0, 0, 0) - - - - predecessor of @T00:00:00.000 - - - - - - - Power(null as Integer, null as Integer) - null - - - Power(0, 0) - 1 - - - Power(2, 2) - 4 - - - Power(-2, 2) - 4 - - - Power(2, -2) - 0.25 - - - - Power(2L, 2L) - 4L - - - Power(2.0, 2.0) - 4.0 - - - Power(-2.0, 2.0) - 4.0 - - - Power(2.0, -2.0) - 0.25 - - - Power(2.0, 2) - 4.0 - - - Power(2, 2.0) - 4.0 - - - 2^4 - 16 - - - - 2L^3L - 8L - - - 2.0^4.0 - 16.0 - - - Power(2, -2) ~ 0.25 - true - - - - - - Round(null as Decimal) - null - - - Round(1) - 1.0 - - - Round(0.5) - 1.0 - - - Round(0.4) - 0.0 - - - Round(3.14159, 2) - 3.14 - - - Round(-0.5) - -1.0 - - - Round(-0.4) - 0.0 - - - Round(-0.6) - -1.0 - - - Round(-1.1) - -1.0 - - - Round(-1.5) - -2.0 - - - Round(-1.6) - -2.0 - - - - - - 1 - null - null - - - 1 - 1 - 0 - - - - 1L - 1L - 0L - - - 1.0 - 2.0 - -1.0 - - - - 1.0 'cm' - 2.0 'cm' - -1.0'cm' - - - 2 - 1.1 - 0.9 - - - - - - - successor of (null as Integer) - null - - - successor of 0 - 1 - - - successor of 1 - 2 - - - - successor of 1L - 2L - - - successor of 1.0 - 1.00000001 - - - successor of 1.01 - 1.01000001 - - - successor of 1.0 - 1.1 - - - successor of 1.01 - 1.02 - - - successor of DateTime(2000,1,1) - @2000-01-02T - - - successor of @T12:00:00.000 - @T12:00:00.001 - - - successor of DateTime(9999, 12, 31, 23, 59, 59, 999) - - - - successor of @T23:59:59.999 - - - - - - - Truncate(null as Decimal) - null - - - Truncate(0) - 0 - - - Truncate(0.0) - 0 - - - Truncate(0.1) - 0 - - - Truncate(1) - 1 - - - Truncate(1.0) - 1 - - - Truncate(1.1) - 1 - - - Truncate(1.9) - 1 - - - Truncate(-1) - -1 - - - Truncate(-1.0) - -1 - - - Truncate(-1.1) - -1 - - - Truncate(-1.9) - -1 - - - - - - (null as Integer) div (null as Integer) - null - - - 2 div 1 - 2 - - - 2 div 0 - null - - - 10 div 3 - 3 - - - - 10L div 3L - 3L - - - - 10L div 0L - null - - - 10.1 div 3.1 - 3.0 - - - 10.1 div 0.0 - null - - - -2 div -1 - 2 - - - -10 div -3 - 3 - - - -10.1 div -3.1 - 3.0 - - - -2 div 1 - -2 - - - -10 div 3 - -3 - - - -10.1 div 3.1 - -3.0 - - - 2 div -1 - -2 - - - 10 div -3 - -3 - - - 10.1 div -3.1 - -3.0 - - - 10 div 5.0 - 2.0 - - - - 10.1 'cm' div -3.1 'cm' - -3.0 '1' - - - - 10.0 'g' div 5.0 'g' - 2.0 '1' - - - - 4.14 'm' div 2.06 'm' - 2.0 '1' - - - - 10.0 'g' div 0.0 'g' - null - - - diff --git a/test/spec-tests/xml/CqlComparisonOperatorsTest.xml b/test/spec-tests/xml/CqlComparisonOperatorsTest.xml deleted file mode 100644 index 33aa9d7c4..000000000 --- a/test/spec-tests/xml/CqlComparisonOperatorsTest.xml +++ /dev/null @@ -1,1126 +0,0 @@ - - - - - - - 4 between 2 and 6 - true - - - - - - true = true - true - - - true = false - false - - - false = false - true - - - false = true - false - - - null as String = null - null - - - true = null - null - - - null = true - null - - - 1 = 1 - true - - - 1 = 2 - false - - - - 1L = 2L - false - - - 'a' = 'a' - true - - - 'a' = 'b' - false - - - 1.0 = 1.0 - true - - - 1.0 = 2.0 - false - - - 1.0 = 1.00 - true - - - 1.50 = 1.55 - false - - - 1.0 = 1 - true - - - 1.0 = 2 - false - - - 1'cm' = 1'cm' - true - - - - 1'cm' = 0.01'm' - true - - - 2.0'cm' = 2.00'cm' - true - - - 1'cm':2'cm' = 1'cm':2'cm' - true - - - 1'cm':2'cm' = 1.1'cm':2'cm' - false - - - 1'cm':2'cm' = 1'cm':2.1'cm' - false - - - - Tuple { Id : 1, Name : 'John' } = Tuple { Id : 1, Name : 'John' } - true - - - - Tuple { Id : 1, Name : 'John' } = Tuple { Id : 2, Name : 'Jane' } - false - - - - Tuple { Id : 1, Name : 'John' } = Tuple { Id : 2, Name : 'John' } - false - - - - Tuple { Id : 1, Name : 'John' } = Tuple { Id : 2, Name : null } - false - - - - Tuple { Id : null, Name : 'John' } = Tuple { Id : 1, Name : 'James' } - null - - - - Tuple { Id : 1, Name : null } = Tuple { Id : 1, Name : null } - true - - - - Tuple { Id : null, Name : 'John' } = Tuple { Id : null, Name : 'John' } - true - - - - Tuple { Id : 1, Name : 'John' } = Tuple { Id : 1, Name : null } - null - - - - Tuple { dateId: 1, Date: DateTime(2012, 10, 5, 0, 0, 0, 0) } = Tuple { dateId: 1, Date: DateTime(2012, 10, 5, 0, 0, 0, 0) } - true - - - - Tuple { dateId: 1, Date: DateTime(2012, 10, 5, 0, 0, 0, 0) } = Tuple { dateId: 1, Date: DateTime(2012, 10, 5, 5, 0, 0, 0) } - false - - - - Tuple { dateId: 12, Date: DateTime(2012, 1, 1) } = Tuple { dateId: 12, Date: DateTime(2012, 1, 1) } - true - - - - Tuple { timeId: 55, TheTime: @T05:15:15.541 } = Tuple { timeId: 55, TheTime: @T05:15:15.541 } - true - - - - Tuple { timeId: 55, TheTime: @T05:15:15.541 } = Tuple { timeId: 55, TheTime: @T05:15:15.540 } - false - - - Today() = Today() - true - - - Today() = Today() - 1 days - false - - - DateTime(2014, 1, 5, 5, 0, 0, 0, 0) = DateTime(2014, 1, 5, 5, 0, 0, 0, 0) - true - - - DateTime(2014, 1, 5, 5, 0, 0, 0, 0) = DateTime(2014, 7, 5, 5, 0, 0, 0, 0) - false - - - DateTime(2015, 1, 5, 5, 0, 0) = DateTime(2015, 1, 5, 5, 0, 0) - true - - - DateTime(null) = DateTime(null) - null - - - DateTime(2001, 1, 1, null) = DateTime(2001, 1, 1, null, null) - true - - - @2014-01-25T14:30:14.559+01:00 = @2014-01-25T14:30:14.559+01:00 - true - - - @2022-02-22T00:00:00.000-05:00 same day as @2022-02-22T04:59:00.000Z - true - - - @T10:00:00.000 = @T10:00:00.000 - true - - - @T10:00:00.000 = @T22:00:00.000 - false - - - - - - 0 > 0 - false - - - 0 > 1 - false - - - - 0L > 10L - false - - - 0 > -1 - true - - - 0.0 > 0.0 - false - - - 0.0 > 1.0 - false - - - 0.0 > -1.0 - true - - - 1.0 > 2 - false - - - 0'cm' > 0'cm' - false - - - 0'cm' > 1'cm' - false - - - 0'cm' > -1'cm' - true - - - - 1'm' > 1'cm' - true - - - - 1'm' > 10'cm' - true - - - 'a' > 'a' - false - - - 'a' > 'b' - false - - - 'b' > 'a' - true - - - 'a' > 'aa' - false - - - 'aa' > 'a' - true - - - 'Jack' > 'Jill' - false - - - DateTime(2012, 2, 12) > DateTime(2012, 2, 10) - true - - - DateTime(2012, 2, 12) > DateTime(2012, 2, 13) - false - - - @T10:00:00.001 > @T10:00:00.000 - true - - - @T10:00:00.000 > @T10:00:00.001 - false - - - DateTime(2014) > DateTime(2014, 2, 15) - null - - - DateTime(2015) > DateTime(2014, 2, 15) - true - - - DateTime(2013) > DateTime(2014, 2, 15) - false - - - - - - 0 >= 0 - true - - - 0 >= 1 - false - - - - 0L >= 10L - false - - - 0 >= -1 - true - - - 0.0 >= 0.0 - true - - - 0.0 >= 1.0 - false - - - 0.0 >= -1.0 - true - - - 1.0 >= 2 - false - - - 0'cm' >= 0'cm' - true - - - 0'cm' >= 1'cm' - false - - - 0'cm' >= -1'cm' - true - - - - 1'm' >= 1'cm' - true - - - - 1'm' >= 10'cm' - true - - - 'a' >= 'a' - true - - - 'a' >= 'b' - false - - - 'b' >= 'a' - true - - - 'a' >= 'aa' - false - - - 'aa' >= 'a' - true - - - 'Jack' >= 'Jill' - false - - - DateTime(2012, 2, 12, 0, 0, 0, 0) >= DateTime(2012, 2, 10, 0, 0, 0, 0) - true - - - DateTime(2012, 2, 12, 0, 0, 0, 0) >= DateTime(2012, 2, 12, 0, 0, 0, 0) - true - - - DateTime(2012, 2, 12, 0, 0, 0, 0) >= DateTime(2012, 2, 13, 0, 0, 0, 0) - false - - - @T10:00:00.001 >= @T10:00:00.000 - true - - - @T10:00:00.000 >= @T10:00:00.000 - true - - - @T10:00:00.000 >= @T10:00:00.001 - false - - - DateTime(2014) >= DateTime(2014, 2, 15) - null - - - DateTime(2015) >= DateTime(2014, 2, 15) - true - - - DateTime(2013) >= DateTime(2014, 2, 15) - false - - - - - - 0 < 0 - false - - - 0 < 1 - true - - - - 0L < 10L - true - - - - -30L < -20L - true - - - 0 < -1 - false - - - 0.0 < 0.0 - false - - - 0.0 < 1.0 - true - - - 0.0 < -1.0 - false - - - 1.0 < 2 - true - - - 0'cm' < 0'cm' - false - - - 0'cm' < 1'cm' - true - - - 0'cm' < -1'cm' - false - - - - 1'm' < 1'cm' - false - - - - 1'm' < 10'cm' - false - - - 'a' < 'a' - false - - - 'a' < 'b' - true - - - 'b' < 'a' - false - - - 'a' < 'aa' - true - - - 'aa' < 'a' - false - - - 'Jack' < 'Jill' - true - - - DateTime(2012, 2, 9) < DateTime(2012, 2, 10) - true - - - DateTime(2012, 2, 14) < DateTime(2012, 2, 13) - false - - - @T10:00:00.001 < @T10:00:00.002 - true - - - @T10:10:00.000 < @T10:00:00.001 - false - - - DateTime(2014) < DateTime(2014, 2, 15) - null - - - DateTime(2013) < DateTime(2014, 2, 15) - true - - - DateTime(2015) < DateTime(2014, 2, 15) - false - - - - - - 0 <= 0 - true - - - 0 <= 1 - true - - - - 0L <= 10L - true - - - 0 <= -1 - false - - - 0.0 <= 0.0 - true - - - 0.0 <= 1.0 - true - - - 0.0 <= -1.0 - false - - - 1.0 <= 2 - true - - - 0'cm' <= 0'cm' - true - - - 0'cm' <= 1'cm' - true - - - 0'cm' <= -1'cm' - false - - - - 1'm' <= 1'cm' - false - - - - 1'm' <= 10'cm' - false - - - 'a' <= 'a' - true - - - 'a' <= 'b' - true - - - 'b' <= 'a' - false - - - 'a' <= 'aa' - true - - - 'aa' <= 'a' - false - - - 'Jack' <= 'Jill' - true - - - DateTime(2012, 2, 9, 0, 0, 0, 0) <= DateTime(2012, 2, 10, 0, 0, 0, 0) - true - - - DateTime(2012, 2, 12, 0, 0, 0, 0) <= DateTime(2012, 2, 12, 0, 0, 0, 0) - true - - - DateTime(2012, 2, 12, 1, 0, 0, 0) <= DateTime(2012, 2, 12, 0, 0, 0, 0) - false - - - @T10:00:00.001 <= @T10:00:00.002 - true - - - @T10:00:00.000 <= @T10:00:00.000 - true - - - @T10:00:00.002 <= @T10:00:00.001 - false - - - DateTime(2014) <= DateTime(2014, 2, 15) - null - - - DateTime(2013) <= DateTime(2014, 2, 15) - true - - - DateTime(2015) <= DateTime(2014, 2, 15) - false - - - - - - true ~ true - true - - - true ~ false - false - - - false ~ false - true - - - false ~ true - false - - - null as String ~ null - true - - - true ~ null - false - - - null ~ true - false - - - 1 ~ 1 - true - - - 1 ~ 2 - false - - - 'a' ~ 'a' - true - - - 'a' ~ 'b' - false - - - 'Abel' ~ 'abel' - true - - - 1.0 ~ 1.0 - true - - - 1.0 ~ 2.0 - false - - - 1.0 ~ 1.00 - true - - - 1.5 ~ 1.55 - false - - - 1.50 ~ 1.55 - false - - - 1.001 ~ 1.000 - true - - - 1.0 ~ 1 - true - - - 1.0 ~ 2 - false - - - 1'cm' ~ 1'cm' - true - - - - 1'cm' ~ 0.01'm' - true - - - 1'cm':2'cm' ~ 1'cm':2'cm' - true - - - 1'cm':2'cm' ~ 3'cm':2'cm' - false - - - 1'cm':2'cm' ~ 1'cm':3'cm' - false - - - - Tuple { Id : 1, Name : 'John' } ~ Tuple { Id : 1, Name : 'John' } - true - - - - Tuple { Id : 1, Name : 'John', Position: null } ~ Tuple { Id : 1, Name : 'John', Position: null } - true - - - - Tuple { Id : 1, Name : 'John', Position: 'Shift Manager' } ~ Tuple { Id : 1, Name : 'John' } - - - - - Tuple { Id : 1, Name : 'John' } ~ Tuple { Id : 1, Name : 'John', Position: 'Shift Manager' } - - - - - Tuple { Id : 1, Name : 'John' } ~ Tuple { Id : 2, Name : 'Jane' } - false - - - - Tuple { Id : 1, Name : 'John' } ~ Tuple { Id : 2, Name : 'John' } - false - - - Today() ~ Today() - true - - - Today() ~ Today() - 1 days - false - - - @T10:00:00.000 ~ @T10:00:00.000 - true - - - @T10:00:00.000 ~ @T22:00:00.000 - false - - - - - - true != true - false - - - true != false - true - - - false != false - false - - - false != true - true - - - null as String != null - null - - - true != null - null - - - null != true - null - - - 1 != 1 - false - - - 1 != 2 - true - - - - 1L != 2L - true - - - 'a' != 'a' - false - - - 'a' != 'b' - true - - - 1.0 != 1.0 - false - - - 1.0 != 2.0 - true - - - 1.0 != 1 - false - - - 1.0 != 2 - true - - - 1'cm' != 1'cm' - false - - - - 1'cm' != 0.01'm' - false - - - - Tuple{ Id : 1, Name : 'John' } != Tuple{ Id : 1, Name : 'John' } - false - - - - Tuple{ Id : 1, Name : 'John' } != Tuple{ Id : 2, Name : 'Jane' } - true - - - - Tuple{ Id : 1, Name : 'John' } != Tuple{ Id : 2, Name : 'John' } - true - - - - Tuple{ Id : 1, Name : 'John' } != Tuple{ Id : 2, Name : null } - true - - - - Tuple{ Id : null, Name : 'John' } != Tuple{ Id : 1, Name : 'Joe' } - null - - - - Tuple{ Id : 1, Name : null } != Tuple{ Id : 1, Name : null } - false - - - - Tuple{ Id : null, Name : 'John' } != Tuple{ Id : null, Name : 'John' } - false - - - - Tuple{ Id : 1, Name : 'John' } != Tuple{ Id : 1, Name : null } - null - - - Today() != Today() - false - - - Today() != Today() - 1 days - true - - - @T10:00:00.000 != @T10:00:00.000 - false - - - @T10:00:00.000 != @T22:00:00.000 - true - - - - - 1 millisecond = 1 'ms' - true - - - 1 millisecond = 1 milliseconds - true - - - 1 milliseconds = 1 'ms' - true - - - 1 second = 1 's' - true - - - 1 second = 1 seconds - true - - - 1 seconds = 1 's' - true - - - 1 minute = 1 'min' - true - - - 1 minute = 1 minutes - true - - - 1 minutes = 1 'min' - true - - - 1 hour = 1 'h' - true - - - 1 hour = 1 hours - true - - - 1 hours = 1 'h' - true - - - 1 day = 1 'd' - true - - - 1 day = 1 days - true - - - 1 days = 1 'd' - true - - - 1 week = 1 'wk' - true - - - 1 week = 1 weeks - true - - - 1 weeks = 1 'wk' - true - - - 1 month = 1 'mo' - null - - - - 1 month != 1 'mo' - null - - - - 1 month ~ 1 'mo' - true - - - 1 month = 1 months - true - - - 1 months != 1 'mo' - null - - - - 1 months ~ 1 'mo' - true - - - 1 year = 1 'a' - null - - - - 1 year != 1 'a' - null - - - - 1 year ~ 1 'a' - true - - - 1 years = 1 year - true - - - 1 years != 1 'a' - null - - - - 1 years ~ 1 'a' - true - - - 1 year ~ 12 months - true - - - 1 year ~ 365 days - true - - - 1 month ~ 30 days - true - - - 1 week = 7 days - true - - - 1 day = 24 hours - true - - - 1 hour = 60 minutes - true - - - 1 minute = 60 seconds - true - - - 1 second = 1000 milliseconds - true - - - diff --git a/test/spec-tests/xml/CqlConditionalOperatorsTest.xml b/test/spec-tests/xml/CqlConditionalOperatorsTest.xml deleted file mode 100644 index 95416287b..000000000 --- a/test/spec-tests/xml/CqlConditionalOperatorsTest.xml +++ /dev/null @@ -1,121 +0,0 @@ - - - - - - - - - - - - - - if 10 > 5 then 5 else 10 - 5 - - - - - - if 10 = 5 then 10 + 5 else 10 - 5 - 5 - - - - - - if 10 = null then 5 else 10 - 10 - - - - - - - - - - - - case - when 10 > 5 then 5 - when 5 > 10 then 10 - else null - end - - 5 - - - - - - - case - when 5 > 10 then 5 + 10 - when 5 = 10 then 10 - else 10 - 5 - end - - 5 - - - - - - - case - when null ~ 10 then null + 10 - when null ~ 5 then 5 - else 5 + 10 - end - - 15 - - - - - - - - - - - - case 5 - when 5 then 12 - when 10 then 10 + 5 - else 10 - 5 - end - - 12 - - - - - - - case 10 - when 5 then 12 - when 10 then 10 + 5 - else 10 - 5 - end - - 15 - - - - - - - case 10 + 5 - when 5 then 12 - when 10 then 10 + 5 - else 10 - 5 - end - - 5 - - - diff --git a/test/spec-tests/xml/CqlDateTimeOperatorsTest.xml b/test/spec-tests/xml/CqlDateTimeOperatorsTest.xml deleted file mode 100644 index da3d69478..000000000 --- a/test/spec-tests/xml/CqlDateTimeOperatorsTest.xml +++ /dev/null @@ -1,1807 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - DateTime(2005, 10, 10) + 5 years - @2010-10-10T - - - - DateTime(2005, 10, 10) + 8000 years - - - - - DateTime(2005, 5, 10) + 5 months - @2005-10-10T - - - - DateTime(2005, 5, 10) + 10 months - @2006-03-10T - - - - DateTime(2018, 5, 2) + 3 weeks = DateTime(2018, 5, 23) - true - - - - - - - DateTime(2018, 5, 23) + 52 weeks = DateTime(2019, 5, 22) - true - - - - - - - DateTime(2023, 3, 2) + 52 weeks = DateTime(2024, 2, 29) - true - - - - - - - DateTime(2024, 2, 28) + 52 weeks = DateTime(2025, 2, 26) - true - - - - - - - DateTime(2005, 5, 10) + 5 days - @2005-05-15T - - - - DateTime(2016, 6, 10) + 21 days - @2016-07-01T - - - - DateTime(2005, 5, 10, 5) + 5 hours - @2005-05-10T10 - - - - DateTime(2005, 5, 10, 5, 20, 30) + 5 hours - @2005-05-10T10:20:30 - - - - DateTime(2005, 5, 10) + 5 hours = DateTime(2005, 5, 10) - true - - - - DateTime(2005, 5, 10) + 25 hours = DateTime(2005, 5, 11) - true - - - - Date(2014) + 24 months - @2016 - - - - Date(2014) + 25 months - @2016 - - - - Date(2014,6) + 33 days - @2014-07 - - - - Date(2014,6) + 1 year - @2015-06 - - - - DateTime(2016, 6, 10, 5) + 19 hours - @2016-06-11T00 - - - - DateTime(2005, 5, 10, 5, 5) + 5 minutes - @2005-05-10T05:10 - - - - DateTime(2016, 6, 10, 5, 5) + 55 minutes - @2016-06-10T06:00 - - - - DateTime(2005, 5, 10, 5, 5, 5) + 5 seconds - @2005-05-10T05:05:10 - - - - DateTime(2016, 6, 10, 5, 5, 5) + 55 seconds - @2016-06-10T05:06:00 - - - - DateTime(2005, 5, 10, 5, 5, 5, 5) + 5 milliseconds - @2005-05-10T05:05:05.010 - - - - DateTime(2016, 6, 10, 5, 5, 5, 5) + 995 milliseconds - @2016-06-10T05:05:06.000 - - - - DateTime(2012, 2, 29) + 1 year - @2013-02-28T - - - - DateTime(2014) + 24 months - @2016T - - - - DateTime(2014) + 730 days - @2016T - - - - DateTime(2014) + 735 days - @2016T - - - - @T15:59:59.999 + 5 hours - @T20:59:59.999 - - - - @T15:59:59.999 + 1 minute - @T16:00:59.999 - - - - @T15:59:59.999 + 1 seconds - @T16:00:00.999 - - - - @T15:59:59.999 + 1 milliseconds - @T16:00:00.000 - - - - @T15:59:59.999 + 5 hours + 1 minutes - @T21:00:59.999 - - - - @T15:59:59.999 + 300 minutes - @T20:59:59.999 - - - - - - - DateTime(2005, 10, 10) after year of DateTime(2004, 10, 10) - true - - - - DateTime(2004, 11, 10) after year of DateTime(2004, 10, 10) - false - - - - DateTime(2004, 12, 10) after month of DateTime(2004, 11, 10) - true - - - - DateTime(2004, 9, 10) after month of DateTime(2004, 10, 10) - false - - - - DateTime(2004, 12, 11) after day of DateTime(2004, 10, 10) - true - - - - DateTime(2004, 12, 09) after day of DateTime(2003, 10, 10) - true - - - - DateTime(2004, 10, 9) after day of DateTime(2004, 10, 10) - false - - - - DateTime(2004, 10, 10, 10) after hour of DateTime(2004, 10, 10, 5) - true - - - - DateTime(2004, 10, 10, 20) after hour of DateTime(2004, 10, 10, 21) - false - - - - DateTime(2004, 10, 10, 20, 30) after minute of DateTime(2004, 10, 10, 20, 29) - true - - - - DateTime(2004, 10, 10, 20, 30) after minute of DateTime(2004, 10, 10, 20, 31) - false - - - - DateTime(2004, 10, 10, 20, 30, 15) after second of DateTime(2004, 10, 10, 20, 30, 14) - true - - - - DateTime(2004, 10, 10, 20, 30, 15) after second of DateTime(2004, 10, 10, 20, 30, 16) - false - - - - DateTime(2004, 10, 10, 20, 30, 15, 512) after millisecond of DateTime(2004, 10, 10, 20, 30, 15, 510) - true - - - - DateTime(2004, 10, 10, 20, 30, 15, 512) after millisecond of DateTime(2004, 10, 10, 20, 30, 15, 513) - false - - - - DateTime(2005, 10, 10) after day of DateTime(2005, 9) - true - - - - @2012-03-10T10:20:00.999+07:00 after hour of @2012-03-10T08:20:00.999+06:00 - true - - - - @2012-03-10T10:20:00.999+07:00 after hour of @2012-03-10T10:20:00.999+06:00 - false - - - - @T15:59:59.999 after hour of @T14:59:59.999 - true - - - - @T15:59:59.999 after hour of @T16:59:59.999 - false - - - - @T15:59:59.999 after minute of @T15:58:59.999 - true - - - - @T15:58:59.999 after minute of @T15:59:59.999 - false - - - - @T15:59:59.999 after second of @T15:59:58.999 - true - - - - @T15:59:58.999 after second of @T15:59:59.999 - false - - - - @T15:59:59.999 after millisecond of @T15:59:59.998 - true - - - - @T15:59:59.998 after millisecond of @T15:59:59.999 - false - - - - Time(12, 30) after hour of Time(11, 55) - true - - - - - - - - DateTime(2003) before year of DateTime(2004, 10, 10) - true - - - - DateTime(2004, 11, 10) before year of DateTime(2003, 10, 10) - false - - - - DateTime(2004, 10, 10) before month of DateTime(2004, 11, 10) - true - - - - DateTime(2004, 11, 10) before month of DateTime(2004, 10, 10) - false - - - - DateTime(2004, 10, 1) before day of DateTime(2004, 10, 10) - true - - - - DateTime(2003, 10, 11) before day of DateTime(2004, 10, 10) - true - - - - DateTime(2004, 10, 11) before day of DateTime(2004, 10, 10) - false - - - - DateTime(2004, 10, 10, 1) before hour of DateTime(2004, 10, 10, 5) - true - - - - DateTime(2004, 10, 10, 23) before hour of DateTime(2004, 10, 10, 21) - false - - - - DateTime(2004, 10, 10, 20, 28) before minute of DateTime(2004, 10, 10, 20, 29) - true - - - - DateTime(2004, 10, 10, 20, 35) before minute of DateTime(2004, 10, 10, 20, 31) - false - - - - DateTime(2004, 10, 10, 20, 30, 12) before second of DateTime(2004, 10, 10, 20, 30, 14) - true - - - - DateTime(2004, 10, 10, 20, 30, 55) before second of DateTime(2004, 10, 10, 20, 30, 16) - false - - - - DateTime(2004, 10, 10, 20, 30, 15, 508) before millisecond of DateTime(2004, 10, 10, 20, 30, 15, 510) - true - - - - DateTime(2004, 10, 10, 20, 30, 15, 599) before millisecond of DateTime(2004, 10, 10, 20, 30, 15, 513) - false - - - - @2012-03-10T10:20:00.999+07:00 before hour of @2012-03-10T10:20:00.999+06:00 - true - - - - @2012-03-10T10:20:00.999+07:00 before hour of @2012-03-10T09:20:00.999+06:00 - false - - - - @T13:59:59.999 before hour of @T14:59:59.999 - true - - - - @T16:59:59.999 before hour of @T15:59:59.999 - false - - - - @T15:57:59.999 before minute of @T15:58:59.999 - true - - - - @T15:59:59.999 before minute of @T15:59:59.999 - false - - - - @T15:59:57.999 before second of @T15:59:58.999 - true - - - - @T15:59:56.999 before second of @T15:59:55.999 - false - - - - @T15:59:59.997 before millisecond of @T15:59:59.998 - true - - - - @T15:59:59.998 before millisecond of @T15:59:59.997 - false - - - - - - - - DateTime(2003) - @2003T - - - - DateTime(2003, 10) - @2003-10T - - - - DateTime(2003, 10, 29) - @2003-10-29T - - - - DateTime(2003, 10, 29, 20) - @2003-10-29T20 - - - - DateTime(2003, 10, 29, 20, 50) - @2003-10-29T20:50 - - - - DateTime(2003, 10, 29, 20, 50, 33) - @2003-10-29T20:50:33 - - - - DateTime(2003, 10, 29, 20, 50, 33, 955) - @2003-10-29T20:50:33.955 - - - - - - - - - year from DateTime(2003, 10, 29, 20, 50, 33, 955) - 2003 - - - - - month from DateTime(2003, 10, 29, 20, 50, 33, 955) - 10 - - - - - month from DateTime(2003, 01, 29, 20, 50, 33, 955) - 1 - - - - - day from DateTime(2003, 10, 29, 20, 50, 33, 955) - 29 - - - - - hour from DateTime(2003, 10, 29, 20, 50, 33, 955) - 20 - - - - - minute from DateTime(2003, 10, 29, 20, 50, 33, 955) - 50 - - - - - second from DateTime(2003, 10, 29, 20, 50, 33, 955) - 33 - - - - - millisecond from DateTime(2003, 10, 29, 20, 50, 33, 955) - 955 - - - - - timezoneoffset from DateTime(2003, 10, 29, 20, 50, 33, 955, 1) - 1.00 - - - - - timezone from DateTime(2003, 10, 29, 20, 50, 33, 955, 1) - 1.00 - - - - - - date from DateTime(2003, 10, 29, 20, 50, 33, 955, 1) - @2003-10-29 - - - - - hour from @T23:20:15.555 - 23 - - - - - minute from @T23:20:15.555 - 20 - - - - - second from @T23:20:15.555 - 15 - - - - - millisecond from @T23:20:15.555 - 555 - - - - - - - difference in years between DateTime(2000) and DateTime(2005, 12) - 5 - - - - difference in months between DateTime(2000, 2) and DateTime(2000, 10) - 8 - - - - difference in days between DateTime(2000, 10, 15, 10, 30) and DateTime(2000, 10, 25, 10, 0) - 10 - - - - difference in hours between DateTime(2000, 4, 1, 12) and DateTime(2000, 4, 1, 20) - 8 - - - - difference in minutes between DateTime(2005, 12, 10, 5, 16) and DateTime(2005, 12, 10, 5, 25) - 9 - - - - difference in seconds between DateTime(2000, 10, 10, 10, 5, 45) and DateTime(2000, 10, 10, 10, 5, 50) - 5 - - - - difference in milliseconds between DateTime(2000, 10, 10, 10, 5, 45, 500, -6.0) and DateTime(2000, 10, 10, 10, 5, 45, 900, -7.0) - 3600400 - - - - difference in weeks between DateTime(2000, 10, 15) and DateTime(2000, 10, 28) - 1 - - - - difference in weeks between DateTime(2000, 10, 15) and DateTime(2000, 10, 29) - 2 - - - - difference in weeks between @2012-03-10T22:05:09 and @2012-03-24T07:19:33 - 2 - - - - difference in years between DateTime(2016) and DateTime(1998) - -18 - - - - difference in months between DateTime(2005) and DateTime(2006, 7) > 5 - true - - - - difference in hours between @T20 and @T23:25:15.555 - 3 - - - - difference in minutes between @T20:20:15.555 and @T20:25:15.555 - 5 - - - - difference in seconds between @T20:20:15.555 and @T20:20:20.555 - 5 - - - - difference in milliseconds between @T20:20:15.555 and @T20:20:15.550 - -5 - - - - - - - - - @2017-03-12T01:00:00-07:00 - @2017-03-12T01:00:00-07:00 - - - - - DateTime(2017, 3, 12, 1, 0, 0, 0, -7.0) - @2017-03-12T01:00:00.000-07:00 - - - - - @2017-03-12T03:00:00-06:00 - @2017-03-12T03:00:00-06:00 - - - - - DateTime(2017, 3, 12, 3, 0, 0, 0, -6.0) - @2017-03-12T03:00:00.000-06:00 - - - - - @2017-11-05T01:30:00-06:00 - @2017-11-05T01:30:00-06:00 - - - - - DateTime(2017, 11, 5, 1, 30, 0, 0, -6.0) - @2017-11-05T01:30:00.000-06:00 - - - - - @2017-11-05T01:15:00-07:00 - @2017-11-05T01:15:00-07:00 - - - - - DateTime(2017, 11, 5, 1, 15, 0, 0, -7.0) - @2017-11-05T01:15:00.000-07:00 - - - - - @2017-03-12T00:00:00-07:00 - @2017-03-12T00:00:00-07:00 - - - - - DateTime(2017, 3, 12, 0, 0, 0, 0, -7.0) - @2017-03-12T00:00:00.000-07:00 - - - - - @2017-03-13T00:00:00-06:00 - @2017-03-13T00:00:00-06:00 - - - - - DateTime(2017, 3, 13, 0, 0, 0, 0, -6.0) - @2017-03-13T00:00:00.000-06:00 - - - - - difference in hours between @2017-03-12T01:00:00-07:00 and @2017-03-12T03:00:00-06:00 - 1 - - - - - difference in minutes between @2017-11-05T01:30:00-06:00 and @2017-11-05T01:15:00-07:00 - 45 - - - - - difference in days between @2017-03-12T00:00:00-07:00 and @2017-03-13T00:00:00-06:00 - 1 - - - - - difference in hours between DateTime(2017, 3, 12, 1, 0, 0, 0, -7.0) and DateTime(2017, 3, 12, 3, 0, 0, 0, -6.0) - 1 - - - - - difference in minutes between DateTime(2017, 11, 5, 1, 30, 0, 0, -6.0) and DateTime(2017, 11, 5, 1, 15, 0, 0, -7.0) - 45 - - - - - difference in days between DateTime(2017, 3, 12, 0, 0, 0, 0, -7.0) and DateTime(2017, 3, 13, 0, 0, 0, 0, -6.0) - 1 - - - - - - - - years between DateTime(2005) and DateTime(2010) - Interval[ 4, 5 ] - - - - - years between DateTime(2005, 5) and DateTime(2010, 4) - 4 - - - - years between @2012-02-29 and @2014-02-28 - 2 - - - - years between @2012-02-29T12:34:56 and @2014-02-28T12:34:56 - 2 - - - - months between @2014-01-31 and @2014-02-01 - 0 - - - - days between DateTime(2010, 10, 12, 12, 5) and DateTime(2008, 8, 15, 8, 8) - -788 - - - - - - - - - days between DateTime(2014, 1, 15) and DateTime(2014, 2) - Interval[ 17, 44 ] - - - - - - months between DateTime(2005) and DateTime(2006, 5) - Interval[ 4, 16 ] - - - - - - (days between DateTime(2014, 1, 15) and DateTime(2014, 2)) - + (days between DateTime(2014, 1, 15) and DateTime(2014, 2)) - Interval[ 32, 88 ] - - - - - - (days between DateTime(2014, 1, 15) and DateTime(2014, 2)) - - (months between DateTime(2005) and DateTime(2006, 5)) - Interval[ 0, 40 ] - - - - - - (days between DateTime(2014, 1, 15) and DateTime(2014, 2)) - * (days between DateTime(2014, 1, 15) and DateTime(2014, 2)) - Interval[ 256, 1936 ] - - - - - - (days between DateTime(2014, 1, 15) and DateTime(2014, 2)) - div (months between DateTime(2005) and DateTime(2006, 5)) - - - - - months between DateTime(2005) and DateTime(2006, 7) > 5 - true - - - - - months between DateTime(2005) and DateTime(2006, 2) > 5 - null - - - - - months between DateTime(2005) and DateTime(2006, 7) > 25 - false - - - - - months between DateTime(2005) and DateTime(2006, 7) < 24 - true - - - - - months between DateTime(2005) and DateTime(2006, 7) = 24 - false - - - - - months between DateTime(2005) and DateTime(2006, 7) >= 5 - true - - - - - months between DateTime(2005) and DateTime(2006, 7) <= 24 - true - - - - - @2012-03-10T10:20:00 - @2012-03-10T10:20:00 - - - - - @2013-03-10T09:20:00 - @2013-03-10T09:20:00 - - - - - years between (date from @2012-03-10T10:20:00) and (date from @2013-03-10T09:20:00) - 1 - - - - - weeks between @2012-03-10T22:05:09 and @2012-03-20T07:19:33 - 1 - - - - - weeks between @2012-03-10T22:05:09 and @2012-03-24T07:19:33 - 1 - - - - - weeks between @2012-03-10T06:05:09 and @2012-03-24T07:19:33 - 2 - - - - - hours between @T20:26:15.555 and @T23:25:15.555 - 2 - - - - - hours between @T06Z and @T07:00:00Z - - - - - - hours between @T06 and @T07:00:00 - 1 - - - - - minutes between @T23:20:16.555 and @T23:25:15.555 - 4 - - - - - seconds between @T23:25:10.556 and @T23:25:15.555 - 4 - - - - - milliseconds between @T23:25:25.555 and @T23:25:25.560 - 5 - - - - - - hours between @2017-03-12T01:00:00-07:00 and @2017-03-12T03:00:00-06:00 - 1 - - - - - minutes between @2017-11-05T01:30:00-06:00 and @2017-11-05T01:15:00-07:00 - 45 - - - - - days between @2017-03-12T00:00:00-07:00 and @2017-03-13T00:00:00-06:00 - 0 - - - - - hours between DateTime(2017, 3, 12, 1, 0, 0, 0, -7.0) and DateTime(2017, 3, 12, 3, 0, 0, 0, -6.0) - 1 - - - - - minutes between DateTime(2017, 11, 5, 1, 30, 0, 0, -6.0) and DateTime(2017, 11, 5, 1, 15, 0, 0, -7.0) - 45 - - - - - days between DateTime(2017, 3, 12, 0, 0, 0, 0, -7.0) and DateTime(2017, 3, 13, 0, 0, 0, 0, -6.0) - 0 - - - - - - - Now() = Now() - true - - - - - - - - DateTime(2014) same year as DateTime(2014) - true - - - - DateTime(2013) same year as DateTime(2014) - false - - - - DateTime(2014, 12) same month as DateTime(2014, 12) - true - - - - DateTime(2014, 12) same month as DateTime(2014, 10) - false - - - - DateTime(2014, 12, 10) same day as DateTime(2014, 12, 10) - true - - - - DateTime(2014, 10, 10) same day as DateTime(2014, 10, 11) - false - - - - DateTime(2014, 12, 10, 20) same hour as DateTime(2014, 12, 10, 20) - true - - - - DateTime(2014, 10, 10, 20) same hour as DateTime(2014, 10, 10, 21) - false - - - - DateTime(2014, 12, 10, 20, 55) same minute as DateTime(2014, 12, 10, 20, 55) - true - - - - DateTime(2014, 10, 10, 20, 55) same minute as DateTime(2014, 10, 10, 21, 56) - false - - - - DateTime(2014, 12, 10, 20, 55, 45) same second as DateTime(2014, 12, 10, 20, 55, 45) - true - - - - DateTime(2014, 10, 10, 20, 55, 45) same second as DateTime(2014, 10, 10, 21, 55, 44) - false - - - - DateTime(2014, 12, 10, 20, 55, 45, 500) same millisecond as DateTime(2014, 12, 10, 20, 55, 45, 500) - true - - - - DateTime(2014, 10, 10, 20, 55, 45, 500) same millisecond as DateTime(2014, 10, 10, 21, 55, 45, 501) - false - - - - DateTime(2014, 10) same day as DateTime(2014, 10, 12) - null - - - - @2012-03-10T10:20:00.999+07:00 same hour as @2012-03-10T09:20:00.999+06:00 - true - - - - @2012-03-10T10:20:00.999+07:00 same hour as @2012-03-10T10:20:00.999+06:00 - false - - - - @T23:25:25.555 same hour as @T23:55:25.900 - true - - - - @T22:25:25.555 same hour as @T23:25:25.555 - false - - - - @T23:55:22.555 same minute as @T23:55:25.900 - true - - - - @T23:26:25.555 same minute as @T23:25:25.555 - false - - - - @T23:55:25.555 same second as @T23:55:25.900 - true - - - - @T23:25:35.555 same second as @T23:25:25.555 - false - - - - @T23:55:25.555 same millisecond as @T23:55:25.555 - true - - - - @T23:25:25.555 same millisecond as @T23:25:25.554 - false - - - - - - - DateTime(2014) same year or after DateTime(2014) - true - - - - DateTime(2016) same year or after DateTime(2014) - true - - - - DateTime(2013) same year or after DateTime(2014) - false - - - - DateTime(2014, 12) same month or after DateTime(2014, 12) - true - - - - DateTime(2014, 10) same month or after DateTime(2014, 9) - true - - - - DateTime(2014, 10) same month or after DateTime(2014, 11) - false - - - - DateTime(2014, 12, 20) same day or after DateTime(2014, 12, 20) - true - - - - DateTime(2014, 10, 25) same day or after DateTime(2014, 10, 20) - true - - - - DateTime(2014, 10, 20) same day or after DateTime(2014, 10, 25) - false - - - - DateTime(2014, 12, 20, 12) same hour or after DateTime(2014, 12, 20, 12) - true - - - - DateTime(2014, 10, 25, 12) same hour or after DateTime(2014, 10, 25, 10) - true - - - - DateTime(2014, 10, 25, 12) same hour or after DateTime(2014, 10, 25, 15) - false - - - - DateTime(2014, 12, 20, 12, 30) same minute or after DateTime(2014, 12, 20, 12, 30) - true - - - - DateTime(2014, 10, 25, 10, 30) same minute or after DateTime(2014, 10, 25, 10, 25) - true - - - - DateTime(2014, 10, 25, 15, 30) same minute or after DateTime(2014, 10, 25, 15, 45) - false - - - - DateTime(2014, 12, 20, 12, 30, 15) same second or after DateTime(2014, 12, 20, 12, 30, 15) - true - - - - DateTime(2014, 10, 25, 10, 25, 25) same second or after DateTime(2014, 10, 25, 10, 25, 20) - true - - - - DateTime(2014, 10, 25, 15, 45, 20) same second or after DateTime(2014, 10, 25, 15, 45, 21) - false - - - - DateTime(2014, 12, 20, 12, 30, 15, 250) same millisecond or after DateTime(2014, 12, 20, 12, 30, 15, 250) - true - - - - DateTime(2014, 10, 25, 10, 25, 20, 500) same millisecond or after DateTime(2014, 10, 25, 10, 25, 20, 499) - true - - - - DateTime(2014, 10, 25, 15, 45, 20, 500) same millisecond or after DateTime(2014, 10, 25, 15, 45, 20, 501) - false - - - - DateTime(2014, 12, 20) same day or after DateTime(2014, 12) - null - - - - @2012-03-10T10:20:00.999+07:00 same hour or after @2012-03-10T09:20:00.999+06:00 - true - - - - @2012-03-10T10:20:00.999+07:00 same hour or after @2012-03-10T10:20:00.999+06:00 - false - - - - @T23:25:25.555 same hour or after @T23:55:25.900 - true - - - - @T23:25:25.555 same hour or after @T22:55:25.900 - true - - - - @T22:25:25.555 same hour or after @T23:55:25.900 - false - - - - @T23:25:25.555 same minute or after @T23:25:25.900 - true - - - - @T23:25:25.555 same minute or after @T22:15:25.900 - true - - - - @T23:25:25.555 same minute or after @T23:55:25.900 - false - - - - @T23:25:25.555 same second or after @T23:25:25.900 - true - - - - @T23:25:35.555 same second or after @T22:25:25.900 - true - - - - @T23:55:25.555 same second or after @T23:55:35.900 - false - - - - @T23:25:25.555 same millisecond or after @T23:25:25.555 - true - - - - @T23:25:25.555 same millisecond or after @T22:25:25.550 - true - - - - @T23:55:25.555 same millisecond or after @T23:55:25.900 - false - - - - @2017-12-20T11:00:00.000 on or after @2017-12-20T11:00:00.000 - true - - - - @2017-12-21T02:00:00.0 same or after @2017-12-20T11:00:00.0 - true - - - - - - - DateTime(2014) same year or before DateTime(2014) - true - - - - DateTime(2013) same year or before DateTime(2014) - true - - - - DateTime(2015) same year or before DateTime(2014) - false - - - - DateTime(2014, 12) same month or before DateTime(2014, 12) - true - - - - DateTime(2014, 8) same month or before DateTime(2014, 9) - true - - - - DateTime(2014, 12) same month or before DateTime(2014, 11) - false - - - - DateTime(2014, 12, 20) same day or before DateTime(2014, 12, 20) - true - - - - DateTime(2014, 10, 15) same day or before DateTime(2014, 10, 20) - true - - - - DateTime(2014, 10, 30) same day or before DateTime(2014, 10, 25) - false - - - - DateTime(2014, 12, 20, 12) same hour or before DateTime(2014, 12, 20, 12) - true - - - - DateTime(2014, 10, 25, 5) same hour or before DateTime(2014, 10, 25, 10) - true - - - - DateTime(2014, 10, 25, 20) same hour or before DateTime(2014, 10, 25, 15) - false - - - - DateTime(2014, 12, 20, 12, 30) same minute or before DateTime(2014, 12, 20, 12, 30) - true - - - - DateTime(2014, 10, 25, 10, 20) same minute or before DateTime(2014, 10, 25, 10, 25) - true - - - - DateTime(2014, 10, 25, 15, 55) same minute or before DateTime(2014, 10, 25, 15, 45) - false - - - - DateTime(2014, 12, 20, 12, 30, 15) same second or before DateTime(2014, 12, 20, 12, 30, 15) - true - - - - DateTime(2014, 10, 25, 10, 25, 15) same second or before DateTime(2014, 10, 25, 10, 25, 20) - true - - - - DateTime(2014, 10, 25, 15, 45, 25) same second or before DateTime(2014, 10, 25, 15, 45, 21) - false - - - - DateTime(2014, 12, 20, 12, 30, 15, 250) same millisecond or before DateTime(2014, 12, 20, 12, 30, 15, 250) - true - - - - DateTime(2014, 10, 25, 10, 25, 20, 450) same millisecond or before DateTime(2014, 10, 25, 10, 25, 20, 499) - true - - - - DateTime(2014, 10, 25, 15, 45, 20, 505) same millisecond or before DateTime(2014, 10, 25, 15, 45, 20, 501) - false - - - - DateTime(2014, 12, 20) same minute or before DateTime(2014, 12, 20, 15) - null - - - - @2012-03-10T09:20:00.999+07:00 same hour or before @2012-03-10T10:20:00.999+06:00 - true - - - - @2012-03-10T10:20:00.999+06:00 same hour or before @2012-03-10T10:20:00.999+07:00 - false - - - - @T23:25:25.555 same hour or before @T23:55:25.900 - true - - - - @T21:25:25.555 same hour or before @T22:55:25.900 - true - - - - @T22:25:25.555 same hour or before @T21:55:25.900 - false - - - - @T23:25:25.555 same minute or before @T23:25:25.900 - true - - - - @T23:10:25.555 same minute or before @T22:15:25.900 - false - - - - @T23:56:25.555 same minute or before @T23:55:25.900 - false - - - - @T23:25:25.555 same second or before @T23:25:25.900 - true - - - - @T23:25:35.555 same second or before @T22:25:45.900 - false - - - - @T23:55:45.555 same second or before @T23:55:35.900 - false - - - - @T23:25:25.555 same millisecond or before @T23:25:25.555 - true - - - - @T23:25:25.200 same millisecond or before @T22:25:25.550 - false - - - - @T23:55:25.966 same millisecond or before @T23:55:25.900 - false - - - - - - - DateTime(2005, 10, 10) - 5 years - @2000-10-10T - - - - DateTime(2005, 10, 10) - 2005 years - - - - - DateTime(2005, 6, 10) - 5 months - @2005-01-10T - - - - DateTime(2005, 5, 10) - 6 months - @2004-11-10T - - - - DateTime(2018, 5, 23) - 3 weeks = DateTime(2018, 5, 2) - true - - - - - - - DateTime(2018, 5, 23) - 52 weeks = DateTime(2017, 5, 24) - true - - - - - - - DateTime(2024, 2, 29) - 52 weeks = DateTime(2023, 3, 2) - true - - - - - - - DateTime(2024, 3, 1) - 52 weeks = DateTime(2023, 3, 3) - true - - - - - - - DateTime(2005, 5, 10) - 5 days - @2005-05-05T - - - - DateTime(2016, 6, 10) - 11 days - @2016-05-30T - - - - DateTime(2005, 5, 10, 10) - 5 hours - @2005-05-10T05 - - - - DateTime(2016, 6, 10, 5) - 6 hours - @2016-06-09T23 - - - - DateTime(2005, 5, 10, 5, 10) - 5 minutes - @2005-05-10T05:05 - - - - DateTime(2016, 6, 10, 5, 5) - 6 minutes - @2016-06-10T04:59 - - - - DateTime(2005, 5, 10, 5, 5, 10) - 5 seconds - @2005-05-10T05:05:05 - - - - DateTime(2016,5) - 31535999 seconds = DateTime(2015, 5) - true - - - - DateTime(2016, 10, 1, 10, 20, 30) - 15 hours - @2016-09-30T19:20:30 - - - - DateTime(2016, 6, 10, 5, 5, 5) - 6 seconds - @2016-06-10T05:04:59 - - - - DateTime(2005, 5, 10, 5, 5, 5, 10) - 5 milliseconds - @2005-05-10T05:05:05.005 - - - - DateTime(2016, 6, 10, 5, 5, 5, 5) - 6 milliseconds - @2016-06-10T05:05:04.999 - - - - DateTime(2014) - 24 months - @2012T - - - - DateTime(2014) - 25 months - @2012T - - - - Date(2014) - 24 months - @2012 - - - - Date(2014) - 25 months - @2012 - - - - Date(2014,6) - 33 days - @2014-05 - - - - Date(2014,6) - 1 year - @2013-06 - - - - @T15:59:59.999 - 5 hours - @T10:59:59.999 - - - - @T15:59:59.999 - 1 minutes - @T15:58:59.999 - - - - @T15:59:59.999 - 1 seconds - @T15:59:58.999 - - - - @T15:59:59.0 - 1 milliseconds - @T15:59:58.999 - - - - @T15:59:59.999 - 5 hours - 1 minutes - @T10:58:59.999 - - - - @T15:59:59.999 - 300 minutes - @T10:59:59.999 - - - - - - - @T23:59:59.999 - @T23:59:59.999 - - - - - - - TimeOfDay() = TimeOfDay() - true - - - - - - - - - - - Today() same day or before Today() - true - - - - - - Today() same day or before Today() + 1 days - true - - - - - - Today() + 1 years same day or before Today() - false - - - - - - Today() + 1 days > Today() - true - - - - - - Today() = Today() - true - - - diff --git a/test/spec-tests/xml/CqlErrorsAndMessagingOperatorsTest.xml b/test/spec-tests/xml/CqlErrorsAndMessagingOperatorsTest.xml deleted file mode 100644 index 0470b8aca..000000000 --- a/test/spec-tests/xml/CqlErrorsAndMessagingOperatorsTest.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - - - Message(1, true, '100', 'Message', 'Test Message') - 1 - - - - Message(2, true, '200', 'Warning', 'You have been warned!') - 2 - - - - Message({3, 4, 5}, true, '300', 'Trace', 'This is a trace') - {3, 4, 5} - - - - Message(3 + 1, true, '400', 'Error', 'This is an error!') - - - - diff --git a/test/spec-tests/xml/CqlIntervalOperatorsTest.xml b/test/spec-tests/xml/CqlIntervalOperatorsTest.xml deleted file mode 100644 index 64c8e2b47..000000000 --- a/test/spec-tests/xml/CqlIntervalOperatorsTest.xml +++ /dev/null @@ -1,2179 +0,0 @@ - - - - - - - - (null as Integer) after Interval[1, 10] - null - - - - Interval[11, 20] after Interval[1, 10] - true - - - - Interval[1, 10] after Interval[11, 20] - false - - - - 12 after Interval[1, 10] - true - - - - 9 after Interval[1, 10] - false - - - - Interval[11, 20] after 5 - true - - - - Interval[11, 20] after 12 - false - - - - Interval[11.0, 20.0] after Interval[1.0, 10.0] - true - - - - Interval[1.0, 10.0] after Interval[11.0, 20.0] - false - - - - 12.0 after Interval[1.0, 10.0] - true - - - - 9.0 after Interval[1.0, 10.0] - false - - - - Interval[11.0, 20.0] after 5.0 - true - - - - Interval[11.0, 20.0] after 12.0 - false - - - - Interval[11.0 'g', 20.0 'g'] after Interval[1.0 'g', 10.0 'g'] - true - - - - Interval[1.0 'g', 10.0 'g'] after Interval[11.0 'g', 20.0 'g'] - false - - - - 12.0'g' after Interval[1.0 'g', 10.0 'g'] - true - - - - 9.0'g' after Interval[1.0 'g', 10.0 'g'] - false - - - - Interval[11.0 'g', 20.0 'g'] after 5.0'g' - true - - - - Interval[11.0 'g', 20.0 'g'] after 12.0'g' - false - - - - Interval[DateTime(2012, 1, 1), DateTime(2012, 1, 15)] after DateTime(2011, 12, 31) - true - - - - Interval[DateTime(2012, 1, 1), DateTime(2012, 1, 15)] after DateTime(2012, 12, 31) - false - - - - Interval[@T15:59:59.999, @T20:59:59.999] after @T12:59:59.999 - true - - - - Interval[@T15:59:59.999, @T20:59:59.999] after @T17:59:59.999 - false - - - - - - - (null as Integer) before Interval[1, 10] - null - - - - Interval[11, 20] before Interval[1, 10] - false - - - - Interval[1, 10] before Interval[11, 20] - true - - - - 9 before Interval[11, 20] - true - - - - 9 before Interval[1, 10] - false - - - - Interval[1, 10] before 11 - true - - - - Interval[1, 10] before 8 - false - - - - Interval[11.0, 20.0] before Interval[1.0, 10.0] - false - - - - Interval[1.0, 10.0] before Interval[11.0, 20.0] - true - - - - 9.0 before Interval[11.0, 20.0] - true - - - - 9.0 before Interval[1.0, 10.0] - false - - - - Interval[1.0, 10.0] before 11.0 - true - - - - Interval[1.0, 10.0] before 8.0 - false - - - - Interval[1.0 'g', 10.0 'g'] before Interval[11.0 'g', 20.0 'g'] - true - - - - Interval[11.0 'g', 20.0 'g'] before Interval[1.0 'g', 10.0 'g'] - false - - - - Interval[1.0 'g', 10.0 'g'] before 12.0'g' - true - - - - Interval[1.0 'g', 10.0 'g'] before 9.0'g' - false - - - - 5.0'g' before Interval[11.0 'g', 20.0 'g'] - true - - - - 12.0'g' before Interval[11.0 'g', 20.0 'g'] - false - - - - Interval[DateTime(2012, 1, 1), DateTime(2012, 1, 15)] before DateTime(2012, 2, 27) - true - - - - Interval[DateTime(2012, 1, 1), DateTime(2012, 1, 15)] before DateTime(2011, 12, 31) - false - - - - Interval[@T15:59:59.999, @T20:59:59.999] before @T22:59:59.999 - true - - - - Interval[@T15:59:59.999, @T20:59:59.999] before @T10:59:59.999 - false - - - - - - - collapse {Interval(null, null)} - { } - - - - collapse { Interval[1,5], Interval[3,7], Interval[12,19], Interval[7,10] } - {Interval [ 1, 10 ], Interval [ 12, 19 ]} - - - - - collapse { Interval[1,2], Interval[3,7], Interval[10,19], Interval[7,10] } - {Interval [ 1, 19 ]} - - - - collapse { Interval[4,6], Interval[7,8] } - {Interval [ 4, 8 ]} - - - - collapse { Interval[1.0,5.0], Interval[3.0,7.0], Interval[12.0,19.0], Interval[7.0,10.0] } - {Interval [ 1.0, 10.0 ], Interval [ 12.0, 19.0 ]} - - - - collapse { Interval[4.0,6.0], Interval[6.00000001,8.0] } - {Interval [ 4.0, 8.0 ]} - - - - collapse { Interval[1.0 'g',5.0 'g'], Interval[3.0 'g',7.0 'g'], Interval[12.0 'g',19.0 'g'], Interval[7.0 'g',10.0 'g'] } - {Interval [ 1.0 'g', 10.0 'g' ], Interval [ 12.0 'g', 19.0 'g' ]} - - - - collapse { Interval[DateTime(2012, 1, 1), DateTime(2012, 1, 15)], Interval[DateTime(2012, 1, 10), DateTime(2012, 1, 25)], Interval[DateTime(2012, 5, 10), DateTime(2012, 5, 25)], Interval[DateTime(2012, 5, 20), DateTime(2012, 5, 30)] } - {Interval [ @2012-01-01T, @2012-01-25T ], Interval [ @2012-05-10T, @2012-05-30T ]} - - - - collapse { Interval[DateTime(2012, 1, 1), DateTime(2012, 1, 15)], Interval[DateTime(2012, 1, 16), DateTime(2012, 5, 25)] } - {Interval [ @2012-01-01T, @2012-05-25T ]} - - - - collapse { Interval[@T01:59:59.999, @T10:59:59.999], Interval[@T08:59:59.999, @T15:59:59.999], Interval[@T17:59:59.999, @T20:59:59.999], Interval[@T18:59:59.999, @T22:59:59.999] } - {Interval [ @T01:59:59.999, @T15:59:59.999 ], Interval [ @T17:59:59.999, @T22:59:59.999 ]} - - - - collapse { Interval[@T01:59:59.999, @T10:59:59.999], Interval[@T11:00:00.000, @T15:59:59.999] } - {Interval [ @T01:59:59.999, @T15:59:59.999 ]} - - - - - - - expand null - null - - - - expand { } - { } - - - - expand { null } - { } - - - - expand { Interval[@2018-01-01, @2018-01-04] } per day - { Interval[@2018-01-01, @2018-01-01], Interval[@2018-01-02, @2018-01-02], Interval[@2018-01-03, @2018-01-03], Interval[@2018-01-04, @2018-01-04] } - - - - expand Interval[@2018-01-01, @2018-01-04] per day - { @2018-01-01, @2018-01-02, @2018-01-03, @2018-01-04 } - - - - expand { Interval[@2018-01-01, @2018-01-04] } per 2 days - { Interval[@2018-01-01, @2018-01-02], Interval[@2018-01-03, @2018-01-04] } - - - - expand Interval[@2018-01-01, @2018-01-04] per 2 days - { @2018-01-01, @2018-01-03 } - - - - expand { Interval[@T10:00, @T12:30] } per hour - { Interval[@T10, @T10], Interval[@T11, @T11], Interval[@T12, @T12] } - - - - expand Interval[@T10:00, @T12:30] per hour - { @T10, @T11, @T12 } - - - - expand { Interval[@T10:00, @T12:30) } per hour - { Interval[@T10, @T10], Interval[@T11, @T11], Interval[@T12, @T12] } - - - - expand Interval[@T10:00, @T12:30) per hour - { @T10, @T11, @T12 } - - - - expand { Interval[10.0, 12.5] } per 1 - { Interval[10, 10], Interval[11, 11], Interval[12, 12] } - - - - expand Interval[10.0, 12.5] per 1 - { 10, 11, 12 } - - - - expand { Interval[10.0, 12.5) } per 1 - { Interval[10, 10], Interval[11, 11], Interval[12, 12] } - - - - expand Interval[10.0, 12.5) per 1 - { 10, 11, 12 } - - - - expand { Interval[@T10, @T10] } per minute - { } - - - - expand Interval[@T10, @T10] per minute - { } - - - - expand { Interval[10, 10] } per 0.1 - { Interval[10.0, 10.0], Interval[10.1, 10.1], Interval[10.2, 10.2], Interval[10.3, 10.3], Interval[10.4, 10.4], Interval[10.5, 10.5], Interval[10.6, 10.6], Interval[10.7, 10.7], Interval[10.8, 10.8], Interval[10.9, 10.9] } - - - - expand Interval[10, 10] per 0.1 - { 10.0, 10.1, 10.2, 10.3, 10.4, 10.5, 10.6, 10.7, 10.8, 10.9 } - - - - expand { Interval[1, 10] } - { Interval[1, 1], Interval[2, 2], Interval[3, 3], Interval[4, 4], Interval[5, 5], Interval[6, 6], Interval[7, 7], Interval[8, 8], Interval[9, 9], Interval[10, 10] } - - - - expand Interval[1, 10] - { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 } - - - - expand { Interval[1, 10) } - { Interval[1, 1], Interval[2, 2], Interval[3, 3], Interval[4, 4], Interval[5, 5], Interval[6, 6], Interval[7, 7], Interval[8, 8], Interval[9, 9] } - - - - expand Interval[1, 10) - { 1, 2, 3, 4, 5, 6, 7, 8, 9 } - - - - expand { Interval[1, 10] } per 2 - { Interval[1, 2], Interval[3, 4], Interval[5, 6], Interval[7, 8], Interval[9, 10] } - - - - expand Interval[1, 10] per 2 - { 1, 3, 5, 7, 9 } - - - - expand { Interval[1, 10) } per 2 - { Interval[1, 2], Interval[3, 4], Interval[5, 6], Interval[7, 8] } - - - - expand Interval[1, 10) per 2 - { 1, 3, 5, 7 } - - - - - - - Interval[1, 10] contains null - null - - - - null as Interval<Integer> contains 5 - false - - - - Interval[null, 5] contains 10 - false - - - - Interval[1, 10] contains 5 - true - - - - Interval[1, 10] contains 25 - false - - - - Interval[1.0, 10.0] contains 8.0 - true - - - - Interval[1.0, 10.0] contains 255.0 - false - - - - Interval[1.0 'g', 10.0 'g'] contains 2.0 'g' - true - - - - Interval[1.0 'g', 10.0 'g'] contains 100.0 'g' - false - - - - Interval[DateTime(2012, 1, 1), DateTime(2012, 1, 15)] contains DateTime(2012, 1, 10) - true - - - - Interval[DateTime(2012, 1, 1), DateTime(2012, 1, 15)] contains DateTime(2012, 1, 16) - false - - - - Interval[@T01:59:59.999, @T10:59:59.999] contains @T05:59:59.999 - true - - - - Interval[@T01:59:59.999, @T10:59:59.999] contains @T15:59:59.999 - false - - - - - - - end of Interval[1, 10] - 10 - - - - end of Interval[1.0, 10.0] - 10.0 - - - - end of Interval[1.0 'g', 10.0 'g'] - 10.0'g' - - - - end of Interval[@2016-05-01T00:00:00.000, @2016-05-02T00:00:00.000] - @2016-05-02T00:00:00.000 - - - - end of Interval[@T00:00:00.000, @T23:59:59.599] - @T23:59:59.599 - - - - - - - Interval[1, 10] ends Interval(null, null) - null - - - - Interval[4, 10] ends Interval[1, 10] - true - - - - Interval[44, 50] ends Interval[1, 10] - false - - - - Interval[4.0, 10.0] ends Interval[1.0, 10.0] - true - - - - Interval[11.0, 20.0] ends Interval[1.0, 10.0] - false - - - - Interval[5.0 'g', 10.0 'g'] ends Interval[1.0 'g', 10.0 'g'] - true - - - - Interval[11.0 'g', 20.0 'g'] ends Interval[1.0 'g', 10.0 'g'] - false - - - - Interval[DateTime(2012, 1, 5), DateTime(2012, 1, 15)] ends Interval[DateTime(2012, 1, 1), DateTime(2012, 1, 15)] - true - - - - Interval[DateTime(2012, 1, 5), DateTime(2012, 1, 15)] ends Interval[DateTime(2012, 1, 1), DateTime(2012, 1, 16)] - false - - - - Interval[@T05:59:59.999, @T10:59:59.999] ends Interval[@T01:59:59.999, @T10:59:59.999] - true - - - - Interval[@T05:59:59.999, @T10:59:59.999] ends Interval[@T01:59:59.999, @T11:59:59.999] - false - - - - - - - Interval[1, 10] = Interval(null, null) - null - - - - Interval[1, 10] = Interval[1, 10] - true - - - - Interval[1, 10] = Interval[11, 20] - false - - - - Interval[1.0, 10.0] = Interval[1.0, 10.0] - true - - - - Interval[1.0, 10.0] = Interval[11.0, 20.0] - false - - - - Interval[1.0 'g', 10.0 'g'] = Interval[1.0 'g', 10.0 'g'] - true - - - - Interval[1.0 'g', 10.0 'g'] = Interval[11.0 'g', 20.0 'g'] - false - - - - Interval[DateTime(2012, 1, 5, 0, 0, 0, 0), DateTime(2012, 1, 15, 0, 0, 0, 0)] = Interval[DateTime(2012, 1, 5, 0, 0, 0, 0), DateTime(2012, 1, 15, 0, 0, 0, 0)] - true - - - - Interval[DateTime(2012, 1, 5, 0, 0, 0, 0), DateTime(2012, 1, 15, 0, 0, 0, 0)] = Interval[DateTime(2012, 1, 5, 0, 0, 0, 0), DateTime(2012, 1, 16, 0, 0, 0, 0)] - false - - - - Interval[@T05:59:59.999, @T10:59:59.999] = Interval[@T05:59:59.999, @T10:59:59.999] - true - - - - Interval[@T05:59:59.999, @T10:59:59.999] = Interval[@T05:59:59.999, @T10:58:59.999] - false - - - - - - - Interval[null, null] except Interval[null, null] - null - - - - Interval[1, 10] except Interval[4, 10] - Interval [ 1, 3 ] - - - - Interval[1, 10] except Interval[3, 7] - null - - - - Interval[1.0, 10.0] except Interval[4.0, 10.0] - Interval [ 1.0, 3.99999999 ] - - - - Interval[1.0, 10.0] except Interval[3.0, 7.0] - null - - - - Interval[1.0 'g', 10.0 'g'] except Interval[5.0 'g', 10.0 'g'] - Interval [ 1.0 'g', 4.99999999 'g' ] - - - - Interval[1, 4] except Interval[3, 6] - Interval [ 1, 2 ] - - - - Interval[DateTime(2012, 1, 5), DateTime(2012, 1, 15)] except Interval[DateTime(2012, 1, 7), DateTime(2012, 1, 15)] - Interval [ @2012-01-05T, @2012-01-06T ] - - - - Interval[DateTime(2012, 1, 7), DateTime(2012, 1, 16)] except Interval[DateTime(2012, 1, 5), DateTime(2012, 1, 12)] - Interval [ @2012-01-13T, @2012-01-16T ] - - - - Interval[@T05:59:59.999, @T10:59:59.999] except Interval[@T08:59:59.999, @T10:59:59.999] - Interval [ @T05:59:59.999, @T08:59:59.998 ] - - - - Interval[@T08:59:59.999, @T11:59:59.999] except Interval[@T05:59:59.999, @T10:59:59.999] - Interval [ @T11:00:00.000, @T11:59:59.999 ] - - - - - - - 5 in Interval[null, null] - false - - - - 5 in Interval[1, 10] - true - - - - 500 in Interval[1, 10] - false - - - - 9.0 in Interval[1.0, 10.0] - true - - - - -2.0 in Interval[1.0, 10.0] - false - - - - 1.0 'g' in Interval[1.0 'g', 10.0 'g'] - true - - - - 55.0 'g' in Interval[1.0 'g', 10.0 'g'] - false - - - - DateTime(2012, 1, 7) in Interval[DateTime(2012, 1, 5), DateTime(2012, 1, 15)] - true - - - - DateTime(2012, 1, 17) in Interval[DateTime(2012, 1, 5), DateTime(2012, 1, 15)] - false - - - - DateTime(2012, 1, 7) in Interval[DateTime(2012, 1, 5), null] - true - - - - @T07:59:59.999 in Interval[@T05:59:59.999, @T10:59:59.999] - true - - - - @T17:59:59.999 in Interval[@T05:59:59.999, @T10:59:59.999] - false - - - - null in Interval[@T05:59:59.999, @T10:59:59.999] - null - - - - Interval[@2017-12-20T11:00:00, @2017-12-21T21:00:00] - Interval [ @2017-12-20T11:00:00, @2017-12-21T21:00:00 ] - - - - Interval[@2017-12-20T10:30:00, @2017-12-20T12:00:00] - Interval [ @2017-12-20T10:30:00, @2017-12-20T12:00:00 ] - - - - - Interval[@2017-12-20T10:30:00, @2017-12-20T12:00:00] - starts 1 day or less on or after day of start of - Interval[@2017-12-20T11:00:00, @2017-12-21T21:00:00] - - true - - - - - - - Interval[1, 10] includes null - null - - - - Interval[1, 10] includes Interval[4, 10] - true - - - - Interval[1, 10] includes Interval[44, 50] - false - - - - Interval[1.0, 10.0] includes Interval[4.0, 10.0] - true - - - - Interval[1.0, 10.0] includes Interval[11.0, 20.0] - false - - - - Interval[1.0 'g', 10.0 'g'] includes Interval[5.0 'g', 10.0 'g'] - true - - - - Interval[1.0 'g', 10.0 'g'] includes Interval[11.0 'g', 20.0 'g'] - false - - - - Interval[DateTime(2012, 1, 5), DateTime(2012, 1, 15)] includes Interval[DateTime(2012, 1, 7), DateTime(2012, 1, 14)] - true - - - - Interval[DateTime(2012, 1, 5), DateTime(2012, 1, 15)] includes Interval[DateTime(2012, 1, 4), DateTime(2012, 1, 14)] - false - - - - Interval[@T05:59:59.999, @T10:59:59.999] includes Interval[@T06:59:59.999, @T09:59:59.999] - true - - - - Interval[@T05:59:59.999, @T10:59:59.999] includes Interval[@T04:59:59.999, @T09:59:59.999] - false - - - - - - - null included in Interval[1, 10] - null - - - - Interval[4, 10] included in Interval[1, 10] - true - - - - Interval[44, 50] included in Interval[1, 10] - false - - - - Interval[4.0, 10.0] included in Interval[1.0, 10.0] - true - - - - Interval[11.0, 20.0] included in Interval[1.0, 10.0] - false - - - - Interval[5.0 'g', 10.0 'g'] included in Interval[1.0 'g', 10.0 'g'] - true - - - - Interval[11.0 'g', 20.0 'g'] included in Interval[1.0 'g', 10.0 'g'] - false - - - - Interval[DateTime(2012, 1, 7), DateTime(2012, 1, 14)] included in Interval[DateTime(2012, 1, 5), DateTime(2012, 1, 15)] - true - - - - Interval[DateTime(2012, 1, 4), DateTime(2012, 1, 14)] included in Interval[DateTime(2012, 1, 5), DateTime(2012, 1, 15)] - false - - - - Interval[@T06:59:59.999, @T09:59:59.999] included in Interval[@T05:59:59.999, @T10:59:59.999] - true - - - - Interval[@T04:59:59.999, @T09:59:59.999] included in Interval[@T05:59:59.999, @T10:59:59.999] - false - - - - Interval [@2017-09-01T00:00:00, @2017-09-01T00:00:00] included in Interval [@2017-09-01T00:00:00.000, @2017-12-30T23:59:59.999] - null - - - - Interval [@2017-09-01T00:00:00, @2017-09-01T00:00:00] included in day of Interval [@2017-09-01T00:00:00.000, @2017-12-30T23:59:59.999] - true - - - - Interval [@2017-09-01T00:00:00, @2017-09-01T00:00:00] included in millisecond of Interval [@2017-09-01T00:00:00.000, @2017-12-30T23:59:59.999] - null - - - - - - - Interval[1, 10] intersect Interval[5, null) - Interval[5, null) - - - - start of (Interval[1, 10] intersect Interval[5, null)) <= 10 - true - - - - start of (Interval[1, 10] intersect Interval[5, null)) >= 5 - true - - - - start of (Interval[1, 10] intersect Interval[5, null)) > 10 - false - - - - start of (Interval[1, 10] intersect Interval[5, null)) < 5 - false - - - - Interval[1, 10] intersect Interval[4, 10] - Interval [ 4, 10 ] - - - - Interval[1, 10] intersect Interval[11, 20] - null - - - - Interval[1.0, 10.0] intersect Interval[4.0, 10.0] - Interval [ 4.0, 10.0 ] - - - - Interval[1.0, 10.0] intersect Interval[11.0, 20.0] - null - - - - Interval[1.0 'g', 10.0 'g'] intersect Interval[5.0 'g', 10.0 'g'] - Interval [ 5.0 'g', 10.0 'g' ] - - - - Interval[1.0 'g', 10.0 'g'] intersect Interval[11.0 'g', 20.0 'g'] - null - - - - Interval[DateTime(2012, 1, 7), DateTime(2012, 1, 14)] intersect Interval[DateTime(2012, 1, 7), DateTime(2012, 1, 10)] - Interval [ @2012-01-07T, @2012-01-10T ] - - - - Interval[@T04:59:59.999, @T09:59:59.999] intersect Interval[@T04:59:59.999, @T06:59:59.999] - Interval [ @T04:59:59.999, @T06:59:59.999 ] - - - - - - - Interval[1, 10] ~ Interval[1, 10] - true - - - - Interval[44, 50] ~ Interval[1, 10] - false - - - - Interval[1.0, 10.0] ~ Interval[1.0, 10.0] - true - - - - Interval[11.0, 20.0] ~ Interval[1.0, 10.0] - false - - - - Interval[1.0 'g', 10.0 'g'] ~ Interval[1.0 'g', 10.0 'g'] - true - - - - Interval[11.0 'g', 20.0 'g'] ~ Interval[1.0 'g', 10.0 'g'] - false - - - - Interval[DateTime(2012, 1, 7), DateTime(2012, 1, 14)] ~ Interval[DateTime(2012, 1, 7), DateTime(2012, 1, 14)] - true - - - - Interval[DateTime(2012, 1, 7), DateTime(2012, 1, 14)] ~ Interval[DateTime(2012, 1, 7), DateTime(2012, 1, 15)] - false - - - - Interval[@T04:59:59.999, @T09:59:59.999] ~ Interval[@T04:59:59.999, @T09:59:59.999] - true - - - - Interval[@T04:59:59.999, @T09:59:59.999] ~ Interval[@T04:58:59.999, @T09:59:59.999] - false - - - - - - - Interval(null, 5] meets Interval(null, 15) - null - - - - Interval[1, 10] meets Interval[11, 20] - true - - - - Interval[1, 10] meets Interval[44, 50] - false - - - - Interval[3.01, 5.00000001] meets Interval[5.00000002, 8.50] - true - - - - Interval[3.01, 5.00000001] meets Interval[5.5, 8.50] - false - - - - Interval[3.01 'g', 5.00000001 'g'] meets Interval[5.00000002 'g', 8.50 'g'] - true - - - - Interval[3.01 'g', 5.00000001 'g'] meets Interval[5.5 'g', 8.50 'g'] - false - - - - Interval[DateTime(2012, 1, 7), DateTime(2012, 1, 14)] meets Interval[DateTime(2012, 1, 15), DateTime(2012, 1, 25)] - true - - - - Interval[DateTime(2012, 1, 7), DateTime(2012, 1, 14)] meets Interval[DateTime(2012, 1, 20), DateTime(2012, 1, 25)] - false - - - - Interval[@T04:59:59.999, @T09:59:59.999] meets Interval[@T10:00:00.000, @T19:59:59.999] - true - - - - Interval[@T04:59:59.999, @T09:59:59.999] meets Interval[@T10:12:00.000, @T19:59:59.999] - false - - - - - - - Interval(null, 5] meets before Interval(null, 25] - null - - - - Interval[1, 10] meets before Interval[11, 20] - true - - - - Interval[1, 10] meets before Interval[44, 50] - false - - - - Interval[3.50000001, 5.00000011] meets before Interval[5.00000012, 8.50] - true - - - - Interval[8.01, 15.00000001] meets before Interval[15.00000000, 18.50] - false - - - - Interval[3.50000001 'g', 5.00000011 'g'] meets before Interval[5.00000012 'g', 8.50 'g'] - true - - - - Interval[8.01 'g', 15.00000001 'g'] meets before Interval[15.00000000 'g', 18.50 'g'] - false - - - - Interval[DateTime(2012, 1, 7), DateTime(2012, 1, 14)] meets Interval[DateTime(2012, 1, 15), DateTime(2012, 1, 25)] - true - - - - Interval[DateTime(2012, 1, 7), DateTime(2012, 1, 14)] meets Interval[DateTime(2012, 1, 20), DateTime(2012, 1, 25)] - false - - - - Interval[@T04:59:59.999, @T09:59:59.999] meets Interval[@T10:00:00.000, @T19:59:59.999] - true - - - - Interval[@T04:59:59.999, @T09:59:59.999] meets Interval[@T10:12:00.000, @T19:59:59.999] - false - - - - - - - Interval(null, 5] meets after Interval[11, null) - false - - - - Interval[11, 20] meets after Interval[1, 10] - true - - - - Interval[44, 50] meets after Interval[1, 10] - false - - - - Interval[55.00000123, 128.032156] meets after Interval[12.00258, 55.00000122] - true - - - - Interval[55.00000124, 150.222222] meets after Interval[12.00258, 55.00000122] - false - - - - Interval[55.00000123 'g', 128.032156 'g'] meets after Interval[12.00258 'g', 55.00000122 'g'] - true - - - - Interval[55.00000124 'g', 150.222222 'g'] meets after Interval[12.00258 'g', 55.00000122 'g'] - false - - - - Interval[DateTime(2012, 1, 15), DateTime(2012, 1, 25)] meets Interval[DateTime(2012, 1, 7), DateTime(2012, 1, 14)] - true - - - - Interval[DateTime(2012, 1, 20), DateTime(2012, 1, 25)] meets Interval[DateTime(2012, 1, 7), DateTime(2012, 1, 14)] - false - - - - Interval[@T10:00:00.000, @T19:59:59.999] meets Interval[@T04:59:59.999, @T09:59:59.999] - true - - - - Interval[@T10:12:00.000, @T19:59:59.999] meets Interval[@T04:59:59.999, @T09:59:59.999] - false - - - - - - - Interval[1, 10] != Interval[11, 20] - true - - - - Interval[1, 10] != Interval[1, 10] - false - - - - Interval[1.0, 10.0] != Interval[11.0, 20.0] - true - - - - Interval[1.0, 10.0] != Interval[1.0, 10.0] - false - - - - Interval[1.0 'g', 10.0 'g'] != Interval[11.0 'g', 20.0 'g'] - true - - - - Interval[1.0 'g', 10.0 'g'] != Interval[1.0 'g', 10.0 'g'] - false - - - - Interval[DateTime(2012, 1, 15, 0, 0, 0, 0), DateTime(2012, 1, 25, 0, 0, 0, 0)] != Interval[DateTime(2012, 1, 15, 0, 0, 0, 0), DateTime(2012, 1, 25, 0, 0, 0, 22)] - true - - - - Interval[DateTime(2012, 1, 15, 0, 0, 0, 0), DateTime(2012, 1, 25, 0, 0, 0, 0)] != Interval[DateTime(2012, 1, 15, 0, 0, 0, 0), DateTime(2012, 1, 25, 0, 0, 0, 0)] - false - - - - Interval[@T10:00:00.000, @T19:59:59.999] != Interval[@T10:10:00.000, @T19:59:59.999] - true - - - - Interval[@T10:00:00.000, @T19:59:59.999] != Interval[@T10:00:00.000, @T19:59:59.999] - false - - - - - - - Interval[@2012-12-01, @2013-12-01] on or after (null as Interval<Date>) - null - - - - Interval[@2012-12-01, @2013-12-01] on or after month of @2012-11-15 - true - - - - @2012-11-15 on or after month of Interval[@2012-12-01, @2013-12-01] - false - - - - Interval[@T10:00:00.000, @T19:59:59.999] on or after hour of Interval[@T08:00:00.000, @T09:59:59.999] - true - - - - Interval[@T10:00:00.000, @T19:59:59.999] on or after hour of Interval[@T08:00:00.000, @T11:59:59.999] - false - - - - Interval[6, 10] on or after 6 - true - - - - 2.5 on or after Interval[1.666, 2.50000001] - false - - - - 2.5 'mg' on or after Interval[1.666 'mg', 2.50000000 'mg'] - true - - - - - - - Interval[@2012-12-01, @2013-12-01] on or before (null as Interval<Date>) - null - - - - Interval[@2012-10-01, @2012-11-01] on or before month of @2012-11-15 - true - - - - @2012-11-15 on or before month of Interval[@2012-10-01, @2013-12-01] - false - - - - Interval[@T05:00:00.000, @T07:59:59.999] on or before hour of Interval[@T08:00:00.000, @T09:59:59.999] - true - - - - Interval[@T10:00:00.000, @T19:59:59.999] on or before hour of Interval[@T08:00:00.000, @T11:59:59.999] - false - - - - Interval[4, 6] on or before 6 - true - - - - 1.6667 on or before Interval[1.666, 2.50000001] - false - - - - 1.666 'mg' on or before Interval[1.666 'mg', 2.50000000 'mg'] - true - - - - - - - Interval[null, null] overlaps Interval[1, 10] - null - - - - Interval[1, 10] overlaps Interval[4, 10] - true - - - - Interval[4, 10] overlaps Interval[4, 10] - true - - - - Interval[10, 15] overlaps Interval[4, 10] - true - - - - Interval[1, 10] overlaps Interval[11, 20] - false - - - - Interval[4, 10) overlaps Interval[4, 10) - true - - - - - Interval[4, 11) overlaps Interval[10, 20] - true - - - - - Interval[4, 10] overlaps Interval(9, 20] - true - - - - - Interval[4, 11) overlaps Interval(9, 20] - true - - - - - Interval[4, 10] overlaps Interval(10, 20] - false - - - - - Interval[4, 10) overlaps Interval[10, 20] - false - - - - Interval[4, 10) overlaps Interval(10, 20] - false - - - - Interval[4, 10) overlaps Interval(9, 20] - false - - - - Interval[1.0, 10.0] overlaps Interval[4.0, 10.0] - true - - - - Interval[1.0, 10.0] overlaps Interval[11.0, 20.0] - false - - - - Interval[1.0 'g', 10.0 'g'] overlaps Interval[5.0 'g', 10.0 'g'] - true - - - - Interval[1.0 'g', 10.0 'g'] overlaps Interval[11.0 'g', 20.0 'g'] - false - - - - Interval[DateTime(2012, 1, 5), DateTime(2012, 1, 25)] overlaps Interval[DateTime(2012, 1, 15), DateTime(2012, 1, 28)] - true - - - - Interval[DateTime(2012, 1, 5), DateTime(2012, 1, 25)] overlaps Interval[DateTime(2012, 1, 26), DateTime(2012, 1, 28)] - false - - - - Interval[DateTime(2012, 2, 25), DateTime(2012, 3, 26)] overlaps Interval[DateTime(2012, 1, 10), DateTime(2012, 2)] - null - - - - Interval[DateTime(2012, 1, 25), DateTime(2012, 2, 26)] overlaps Interval[DateTime(2012, 2), DateTime(2012, 3, 28)] - null - - - - Interval[DateTime(2012, 2), DateTime(2012, 3)] overlaps Interval[DateTime(2011, 1, 10), DateTime(2012)] - null - - - - Interval[DateTime(2012), DateTime(2013, 3)] overlaps Interval[DateTime(2012, 2), DateTime(2013, 2)] - true - - - - Interval[DateTime(2012, 2), DateTime(2013)] overlaps Interval[DateTime(2012, 3), DateTime(2013, 2)] - true - - - - Interval[@T10:00:00.000, @T19:59:59.999] overlaps Interval[@T12:00:00.000, @T21:59:59.999] - true - - - - Interval[@T10:00:00.000, @T19:59:59.999] overlaps Interval[@T20:00:00.000, @T21:59:59.999] - false - - - - - - - Interval[null, null] overlaps before Interval[1, 10] - null - - - - Interval[1, 10] overlaps before Interval[4, 10] - true - - - - Interval[4, 10] overlaps before Interval[1, 10] - false - - - - Interval[4, 10] overlaps before Interval[4, 10] - false - - - - Interval[4, 10] overlaps before Interval(4, 10] - true - - - - - Interval(3, 10] overlaps before Interval(4, 10] - true - - - - - Interval(3, 10] overlaps before Interval[5, 10] - true - - - - - Interval(3, 10] overlaps before Interval(3, 10] - false - - - - - Interval(3, 10] overlaps before Interval[4, 10] - false - - - - - Interval[4, 10] overlaps before Interval(3, 10] - false - - - - - Interval[1.0, 10.0] overlaps before Interval[4.0, 10.0] - true - - - - Interval[4.0, 10.0] overlaps before Interval[1.0, 10.0] - false - - - - Interval[1.0 'g', 10.0 'g'] overlaps before Interval[5.0 'g', 10.0 'g'] - true - - - - Interval[5.0 'g', 10.0 'g'] overlaps before Interval[1.0 'g', 10.0 'g'] - false - - - - Interval[DateTime(2012, 1, 5), DateTime(2012, 1, 25)] overlaps Interval[DateTime(2012, 1, 15), DateTime(2012, 1, 28)] - true - - - - Interval[DateTime(2012, 1, 5), DateTime(2012, 1, 25)] overlaps Interval[DateTime(2012, 1, 26), DateTime(2012, 1, 28)] - false - - - - Interval[@T10:00:00.000, @T19:59:59.999] overlaps Interval[@T12:00:00.000, @T21:59:59.999] - true - - - - Interval[@T10:00:00.000, @T19:59:59.999] overlaps Interval[@T20:00:00.000, @T21:59:59.999] - false - - - - - - - Interval[null, null] overlaps after Interval[1, 10] - null - - - - Interval[4, 15] overlaps after Interval[1, 10] - true - - - - Interval[4, 10] overlaps after Interval[1, 10] - false - - - - Interval[4, 10] overlaps after Interval[4, 10] - false - - - - Interval[4, 11) overlaps after Interval[4, 9] - true - - - - - Interval[4, 11) overlaps after Interval[4, 10) - true - - - - - Interval[4, 10] overlaps after Interval[4, 10) - true - - - - - Interval[4, 11) overlaps after Interval[4, 11) - false - - - - - Interval[4, 11) overlaps after Interval[4, 10] - false - - - - - Interval[4, 10] overlaps after Interval[4, 11) - false - - - - - Interval[4.0, 15.0] overlaps after Interval[1.0, 10.0] - true - - - - Interval[4.0, 10.0] overlaps after Interval[1.0, 10.0] - false - - - - Interval[5.0 'g', 15.0 'g'] overlaps after Interval[1.0 'g', 10.0 'g'] - true - - - - Interval[5.0 'g', 10.0 'g'] overlaps after Interval[1.0 'g', 10.0 'g'] - false - - - - Interval[DateTime(2012, 1, 15), DateTime(2012, 1, 28)] overlaps Interval[DateTime(2012, 1, 5), DateTime(2012, 1, 25)] - true - - - - Interval[DateTime(2012, 1, 26), DateTime(2012, 1, 28)] overlaps Interval[DateTime(2012, 1, 5), DateTime(2012, 1, 25)] - false - - - - Interval[@T12:00:00.000, @T21:59:59.999] overlaps Interval[@T10:00:00.000, @T19:59:59.999] - true - - - - Interval[@T20:00:00.000, @T21:59:59.999] overlaps Interval[@T10:00:00.000, @T19:59:59.999] - false - - - - - - - point from Interval[null, null] - null - - - - point from Interval[1, 1] - 1 - - - - point from Interval[1.0, 1.0] - 1.0 - - - - point from Interval[1.0 'cm', 1.0 'cm'] - 1.0'cm' - - - - - - - Interval[@T12:00:00.000, @T21:59:59.999] properly includes @T12:00:00.001 - true - - - - Interval[@T12:00:00.000, @T21:59:59.999] properly includes @T12:00:00.000 - false - - - - Interval[@T12:00:00.001, @T21:59:59.999] properly includes @T12:00:00 - null - - - - Interval[@T12:00:00.000, @T21:59:59.999] properly includes second of @T12:00:01 - true - - - - Interval[@T12:00:00.001, @T21:59:59.999] properly includes second of @T12:00:00 - false - - - - Interval[@T12:00:00.001, @T21:59:59.999] properly includes millisecond of @T12:00:00 - null - - - - - - - @T12:00:00.001 properly included in Interval[@T12:00:00.000, @T21:59:59.999] - true - - - - @T12:00:00.000 properly included in Interval[@T12:00:00.000, @T21:59:59.999] - false - - - - @T12:00:00 properly included in Interval[@T12:00:00.001, @T21:59:59.999] - null - - - - @T12:00:01 properly included in second of Interval[@T12:00:00.000, @T21:59:59.999] - true - - - - @T12:00:00 properly included in second of Interval[@T12:00:00.001, @T21:59:59.999] - false - - - - @T12:00:00 properly included in millisecond of Interval[@T12:00:00.001, @T21:59:59.999] - null - - - - - - - Interval[null as Integer, null as Integer] properly includes Interval[1, 10] - true - - - - Interval[1, 10] properly includes Interval[4, 10] - true - - - - Interval[1, 10] properly includes Interval[4, 15] - false - - - - Interval[1.0, 10.0] properly includes Interval[4.0, 10.0] - true - - - - Interval[1.0, 10.0] properly includes Interval[4.0, 15.0] - false - - - - Interval[1.0 'g', 10.0 'g'] properly includes Interval[5.0 'g', 10.0 'g'] - true - - - - Interval[1.0 'g', 10.0 'g'] properly includes Interval[5.0 'g', 15.0 'g'] - false - - - - Interval[DateTime(2012, 1, 15), DateTime(2012, 1, 28)] properly includes Interval[DateTime(2012, 1, 16), DateTime(2012, 1, 27)] - true - - - - Interval[DateTime(2012, 1, 15), DateTime(2012, 1, 28)] properly includes Interval[DateTime(2012, 1, 16), DateTime(2012, 1, 29)] - false - - - - Interval[@T12:00:00.000, @T21:59:59.999] properly includes Interval[@T12:01:01.000, @T21:59:59.998] - true - - - - Interval[@T12:00:00.000, @T21:59:59.999] properly includes Interval[@T12:01:01.000, @T22:00:00.000] - false - - - - - - - Interval[1, 10] properly included in Interval[null, null] - true - - - - Interval[4, 10] properly included in Interval[1, 10] - true - - - - Interval[4, 15] properly included in Interval[1, 10] - false - - - - Interval[4.0, 10.0] properly included in Interval[1.0, 10.0] - true - - - - Interval[4.0, 15.0] properly included in Interval[1.0, 10.0] - false - - - - Interval[5.0 'g', 10.0 'g'] properly included in Interval[1.0 'g', 10.0 'g'] - true - - - - Interval[1.0 'g', 10.0 'g'] properly included in Interval[5.0 'g', 15.0 'g'] - false - - - - Interval[DateTime(2012, 1, 16), DateTime(2012, 1, 27)] properly included in Interval[DateTime(2012, 1, 15), DateTime(2012, 1, 28)] - true - - - - Interval[DateTime(2012, 1, 16), DateTime(2012, 1, 29)] properly included in Interval[DateTime(2012, 1, 15), DateTime(2012, 1, 28)] - false - - - - Interval[@T12:01:01.000, @T21:59:59.998] properly included in Interval[@T12:00:00.000, @T21:59:59.999] - true - - - - Interval[@T12:01:01.000, @T22:00:00.000] properly included in Interval[@T12:00:00.000, @T21:59:59.999] - false - - - - - - - start of Interval[1, 10] - 1 - - - - start of Interval[1.0, 10.0] - 1.0 - - - - start of Interval[1.0 'g', 10.0 'g'] - 1.0'g' - - - - start of Interval[@2016-05-01T00:00:00.000, @2016-05-02T00:00:00.000] - @2016-05-01T00:00:00.000 - - - - start of Interval[@T00:00:00.000, @T23:59:59.599] - @T00:00:00.000 - - - - - - - Interval[null, null] starts Interval[1, 10] - null - - - - Interval[4, 10] starts Interval[4, 15] - true - - - - Interval[1, 10] starts Interval[4, 10] - false - - - - Interval[4.0, 10.0] starts Interval[4.0, 15.0] - true - - - - Interval[1.0, 10.0] starts Interval[4.0, 10.0] - false - - - - Interval[5.0 'g', 10.0 'g'] starts Interval[5.0 'g', 15.0 'g'] - true - - - - Interval[1.0 'g', 10.0 'g'] starts Interval[5.0 'g', 10.0 'g'] - false - - - - Interval[DateTime(2012, 1, 5), DateTime(2012, 1, 25)] starts Interval[DateTime(2012, 1, 5), DateTime(2012, 1, 27)] - true - - - - Interval[DateTime(2012, 1, 5), DateTime(2012, 1, 25)] starts Interval[DateTime(2012, 1, 6), DateTime(2012, 1, 27)] - false - - - - Interval[@T05:59:59.999, @T15:59:59.999] starts Interval[@T05:59:59.999, @T17:59:59.999] - true - - - - Interval[@T05:59:59.999, @T15:59:59.999] starts Interval[@T04:59:59.999, @T17:59:59.999] - false - - - - - - - Interval[null, null] union Interval[1, 10] - null - - - - Interval[1, 10] union Interval[4, 15] - Interval [ 1, 15 ] - - - - Interval[1, 10] union Interval[44, 50] - null - - - - Interval[1.0, 10.0] union Interval[4.0, 15.0] - Interval [ 1.0, 15.0 ] - - - - Interval[1.0, 10.0] union Interval[14.0, 15.0] - null - - - - Interval[1.0 'g', 10.0 'g'] union Interval[5.0 'g', 15.0 'g'] - Interval [ 1.0 'g', 15.0 'g' ] - - - - Interval[1.0 'g', 10.0 'g'] union Interval[14.0 'g', 15.0 'g'] - null - - - - Interval[DateTime(2012, 1, 5), DateTime(2012, 1, 25)] union Interval[DateTime(2012, 1, 25), DateTime(2012, 1, 28)] - Interval [ @2012-01-05T, @2012-01-28T ] - - - - Interval[DateTime(2012, 1, 5), DateTime(2012, 1, 25)] union Interval[DateTime(2012, 1, 27), DateTime(2012, 1, 28)] - null - - - - Interval[@T05:59:59.999, @T15:59:59.999] union Interval[@T10:59:59.999, @T20:59:59.999] - Interval [ @T05:59:59.999, @T20:59:59.999 ] - - - - Interval[@T05:59:59.999, @T15:59:59.999] union Interval[@T16:59:59.999, @T20:59:59.999] - null - - - - - - - width of Interval[1, 10] - 9 - - - - width of (null as Interval<Any>) - null - - - - width of Interval[4.0, 15.0] - 11.0 - - - - width of Interval[5.0 'g', 10.0 'g'] - 5.0'g' - - - - width of Interval[DateTime(2012, 1, 5), DateTime(2012, 1, 25)] - - - - width of Interval[@T05:59:59.999, @T15:59:59.999] - - - - - - - Interval[1, 10] - Interval[1, 10] - - - - Interval[11, 20] - Interval[11, 20] - - - - Interval[44, 50] - Interval[44, 50] - - - - Interval[4, 10] - Interval[4, 10] - - - - Interval[4, 15] - Interval[4, 15] - - - - Interval[1.0, 10.0] - Interval[1.0, 10.0] - - - - Interval[11.0, 20.0] - Interval[11.0, 20.0] - - - - Interval[4.0, 10.0] - Interval[4.0, 10.0] - - - - Interval[4.0, 15.0] - Interval[4.0, 15.0] - - - - Interval[14.0, 15.0] - Interval[14.0, 15.0] - - - - Interval[1.0 'g', 10.0 'g'] - Interval[1.0 'g', 10.0 'g'] - - - - Interval[11.0 'g', 20.0 'g'] - Interval[11.0 'g', 20.0 'g'] - - - - Interval[5.0 'g', 10.0 'g'] - Interval[5.0 'g', 10.0 'g'] - - - - Interval[5.0 'g', 15.0 'g'] - Interval[5.0 'g', 15.0 'g'] - - - - Interval[14.0 'g', 15.0 'g'] - Interval[14.0 'g', 15.0 'g'] - - - - Interval[@2016-05-01T00:00:00.000, @2016-05-02T00:00:00.000] - Interval[@2016-05-01T00:00:00.000, @2016-05-02T00:00:00.000] - - - - Interval[@T00:00:00.000, @T23:59:59.599] - Interval[@T00:00:00.000, @T23:59:59.599] - - - - {Interval[1, 10], Interval[11, 20], Interval[44, 50]} - {Interval[1, 10], Interval[11, 20], Interval[44, 50]} - - - - Interval[5, 3] - - - - - Interval[5, 5) - - - - diff --git a/test/spec-tests/xml/CqlListOperatorsTest.xml b/test/spec-tests/xml/CqlListOperatorsTest.xml deleted file mode 100644 index f7d63bfc7..000000000 --- a/test/spec-tests/xml/CqlListOperatorsTest.xml +++ /dev/null @@ -1,1310 +0,0 @@ - - - - - - - - ({4, 5, 1, 6, 2, 1}) sL sort asc - {1, 1, 2, 4, 5, 6} - - - - ({4, 5, 1, 6, 2, 1}) sL sort desc - {6, 5, 4, 2, 1, 1} - - - - ({'back', 'aardvark', 'alligator', 'zebra', 'iguana', 'Wolf', 'Armadillo'}) sls sort asc - {'Armadillo', 'Wolf', 'aardvark', 'alligator', 'back', 'iguana', 'zebra'} - - - - ({'back', 'aardvark', 'alligator', 'zebra', 'iguana', 'Wolf', 'Armadillo'}) sls sort desc - {'zebra', 'iguana', 'back', 'alligator', 'aardvark', 'Wolf', 'Armadillo'} - - - - ({ DateTime(2012, 10, 5, 10), DateTime(2012, 1, 1), DateTime(2012, 1, 1, 12), DateTime(2012, 10, 5) }) S sort asc - { @2012-01-01T, @2012-01-01T12, @2012-10-05T, @2012-10-05T10 } - - - - ({ DateTime(2012, 10, 5, 10), DateTime(2012, 1, 1), DateTime(2012, 1, 1, 12), DateTime(2012, 10, 5) }) S sort desc - { @2012-10-05T10, @2012-10-05T, @2012-01-01T12, @2012-01-01T } - - - - { 3, 2, 1 } - {3, 2, 1} - - - - { 3.8, 2.4, 1.9 } - {3.8, 2.4, 1.9} - - - - { 19.99 '[lb_av]', 17.33 '[lb_av]', 10.66 '[lb_av]' } - {19.99 '[lb_av]', 17.33 '[lb_av]', 10.66 '[lb_av]'} - - - - { DateTime(2016), DateTime(2015), DateTime(2010) } - {@2016T, @2015T, @2010T} - - - - { @T15:59:59.999, @T15:12:59.999, @T15:12:13.999 } - {@T15:59:59.999, @T15:12:59.999, @T15:12:13.999} - - - - - - - { 'a', 'b', null } contains null - true - - - - { null, 'b', 'c' } contains 'a' - false - - - - { 'a', 'b', 'c' } contains 'a' - true - - - - { DateTime(2012, 10, 5), DateTime(2012, 9, 5), DateTime(2012, 1, 1) } contains DateTime(2012, 1, 1) - true - - - - { DateTime(2012, 10, 5), DateTime(2012, 9, 5), DateTime(2012, 10, 1) } contains DateTime(2012, 1, 1) - false - - - - { @T15:59:59.999, @T05:59:59.999, @T20:59:59.999 } contains @T05:59:59.999 - true - - - - { @T15:59:59.999, @T05:59:59.999, @T20:59:59.999 } contains @T08:59:59.999 - false - - - - null as List<String> contains 'a' - false - - - - - - - (null).descendents() - null - - - - - - - - distinct {} - {} - - - - distinct { null, null, null} - { null } - - - - distinct { 'a', null, 'a', null} - {'a', null} - - - - distinct { 1, 1, 2, 2, 3, 3} - {1,2,3} - - - - distinct { 1, 2, 3, 1, 2, 3} - {1,2,3} - - - - distinct { 'a', 'a', 'b', 'b', 'c', 'c'} - {'a','b','c'} - - - - distinct { 'a', 'b', 'c', 'a', 'b', 'c'} - {'a','b','c'} - - - - distinct { DateTime(2012, 10, 5), DateTime(2012, 1, 1), DateTime(2012, 1, 1)} - { @2012-10-05T, @2012-01-01T } - - - - distinct { @T15:59:59.999, @T20:59:59.999 } - { @T15:59:59.999, @T20:59:59.999 } - - - - - - - {null} = {null} - true - - - - {} as List<String> = null - null - - - - null = {} as List<String> - null - - - - {} = {} - true - - - - { 'a', 'b', 'c' } = { 'a', 'b', 'c' } - true - - - - { 'a', 'b', 'c' } = { 'a', 'b' } - false - - - - { 'a', 'b', 'c' } as List<Any> ~ { 1, 2, 3 } as List<Any> - false - - - - { 1, 2, 3 } as List<Any> = { 'a', 'b', 'c' } as List<Any> - false - - - - { 1, 2, 3 } as List<Any> = { '1', '2', '3' } as List<Any> - false - - - - { 1, 2 } = { 1, 2, 3 } - false - - - - { 1, 2, 3 } = { 1, 2 } - false - - - - { 1, 2, 3 } = { 1, 2, 3 } - true - - - - {DateTime(2012, 5, 10, 0, 0, 0, 0), DateTime(2014, 12, 10, 0, 0, 0, 0)} = {DateTime(2012, 5, 10, 0, 0, 0, 0), DateTime(2014, 12, 10, 0, 0, 0, 0)} - true - - - - {DateTime(2012, 5, 10, 0, 0, 0, 0), DateTime(2014, 12, 10, 0, 0, 0, 0)} = {DateTime(2012, 1, 10, 0, 0, 0, 0), DateTime(2014, 12, 10, 0, 0, 0, 0)} - false - - - - { @T15:59:59.999, @T20:59:59.999, @T20:59:59.999 } = { @T15:59:59.999, @T20:59:59.999, @T20:59:59.999 } - true - - - - { @T15:59:59.999, @T20:59:59.999, @T20:59:59.999 } = { @T10:59:59.999, @T20:59:59.999, @T20:59:59.999 } - false - - - - - - - {} except {} - {} - - - - { 1, 2, 3, 4 } except { 2, 3 } - { 1, 4 } - - - - { 2, 3 } except { 1, 2, 3, 4 } - {} - - - - { DateTime(2012, 5, 10), DateTime(2014, 12, 10), DateTime(2010, 1, 1)} except {DateTime(2014, 12, 10), DateTime(2010, 1, 1) } - {@2012-05-10T} - - - - { @T15:59:59.999, @T20:59:59.999, @T12:59:59.999 } except { @T20:59:59.999, @T12:59:59.999 } - {@T15:59:59.999} - - - - { 1, 4 } except null - {1, 4} - - - - - - - Exists({}) - false - - - - Exists({ null }) - false - - - - Exists({ 1 }) - true - - - - Exists({ 1, 2 }) - true - - - - Exists({ DateTime(2012, 5, 10), DateTime(2014, 12, 10) }) - true - - - - Exists({ @T15:59:59.999, @T20:59:59.999 }) - true - - - - Exists(null) - false - - - - - - - Flatten({{},{}}) - {} - - - - Flatten({{null}, {null}}) - {null, null} - - - - Flatten({{1,2}, {3,4}}) - {1,2,3,4} - - - - Flatten({ {DateTime(2012, 5, 10)}, {DateTime(2014, 12, 10)} }) - { @2012-05-10T, @2014-12-10T } - - - - Flatten({ {@T15:59:59.999}, {@T20:59:59.999} }) - { @T15:59:59.999, @T20:59:59.999 } - - - - - - - First({}) - null - - - - First({ null, 1 }) - null - - - - First({ 1, null }) - 1 - - - - First({ 1, 2 }) - 1 - - - - First({ DateTime(2012, 5, 10), DateTime(2014, 12, 10) }) - @2012-05-10T - - - - First({ @T15:59:59.999, @T20:59:59.999 }) - @T15:59:59.999 - - - - - - - null in {} - false - - - - null in { 1, null } - true - - - - 1 in null as List<Integer> - false - - - - 1 in { 1, 2 } - true - - - - 3 in { 1, 2 } - false - - - - DateTime(2012, 5, 10) in { DateTime(2001, 9, 11), DateTime(2012, 5, 10), DateTime(2014, 12, 10) } - true - - - - DateTime(2012, 6, 10) in { DateTime(2001, 9, 11), DateTime(2012, 5, 10), DateTime(2014, 12, 10) } - false - - - - @T15:59:59.999 in { @T02:29:15.156, @T15:59:59.999, @T20:59:59.999 } - true - - - - @T16:59:59.999 in { @T02:29:15.156, @T15:59:59.999, @T20:59:59.999 } - false - - - - - - - {} includes {} - true - - - - {null} includes {null} - true - - - - {1, 2, 3} includes {} - true - - - - {1, 2, 3} includes {2} - true - - - - {1, 2, 3} includes {4} - false - - - - {DateTime(2001, 9, 11), DateTime(2012, 5, 10), DateTime(2014, 12, 10)} includes {DateTime(2012, 5, 10)} - true - - - - {DateTime(2001, 9, 11), DateTime(2012, 5, 10), DateTime(2014, 12, 10)} includes {DateTime(2012, 5, 11)} - false - - - - { @T02:29:15.156, @T15:59:59.999, @T20:59:59.999 } includes @T15:59:59.999 - true - - - - { @T02:29:15.156, @T15:59:59.999, @T20:59:59.999 } includes @T16:59:59.999 - false - - - - null as List<Integer> includes {2} - null - - - - {'s', 'a', 'm'} includes null as List<String> - null - - - - - - - {} included in {} - true - - - - { null } included in { null } - true - - - - {} included in { 1, 2, 3 } - true - - - - { 2 } included in { 1, 2, 3 } - true - - - - { 4 } included in { 1, 2, 3 } - false - - - - { DateTime(2012, 5, 10)} included in {DateTime(2001, 9, 11), DateTime(2012, 5, 10), DateTime(2014, 12, 10)} - true - - - - {DateTime(2012, 5, 11)} included in {DateTime(2001, 9, 11), DateTime(2012, 5, 10), DateTime(2014, 12, 10)} - false - - - - @T15:59:59.999 included in { @T02:29:15.156, @T15:59:59.999, @T20:59:59.999 } - true - - - - @T16:59:59.999 included in { @T02:29:15.156, @T15:59:59.999, @T20:59:59.999 } - false - - - - null as List<Integer> included in {2} - null - - - - {'s', 'a', 'm'} included in null as List<String> - null - - - - - - - (null as List<System.Any>)[1] - null - - - - - { 1, 2 }[0] - 1 - - - - { 1, 2 }[1] - 2 - - - - { 1, 2 }[2] - null - - - - { 1, 2 }[-1] - null - - - - { DateTime(2001, 9, 11), DateTime(2012, 5, 10), DateTime(2014, 12, 10) }[1] - @2012-05-10T - - - - { @T02:29:15.156, @T15:59:59.999, @T20:59:59.999 }[1] - @T15:59:59.999 - - - - - - - IndexOf({}, null) - null - - - - IndexOf(null, {}) - null - - - - IndexOf({ 1, null }, null) - null - - - - IndexOf({ 1, 2 }, 1) - 0 - - - - IndexOf({ 1, 2 }, 2) - 1 - - - - IndexOf({ 1, 2 }, 3) - -1 - - - - IndexOf({ DateTime(2001, 9, 11), DateTime(2012, 5, 10), DateTime(2014, 12, 10) }, DateTime(2014, 12, 10)) - 2 - - - - IndexOf({ @T02:29:15.156, @T15:59:59.999, @T20:59:59.999 }, @T15:59:59.999) - 1 - - - - - - - {} intersect {} - {} - - - - { 1, 2, 3, 4 } intersect { 2, 3 } - { 2, 3 } - - - - {2, 3} intersect { 1, 2, 3, 4 } - { 2, 3 } - - - - { DateTime(2001, 9, 11), DateTime(2012, 5, 10), DateTime(2014, 12, 10) } intersect { DateTime(2012, 5, 10), DateTime(2014, 12, 10), DateTime(2000, 5, 5) } - {@2012-05-10T, @2014-12-10T} - - - - { @T02:29:15.156, @T15:59:59.999, @T20:59:59.999 } intersect { @T01:29:15.156, @T15:59:59.999, @T20:59:59.999 } - {@T15:59:59.999, @T20:59:59.999} - - - - - - - Last({}) - null - - - - Last({null, 1}) - 1 - - - - Last({1, null}) - null - - - - Last({1, 2}) - 2 - - - - Last({DateTime(2012, 5, 10), DateTime(2014, 12, 10)}) - @2014-12-10T - - - - Last({ @T15:59:59.999, @T20:59:59.999 }) - @T20:59:59.999 - - - - - - - Length({}) - 0 - - - - Length({null, 1}) - 2 - - - - Length({1, null}) - 2 - - - - Length({1, 2}) - 2 - - - - Length({DateTime(2001, 9, 11), DateTime(2012, 5, 10), DateTime(2014, 12, 10)}) - 3 - - - - Length({ @T15:59:59.999, @T20:59:59.999, @T15:59:59.999, @T20:59:59.999, @T15:59:59.999, @T20:59:59.999 }) - 6 - - - - Length(null as List<Any>) - 0 - - - - - - - {} ~ {} - true - - - - { 'a', 'b', 'c' } ~ { 'a', 'b', 'c' } - true - - - - { 'a', 'b', 'c' } ~ { 'a', 'b' } - false - - - - { 'a', 'b', 'c' } as List<Any> ~ { 1, 2, 3 } as List<Any> - false - - - - - { 1, 2, 3 } as List<Any> ~ { 'a', 'b', 'c' } as List<Any> - false - - - - - { 1, 2, 3 } as List<Any> ~ { '1', '2', '3' } as List<Any> - false - - - - - {DateTime(2001, 9, 11), DateTime(2012, 5, 10), DateTime(2014, 12, 10), null} ~ {DateTime(2001, 9, 11), DateTime(2012, 5, 10), DateTime(2014, 12, 10), null} - true - - - - {DateTime(2001, 9, 11), DateTime(2012, 5, 10), DateTime(2014, 12, 10)} ~ {DateTime(2001, 9, 11), DateTime(2012, 5, 10), DateTime(2014, 12, 10), null} - false - - - - {DateTime(2001, 9, 11), DateTime(2012, 5, 10), DateTime(2014, 12, 10)} ~ {DateTime(2001, 9, 11), DateTime(2012, 5, 10), DateTime(2014, 12, 1)} - false - - - - { @T15:59:59.999, @T20:59:59.999 } ~ { @T15:59:59.999, @T20:59:59.999 } - true - - - - { @T15:59:59.999, @T20:59:59.999 } ~ { @T15:59:59.999, @T20:59:59.999, null } - false - - - - { @T15:59:59.999, @T20:59:59.999 } ~ { @T15:59:59.999, @T20:59:59.995 } - false - - - - - - - {} != {} - false - - - - { 'a', 'b', 'c' } != { 'a', 'b', 'c' } - false - - - - { 'a', 'b', 'c' } != { 'a', 'b' } - true - - - - { 'a', 'b', 'c' } as List<Any> != { 1, 2, 3 } as List<Any> - true - - - - - { 1, 2, 3 } as List<Any> != { 'a', 'b', 'c' } as List<Any> - true - - - - - { 1, 2, 3 } as List<Any> != { '1', '2', '3' } as List<Any> - true - - - - - {DateTime(2001, 9, 11, 0, 0, 0, 0), DateTime(2012, 5, 10, 0, 0, 0, 0), DateTime(2014, 12, 10, 0, 0, 0, 0)} != {DateTime(2001, 9, 11, 0, 0, 0, 0), DateTime(2012, 5, 10, 0, 0, 0, 0), DateTime(2014, 12, 1, 0, 0, 0, 0)} - true - - - - {DateTime(2001, 9, 11, 0, 0, 0, 0), DateTime(2012, 5, 10, 0, 0, 0, 0), DateTime(2014, 12, 10, 0, 0, 0, 0)} != {DateTime(2001, 9, 11, 0, 0, 0, 0), DateTime(2012, 5, 10, 0, 0, 0, 0), DateTime(2014, 12, 10, 0, 0, 0, 0)} - false - - - - { @T15:59:59.999, @T20:59:59.999 } = { @T15:59:59.999, @T20:59:59.999 } - true - - - - { @T15:59:59.999, @T20:59:59.999 } = { @T15:59:59.999, @T20:59:49.999 } - false - - - - - - - null as List<String> properly includes 'a' - false - - - - {} properly includes 'a' - false - - - - { 'a' } properly includes 'a' - false - - - - { null } properly includes null as String - false - - - - {'s', 'u', 'n'} properly includes null as String - false - - - - { null, null } properly includes null as String - true - - - - {'s', 'u', 'n', null} properly includes null as String - true - - - - { 'a', 'b' } properly includes 'a' - true - - - - { 'a', 'a' } properly includes 'a' - true - - - - { 'a', 'b' } properly includes 'c' - false - - - - { 'a', null } properly includes 'a' - true - - - - { 'a', 'b', null } properly includes 'a' - true - - - - { @T15:59:59, @T20:59:59.999, @T20:59:49.999 } properly includes @T15:59:59 - true - - - - { @T15:59:59.999, @T20:59:59.999, @T20:59:49.999 } properly includes @T15:59:59 - false - - - - - - - 'a' properly included in null as List<String> - false - - - - 'a' properly included in {} - false - - - - 'a' properly included in { 'a' } - false - - - - null as String properly included in { null } - false - - - - null as String properly included in {'s', 'u', 'n'} - false - - - - null as String properly included in { null, null } - true - - - - null properly included in {'s', 'u', 'n', null} - true - - - - 'a' properly included in { 'a', 'b' } - true - - - - 'a' properly included in { 'a', 'a' } - true - - - - 'c' properly included in { 'a', 'b' } - false - - - - 'a' properly included in { 'a', null } - true - - - - 'a' properly included in { 'a', 'b', null } - true - - - - @T15:59:59 properly included in { @T15:59:59, @T20:59:59.999, @T20:59:49.999 } - true - - - - @T15:59:59 properly included in { @T15:59:59.999, @T20:59:59.999, @T20:59:49.999 } - false - - - - - - - {} properly includes {} - false - - - - {null} properly includes {null} - false - - - - {1, 2, 3} properly includes {} - true - - - - {1, 2, 3} properly includes {2} - true - - - - {1, 2, 3} properly includes {4} - false - - - - {DateTime(2001, 9, 11), DateTime(2012, 5, 10), DateTime(2014, 12, 10)} properly includes {DateTime(2012, 5, 10), DateTime(2014, 12, 10)} - true - - - - {DateTime(2001, 9, 11), DateTime(2012, 5, 10), DateTime(2014, 12, 10)} properly includes {DateTime(2001, 9, 11), DateTime(2012, 5, 10), DateTime(2014, 12, 10)} - false - - - - { @T15:59:59.999, @T20:59:59.999, @T20:59:49.999 } properly includes { @T15:59:59.999, @T20:59:59.999 } - true - - - - { @T15:59:59.999, @T20:59:59.999, @T20:59:49.999 } properly includes { @T15:59:59.999, @T20:59:59.999, @T14:59:22.999 } - false - - - - null as List<Integer> properly includes {2} - null - - - - - - - {} properly included in {} - false - - - - {null} properly included in {null} - false - - - - {} properly included in {1, 2, 3} - true - - - - {2} properly included in {1, 2, 3} - true - - - - {4} properly included in {1, 2, 3} - false - - - - {DateTime(2012, 5, 10), DateTime(2014, 12, 10)} properly included in {DateTime(2001, 9, 11), DateTime(2012, 5, 10), DateTime(2014, 12, 10)} - true - - - - {DateTime(2001, 9, 11), DateTime(2012, 5, 10), DateTime(2014, 12, 10)} properly included in {DateTime(2001, 9, 11), DateTime(2012, 5, 10), DateTime(2014, 12, 10)} - false - - - - { @T15:59:59.999, @T20:59:59.999 } properly included in { @T15:59:59.999, @T20:59:59.999, @T20:59:49.999 } - true - - - - { @T15:59:59.999, @T20:59:59.999, @T14:59:22.999 } properly included in { @T15:59:59.999, @T20:59:59.999, @T20:59:49.999 } - false - - - - {'s', 'u', 'n'} properly included in null as List<String> - null - - - - - - - singleton from {} - null - - - - singleton from {null} - null - - - - singleton from { 1 } - 1 - - - - singleton from { 1, 2 } - - - - - singleton from { DateTime(2012, 5, 10) } - @2012-05-10T - - - - singleton from { @T15:59:59.999 } - @T15:59:59.999 - - - - - - - Skip(null, 3) - null - - - - Skip({1,2,3,4,5}, 2) - {3, 4, 5} - - - - Skip({1,2,3,4,5}, 3) - {4, 5} - - - - Skip({1,2,3,4,5}, 0) - {1,2,3,4,5} - - - - Skip({1,2,3,4,5}, 5) - {} - - - - - - - Slice({ 1, 2, 3, 4, 5 }) - { 1, 2, 3, 4, 5 } - - - - Slice({ }) - { } - - - - Slice(null) - null - - - - Slice({ 1, 2, 3, 4, 5 }, 1) - { 2, 3, 4, 5 } - - - - Slice({ 1, 2, 3, 4, 5 }, null) - { 1, 2, 3, 4, 5 } - - - - Slice({ 1, 2, 3, 4, 5 }, 1, 3) - { 2, 3 } - - - - Slice({ 1, 2, 3, 4, 5 }, 1, null) - { 2, 3, 4, 5 } - - - - Slice({ 1, 2, 3, 4, 5 }, -2) - { 4, 5 } - - - - Slice({ 1, 2, 3, 4, 5 }, 1, -1) - { 2, 3, 4 } - - - - Slice({ 1, 2, 3, 4, 5 }, 5) - { } - - - - - - - Tail(null) - null - - - - Tail({1,2,3,4}) - {2,3,4} - - - - Tail({1,2,3,4,5}) - {2,3,4,5} - - - - Tail({}) - {} - - - - Tail({1}) - {} - - - - - - - Take(null, 3) - null - - - - Take({1,2,3}, null as Integer) - {} - - - - Take({1,2,3}, 0) - {} - - - - Take({1,2,3,4}, 2) - {1, 2} - - - - Take({1,2,3,4}, 3) - {1, 2, 3} - - - - Take({1,2,3,4}, 4) - {1, 2, 3, 4} - - - - - - - {} union {} - {} - - - - { null } union { null } - {null} - - - - { 1, 2, 3 } union {} - {1, 2, 3} - - - - { 1, 2, 3 } union { 2 } - {1, 2, 3} - - - - { 1, 2, 3 } union { 4 } - {1, 2, 3, 4} - - - - { DateTime(2001, 9, 11)} union {DateTime(2012, 5, 10), DateTime(2014, 12, 10) } - {@2001-09-11T, @2012-05-10T, @2014-12-10T} - - - - { @T15:59:59.999, @T20:59:59.999, @T12:59:59.999 } union { @T10:59:59.999 } - {@T15:59:59.999, @T20:59:59.999, @T12:59:59.999, @T10:59:59.999} - - - diff --git a/test/spec-tests/xml/CqlLogicalOperatorsTest.xml b/test/spec-tests/xml/CqlLogicalOperatorsTest.xml deleted file mode 100644 index 5b7137121..000000000 --- a/test/spec-tests/xml/CqlLogicalOperatorsTest.xml +++ /dev/null @@ -1,216 +0,0 @@ - - - - - - - - true and true - true - - - - true and false - false - - - - true and null - null - - - - false and true - false - - - - false and false - false - - - - false and null - false - - - - null and true - null - - - - null and false - false - - - - null and null - null - - - - - - - - true implies true - true - - - - true implies false - false - - - - true implies null - null - - - - false implies true - true - - - - false implies false - true - - - - false implies null - true - - - - null implies true - true - - - - null implies false - null - - - - null implies null - null - - - - - - - not true - false - - - - not false - true - - - - not null - null - - - - - - - true or true - true - - - - true or false - true - - - - true or null - true - - - - false or true - true - - - - false or false - false - - - - false or null - null - - - - null or true - true - - - - null or false - null - - - - null or null - null - - - - - - - true xor true - false - - - - true xor false - true - - - - true xor null - null - - - - false xor true - true - - - - false xor false - false - - - - false xor null - null - - - - null xor true - null - - - - null xor false - null - - - - null xor null - null - - - diff --git a/test/spec-tests/xml/CqlNullologicalOperatorsTest.xml b/test/spec-tests/xml/CqlNullologicalOperatorsTest.xml deleted file mode 100644 index d3b89bc69..000000000 --- a/test/spec-tests/xml/CqlNullologicalOperatorsTest.xml +++ /dev/null @@ -1,127 +0,0 @@ - - - - - - - - Coalesce('a', null) - 'a' - - - - Coalesce(null, 'a') - 'a' - - - - Coalesce({}) - null - - - - Coalesce({'a', null, null}) - 'a' - - - - Coalesce({null, null, 'a'}) - 'a' - - - - Coalesce({'a'},null, null) - {'a'} - - - - Coalesce(null, null, {'a'}) - {'a'} - - - - Coalesce(null, null, DateTime(2012, 5, 18)) - @2012-05-18T - - - - Coalesce({ null, null, DateTime(2012, 5, 18) }) - @2012-05-18T - - - - Coalesce(null, null, @T05:15:33.556) - @T05:15:33.556 - - - - Coalesce({ null, null, @T05:15:33.556 }) - @T05:15:33.556 - - - - - - - IsNull(null) - true - - - - IsNull('') - false - - - - IsNull('abc') - false - - - - IsNull(1) - false - - - - IsNull(0) - false - - - - - - - IsFalse(false) - true - - - - IsFalse(true) - false - - - - IsFalse(null) - false - - - - - - - IsTrue(true) - true - - - - IsTrue(false) - false - - - - IsTrue(null) - false - - - diff --git a/test/spec-tests/xml/CqlOverloadMatching.xml b/test/spec-tests/xml/CqlOverloadMatching.xml deleted file mode 100644 index 13df5ef8c..000000000 --- a/test/spec-tests/xml/CqlOverloadMatching.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - library SimpleOverloadMatching version '1.0.0' - - define function A(foo Decimal): 'DecimalOverload' - define function A(foo Integer): 'IntegerOverload' - - define output: A(1.0) - - 'DecimalOverload' - - - diff --git a/test/spec-tests/xml/CqlQueryTests.xml b/test/spec-tests/xml/CqlQueryTests.xml deleted file mode 100644 index c7ce16750..000000000 --- a/test/spec-tests/xml/CqlQueryTests.xml +++ /dev/null @@ -1,74 +0,0 @@ - - - - - - - - (4) l - 4 - - - - (4) l return 'Hello World' - 'Hello World' - - - - from ({2, 3}) A, ({5, 6}) B - {{ A: 2, B: 5 }, { A: 2, B: 6 }, { A: 3, B: 5 }, { A: 3, B: 6 }} - - - - - - - ({1, 2, 3}) l sort desc - {3, 2, 1} - - - - ({1, 3, 2}) l sort ascending - {1, 2, 3} - - - - ({@2013-01-02T00:00:00.000Z, @2014-01-02T00:00:00.000Z, @2015-01-02T00:00:00.000Z}) l sort desc - {@2015-01-02T00:00:00.000Z, @2014-01-02T00:00:00.000Z, @2013-01-02T00:00:00.000Z} - - - - ({@2013-01-02T00:00:00.000Z, @2015-01-02T00:00:00.000Z, @2014-01-02T00:00:00.000Z}) l sort ascending - {@2013-01-02T00:00:00.000Z, @2014-01-02T00:00:00.000Z, @2015-01-02T00:00:00.000Z} - - - - - - - ({1, 2, 3, 3, 4}) L aggregate A starting 1: A * L - 72 - - - - ({1, 2, 3, 3, 4}) L aggregate all A starting 1: A * L - 72 - - - - ({1, 2, 3, 3, 4}) L aggregate distinct A starting 1: A * L - 24 - - - - ({1, 2, 3}) L aggregate A : A * L - null - - - - from ({1, 2, 3}) B, (4) C aggregate A : A + B + C - null - - - diff --git a/test/spec-tests/xml/CqlStringOperatorsTest.xml b/test/spec-tests/xml/CqlStringOperatorsTest.xml deleted file mode 100644 index e1836aaa8..000000000 --- a/test/spec-tests/xml/CqlStringOperatorsTest.xml +++ /dev/null @@ -1,468 +0,0 @@ - - - - - - - - Combine(null) - null - - - - Combine({}) - null - - - - Combine({'a', 'b', 'c'}) - 'abc' - - - - Combine({'a', 'b', 'c'}, '-') - 'a-b-c' - - - - - - - Concatenate(null, null) - null - - - - Concatenate('a', null) - null - - - - Concatenate(null, 'b') - null - - - - Concatenate('a', 'b') - 'ab' - - - - 'a' + 'b' - 'ab' - - - - - - - EndsWith(null, null) - null - - - - EndsWith('Chris Schuler is the man!!', 'n!!') - true - - - - EndsWith('Chris Schuler is the man!!', 'n!') - false - - - - - - - Indexer(null as String, null) - null - - - - - Indexer('a', null) - null - - - - Indexer(null as String, 1) - null - - - - - Indexer('ab', 0) - 'a' - - - - Indexer('ab', 1) - 'b' - - - - Indexer('ab', 2) - null - - - - Indexer('ab', -1) - null - - - - - - - LastPositionOf(null, null) - null - - - - LastPositionOf(null, 'hi') - null - - - - LastPositionOf('hi', null) - null - - - - LastPositionOf('hi', 'Ohio is the place to be!') - 1 - - - - LastPositionOf('hi', 'Say hi to Ohio!') - 11 - - - - - - - Length(null as String) - null - - - - - Length('') - 0 - - - - Length('a') - 1 - - - - Length('ab') - 2 - - - - - - - Lower(null) - null - - - - Lower('') - '' - - - - Lower('A') - 'a' - - - - Lower('b') - 'b' - - - - Lower('Ab') - 'ab' - - - - - - - Matches('Not all who wander are lost', null) - null - - - - Matches('Not all who wander are lost', '.*\\d+') - false - - - - Matches('Not all who wander are lost - circa 2017', '.*\\d+') - true - - - - Matches('Not all who wander are lost', '.*') - true - - - - Matches('Not all who wander are lost', '[\\w|\\s]+') - true - - - - Matches('Not all who wander are lost - circa 2017', '^[\\w\\s]+$') - false - - - - Matches(' ', '\\W+') - true - - - - Matches(' \n\t', '\\s+') - true - - - - - - - PositionOf(null, null) - null - - - - PositionOf('a', null) - null - - - - PositionOf(null, 'a') - null - - - - PositionOf('a', 'ab') - 0 - - - - PositionOf('b', 'ab') - 1 - - - - PositionOf('c', 'ab') - -1 - - - - - - - ReplaceMatches('Not all who wander are lost', null, 'But I am...') - null - - - - ReplaceMatches('Not all who wander are lost', 'Not all who wander are lost', 'But still waters run deep') - 'But still waters run deep' - - - - ReplaceMatches('Who put the bop in the bop she bop she bop?', 'bop', 'bang') - 'Who put the bang in the bang she bang she bang?' - - - - ReplaceMatches('All that glitters is not gold', '\\s', '\\$') - 'All$that$glitters$is$not$gold' - - - - - - - Split(null, null) - null - - - - Split(null, ',') - null - - - - Split('a,b', null) - {'a,b'} - - - - Split('a,b', '-') - {'a,b'} - - - - Split('a,b', ',') - {'a','b'} - - - - - - - StartsWith(null, null) - null - - - - StartsWith('hi', null) - null - - - - StartsWith(null, 'hi') - null - - - - StartsWith('Breathe deep the gathering gloom', 'Bre') - true - - - - StartsWith('Breathe deep the gathering gloom', 'bre') - false - - - - - - - Substring(null, null) - null - - - - Substring('a', null) - null - - - - Substring(null, 1) - null - - - - Substring('ab', 0) - 'ab' - - - - Substring('ab', 1) - 'b' - - - - Substring('ab', 2) - null - - - - Substring('ab', -1) - null - - - - Substring('', 0) - '' - - - - Substring('ab', 0, 1) - 'a' - - - - Substring('abc', 1, 1) - 'b' - - - - Substring('ab', 0, 3) - 'ab' - - - - - - - Upper(null) - null - - - - Upper('') - '' - - - - Upper('a') - 'A' - - - - Upper('B') - 'B' - - - - Upper('aB') - 'AB' - - - - - - - ToString(125 'cm') - '125 \'cm\'' - - - - ToString(DateTime(2000, 1, 1)) - '2000-01-01' - - - - ToString(DateTime(2000, 1, 1, 15, 25, 25, 300)) - '2000-01-01T15:25:25.300' - - - - ToString(DateTime(2000, 1, 1, 8, 25, 25, 300, -7)) - '2000-01-01T08:25:25.300-07:00' - - - - ToString(@T09:30:01.003) - '09:30:01.003' - - - - - - - - diff --git a/test/spec-tests/xml/CqlTypeOperatorsTest.xml b/test/spec-tests/xml/CqlTypeOperatorsTest.xml deleted file mode 100644 index 64bff2354..000000000 --- a/test/spec-tests/xml/CqlTypeOperatorsTest.xml +++ /dev/null @@ -1,218 +0,0 @@ - - - - - - - - 45.5 'g' as Quantity - 45.5 'g' - - - - cast 45.5 'g' as Quantity - 45.5 'g' - - - - DateTime(2014, 01, 01) as DateTime - @2014-01-01T - - - - - - - convert 5 to Decimal - 5.0 - - - - convert 5 to String - '5' - - - - convert 'foo' to Integer - null - - - - convert '2014-01-01' to DateTime - @2014-01-01T - - - - convert 'T14:30:00.0' to Time - @T14:30:00.000 - - - - convert '2014/01/01' to DateTime - null - - - - - - - 5 is Integer - true - - - - '5' is Integer - false - - - - System.ValueSet{id: '123'} is Vocabulary - true - This should return true because ValueSet is derived from Vocabulary. - - - - - - - ToBoolean('NO') - false - - - - - - - ToConcept(Code { code: '8480-6' }) - - Concept { - codes: Code { code: '8480-6' } - } - - - - - - - - ToDateTime('2014-01-01') - @2014-01-01T - - - - ToDateTime('2014-01-01T12:05') - @2014-01-01T12:05 - - - - ToDateTime('2014-01-01T12:05:05.955') - @2014-01-01T12:05:05.955 - - - - ToDateTime('2014-01-01T12:05:05.955+01:30') - @2014-01-01T12:05:05.955+01:30 - - - - ToDateTime('2014-01-01T12:05:05.955-01:15') - @2014-01-01T12:05:05.955-01:15 - - - - ToDateTime('2014-01-01T12:05:05.955Z') - @2014-01-01T12:05:05.955+00:00 - - - - ToDateTime('2014/01/01T12:05:05.955Z') - null - - - - ToDateTime(@2014-01-01) - @2014-01-01T - - - - hour from ToDateTime(@2014-01-01) is null - true - - - - - - - ToDecimal('+25.5') - 25.5 - - - - - - - ToInteger('-25') - -25 - - - - - - - ToQuantity('5.5 \'cm\'') - 5.5'cm' - - - - - - - ToString(-5) - '-5' - - - - ToString(18.55) - '18.55' - - - - ToString(5.5 'cm') - '5.5 \'cm\'' - - - - ToString(true) - 'true' - - - - - - - ToTime('T14:30:00.0') - @T14:30:00.000 - - - - ToTime('T14:30:00.0+05:30') - @T14:30:00.000 - - - - ToTime('T14:30:00.0-05:45') - @T14:30:00.000 - - - - ToTime('T14:30:00.0Z') - @T14:30:00.000 - - - - ToTime('T14-30-00.0') - null - - - diff --git a/test/spec-tests/xml/CqlTypesTest.xml b/test/spec-tests/xml/CqlTypesTest.xml deleted file mode 100644 index 53df4b8f1..000000000 --- a/test/spec-tests/xml/CqlTypesTest.xml +++ /dev/null @@ -1,228 +0,0 @@ - - - - - - - - - 5.0 'g' - 5.0'g' - - - - DateTime(2012, 4, 4) - @2012-04-04T - - - - @T09:00:00.000 - @T09:00:00.000 - - - - Interval[2, 7] - Interval[2, 7] - - - - {1, 2, 3} - {1, 2, 3} - - - - Tuple { id: 5, name: 'Chris'} - Tuple { id: 5, name: 'Chris'} - - - - Tuple { id: 5, name: 'Chris'}.name - 'Chris' - - - - - - - - - - - DateTime(null) - null - - - - DateTime(10000, 12, 31, 23, 59, 59, 999) - - - - - DateTime(0000, 1, 1, 0, 0, 0, 0) - - - - - DateTime(2016, 7, 7, 6, 25, 33, 910) - @2016-07-07T06:25:33.910 - - - - DateTime(2015, 2, 10) - @2015-02-10T - - - - days between DateTime(2015, 2, 10) and DateTime(2015, 3) - Interval [ 18, 49 ] - - - - - DateTime(0001, 1, 1, 0, 0, 0, 0) - @0001-01-01T00:00:00.000 - - - - DateTime(9999, 12, 31, 23, 59, 59, 999) - @9999-12-31T23:59:59.999 - - - - hour from @2015-02-10T is null - true - - - - - - - - - - - - - - - - - - 150.2 '[lb_av]' - 150.2 '[lb_av]' - - - - 2.5589 '{eskimo_kisses}' - 2.5589 '{eskimo_kisses}' - - - - 5.999999999 'g' - 5.999999999 'g' - - - - - - - '\'I start with a single quote and end with a double quote\"' - '\u0027I start with a single quote and end with a double quote\u0022' - - - - '\u0048\u0069' - 'Hi' - - - - - - - @T24:59:59.999 - - - - - @T23:60:59.999 - - - - - @T23:59:60.999 - - - - - @T23:59:59.10000 - @T23:59:59.100 - - - - - @T10:25:12.863 - @T10:25:12.863 - - - - @T23:59:59.999 - @T23:59:59.999 - - - - @T00:00:00.000 - @T00:00:00.000 - - - diff --git a/test/spec-tests/xml/ValueLiteralsAndSelectors.xml b/test/spec-tests/xml/ValueLiteralsAndSelectors.xml deleted file mode 100644 index 8317b89d4..000000000 --- a/test/spec-tests/xml/ValueLiteralsAndSelectors.xml +++ /dev/null @@ -1,433 +0,0 @@ - - - - - - - - - null - null - - - - - - - - - false - false - - - - true - true - - - - - - - - - 0 - 0 - - - - +0 - 0 - - - - -0 - 0 - - - - 1 - 1 - - - - +1 - 1 - - - - -1 - -1 - - - - 2 - 2 - - - - +2 - 2 - - - - -2 - -2 - - - - Power(10,9) - 1000000000 - - - - +Power(10,9) - 1000000000 - - - - -Power(10,9) - -1000000000 - - - - Power(2,30)-1+Power(2,30) - 2147483647 - - - - +Power(2,30)-1+Power(2,30) - 2147483647 - - - - -Power(2,30)+1-Power(2,30) - -2147483647 - - - - 2147483648 - - - - - - +2147483648 - - - - - - -Power(2,30)-Power(2,30) - -2147483648 - - - - - 2147483649 - - - - - - +2147483649 - - - - - - -2147483649 - - - - - - - - - - - 0.0 - 0.0 - - - - +0.0 - 0.0 - - - - -0.0 - 0.0 - - - - 1.0 - 1.0 - - - - +1.0 - 1.0 - - - - -1.0 - -1.0 - - - - 2.0 - 2.0 - - - - +2.0 - 2.0 - - - - -2.0 - -2.0 - - - - Power(10.0,9.0) - 1000000000.0 - - - - +Power(10.0,9.0) - 1000000000.0 - - - - -Power(10.0,9.0) - -1000000000.0 - - - - Power(2.0,30.0)-1+Power(2.0,30.0) - 2147483647.0 - - - - +Power(2.0,30.0)-1+Power(2.0,30.0) - 2147483647.0 - - - - -Power(2.0,30.0)+1.0-Power(2.0,30.0) - -2147483647.0 - - - - Power(2.0,30.0)+Power(2.0,30.0) - 2147483648.0 - - - - +Power(2.0,30.0)+Power(2.0,30.0) - 2147483648.0 - - - - -Power(2.0,30.0)-Power(2.0,30.0) - -2147483648.0 - - - - Power(2.0,30.0)+1.0+Power(2.0,30.0) - 2147483649.0 - - - - +Power(2.0,30.0)+1.0+Power(2.0,30.0) - 2147483649.0 - - - - -Power(2.0,30.0)-1.0-Power(2.0,30.0) - -2147483649.0 - - - - 0.00000000 - 0.00000000 - - - - +0.00000000 - 0.00000000 - - - - -0.00000000 - 0.00000000 - - - - Power(10,-8) - 0.00000001 - - - - +Power(10,-8) - 0.00000001 - - - - -Power(10,-8) - -0.00000001 - - - - 2.0*Power(10,-8) - 0.00000002 - - - - +2.0*Power(10,-8) - 0.00000002 - - - - -2.0*Power(10,-8) - -0.00000002 - - - - Power(10,-7) - 0.0000001 - - - - +Power(10,-7) - 0.0000001 - - - - -Power(10,-7) - -0.0000001 - - - - 0.000000001 - - - - - - +0.000000001 - - - - - - -0.000000001 - - - - - - 10*1000000000000000000000000000.00000000-0.00000001 - 9999999999999999999999999999.99999999 - - - - +10*1000000000000000000000000000.00000000-0.00000001 - 9999999999999999999999999999.99999999 - - - - -10*1000000000000000000000000000.00000000+0.00000001 - -9999999999999999999999999999.99999999 - - - - 10000000000000000000000000000.00000000 - - - - - - +10000000000000000000000000000.00000000 - - - - - - -10000000000000000000000000000.00000000 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/test/spec-tests/xml/testSchema.xsd b/test/spec-tests/xml/testSchema.xsd deleted file mode 100644 index d138dc6f3..000000000 --- a/test/spec-tests/xml/testSchema.xsd +++ /dev/null @@ -1,156 +0,0 @@ - - - - - - - The Tests type provides a container for test suites made up of groups of tests. - - - - - Notes about the test suite. - - - - - - - The name of the test suite. This should be a computer-friendly name. - - - - - A description of the test suite. - - - - - A reference to the specification under test. - - - - - - - - Notes about the test group. - - - - - - - The name of the test group. This should be a computer-friendly name and must be unique within the test suite. - - - - - A description of the test group. - - - - - A reference to area of the specification under that the tests in this group cover. - - - - - - - - The expression to be tested. - - - - - The expected output of the test. - - - - - Notes about the test. These notes should be included with the test output if the test fails. - - - - - - The name of the test suite. This should be a computer-friendly name. - - - - - A description of the test suite. - - - - - A reference to the specification under test. - - - - - If present, the name of an input file containing input data for the test. - - - - - True if this test represents a predicate. - - - - - - - - - Indicates whether the expression is expected to evaluate successfully, produce a runtime error, or produce a semantic error. - - - - - - - - - - - The type of the expected output. - - - - - - - - - - - - - - - - - - - - - - - Indicates the test is expected to evaluate successfully. - - - - - Indicates the test is expected to produce a semantic error. - - - - - Indicates the test is expected to produce a runtime error. - - - - - diff --git a/test/tsconfig.json b/test/tsconfig.json index c24c202c1..b90104d12 100644 --- a/test/tsconfig.json +++ b/test/tsconfig.json @@ -4,9 +4,10 @@ "./", "../src" ], + "exclude": ["spec-tests/cql-tests-runner", "**/node_modules"], "compilerOptions": { "strictNullChecks": false, "rootDir": "../", "types": ["node", "mocha"] } -} \ No newline at end of file +} From fd484c50b50991735409cd601b4925769b390b6a Mon Sep 17 00:00:00 2001 From: Dylan Hall Date: Tue, 6 Oct 2026 09:05:08 -0400 Subject: [PATCH 4/9] add process.exit after error messages --- test/spec-tests/generate-cql.js | 1 + 1 file changed, 1 insertion(+) diff --git a/test/spec-tests/generate-cql.js b/test/spec-tests/generate-cql.js index dc957e532..08bdfd23a 100644 --- a/test/spec-tests/generate-cql.js +++ b/test/spec-tests/generate-cql.js @@ -35,6 +35,7 @@ if (!fs.existsSync(inputDir)) { console.error( 'Have you loaded the submodules by running `git submodule update --init --recursive` ?' ); + process.exit(1); } fs.readdirSync(inputDir).forEach(file => { From 553be84a4b14cbc1227827c8b5cff0f9786cce81 Mon Sep 17 00:00:00 2001 From: Dylan Hall Date: Wed, 7 Oct 2026 11:38:38 -0400 Subject: [PATCH 5/9] Add new script create-runner-skip-list.js to update cql-tests-runner config file based on skip-list and new runner overrides file --- .gitignore | 1 + package.json | 1 + test/spec-tests/README.md | 4 +- test/spec-tests/create-runner-skip-list.js | 263 +++++++++++++++++++++ test/spec-tests/runner-skip-overrides.txt | 69 ++++++ test/spec-tests/skip-list.txt | 44 ++-- 6 files changed, 359 insertions(+), 23 deletions(-) create mode 100644 test/spec-tests/create-runner-skip-list.js create mode 100644 test/spec-tests/runner-skip-overrides.txt diff --git a/.gitignore b/.gitignore index 1b2192b03..e2faee2b0 100644 --- a/.gitignore +++ b/.gitignore @@ -10,3 +10,4 @@ node_modules coverage *.original.coffee yarn-error.log +/cql-execution-local.json \ No newline at end of file diff --git a/package.json b/package.json index c608d6116..c7984fc5b 100644 --- a/package.json +++ b/package.json @@ -110,6 +110,7 @@ "build:all": "npm run build && npm run build:test-data && npm run build:spec-test-data", "watch:test-data": "cd \"./test/generator\" && \"./gradlew\" watchTestData && cd ..", "check-skip-list": "node \"test/spec-tests/check-skip-list.js\"", + "create-runner-skip-list": "node \"test/spec-tests/create-runner-skip-list.js\"", "test": "cross-env TSX_TSCONFIG_PATH=\"./test/tsconfig.json\" mocha --reporter spec --recursive", "test:nyc": "cross-env TSX_TSCONFIG_PATH=\"./test/tsconfig.json\" nyc --reporter=html npx mocha --reporter spec --recursive", "test:watch": "cross-env TSX_TSCONFIG_PATH=\"./test/tsconfig.json\" mocha --reporter spec --recursive --watch", diff --git a/test/spec-tests/README.md b/test/spec-tests/README.md index 3dd232c15..03a3e8d14 100644 --- a/test/spec-tests/README.md +++ b/test/spec-tests/README.md @@ -1,6 +1,6 @@ # CQL Tests -These tests are copied from the [cqframework/cql-tests](https://github.com/cqframework/cql-tests) GitHub repository. See that repository for details regarding the tests and test format. +These tests are retrieved from the [cqframework/cql-tests](https://github.com/cqframework/cql-tests) GitHub repository via a nested submodule. See that repository for details regarding the tests and test format. # Skipping Tests @@ -13,7 +13,7 @@ PathTo.Skipped.Test2 Reason for skipping test # Implementation -For the purposes of testing `cql-execution`, we process the XML tests in the `xml` folder and generate corresponding CQL libraries in the `cql` folder. These libraries use Tuples to organize the tests as well as to represent the input and expected output in CQL. For example: +For the purposes of testing `cql-execution`, we process the XML tests in the `test/spec-tests/cql-tests-runner/cql-tests/tests/cql` folder and generate corresponding CQL libraries in the `test/spec-tests/cql` folder. These libraries use Tuples to organize the tests as well as to represent the input and expected output in CQL. For example: ``` library CqlAggregateFunctionsTest version '1.4.0' diff --git a/test/spec-tests/create-runner-skip-list.js b/test/spec-tests/create-runner-skip-list.js new file mode 100644 index 000000000..e9dd713f0 --- /dev/null +++ b/test/spec-tests/create-runner-skip-list.js @@ -0,0 +1,263 @@ +/* oxlint-disable no-console */ +const fs = require('fs'); +const path = require('path'); +const convert = require('xml-js'); + +// First read the skiplist and build a map of skipped tests +const skippedTestMap = new Map(); +const unskippedTestMap = new Map(); +const skipListText = fs.readFileSync(path.join(__dirname, 'skip-list.txt'), 'utf-8'); +const runnerSkipOverrides = fs.readFileSync( + path.join(__dirname, 'runner-skip-overrides.txt'), + 'utf-8' +); +const processedSkips = new Set(); +const invalidSkipListLines = new Set(); +const invalidOverridesLines = new Set(); + +let exitError = false; // if a non-fatal error occurs, report it and set this flag, but let processing continue + +// There are 3 categories of skips to consider: +// 1. Skip both in unit tests and cql-tests-runner. These are defined in skip-list.txt and not in runner-skip-overrides.txt. No special action needed. +// 2. Skip only in tests-runner, not in unit tests. These are present in runner-skip-overrides.txt but no special action needed: just treat them like they were in skip-list.txt. +// 3. Skip only in unit tests, not in tests-runner. These either need to be identified by category name, or in the overrides "unskip"/"exclude" category. + +// The categories from the original skip-list file that we always ignore here +const CATEGORIES_TO_IGNORE = [ + 'Incorrect answer', + 'Numeric Type Mismatch', // the runner compares all numeric results as JS number, so the type distinction is irrelevant there + 'Unimplemented', + 'Unimplemented (New in CQL 1.5)', + 'Unimplemented (New in CQL 2.0)' +]; + +// The names of groups from the overrides file that we have to cross-reference to the skip-list and "un-skip". +const CATEGORIES_TO_UNSKIP = [ + 'Exclude (Tests/groups from skip-list.txt that the tests-runner should execute)' +]; + +// Helper function to process the common format of skip-list.txt and runner-skip-overrides.txt +const processFile = (fileText, invalidLinesSet) => { + let currentCategory; + fileText.split(/[\r\n]+/).forEach(line => { + // Ignore blank lines + if (!line.trim()) { + return; + } + + // Assume any line starting with # is a category header. Lines should only be commented out for debugging elsewhere + if (line.startsWith('#')) { + currentCategory = line.substring(1).trim(); + return; + } + + if (CATEGORIES_TO_IGNORE.includes(currentCategory)) { + // Skip processing this line + return; + } + + // Pull out the test/group and the reason + const match = line.match(/^([A-Za-z0-9.]+|"[A-Za-z0-9.\s]+")\s+(.+)\s*$/); + if (!match) { + invalidLinesSet.add(line); + return; + } + const testName = match[1].replace(/(^")|("$)/g, ''); + const reason = match[2]; + + if (CATEGORIES_TO_UNSKIP.includes(currentCategory)) { + unskippedTestMap.set(testName, { hit: false }); // reason not important for unskips, but use a boolean to track whether it's used + } else { + skippedTestMap.set(testName, reason); + } + }); +}; + +processFile(skipListText, invalidSkipListLines); +processFile(runnerSkipOverrides, invalidOverridesLines); + +for (const testName of skippedTestMap.keys()) { + const testNameParts = testName.split('.'); + + switch (testNameParts.length) { + case 3: + if (unskippedTestMap.has(testName)) { + skippedTestMap.delete(testName); + unskippedTestMap.get(testName).hit = true; + } + // intentionally fall through + case 2: + const testGroup = testNameParts[0] + '.' + testNameParts[1]; + if (unskippedTestMap.has(testGroup)) { + skippedTestMap.delete(testName); + unskippedTestMap.get(testGroup).hit = true; + } + // intentionally fall through + case 1: + const testFile = testNameParts[0]; + if (unskippedTestMap.has(testFile)) { + skippedTestMap.delete(testName); + unskippedTestMap.get(testFile).hit = true; + } + } +} + +for (const [testName, hitTracker] of unskippedTestMap) { + if (!hitTracker.hit) { + console.error( + `${testName} was marked to be unskipped, but no matching lines were found in skip-list` + ); + exitError = true; + } +} + +// Now, the skippedTestMap contains only items we actually want to skip. +// Do a pass through the actual tests to make sure the referenced tests exist, and expand test suite and group references to specific tests. + +const inputDir = path.join(__dirname, 'cql-tests-runner/cql-tests/tests/cql'); + +if (!fs.existsSync(inputDir)) { + console.error('ERROR: cql-tests under the cql-tests-runner submodule not found!'); + console.error( + 'Have you loaded the submodules by running `git submodule update --init --recursive` ?' + ); + process.exit(1); +} + +// keep track of keys in skippedTestMap that refer to suites or groups, not individual tests, so we can remove them later +const testKeysToRemove = new Set(); + +fs.readdirSync(inputDir).forEach(file => { + if (!file.endsWith('.xml')) { + return; + } + + // Read the XML file + const xmlFile = path.join(inputDir, file); + let xmlJS; + try { + const xml = fs.readFileSync(xmlFile, 'utf-8'); + xmlJS = convert.xml2js(xml, { compact: true, trim: true }); + } catch (err) { + console.error(`ERROR: Could not parse ${xmlFile}:\n ${err.message}`); + return; + } + + // Make sure it at least has a name and one or more groups + if ( + xmlJS.tests == null || + xmlJS.tests._attributes == null || + xmlJS.tests._attributes.name == null || + xmlJS.tests.group == null + ) { + console.error(`ERROR: ${xmlFile} missing tests, tests[name], or tests.group`); + return; + } + + // Fix up arrays since xml2js won't create an array if there is only one item + if (!Array.isArray(xmlJS.tests.group)) { + xmlJS.tests.group = xmlJS.tests.group ? [xmlJS.tests.group] : []; + } + xmlJS.tests.group.forEach(group => { + if (!Array.isArray(group.test)) { + group.test = group.test ? [group.test] : []; + } + }); + + const suiteName = xmlJS.tests._attributes.name; + xmlJS.tests.group.forEach((group, i) => { + // Some groups have all their tests commented out. In that case, don't generate the group at all. + if (group.test == null || group.test.length === 0) { + return; + } + + const groupName = (group._attributes && group._attributes.name) || `Group${i + 1}`; + const fullGroupName = `${suiteName}.${groupName}`; + group.test.forEach((test, i) => { + const testName = (test._attributes && test._attributes.name) || `Test${i + 1}`; + const fullTestName = `${suiteName}.${groupName}.${testName}`; + if (skippedTestMap.has(suiteName)) { + processedSkips.add(suiteName); + + // the runner only skips at the test level, so add this test to the map + skippedTestMap.set(fullTestName, skippedTestMap.get(suiteName)); + processedSkips.add(fullTestName); + + testKeysToRemove.add(suiteName); // and mark this key to be removed later + } else if (skippedTestMap.has(fullGroupName)) { + processedSkips.add(fullGroupName); + + // the runner only skips at the test level, so add this test to the map + skippedTestMap.set(fullTestName, skippedTestMap.get(fullGroupName)); + processedSkips.add(fullTestName); + + testKeysToRemove.add(suiteName); // and mark this key to be removed later + } else if (skippedTestMap.has(fullTestName)) { + processedSkips.add(fullTestName); + } + }); + }); +}); + +// now remove the test suite and test group keys found above +for (const key of testKeysToRemove) { + skippedTestMap.delete(key); +} + +// Now load the previous config file and update the SkipList +const PREVIOUS_CONFIG_PATH = path.join(__dirname, 'cql-tests-runner/conf/cql-execution-local.json'); +const config = JSON.parse(fs.readFileSync(PREVIOUS_CONFIG_PATH, 'utf8')); + +if (!config.Tests) { + console.error('Previous runner configuration must contain Tests field'); + process.exit(1); +} + +config.Tests.SkipList = []; + +for (const [testName, reason] of skippedTestMap) { + const testNameParts = testName.split('.'); + // should always be 3 parts at this point, due to cleanup above + + const skipObj = { + testsName: testNameParts[0], + groupName: testNameParts[1], + testName: testNameParts[2], + reason: reason + }; + + config.Tests.SkipList.push(skipObj); +} + +// Write output to repo top-level +const outputPath = path.join(__dirname, '../../cql-execution-local.json'); +fs.writeFileSync(outputPath, JSON.stringify(config, null, '\t')); +console.log( + `Generated new cql-test-runner config file at ${outputPath}. ${skippedTestMap.size} tests skipped` +); + +// Final cleanup +if (invalidSkipListLines.size > 0) { + console.error(); + console.error('Invalid lines in skip-list.txt:'); + invalidSkipListLines.forEach(l => console.error(`> ${l}`)); + exitError = true; +} +if (invalidOverridesLines.size > 0) { + console.error(); + console.error('Invalid lines in runner-skip-overrides.txt:'); + invalidOverridesLines.forEach(l => console.error(`> ${l}`)); + exitError = true; +} + +processedSkips.forEach(s => skippedTestMap.delete(s)); +if (skippedTestMap.size > 0) { + console.error(); + console.error('Unmatched tests in skip-list.txt or runner-skip-overrides.txt:'); + Array.from(skippedTestMap.keys()).forEach(k => console.error(`> ${k}`)); + exitError = true; +} + +if (exitError) { + process.exit(1); +} diff --git a/test/spec-tests/runner-skip-overrides.txt b/test/spec-tests/runner-skip-overrides.txt new file mode 100644 index 000000000..e40b2d8da --- /dev/null +++ b/test/spec-tests/runner-skip-overrides.txt @@ -0,0 +1,69 @@ +# Include (Additional tests skipped by the tests-runner but not in our unit tests) +CqlArithmeticFunctionsTest.Exp.Exp1000 Invalid Test: Overflows and Underflows should result in null: https://github.com/cqframework/cql-tests/pull/120 +CqlArithmeticFunctionsTest.Exp.Exp1000D Invalid Test: Overflows and Underflows should result in null: https://github.com/cqframework/cql-tests/pull/120 +CqlArithmeticFunctionsTest.Ln.Ln0 Invalid Test: Overflows and Underflows should result in null: https://github.com/cqframework/cql-tests/pull/120 +CqlArithmeticFunctionsTest.Ln.LnNeg0 Invalid Test: Overflows and Underflows should result in null: https://github.com/cqframework/cql-tests/pull/120 +CqlArithmeticFunctionsTest.Predecessor.PredecessorUnderflowDt Invalid Test: Overflows and Underflows should result in null: https://github.com/cqframework/cql-tests/pull/120 +CqlArithmeticFunctionsTest.Predecessor.PredecessorUnderflowT Invalid Test: Overflows and Underflows should result in null: https://github.com/cqframework/cql-tests/pull/120 +CqlArithmeticFunctionsTest.Successor.SuccessorOverflowDt Invalid Test: Overflows and Underflows should result in null: https://github.com/cqframework/cql-tests/pull/120 +CqlArithmeticFunctionsTest.Successor.SuccessorOverflowT Invalid Test: Overflows and Underflows should result in null: https://github.com/cqframework/cql-tests/pull/120 +CqlDateTimeOperatorsTest.Add.DateTimeAddInvalidYears Invalid Test: Overflows and Underflows should result in null: https://github.com/cqframework/cql-tests/pull/120 +CqlDateTimeOperatorsTest.Subtract.DateTimeSubtractInvalidYears Invalid Test: Overflows and Underflows should result in null: https://github.com/cqframework/cql-tests/pull/120 +ValueLiteralsAndSelectors.Integer.IntegerNeg2Pow31ToInf1 Invalid Test: Overflows and Underflows should result in null: https://github.com/cqframework/cql-tests/pull/120 + +CqlArithmeticFunctionsTest.MinValue.DateTimeMinValue Test Runner Not Detecting Equal DateTimes (+00:00 vs Z): https://github.com/cqframework/cql-tests-runner/issues/83 +CqlArithmeticFunctionsTest.MaxValue.DateTimeMaxValue Test Runner Not Detecting Equal DateTimes (+00:00 vs Z): https://github.com/cqframework/cql-tests-runner/issues/83 +CqlQueryTest.Sort.DateTimeAscending Test Runner Not Detecting Equal DateTimes (+00:00 vs Z): https://github.com/cqframework/cql-tests-runner/issues/83 +CqlQueryTest.Sort.DateTimeDescending Test Runner Not Detecting Equal DateTimes (+00:00 vs Z): https://github.com/cqframework/cql-tests-runner/issues/83 + +CqlDateTimeOperatorsTest.Add.DateTimeAdd5Hours Test Runner Not Detecting Equal DateTimes (Offset vs No Offset): https://github.com/cqframework/cql-tests-runner/issues/84 +CqlDateTimeOperatorsTest.Add.DateTimeAdd5HoursWithLeftMinPrecisionSecond Test Runner Not Detecting Equal DateTimes (Offset vs No Offset): https://github.com/cqframework/cql-tests-runner/issues/84 +CqlDateTimeOperatorsTest.Add.DateTimeAdd5Milliseconds Test Runner Not Detecting Equal DateTimes (Offset vs No Offset): https://github.com/cqframework/cql-tests-runner/issues/84 +CqlDateTimeOperatorsTest.Add.DateTimeAdd5Minutes Test Runner Not Detecting Equal DateTimes (Offset vs No Offset): https://github.com/cqframework/cql-tests-runner/issues/84 +CqlDateTimeOperatorsTest.Add.DateTimeAdd5Seconds Test Runner Not Detecting Equal DateTimes (Offset vs No Offset): https://github.com/cqframework/cql-tests-runner/issues/84 +CqlDateTimeOperatorsTest.Add.DateTimeAddHoursOverflow Test Runner Not Detecting Equal DateTimes (Offset vs No Offset): https://github.com/cqframework/cql-tests-runner/issues/84 +CqlDateTimeOperatorsTest.Add.DateTimeAddMillisecondsOverflow Test Runner Not Detecting Equal DateTimes (Offset vs No Offset): https://github.com/cqframework/cql-tests-runner/issues/84 +CqlDateTimeOperatorsTest.Add.DateTimeAddMinutesOverflow Test Runner Not Detecting Equal DateTimes (Offset vs No Offset): https://github.com/cqframework/cql-tests-runner/issues/84 +CqlDateTimeOperatorsTest.Add.DateTimeAddSecondsOverflow Test Runner Not Detecting Equal DateTimes (Offset vs No Offset): https://github.com/cqframework/cql-tests-runner/issues/84 +CqlDateTimeOperatorsTest.DateTime.DateTimeHour Test Runner Not Detecting Equal DateTimes (Offset vs No Offset): https://github.com/cqframework/cql-tests-runner/issues/84 +CqlDateTimeOperatorsTest.DateTime.DateTimeMillisecond Test Runner Not Detecting Equal DateTimes (Offset vs No Offset): https://github.com/cqframework/cql-tests-runner/issues/84 +CqlDateTimeOperatorsTest.DateTime.DateTimeMinute Test Runner Not Detecting Equal DateTimes (Offset vs No Offset): https://github.com/cqframework/cql-tests-runner/issues/84 +CqlDateTimeOperatorsTest.DateTime.DateTimeSecond Test Runner Not Detecting Equal DateTimes (Offset vs No Offset): https://github.com/cqframework/cql-tests-runner/issues/84 +CqlDateTimeOperatorsTest.Subtract.DateTimeSubtract15HourPrecisionSecond Test Runner Not Detecting Equal DateTimes (Offset vs No Offset): https://github.com/cqframework/cql-tests-runner/issues/84 +CqlDateTimeOperatorsTest.Subtract.DateTimeSubtract5Hours Test Runner Not Detecting Equal DateTimes (Offset vs No Offset): https://github.com/cqframework/cql-tests-runner/issues/84 +CqlDateTimeOperatorsTest.Subtract.DateTimeSubtract5Milliseconds Test Runner Not Detecting Equal DateTimes (Offset vs No Offset): https://github.com/cqframework/cql-tests-runner/issues/84 +CqlDateTimeOperatorsTest.Subtract.DateTimeSubtract5Minutes Test Runner Not Detecting Equal DateTimes (Offset vs No Offset): https://github.com/cqframework/cql-tests-runner/issues/84 +CqlDateTimeOperatorsTest.Subtract.DateTimeSubtract5Seconds Test Runner Not Detecting Equal DateTimes (Offset vs No Offset): https://github.com/cqframework/cql-tests-runner/issues/84 +CqlDateTimeOperatorsTest.Subtract.DateTimeSubtractHoursUnderflow Test Runner Not Detecting Equal DateTimes (Offset vs No Offset): https://github.com/cqframework/cql-tests-runner/issues/84 +CqlDateTimeOperatorsTest.Subtract.DateTimeSubtractMillisecondsUnderflow Test Runner Not Detecting Equal DateTimes (Offset vs No Offset): https://github.com/cqframework/cql-tests-runner/issues/84 +CqlDateTimeOperatorsTest.Subtract.DateTimeSubtractMinutesUnderflow Test Runner Not Detecting Equal DateTimes (Offset vs No Offset): https://github.com/cqframework/cql-tests-runner/issues/84 +CqlDateTimeOperatorsTest.Subtract.DateTimeSubtractSecondsUnderflow Test Runner Not Detecting Equal DateTimes (Offset vs No Offset): https://github.com/cqframework/cql-tests-runner/issues/84 +"CqlDateTimeOperatorsTest.Uncertainty tests.DateTime1" Test Runner Not Detecting Equal DateTimes (Offset vs No Offset): https://github.com/cqframework/cql-tests-runner/issues/84 +"CqlDateTimeOperatorsTest.Uncertainty tests.DateTime2" Test Runner Not Detecting Equal DateTimes (Offset vs No Offset): https://github.com/cqframework/cql-tests-runner/issues/84 +CqlIntervalOperatorsTest.End.DateTimeIntervalEnd Test Runner Not Detecting Equal DateTimes (Offset vs No Offset): https://github.com/cqframework/cql-tests-runner/issues/84 +CqlIntervalOperatorsTest.In.TestPeriod1 Test Runner Not Detecting Equal DateTimes (Offset vs No Offset): https://github.com/cqframework/cql-tests-runner/issues/84 +CqlIntervalOperatorsTest.In.TestPeriod2 Test Runner Not Detecting Equal DateTimes (Offset vs No Offset): https://github.com/cqframework/cql-tests-runner/issues/84 +CqlIntervalOperatorsTest.Interval.DateTimeIntervalTest Test Runner Not Detecting Equal DateTimes (Offset vs No Offset): https://github.com/cqframework/cql-tests-runner/issues/84 +CqlIntervalOperatorsTest.Start.DateTimeIntervalStart Test Runner Not Detecting Equal DateTimes (Offset vs No Offset): https://github.com/cqframework/cql-tests-runner/issues/84 +CqlListOperatorsTest.Sort.SortDatesAsc Test Runner Not Detecting Equal DateTimes (Offset vs No Offset): https://github.com/cqframework/cql-tests-runner/issues/84 +CqlListOperatorsTest.Sort.SortDatesDesc Test Runner Not Detecting Equal DateTimes (Offset vs No Offset): https://github.com/cqframework/cql-tests-runner/issues/84 +CqlTypesTest.DateTime.DateTimeMax Test Runner Not Detecting Equal DateTimes (Offset vs No Offset): https://github.com/cqframework/cql-tests-runner/issues/84 +CqlTypesTest.DateTime.DateTimeMin Test Runner Not Detecting Equal DateTimes (Offset vs No Offset): https://github.com/cqframework/cql-tests-runner/issues/84 +CqlTypesTest.DateTime.DateTimeProper Test Runner Not Detecting Equal DateTimes (Offset vs No Offset): https://github.com/cqframework/cql-tests-runner/issues/84 + +CqlIntervalOperatorsTest.Except.ExceptTime2 Test Runner Not Detecting Equal Intervals (Open vs Closed Boundaries): https://github.com/cqframework/cql-tests-runner/issues/85 +CqlIntervalOperatorsTest.Except.ExceptTimeInterval Test Runner Not Detecting Equal Intervals (Open vs Closed Boundaries): https://github.com/cqframework/cql-tests-runner/issues/85 + +CqlIntervalOperatorsTest.Expand.ExpandPerHour Test Runner Not Detecting Equal Lists on Interval