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/.gitmodules b/.gitmodules
new file mode 100644
index 000000000..b05c77480
--- /dev/null
+++ b/.gitmodules
@@ -0,0 +1,3 @@
+[submodule "test/spec-tests/cql-tests-runner"]
+ path = cql-tests-runner
+ url = https://github.com/cqframework/cql-tests-runner
diff --git a/.mocharc.json b/.mocharc.json
index 5340a4ff4..bdf5a1980 100644
--- a/.mocharc.json
+++ b/.mocharc.json
@@ -1,5 +1,6 @@
{
- "ignore": ["test/spec-tests/*.js"],
+ "ignore": ["test/spec-tests/*.js", "cql-tests-runner/**"],
+ "watch-ignore": ["cql-tests-runner"],
"extension": ["ts"],
"require": ["tsx/cjs", "./test/should-extensions.ts"]
}
diff --git a/.npmignore b/.npmignore
index b31fee955..e7d3c40bf 100644
--- a/.npmignore
+++ b/.npmignore
@@ -5,5 +5,6 @@
/lib-test
/test
/test-server
+/cql-tests-runner
/CQL_Execution_Features.xlsx
/examples
diff --git a/.oxlintrc.json b/.oxlintrc.json
index 7742f07ce..35ffb039f 100644
--- a/.oxlintrc.json
+++ b/.oxlintrc.json
@@ -10,7 +10,8 @@
"**/lib",
"**/lib-test",
"**/dist",
- "test-server/**"
+ "test-server/**",
+ "cql-tests-runner/**"
],
"rules": {
"no-loss-of-precision": "off",
diff --git a/.prettierignore b/.prettierignore
index 823ca7344..d19f507ef 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
+cql-tests-runner
# the following are generated by the test generator
test/elm/*/data.js
test/elm/external/Included.js
diff --git a/README.md b/README.md
index 0df86f48a..ea6980cf5 100644
--- a/README.md
+++ b/README.md
@@ -56,7 +56,12 @@ The above is a partial list covering the most significant limitations. For more
To use this project, you should perform the following steps:
1. Install [Node.js](http://nodejs.org/) LTS*
-2. Execute the following from the root directory: `npm install`
+2. Execute the following from the root directory:
+```sh
+git submodule update --init --recursive
+npm install
+```
+
* This project is primarily developed and tested using Node 24.x, but all versions >= 20.x are expected to work. Since Node 18.x reached end-of-life over a year ago, this project no longer supports it.
diff --git a/cql-tests-runner b/cql-tests-runner
new file mode 160000
index 000000000..3698c3433
--- /dev/null
+++ b/cql-tests-runner
@@ -0,0 +1 @@
+Subproject commit 3698c3433bfd228d9a8966e71bef6b33dd0a75b4
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/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-server/README.md b/test-server/README.md
index fbde97c99..85cd9d666 100644
--- a/test-server/README.md
+++ b/test-server/README.md
@@ -104,7 +104,7 @@ curl -X POST http://localhost:8000/fhir/\$cql \
This server is designed to be a `$cql` target for the [cql-tests-runner](https://github.com/cqframework/cql-tests-runner). To execute the test-runner against this server:
-1. Download or clone the `cql-tests-runner` repository.
+1. Initialize the `cql-tests-runner` submodule at the root of this repository with `git submodule update --init --recursive`.
2. Start this test-server (see above), e.g. at `http://localhost:8000`.
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/README.md b/test/spec-tests/README.md
index 3dd232c15..8a640f5b5 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 `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/check-skip-list.js b/test/spec-tests/check-skip-list.js
index ac8c7e85f..2f35ed230 100644
--- a/test/spec-tests/check-skip-list.js
+++ b/test/spec-tests/check-skip-list.js
@@ -8,7 +8,10 @@ const fs = require('fs/promises');
const path = require('path');
const { spawn } = require('child_process');
-const SKIP_LIST_PATH = path.join(process.cwd(), 'test', 'spec-tests', 'skip-list.txt');
+const SKIP_LIST_PATHS = [
+ path.join(process.cwd(), 'test', 'spec-tests', 'common-skip-list.txt'),
+ path.join(process.cwd(), 'test', 'spec-tests', 'unit-tests-skip-list.txt')
+];
function run(cmd, args, opts = {}) {
return new Promise(resolve => {
@@ -52,7 +55,7 @@ function firstToken(line) {
async function main() {
// Ensure the script is run from the project root
try {
- await fs.stat(SKIP_LIST_PATH);
+ await fs.stat(SKIP_LIST_PATHS[0]);
} catch {
console.error(
'The check-skip-list script must be run from the project root directory. Use "npm run check-skip-list".'
@@ -60,15 +63,11 @@ async function main() {
process.exit(1);
}
- console.log('NOTE: This script incrementally modifies the file: test/spec-tests/skip-list.txt.');
+ console.log('NOTE: This script incrementally modifies *-skip-list.txt files in test/spec-tests/');
console.log(
- 'If you abort the script before it is completed, check that file to ensure it is correct.\n'
+ 'If you abort the script before it is completed, check those files to ensure they are correct.\n'
);
- const originalText = await fs.readFile(SKIP_LIST_PATH, 'utf8');
- const nl = originalText.includes('\r\n') ? '\r\n' : '\n';
- const lines = originalText.split(/\r?\n/);
-
// Baseline: ensure tests pass before any changes
console.log('Running baseline tests...');
const base = await runTests();
@@ -77,6 +76,16 @@ async function main() {
process.exit(1);
}
console.log('Baseline tests passed.');
+ for (const skipListPath of SKIP_LIST_PATHS) {
+ console.log(`Checking file ${skipListPath}`);
+ await processFile(skipListPath);
+ }
+}
+
+async function processFile(skipListFile) {
+ const originalText = await fs.readFile(skipListFile, 'utf8');
+ const nl = originalText.includes('\r\n') ? '\r\n' : '\n';
+ const lines = originalText.split(/\r?\n/);
let totalCandidateTests = 0;
let totalCandidateSuites = 0;
@@ -98,7 +107,7 @@ async function main() {
}
}
console.log(
- `\nOriginal skip-list.txt file skips ${totalCandidateSuites} test suites and ${totalCandidateTests} test cases.`
+ `\nOriginal file skips ${totalCandidateSuites} test suites and ${totalCandidateTests} test cases.`
);
// Iterate through skip-list entries
@@ -116,7 +125,7 @@ async function main() {
// Comment out current line
lines[i] = commented;
- await fs.writeFile(SKIP_LIST_PATH, lines.join(nl), 'utf8');
+ await fs.writeFile(skipListFile, lines.join(nl), 'utf8');
// Rebuild then tests
console.log(
@@ -128,7 +137,7 @@ async function main() {
console.error('Build failed after commenting out a line. Restoring and continuing.');
console.error(e.detail || e.message);
lines[i] = originalLine;
- await fs.writeFile(SKIP_LIST_PATH, lines.join(nl), 'utf8');
+ await fs.writeFile(skipListFile, lines.join(nl), 'utf8');
i++; // move to next line
continue;
}
@@ -138,14 +147,14 @@ async function main() {
// Test run failed -> this entry still needs to be skipped; restore line
console.log(`- Still failing. Keeping skip.`);
lines[i] = originalLine;
- await fs.writeFile(SKIP_LIST_PATH, lines.join(nl), 'utf8');
+ await fs.writeFile(skipListFile, lines.join(nl), 'utf8');
kept++;
i++; // move to next line
} else {
// Test run passed -> remove this line permanently
console.log(`- Now passing. Removing skip.`);
lines.splice(i, 1);
- await fs.writeFile(SKIP_LIST_PATH, lines.join(nl), 'utf8');
+ await fs.writeFile(skipListFile, lines.join(nl), 'utf8');
removed++;
// do not increment i; next line shifts into this index
}
@@ -174,7 +183,6 @@ async function main() {
console.log(`- Total candidate entries checked: ${processed}`);
console.log(`- Removed (now passing): ${removed}`);
console.log(`- Kept (still failing): ${kept}`);
- process.exit(0);
}
main().catch(err => {
diff --git a/test/spec-tests/common-skip-list.txt b/test/spec-tests/common-skip-list.txt
new file mode 100644
index 000000000..da1cec683
--- /dev/null
+++ b/test/spec-tests/common-skip-list.txt
@@ -0,0 +1,44 @@
+## This file should contain skips related to an issue in the test itself, not related to our execution of the test.
+# However, tests that still pass on the cql-test-runner despire those issues should be skipped in unit-tests-skip-list.
+# For instance, mismatched numeric types, since the cql-test-runner compares all numeric results as js number.
+
+# Invalid CQL (does not translate)
+
+# Invalid Translation (translates, but translates wrong)
+CqlAggregateTest.AggregateTests.RolledOutIntervals Invalid Test: Incorrectly casts starting expression to List>: https://github.com/cqframework/cql-tests/pull/146 (merged, remove this skip once cql-tests-runner points to that commit or newer)
+CqlIntervalOperatorsTest.Overlaps.TestMaxIntervalOverlapsTrue To get the desired result, the translator needs to cast the Interval[null, null] operand as Interval. https://github.com/cqframework/clinical_quality_language/issues/1856
+CqlIntervalOperatorsTest.OverlapsBefore.TestMaxIntervalOverlapsBeforeTrue To get the desired result, the translator needs to cast the Interval[null, null] operand as Interval. https://github.com/cqframework/clinical_quality_language/issues/1856
+CqlIntervalOperatorsTest.OverlapsAfter.TestMaxIntervalOverlapsAfterTrue To get the desired result, the translator needs to cast the Interval[null, null] operand as Interval. https://github.com/cqframework/clinical_quality_language/issues/1856
+CqlIntervalOperatorsTest.Starts.TestMaxIntervalStartsFalse To get the desired result, the translator needs to cast the Interval[null, null] operand as Interval. https://github.com/cqframework/clinical_quality_language/issues/1856
+CqlIntervalOperatorsTest.Union.TestUnionMaxInterval To get the desired result, the translator needs to cast the Interval[null, null] operand as Interval. https://github.com/cqframework/clinical_quality_language/issues/1856
+
+# Incorrect Expected Output
+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
+CqlIntervalOperatorsTest.ProperIn.TimeProperInFalse Wrong output: According to spec, a contained point is properly in as long as the interval is not a unit interval
+CqlIntervalOperatorsTest.Expand.ExpandPer0D1 Wrong output: Clarification still needed but provided answer is incorrect. See https://jira.hl7.org/browse/FHIR-58705
+CqlIntervalOperatorsTest.Expand.ExpandPer0D1IntervalOverload Wrong output: Clarification still needed but provided answer is incorrect. See https://jira.hl7.org/browse/FHIR-58705
+CqlIntervalOperatorsTest.Except.DecimalIntervalExcept1to3 Wrong output: The expected value is a closed form of the correct open-endpoint Interval[1.0, 4.0) . Converting to closed-form produces different results for CQL 2.0.0+ due to Decimal precision-awareness. See https://jira.hl7.org/browse/FHIR-59229
+CqlIntervalOperatorsTest.Except.QuantityIntervalExcept1to4 Wrong output: The expected value is a closed form of the correct open-endpoint Interval[1.0 'g', 5.0 'g'). Converting to closed-form produces different results for CQL 2.0.0+ due to Decimal precision-awareness. See https://jira.hl7.org/browse/FHIR-59229
+CqlIntervalOperatorsTest.Intersect.TestIntersectNull Wrong output: Expected is Interval[5, null) but this example is in the spec, where the result "ends at some value between 5 and 10" meaning an uncertainty.
+"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.
+
+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
+"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.
+CqlComparisonOperatorsTest.Equal.TupleEqDifferentNamesWithOneNullId Wrong output: Tuple equality with a known-unequal element should return false
+"CqlComparisonOperatorsTest.Not Equal.TupleNotEqDifferingNamesWithOneNullId" Wrong output: Tuple inequality with a known-unequal element should return true
+CqlStringOperatorsTest.Substring.SubstringEmptyAnd0 Wrong output: Substring(x, x.length) should be null'. Note similar test SubstringAB2. See https://github.com/cqframework/cql-tests/issues/149
+CqlArithmeticFunctionsTest.HighBoundary.HighBoundaryDecimal Wrong output: HighBoundary(Decimal) was clarified in 2.0. HighBoundary(1.587, 8) should be 1.58750000, not 1.58799999
+CqlArithmeticFunctionsTest.HighBoundary.HighBoundaryNullPrecision Wrong output: HighBoundary(Decimal) was clarified in 2.0. HighBoundary(1.58888, null) should be 1.58888500, not 1.58888999
+CqlArithmeticFunctionsTest.LowBoundary.LowBoundaryDecimal Wrong output: LowBoundary(Decimal) was clarified in 2.0. LowBoundary(1.587, 8) should be 1.58650000, not 1.58700000
+CqlArithmeticFunctionsTest.LowBoundary.LowBoundaryNullPrecision Wrong output: LowBoundary(Decimal) was clarified in 2.0. LowBoundary(1.58888, null) should be 1.58887500, not 1.58888000
+
+# Potentially Incorrect Expected Output
+"CqlStringOperatorsTest.toString tests.DateTimeToString2" Answer does not include timezone offset, but default offset depends on test environment
+
+
+# Legacy Behavior (Test targets an earlier version of CQL)
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..2e9632ba6
--- /dev/null
+++ b/test/spec-tests/create-runner-skip-list.js
@@ -0,0 +1,183 @@
+/* oxlint-disable no-console */
+const fs = require('fs');
+const path = require('path');
+const convert = require('xml-js');
+
+let exitError = false; // if a non-fatal error occurs, report it and set this flag, but let processing continue
+
+// First read the skiplist and build a map of skipped tests
+const skipListFiles = ['common-skip-list.txt', 'runner-skip-list.txt'];
+const skippedTestMap = new Map();
+const processedSkips = new Set();
+const invalidLines = new Set();
+
+const parseTestNameAndReason = line => {
+ // Ignore lines that are blank or commented out via #
+ if (/(^\s*#)|(^\s*$)/.test(line)) {
+ return;
+ }
+ // Pull out the thing being skipped and the reason for skipping
+ const match = line.match(/^([A-Za-z0-9.]+|"[A-Za-z0-9.\s]+")\s+(.+)\s*$/);
+ if (!match) {
+ invalidLines.add(line);
+ return;
+ }
+ const testName = match[1].replace(/(^")|("$)/g, '');
+ const reason = match[2];
+ if (skippedTestMap.has(testName)) {
+ console.error(`Duplicate skipped test: ${testName}`);
+ exitError = true;
+ }
+ skippedTestMap.set(testName, reason);
+};
+
+for (const skipListFile of skipListFiles) {
+ const skipListText = fs.readFileSync(path.join(__dirname, skipListFile), 'utf-8');
+ skipListText.split(/[\r\n]+/).forEach(parseTestNameAndReason);
+}
+
+// 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 (invalidLines.size > 0) {
+ console.error();
+ console.error('Invalid skip-list lines:');
+ invalidLines.forEach(l => console.error(`> ${l}`));
+ exitError = true;
+}
+
+processedSkips.forEach(s => skippedTestMap.delete(s));
+if (skippedTestMap.size > 0) {
+ console.error();
+ console.error('Unmatched skip-list tests:');
+ Array.from(skippedTestMap.keys()).forEach(k => console.error(`> ${k}`));
+ exitError = true;
+}
+
+if (exitError) {
+ process.exit(1);
+}
diff --git a/test/spec-tests/generate-cql.js b/test/spec-tests/generate-cql.js
index e6e03956a..f758df3b8 100644
--- a/test/spec-tests/generate-cql.js
+++ b/test/spec-tests/generate-cql.js
@@ -3,12 +3,20 @@ const fs = require('fs');
const path = require('path');
const convert = require('xml-js');
+const cqlSpecVersion = fs.readFileSync(
+ path.join(__dirname, '../../specification.version'),
+ 'utf-8'
+);
+
+let exitError = false; // if a non-fatal error occurs, report it and set this flag, but let processing continue
+
// First read the skiplist and build a map of skipped tests
+const skipListFiles = ['common-skip-list.txt', 'unit-tests-skip-list.txt'];
const skippedTestMap = new Map();
-const skipListText = fs.readFileSync(path.join(__dirname, 'skip-list.txt'), 'utf-8');
const processedSkips = new Set();
const invalidLines = new Set();
-skipListText.split(/[\r\n]+/).forEach(line => {
+
+const parseTestNameAndReason = line => {
// Ignore lines that are blank or commented out via #
if (/(^\s*#)|(^\s*$)/.test(line)) {
return;
@@ -19,16 +27,38 @@ skipListText.split(/[\r\n]+/).forEach(line => {
invalidLines.add(line);
return;
}
- skippedTestMap.set(match[1].replace(/(^")|("$)/g, ''), match[2]);
-});
+ const testName = match[1].replace(/(^")|("$)/g, '');
+ const reason = match[2];
+ if (skippedTestMap.has(testName)) {
+ console.error(`Duplicate skipped test: ${testName}`);
+ exitError = true;
+ }
+ skippedTestMap.set(testName, reason);
+};
+
+for (const skipListFile of skipListFiles) {
+ const skipListText = fs.readFileSync(path.join(__dirname, skipListFile), 'utf-8');
+ skipListText.split(/[\r\n]+/).forEach(parseTestNameAndReason);
+}
-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` ?'
+ );
+ process.exit(1);
+}
+
+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');
@@ -85,6 +115,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 +137,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) {
@@ -117,20 +154,26 @@ 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);
});
if (invalidLines.size > 0) {
console.error();
- console.error('Invalid lines in skip-list.txt:');
+ console.error('Invalid skip-list lines:');
invalidLines.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:');
+ console.error('Unmatched skip-list tests:');
Array.from(skippedTestMap.keys()).forEach(k => console.error(`> ${k}`));
+ exitError = true;
+}
+
+if (exitError) {
+ process.exit(1);
}
diff --git a/test/spec-tests/runner-skip-list.txt b/test/spec-tests/runner-skip-list.txt
new file mode 100644
index 000000000..051d7183c
--- /dev/null
+++ b/test/spec-tests/runner-skip-list.txt
@@ -0,0 +1,66 @@
+## This file should include tests that are skipped only in the cql-tests-runner, due to limitations in the cql-test-runner itself.
+
+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: https://github.com/cqframework/cql-tests-runner/issues/94
+CqlIntervalOperatorsTest.Expand.ExpandPerHourOpen Test Runner Not Detecting Equal Lists on Interval: https://github.com/cqframework/cql-tests-runner/issues/94
+
+CqlIntervalOperatorsTest.Expand.ExpandPerHourIntervalOverload Test Runner does not honor the time-precision extension on dateTime, time and Period boundaries: https://github.com/cqframework/cql-tests-runner/pull/135
+CqlIntervalOperatorsTest.Expand.ExpandPerHourOpenIntervalOverload Test Runner does not honor the time-precision extension on dateTime, time and Period boundaries: https://github.com/cqframework/cql-tests-runner/pull/135
+
+ValueLiteralsAndSelectors.Decimal.DecimalTenthStep Invalid Test: CQL allows systems to support more than 8 digits precision: https://github.com/cqframework/cql-tests/issues/153
+ValueLiteralsAndSelectors.Decimal.DecimalPosTenthStep Invalid Test: CQL allows systems to support more than 8 digits precision: https://github.com/cqframework/cql-tests/issues/153
+ValueLiteralsAndSelectors.Decimal.DecimalNegTenthStep Invalid Test: CQL allows systems to support more than 8 digits precision: https://github.com/cqframework/cql-tests/issues/153
diff --git a/test/spec-tests/skip-list.txt b/test/spec-tests/skip-list.txt
deleted file mode 100644
index c6fcfa927..000000000
--- a/test/spec-tests/skip-list.txt
+++ /dev/null
@@ -1,104 +0,0 @@
-# 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
-
-# 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.
-
-# 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
-CqlIntervalOperatorsTest.ProperIn.TimeProperInFalse Wrong output: According to spec, a contained point is properly in as long as the interval is not a unit interval
-CqlIntervalOperatorsTest.Expand.ExpandPer0D1 Wrong output: Clarification still needed but provided answer is incorrect. See https://jira.hl7.org/browse/FHIR-58705
-CqlIntervalOperatorsTest.Expand.ExpandPer0D1IntervalOverload Wrong output: Clarification still needed but provided answer is incorrect. See https://jira.hl7.org/browse/FHIR-58705
-CqlIntervalOperatorsTest.Except.DecimalIntervalExcept1to3 # Wrong output: The expected value is a closed form of the correct open-endpoint Interval[1.0, 4.0) . Converting to closed-form produces different results for CQL 2.0.0+ due to Decimal precision-awareness. See https://jira.hl7.org/browse/FHIR-59229
-CqlIntervalOperatorsTest.Except.QuantityIntervalExcept1to4 # Wrong output: The expected value is a closed form of the correct open-endpoint Interval[1.0 'g', 5.0 'g'). Converting to closed-form produces different results for CQL 2.0.0+ due to Decimal precision-awareness. See https://jira.hl7.org/browse/FHIR-59229
-CqlIntervalOperatorsTest.Intersect.TestIntersectNull Wrong output: Expected is Interval[5, null) but this example is in the spec, where the result "ends at some value between 5 and 10" meaning an uncertainty.
-"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.
-
-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
-CqlArithmeticFunctionsTest.Power.PowerNeg2To2 Wrong output: As of CQL 2.0, Power always returns Decimal
-CqlArithmeticFunctionsTest.Power.Power2LTo2L Wrong output: As of CQL 2.0, Power always returns Decimal
-CqlArithmeticFunctionsTest.Power.Power2To4 Wrong output: As of CQL 2.0, Power always returns Decimal
-CqlArithmeticFunctionsTest.Power.Power2LTo3L Wrong output: As of CQL 2.0, Power always returns Decimal
-ValueLiteralsAndSelectors.Integer.Integer10Pow9 Wrong output: As of CQL 2.0, Power always returns Decimal
-ValueLiteralsAndSelectors.Integer.IntegerPos10Pow9 Wrong output: As of CQL 2.0, Power always returns Decimal
-ValueLiteralsAndSelectors.Integer.IntegerNeg10Pow9 Wrong output: As of CQL 2.0, Power always returns Decimal
-ValueLiteralsAndSelectors.Integer.Integer2Pow31ToZero1IntegerMaxValue Wrong output: As of CQL 2.0, Power always returns Decimal
-ValueLiteralsAndSelectors.Integer.IntegerPos2Pow31ToZero1IntegerMaxValue Wrong output: As of CQL 2.0, Power always returns Decimal
-ValueLiteralsAndSelectors.Integer.IntegerNeg2Pow31ToZero1 Wrong output: As of CQL 2.0, Power always returns Decimal
-ValueLiteralsAndSelectors.Integer.IntegerNeg2Pow31IntegerMinValue Wrong output: As of CQL 2.0, Power always returns Decimal
-CqlComparisonOperatorsTest.Equal.TupleEqDifferentNamesWithOneNullId Wrong output: Tuple equality with a known-unequal element should return false
-"CqlComparisonOperatorsTest.Not Equal.TupleNotEqDifferingNamesWithOneNullId" Wrong output: Tuple inequality with a known-unequal element should return true
-CqlStringOperatorsTest.Substring.SubstringEmptyAnd0 Wrong output: Substring(x, x.length) should be null'. Note similar test SubstringAB2. See https://github.com/cqframework/cql-tests/issues/149
-"CqlDateTimeOperatorsTest.Uncertainty tests.TimeDurationBetweenHourDiffPrecision2" Wrong output: Comparing an imprecise time with a more precise time results in uncertainty
-CqlArithmeticFunctionsTest.HighBoundary.HighBoundaryDecimal Wrong output: HighBoundary(Decimal) was clarified in 2.0. HighBoundary(1.587, 8) should be 1.58750000, not 1.58799999
-CqlArithmeticFunctionsTest.HighBoundary.HighBoundaryNullPrecision Wrong output: HighBoundary(Decimal) was clarified in 2.0. HighBoundary(1.58888, null) should be 1.58888500, not 1.58888999
-CqlArithmeticFunctionsTest.LowBoundary.LowBoundaryDecimal Wrong output: LowBoundary(Decimal) was clarified in 2.0. LowBoundary(1.587, 8) should be 1.58650000, not 1.58700000
-CqlArithmeticFunctionsTest.LowBoundary.LowBoundaryNullPrecision Wrong output: LowBoundary(Decimal) was clarified in 2.0. LowBoundary(1.58888, null) should be 1.58887500, not 1.58888000
-
-# Potentially Incorrect Expected Output
-"CqlStringOperatorsTest.toString tests.DateTimeToString2" Answer does not include timezone offset, but default offset depends on test environment
-
-# 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
-"CqlComparisonOperatorsTest.Unit Comparison.TestQuantityMonthsNotEqualMo" Wrong answer: Quantity =/~ should have special semantics for calendar-based units
-"CqlComparisonOperatorsTest.Unit Comparison.TestQuantityMonthsEquivalentMo" Wrong answer: Quantity =/~ should have special semantics for calendar-based units
-"CqlComparisonOperatorsTest.Unit Comparison.TestQuantityYearEqualA" Wrong answer: Quantity =/~ should have special semantics for calendar-based units
-"CqlComparisonOperatorsTest.Unit Comparison.TestQuantityYearNotEqualA" Wrong answer: Quantity =/~ should have special semantics for calendar-based units
-"CqlComparisonOperatorsTest.Unit Comparison.TestQuantityYearEquivalentA" Wrong answer: Quantity =/~ should have special semantics for calendar-based units
-"CqlComparisonOperatorsTest.Unit Comparison.TestQuantityYearsNotEqualA" Wrong answer: Quantity =/~ should have special semantics for calendar-based units
-"CqlComparisonOperatorsTest.Unit Comparison.TestQuantityYearsEquivalentA" Wrong answer: Quantity =/~ should have special semantics for calendar-based units
-"CqlComparisonOperatorsTest.Unit Comparison.TestYearEquivalentDays" Wrong answer: Quantity =/~ should have special semantics for calendar-based units
-"CqlComparisonOperatorsTest.Unit Comparison.TestMonthEquivalentDays" Wrong answer: Quantity =/~ should have special semantics for calendar-based units
-
-CqlIntervalOperatorsTest.Collapse.TestCollapseNull Wrong answer (Interval(null, null) vs null)
-CqlIntervalOperatorsTest.Expand.ExpandListWithNull Wrong answer (should be empty list due to removing nulls)
-CqlTypeOperatorsTest.Convert.StringToDateTime Wrong answer (different offsets)
-CqlTypeOperatorsTest.ToDateTime.ToDateTime1 Wrong answer (different offsets)
-CqlTypeOperatorsTest.ToDateTime.ToDateTime2 Wrong answer (different offsets)
-CqlTypeOperatorsTest.ToDateTime.ToDateTime3 Wrong answer (different offsets)
-ValueLiteralsAndSelectors.Decimal.Decimal10Pow28ToZeroOneStepDecimalMaxValue Wrong answer (null vs big number); intermediate value exceeds max Decimal
-ValueLiteralsAndSelectors.Decimal.DecimalPos10Pow28ToZeroOneStepDecimalMaxValue Wrong answer (null vs big number); intermediate value exceeds max Decimal
-
-"CqlDateTimeOperatorsTest.Uncertainty tests.DateTimeDurationBetweenUncertainInterval" Wrong answer: [17, 44] vs [16, 44]
-CqlDateTimeOperatorsTest.Subtract.DateTimeSubtract1YearInSeconds Wrong answer: Date math evaluates to 2015-06 vs expected 2015-05, due to us using more-precise semantics for calendar-based units
-CqlTypesTest.DateTime.DateTimeNull Wrong answer: null vs DateTime with null components
-CqlTypesTest.Time.TimeMillisParsing Wrong answer: @T23:59:59.100 vs @T23:59:59.10000
-CqlArithmeticFunctionsTest.Predecessor.PredecessorOf1QCMPrecision Wrong answer: Translator loses Decimal precision (trailing zeros) in ELM representation of Quantity literal
-
-# Unimplemented
-CqlArithmeticFunctionsTest.Precision.PrecisionDecimal Precision for Decimal not implemented
-CqlListOperatorsTest.Descendents Descendents not implemented
-
-# Unimplemented (New in CQL 1.5)
-CqlArithmeticFunctionsTest.Modulo.ModuloQuantity Modulo not implemented for Quantity
-CqlArithmeticFunctionsTest.Modulo.Modulo10By3Quantity Modulo not implemented for Quantity
-
-# Unimplemented (New in CQL 2.0)
-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
diff --git a/test/spec-tests/unit-tests-skip-list.txt b/test/spec-tests/unit-tests-skip-list.txt
new file mode 100644
index 000000000..ee081b953
--- /dev/null
+++ b/test/spec-tests/unit-tests-skip-list.txt
@@ -0,0 +1,59 @@
+## This file should contain skips for issues in the actual evaluation of the test by the cql-execution library, or in the evaluation of the test result by our test harness.
+
+# Numeric Type Mismatch
+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
+CqlArithmeticFunctionsTest.Power.PowerNeg2To2 Wrong output: As of CQL 2.0, Power always returns Decimal
+CqlArithmeticFunctionsTest.Power.Power2LTo2L Wrong output: As of CQL 2.0, Power always returns Decimal
+CqlArithmeticFunctionsTest.Power.Power2To4 Wrong output: As of CQL 2.0, Power always returns Decimal
+CqlArithmeticFunctionsTest.Power.Power2LTo3L Wrong output: As of CQL 2.0, Power always returns Decimal
+ValueLiteralsAndSelectors.Integer.Integer10Pow9 Wrong output: As of CQL 2.0, Power always returns Decimal
+ValueLiteralsAndSelectors.Integer.IntegerPos10Pow9 Wrong output: As of CQL 2.0, Power always returns Decimal
+ValueLiteralsAndSelectors.Integer.IntegerNeg10Pow9 Wrong output: As of CQL 2.0, Power always returns Decimal
+ValueLiteralsAndSelectors.Integer.Integer2Pow31ToZero1IntegerMaxValue Wrong output: As of CQL 2.0, Power always returns Decimal
+ValueLiteralsAndSelectors.Integer.IntegerPos2Pow31ToZero1IntegerMaxValue Wrong output: As of CQL 2.0, Power always returns Decimal
+ValueLiteralsAndSelectors.Integer.IntegerNeg2Pow31ToZero1 Wrong output: As of CQL 2.0, Power always returns Decimal
+ValueLiteralsAndSelectors.Integer.IntegerNeg2Pow31IntegerMinValue Wrong output: As of CQL 2.0, Power always returns Decimal
+
+# 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
+"CqlComparisonOperatorsTest.Unit Comparison.TestQuantityMonthsNotEqualMo" Wrong answer: Quantity =/~ should have special semantics for calendar-based units
+"CqlComparisonOperatorsTest.Unit Comparison.TestQuantityMonthsEquivalentMo" Wrong answer: Quantity =/~ should have special semantics for calendar-based units
+"CqlComparisonOperatorsTest.Unit Comparison.TestQuantityYearEqualA" Wrong answer: Quantity =/~ should have special semantics for calendar-based units
+"CqlComparisonOperatorsTest.Unit Comparison.TestQuantityYearNotEqualA" Wrong answer: Quantity =/~ should have special semantics for calendar-based units
+"CqlComparisonOperatorsTest.Unit Comparison.TestQuantityYearEquivalentA" Wrong answer: Quantity =/~ should have special semantics for calendar-based units
+"CqlComparisonOperatorsTest.Unit Comparison.TestQuantityYearsNotEqualA" Wrong answer: Quantity =/~ should have special semantics for calendar-based units
+"CqlComparisonOperatorsTest.Unit Comparison.TestQuantityYearsEquivalentA" Wrong answer: Quantity =/~ should have special semantics for calendar-based units
+"CqlComparisonOperatorsTest.Unit Comparison.TestYearEquivalentDays" Wrong answer: Quantity =/~ should have special semantics for calendar-based units
+"CqlComparisonOperatorsTest.Unit Comparison.TestMonthEquivalentDays" Wrong answer: Quantity =/~ should have special semantics for calendar-based units
+CqlListOperatorsTest.Equal.EqualNullNull Wrong answer: According to 1.5.3, if either list contains a null, the result is null, however in 2.0.0, null elements are considered equal in list equality
+CqlIntervalOperatorsTest.PointFrom.TestPointFromUnknownIntervalNull Wrong answer: whether Interval(null, null) is a unit interval is indeterminate so the result should be null
+
+CqlIntervalOperatorsTest.Collapse.TestCollapseNull Wrong answer (Interval(null, null) vs null)
+CqlIntervalOperatorsTest.Expand.ExpandListWithNull Wrong answer (should be empty list due to removing nulls)
+CqlTypeOperatorsTest.Convert.StringToDateTime Wrong answer (different offsets)
+CqlTypeOperatorsTest.ToDateTime.ToDateTime1 Wrong answer (different offsets)
+CqlTypeOperatorsTest.ToDateTime.ToDateTime2 Wrong answer (different offsets)
+CqlTypeOperatorsTest.ToDateTime.ToDateTime3 Wrong answer (different offsets)
+ValueLiteralsAndSelectors.Decimal.Decimal10Pow28ToZeroOneStepDecimalMaxValue Wrong answer (null vs big number); intermediate value exceeds max Decimal
+ValueLiteralsAndSelectors.Decimal.DecimalPos10Pow28ToZeroOneStepDecimalMaxValue Wrong answer (null vs big number); intermediate value exceeds max Decimal
+
+CqlTypesTest.DateTime.DateTimeNull Wrong answer: null vs DateTime with null components
+CqlTypesTest.Time.TimeMillisParsing Wrong answer: @T23:59:59.100 vs @T23:59:59.10000
+CqlArithmeticFunctionsTest.Predecessor.PredecessorOf1QCMPrecision Wrong answer: Translator loses Decimal precision (trailing zeros) in ELM representation of Quantity literal
+
+# Unimplemented
+CqlArithmeticFunctionsTest.Precision.PrecisionDecimal Precision for Decimal not implemented
+CqlListOperatorsTest.Descendents Descendents not implemented
+
+# Unimplemented (New in CQL 1.5)
+CqlArithmeticFunctionsTest.Modulo.ModuloQuantity Modulo not implemented for Quantity
+CqlArithmeticFunctionsTest.Modulo.Modulo10By3Quantity Modulo not implemented for Quantity
+
+# Unimplemented (New in CQL 2.0)
+
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..150ed2a7b 100644
--- a/test/tsconfig.json
+++ b/test/tsconfig.json
@@ -4,9 +4,10 @@
"./",
"../src"
],
+ "exclude": ["../cql-tests-runner", "**/node_modules"],
"compilerOptions": {
"strictNullChecks": false,
"rootDir": "../",
"types": ["node", "mocha"]
}
-}
\ No newline at end of file
+}