From 1939d995be004091de96696a16907e308a97206b Mon Sep 17 00:00:00 2001 From: Bryant Austin Date: Tue, 14 Oct 2025 14:59:17 -0600 Subject: [PATCH 1/2] capabilities added to tests, groups, and test --- tests/cql/CqlAggregateFunctionsTest.xml | 22 +- tests/cql/CqlAggregateTest.xml | 72 +- tests/cql/CqlArithmeticFunctionsTest.xml | 87 +- tests/cql/CqlComparisonOperatorsTest.xml | 47 +- tests/cql/CqlConditionalOperatorsTest.xml | 198 +- tests/cql/CqlDateTimeOperatorsTest.xml | 1585 ++------------ .../CqlErrorsAndMessagingOperatorsTest.xml | 52 +- tests/cql/CqlIntervalOperatorsTest.xml | 1861 ++--------------- tests/cql/CqlListOperatorsTest.xml | 319 ++- tests/cql/CqlLogicalOperatorsTest.xml | 387 ++-- tests/cql/CqlNullologicalOperatorsTest.xml | 38 +- tests/cql/CqlQueryTests.xml | 49 +- tests/cql/CqlStringOperatorsTest.xml | 141 +- tests/cql/CqlTypeOperatorsTest.xml | 72 +- tests/cql/CqlTypesTest.xml | 119 +- tests/cql/ValueLiteralsAndSelectors.xml | 103 +- 16 files changed, 1579 insertions(+), 3573 deletions(-) diff --git a/tests/cql/CqlAggregateFunctionsTest.xml b/tests/cql/CqlAggregateFunctionsTest.xml index 9a7d40b..3414fdf 100644 --- a/tests/cql/CqlAggregateFunctionsTest.xml +++ b/tests/cql/CqlAggregateFunctionsTest.xml @@ -1,6 +1,7 @@ - + + + AllTrue({true,true}) @@ -85,6 +86,8 @@ + + Product({5L, 4L, 5L}) 100L @@ -95,10 +98,13 @@ 4 + + Count({ DateTime(2014), DateTime(2001), DateTime(2010) }) 3 + Count({ @T15:59:59.999, @T05:59:59.999, @T20:59:59.999 }) 3 @@ -113,6 +119,7 @@ 90 + Max({ 5L, 12L, 1L, 15L, 0L, 4L, 90L, 44L }) 90L @@ -121,10 +128,12 @@ '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 @@ -141,6 +150,7 @@ 0 + Min({5L, 12L, 1L, 15L, 0L, 4L, 90L, 44L}) 0L @@ -149,10 +159,12 @@ '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 @@ -163,14 +175,17 @@ 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 @@ -213,10 +228,13 @@ 20.0 + Sum({ 6L, 2L, 3L, 4L, 5L }) 20L + + Sum({1 'ml',2 'ml',3 'ml',4 'ml',5 'ml'}) 15 'ml' diff --git a/tests/cql/CqlAggregateTest.xml b/tests/cql/CqlAggregateTest.xml index 98d8d23..06e56bd 100644 --- a/tests/cql/CqlAggregateTest.xml +++ b/tests/cql/CqlAggregateTest.xml @@ -1,85 +1,115 @@ - + + + + + + + + ({ 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] + 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 + duration in days of X - return Interval[S, E] - }) + 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 + duration in days of X + 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] + 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 + aggregate Result starting 1: Result + Num 16 + + + ({ 1, 2, 3, 4, 5 }) Num - aggregate Result: Coalesce(Result, 0) + 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 + 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 + aggregate distinct Result: Coalesce(Result, 0) + Num 15 + + + from ({1}) X, ({2}) Y, ({3}) Z - aggregate Agg: Coalesce(Agg, 0) + X + Y + 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 + 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 + aggregate distinct Agg starting 1: Agg + X + Y + Z 37 diff --git a/tests/cql/CqlArithmeticFunctionsTest.xml b/tests/cql/CqlArithmeticFunctionsTest.xml index 3e580c8..15edfc9 100644 --- a/tests/cql/CqlArithmeticFunctionsTest.xml +++ b/tests/cql/CqlArithmeticFunctionsTest.xml @@ -1,7 +1,10 @@ - + + + + + Abs(null as Integer) null @@ -23,15 +26,18 @@ 0.0 + Abs(-1.0'cm') 1.0'cm' + Abs(-1L) 1L + 1 + null null @@ -41,6 +47,7 @@ 2 + 1L + 2L 3L @@ -49,6 +56,7 @@ 2.0 + 1'g/cm3' + 1'g/cm3' 2.0'g/cm3' @@ -57,11 +65,13 @@ 3.0 + 1L + 1L 2L + Ceiling(null as Decimal) null @@ -92,6 +102,7 @@ + 1 / null null @@ -109,6 +120,7 @@ 1.0 + 1L / 1L 1.0 @@ -117,10 +129,12 @@ 1.0 + Round(10 / 3, 8) 3.33333333 + 1'g/cm3' / 1.0 1.0'g/cm3' @@ -128,6 +142,7 @@ Decimal value to a Quantity, with the default UCUM unit of (`1`). --> + 1'g/cm3' / 1'g/cm3' 1.0'1' + minimum Long -9223372036854775808L @@ -344,14 +378,17 @@ + minimum DateTime @0001-01-01T00:00:00.000Z + minimum Date @0001-01-01 + minimum Time @T00:00:00.000 @@ -361,11 +398,13 @@ + maximum Integer 2147483647 + maximum Long 9223372036854775807L @@ -375,14 +414,17 @@ + maximum DateTime @9999-12-31T23:59:59.999Z + maximum Date @9999-12-31 + maximum Time @T23:59:59.999 @@ -392,6 +434,7 @@ + 1 mod null null @@ -405,6 +448,7 @@ 0 + 4L mod 2L 0L @@ -429,19 +473,26 @@ 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 @@ -451,6 +502,7 @@ 1 + 2L * 3L 6L @@ -459,6 +511,7 @@ 2.0 + 1 * 1L 1L @@ -467,12 +520,14 @@ 2.0 + 1.0 'cm' * 2.0 'cm' 2.0'cm2' + -(null as Integer) null @@ -490,10 +545,12 @@ -1 + -1L -1L + -9223372036854775807L -9223372036854775807L @@ -502,6 +559,7 @@ 1 + -(-1L) 1L @@ -522,11 +580,14 @@ 1.0 + -(1'cm') -1.0'cm' + + Precision(1.58700) 5 @@ -549,6 +610,8 @@ + + predecessor of (null as Integer) null @@ -562,6 +625,7 @@ 0 + predecessor of 1L 0L @@ -574,6 +638,7 @@ 1.00999999 + predecessor of 1.0 'cm' 0.99999999'cm' @@ -595,6 +660,7 @@ + Power(null as Integer, null as Integer) null @@ -616,6 +682,7 @@ 0.25 + Power(2L, 2L) 4L @@ -644,6 +711,7 @@ 16 + 2L^3L 8L @@ -657,6 +725,7 @@ + Round(null as Decimal) null @@ -703,6 +772,7 @@ + 1 - null null @@ -712,6 +782,7 @@ 0 + 1L - 1L 0L @@ -720,6 +791,7 @@ -1.0 + 1.0 'cm' - 2.0 'cm' -1.0'cm' @@ -729,6 +801,8 @@ + + successor of (null as Integer) null @@ -742,6 +816,7 @@ 2 + successor of 1L 2L @@ -771,6 +846,7 @@ + Truncate(null as Decimal) null @@ -821,6 +897,7 @@ + (null as Integer) div (null as Integer) null @@ -838,10 +915,12 @@ 3 + 10L div 3L 3L + 10L div 0L null @@ -894,18 +973,22 @@ 2.0 + 10.1 'cm' div -3.1 'cm' -3.0 'cm' + 10.0 'g' div 5.0 'g' 2.0 'g' + 4.14 'm' div 2.06 'm' 2.0 'm' + 10.0 'g' div 0.0 'g' null diff --git a/tests/cql/CqlComparisonOperatorsTest.xml b/tests/cql/CqlComparisonOperatorsTest.xml index 67eb1ce..27b1381 100644 --- a/tests/cql/CqlComparisonOperatorsTest.xml +++ b/tests/cql/CqlComparisonOperatorsTest.xml @@ -1,13 +1,15 @@ - + + + 4 between 2 and 6 true + true = true true @@ -73,6 +75,7 @@ true + 1'cm' = 0.01'm' true @@ -81,50 +84,62 @@ true + 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' } false + 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 { 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 @@ -166,6 +181,7 @@ + 0 > 0 false @@ -207,10 +223,12 @@ true + 1'm' > 1'cm' true + 1'm' > 10'cm' true @@ -268,6 +286,7 @@ + 0 >= 0 true @@ -309,10 +328,12 @@ true + 1'm' >= 1'cm' true + 1'm' >= 10'cm' true @@ -378,6 +399,7 @@ + 0 < 0 false @@ -419,10 +441,12 @@ false + 1'm' < 1'cm' false + 1'm' < 10'cm' false @@ -480,6 +504,7 @@ + 0 <= 0 true @@ -521,10 +546,12 @@ false + 1'm' <= 1'cm' false + 1'm' <= 10'cm' false @@ -590,6 +617,7 @@ + true ~ true true @@ -655,22 +683,27 @@ true + 1'cm' ~ 0.01'm' true + 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' } ~ Tuple { Id : 2, Name : 'Jane' } false + Tuple { Id : 1, Name : 'John' } ~ Tuple { Id : 2, Name : 'John' } false @@ -692,6 +725,7 @@ + true != true false @@ -757,38 +791,47 @@ 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' } true + 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 diff --git a/tests/cql/CqlConditionalOperatorsTest.xml b/tests/cql/CqlConditionalOperatorsTest.xml index ab3203b..e8537e8 100644 --- a/tests/cql/CqlConditionalOperatorsTest.xml +++ b/tests/cql/CqlConditionalOperatorsTest.xml @@ -1,82 +1,120 @@ - - - - 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 - - + + + + + + + + + + + + + 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/tests/cql/CqlDateTimeOperatorsTest.xml b/tests/cql/CqlDateTimeOperatorsTest.xml index e200841..cdd05da 100644 --- a/tests/cql/CqlDateTimeOperatorsTest.xml +++ b/tests/cql/CqlDateTimeOperatorsTest.xml @@ -1,1365 +1,222 @@ - - - - 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 - - - timezone from DateTime(2003, 10, 29, 20, 50, 33, 955, 1) - - - - timezoneoffset 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 - - - 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[ 16, 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 - - - + + + + + + + + + + + + + + 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 + + + \ No newline at end of file diff --git a/tests/cql/CqlErrorsAndMessagingOperatorsTest.xml b/tests/cql/CqlErrorsAndMessagingOperatorsTest.xml index 6ff7602..3b80100 100644 --- a/tests/cql/CqlErrorsAndMessagingOperatorsTest.xml +++ b/tests/cql/CqlErrorsAndMessagingOperatorsTest.xml @@ -1,22 +1,36 @@ - - - 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!') - - - + xmlns="http://hl7.org/fhirpath/tests" + xsi:schemaLocation="http://hl7.org/fhirpath/tests ../../testSchema/testSchema.xsd" + name="CqlErrorsAndMessagingOperatorsTest" + reference="https://cql.hl7.org/09-b-cqlreference.html#errors-and-messaging" + version="1.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/tests/cql/CqlIntervalOperatorsTest.xml b/tests/cql/CqlIntervalOperatorsTest.xml index c7072ec..df43a5c 100644 --- a/tests/cql/CqlIntervalOperatorsTest.xml +++ b/tests/cql/CqlIntervalOperatorsTest.xml @@ -1,1736 +1,133 @@ - - - - (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 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] - null - - - 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 + + + + + + + + + (null as Integer) after Interval[1, 10] + null - - 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[11, 20] after Interval[1, 10] + true - - 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) - - - + + + 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 + + + + + + diff --git a/tests/cql/CqlListOperatorsTest.xml b/tests/cql/CqlListOperatorsTest.xml index a6065e9..91462d5 100644 --- a/tests/cql/CqlListOperatorsTest.xml +++ b/tests/cql/CqlListOperatorsTest.xml @@ -1,916 +1,1153 @@ - - + + + + + ({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 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' } = { 1, 2, 3 } false + { 1, 2, 3 } = { 'a', 'b', 'c' } false + { 1, 2, 3 } = { '1', '2', '3' } 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 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 includes {2} null - + + {'s', 'a', 'm'} includes null 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 included in {2} null + {'s', 'a', 'm'} included in null 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' } ~ { 1, 2, 3 } false - + + { 1, 2, 3 } ~ { 'a', 'b', 'c' } false - + + { 1, 2, 3 } ~ { '1', '2', '3' } 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' } != { 1, 2, 3 } true - + + { 1, 2, 3 } != { 'a', 'b', 'c' } true - + + { 1, 2, 3 } != { '1', '2', '3' } 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 - + + + {'s', 'u', 'n'} properly includes null false + {'s', 'u', 'n', null} properly includes null 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 null - + + + null properly included in {'s', 'u', 'n'} false + null properly included in {'s', 'u', 'n', 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 } null - + + + {} 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 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 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) {} - + + + 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/tests/cql/CqlLogicalOperatorsTest.xml b/tests/cql/CqlLogicalOperatorsTest.xml index 36062aa..e9e27d3 100644 --- a/tests/cql/CqlLogicalOperatorsTest.xml +++ b/tests/cql/CqlLogicalOperatorsTest.xml @@ -1,171 +1,220 @@ - - - - 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 - - + + + + + + + + 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/tests/cql/CqlNullologicalOperatorsTest.xml b/tests/cql/CqlNullologicalOperatorsTest.xml index 5af5c10..c40e5ca 100644 --- a/tests/cql/CqlNullologicalOperatorsTest.xml +++ b/tests/cql/CqlNullologicalOperatorsTest.xml @@ -1,98 +1,124 @@ - - + + + + + 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/tests/cql/CqlQueryTests.xml b/tests/cql/CqlQueryTests.xml index 43e738e..cc8acb1 100644 --- a/tests/cql/CqlQueryTests.xml +++ b/tests/cql/CqlQueryTests.xml @@ -1,57 +1,72 @@ - - + + + + - (4) l + + (4) l 4 - (4) l return 'Hello World' + + (4) l return 'Hello World' 'Hello World' - from ({2, 3}) A, ({5, 6}) B + + 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 + + + + ({1, 2, 3}) l sort desc {3, 2, 1} - ({1, 3, 2}) l sort ascending + + ({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 + + ({@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, @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 + + + + ({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 + + ({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 + + ({1, 2, 3, 3, 4}) L aggregate distinct A starting 1: A * L 24 - ({1, 2, 3}) L aggregate A : A * L + + ({1, 2, 3}) L aggregate A : A * L null - from ({1, 2, 3}) B, (4) C aggregate A : A + B + C + + from ({1, 2, 3}) B, (4) C aggregate A : A + B + C null diff --git a/tests/cql/CqlStringOperatorsTest.xml b/tests/cql/CqlStringOperatorsTest.xml index 007789f..2c2e54a 100644 --- a/tests/cql/CqlStringOperatorsTest.xml +++ b/tests/cql/CqlStringOperatorsTest.xml @@ -1,366 +1,457 @@ - - + + + + + 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('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/tests/cql/CqlTypeOperatorsTest.xml b/tests/cql/CqlTypeOperatorsTest.xml index e5f1d91..6e102b4 100644 --- a/tests/cql/CqlTypeOperatorsTest.xml +++ b/tests/cql/CqlTypeOperatorsTest.xml @@ -1,69 +1,88 @@ - - + + + + + 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 { @@ -73,97 +92,124 @@ - + + + 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/tests/cql/CqlTypesTest.xml b/tests/cql/CqlTypesTest.xml index 639776a..a5844f8 100644 --- a/tests/cql/CqlTypesTest.xml +++ b/tests/cql/CqlTypesTest.xml @@ -1,188 +1,169 @@ - - - + + + - + + 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 - + @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/tests/cql/ValueLiteralsAndSelectors.xml b/tests/cql/ValueLiteralsAndSelectors.xml index 35dd55f..0f324d0 100644 --- a/tests/cql/ValueLiteralsAndSelectors.xml +++ b/tests/cql/ValueLiteralsAndSelectors.xml @@ -1,10 +1,13 @@ + + + null null @@ -14,11 +17,14 @@ + + false false + true true @@ -28,95 +34,117 @@ + + 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 @@ -307,6 +378,7 @@ + @@ -315,6 +387,7 @@ + @@ -323,30 +396,38 @@ + + + + + + + + From f5c04397ab788382f53f86c2aa997f80302b9d92 Mon Sep 17 00:00:00 2001 From: Bryant Austin Date: Thu, 16 Oct 2025 08:20:44 -0600 Subject: [PATCH 2/2] PR comments addressed --- tests/cql/CqlAggregateFunctionsTest.xml | 7 +- tests/cql/CqlAggregateTest.xml | 54 +- tests/cql/CqlArithmeticFunctionsTest.xml | 4 +- tests/cql/CqlComparisonOperatorsTest.xml | 3 +- tests/cql/CqlConditionalOperatorsTest.xml | 237 +- tests/cql/CqlDateTimeOperatorsTest.xml | 2014 ++++++++++++-- .../CqlErrorsAndMessagingOperatorsTest.xml | 58 +- tests/cql/CqlIntervalOperatorsTest.xml | 2308 ++++++++++++++++- tests/cql/CqlListOperatorsTest.xml | 78 +- tests/cql/CqlLogicalOperatorsTest.xml | 432 ++- tests/cql/CqlNullologicalOperatorsTest.xml | 11 +- tests/cql/CqlQueryTests.xml | 33 +- tests/cql/CqlStringOperatorsTest.xml | 44 +- tests/cql/CqlTypeOperatorsTest.xml | 25 +- tests/cql/CqlTypesTest.xml | 82 +- tests/cql/ValueLiteralsAndSelectors.xml | 56 +- 16 files changed, 4558 insertions(+), 888 deletions(-) diff --git a/tests/cql/CqlAggregateFunctionsTest.xml b/tests/cql/CqlAggregateFunctionsTest.xml index 3414fdf..698e497 100644 --- a/tests/cql/CqlAggregateFunctionsTest.xml +++ b/tests/cql/CqlAggregateFunctionsTest.xml @@ -1,6 +1,6 @@ - - + @@ -86,7 +86,6 @@ - Product({5L, 4L, 5L}) 100L @@ -98,7 +97,6 @@ 4 - Count({ DateTime(2014), DateTime(2001), DateTime(2010) }) 3 @@ -233,7 +231,6 @@ 20L - Sum({1 'ml',2 'ml',3 'ml',4 'ml',5 'ml'}) 15 'ml' diff --git a/tests/cql/CqlAggregateTest.xml b/tests/cql/CqlAggregateTest.xml index 06e56bd..941ae3b 100644 --- a/tests/cql/CqlAggregateTest.xml +++ b/tests/cql/CqlAggregateTest.xml @@ -1,115 +1,105 @@ - - + - - ({ 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] + 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 + duration in days of X - return Interval[S, E] - }) + 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 + duration in days of X + 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] + 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 + aggregate Result starting 1: Result + Num 16 - ({ 1, 2, 3, 4, 5 }) Num - aggregate Result: Coalesce(Result, 0) + 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 + 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 + aggregate distinct Result: Coalesce(Result, 0) + Num 15 - - + from ({1}) X, ({2}) Y, ({3}) Z - aggregate Agg: Coalesce(Agg, 0) + X + Y + 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 + 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 + aggregate distinct Agg starting 1: Agg + X + Y + Z 37 diff --git a/tests/cql/CqlArithmeticFunctionsTest.xml b/tests/cql/CqlArithmeticFunctionsTest.xml index 15edfc9..175c581 100644 --- a/tests/cql/CqlArithmeticFunctionsTest.xml +++ b/tests/cql/CqlArithmeticFunctionsTest.xml @@ -1,6 +1,6 @@ - - + diff --git a/tests/cql/CqlComparisonOperatorsTest.xml b/tests/cql/CqlComparisonOperatorsTest.xml index 27b1381..075b6bf 100644 --- a/tests/cql/CqlComparisonOperatorsTest.xml +++ b/tests/cql/CqlComparisonOperatorsTest.xml @@ -1,5 +1,6 @@ - + diff --git a/tests/cql/CqlConditionalOperatorsTest.xml b/tests/cql/CqlConditionalOperatorsTest.xml index e8537e8..9541628 100644 --- a/tests/cql/CqlConditionalOperatorsTest.xml +++ b/tests/cql/CqlConditionalOperatorsTest.xml @@ -1,120 +1,121 @@ - - - - - - - - - - - - - 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 - - + + + + + + + + + + + + + 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/tests/cql/CqlDateTimeOperatorsTest.xml b/tests/cql/CqlDateTimeOperatorsTest.xml index cdd05da..08e060e 100644 --- a/tests/cql/CqlDateTimeOperatorsTest.xml +++ b/tests/cql/CqlDateTimeOperatorsTest.xml @@ -1,222 +1,1796 @@ - - - - - - + + + + + + + + + + - - - - - - - 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 - - - \ No newline at end of file + + + + + + + + + + + + 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 + + + + + timezone from DateTime(2003, 10, 29, 20, 50, 33, 955, 1) + + + + + + timezoneoffset 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 + + + + 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[ 16, 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/tests/cql/CqlErrorsAndMessagingOperatorsTest.xml b/tests/cql/CqlErrorsAndMessagingOperatorsTest.xml index 3b80100..0470b8a 100644 --- a/tests/cql/CqlErrorsAndMessagingOperatorsTest.xml +++ b/tests/cql/CqlErrorsAndMessagingOperatorsTest.xml @@ -1,36 +1,28 @@ - - - - - - - - - - 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!') - - - + xmlns="http://hl7.org/fhirpath/tests" xsi:schemaLocation="http://hl7.org/fhirpath/tests ../../testSchema/testSchema.xsd" name="CqlErrorsAndMessagingOperatorsTest" reference="https://cql.hl7.org/09-b-cqlreference.html#errors-and-messaging" version="1.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/tests/cql/CqlIntervalOperatorsTest.xml b/tests/cql/CqlIntervalOperatorsTest.xml index df43a5c..fb752bc 100644 --- a/tests/cql/CqlIntervalOperatorsTest.xml +++ b/tests/cql/CqlIntervalOperatorsTest.xml @@ -1,133 +1,2183 @@ - - - - - - - - - (null as Integer) after Interval[1, 10] - null + + + + + + + (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 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] + null + + + + 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[11, 20] after Interval[1, 10] - true + + + 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[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 - - - - - - + + + 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/tests/cql/CqlListOperatorsTest.xml b/tests/cql/CqlListOperatorsTest.xml index 91462d5..3319102 100644 --- a/tests/cql/CqlListOperatorsTest.xml +++ b/tests/cql/CqlListOperatorsTest.xml @@ -1,5 +1,6 @@ - - + + @@ -61,7 +62,7 @@ - + { 'a', 'b', null } contains null true @@ -104,15 +105,16 @@ - + (null).descendents() null + - + distinct {} {} @@ -160,7 +162,7 @@ - + {null} = {null} true @@ -243,7 +245,7 @@ - + {} except {} {} @@ -276,7 +278,7 @@ - + Exists({}) false @@ -314,7 +316,7 @@ - + Flatten({{},{}}) {} @@ -342,7 +344,7 @@ - + First({}) null @@ -375,7 +377,7 @@ - + null in {} false @@ -423,7 +425,7 @@ - + {} includes {} true @@ -473,7 +475,7 @@ null includes {2} null - + {'s', 'a', 'm'} includes null @@ -482,7 +484,7 @@ - + {} included in {} true @@ -527,6 +529,7 @@ @T16:59:59.999 included in { @T02:29:15.156, @T15:59:59.999, @T20:59:59.999 } false + null included in {2} @@ -540,12 +543,12 @@ - + (null as List<System.Any>)[1] null - + { 1, 2 }[0] @@ -579,7 +582,7 @@ - + IndexOf({}, null) null @@ -622,7 +625,7 @@ - + {} intersect {} {} @@ -650,7 +653,7 @@ - + Last({}) null @@ -683,7 +686,7 @@ - + Length({}) 0 @@ -721,7 +724,7 @@ - + {} ~ {} true @@ -740,19 +743,19 @@ { 'a', 'b', 'c' } ~ { 1, 2, 3 } false - + { 1, 2, 3 } ~ { 'a', 'b', 'c' } false - + { 1, 2, 3 } ~ { '1', '2', '3' } false - + @@ -787,7 +790,7 @@ - + {} != {} false @@ -806,18 +809,19 @@ { 'a', 'b', 'c' } != { 1, 2, 3 } true - + { 1, 2, 3 } != { 'a', 'b', 'c' } true - + { 1, 2, 3 } != { '1', '2', '3' } true + @@ -842,7 +846,7 @@ - + {'s', 'u', 'n'} properly includes null false @@ -865,7 +869,7 @@ - + null properly included in {'s', 'u', 'n'} false @@ -888,7 +892,7 @@ - + {} properly includes {} false @@ -941,7 +945,7 @@ - + {} properly included in {} false @@ -994,7 +998,7 @@ - + singleton from {} null @@ -1012,7 +1016,7 @@ singleton from { 1, 2 } - + @@ -1027,7 +1031,7 @@ - + Skip(null, 3) null @@ -1055,7 +1059,7 @@ - + Tail(null) null @@ -1083,7 +1087,7 @@ - + Take(null, 3) null @@ -1116,7 +1120,7 @@ - + {} union {} {} diff --git a/tests/cql/CqlLogicalOperatorsTest.xml b/tests/cql/CqlLogicalOperatorsTest.xml index e9e27d3..5b71371 100644 --- a/tests/cql/CqlLogicalOperatorsTest.xml +++ b/tests/cql/CqlLogicalOperatorsTest.xml @@ -1,220 +1,216 @@ - - - - - - - - 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 - - + + + + + + + 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/tests/cql/CqlNullologicalOperatorsTest.xml b/tests/cql/CqlNullologicalOperatorsTest.xml index c40e5ca..d3b89bc 100644 --- a/tests/cql/CqlNullologicalOperatorsTest.xml +++ b/tests/cql/CqlNullologicalOperatorsTest.xml @@ -1,5 +1,6 @@ - - + + @@ -61,7 +62,7 @@ - + IsNull(null) true @@ -89,7 +90,7 @@ - + IsFalse(false) true @@ -107,7 +108,7 @@ - + IsTrue(true) true diff --git a/tests/cql/CqlQueryTests.xml b/tests/cql/CqlQueryTests.xml index cc8acb1..c7ce167 100644 --- a/tests/cql/CqlQueryTests.xml +++ b/tests/cql/CqlQueryTests.xml @@ -1,72 +1,73 @@ - - + + - (4) l + (4) l 4 - (4) l return 'Hello World' + (4) l return 'Hello World' 'Hello World' - from ({2, 3}) A, ({5, 6}) B + 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 + ({1, 2, 3}) l sort desc {3, 2, 1} - ({1, 3, 2}) l sort ascending + ({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 + ({@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, @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 + ({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 + ({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 + ({1, 2, 3, 3, 4}) L aggregate distinct A starting 1: A * L 24 - ({1, 2, 3}) L aggregate A : A * L + ({1, 2, 3}) L aggregate A : A * L null - from ({1, 2, 3}) B, (4) C aggregate A : A + B + C + from ({1, 2, 3}) B, (4) C aggregate A : A + B + C null diff --git a/tests/cql/CqlStringOperatorsTest.xml b/tests/cql/CqlStringOperatorsTest.xml index 2c2e54a..5d4cde8 100644 --- a/tests/cql/CqlStringOperatorsTest.xml +++ b/tests/cql/CqlStringOperatorsTest.xml @@ -1,5 +1,6 @@ - - + + @@ -26,7 +27,7 @@ - + Concatenate(null, null) null @@ -54,7 +55,7 @@ - + EndsWith(null, null) null @@ -72,11 +73,11 @@ - + Indexer(null as String, null) null - + @@ -87,7 +88,7 @@ Indexer(null as String, 1) null - + @@ -112,7 +113,7 @@ - + LastPositionOf(null, null) null @@ -140,11 +141,11 @@ - + Length(null as String) null - + @@ -164,7 +165,7 @@ - + Lower(null) null @@ -192,7 +193,7 @@ - + Matches('Not all who wander are lost', null) null @@ -235,7 +236,7 @@ - + PositionOf(null, null) null @@ -268,7 +269,7 @@ - + ReplaceMatches('Not all who wander are lost', null, 'But I am...') null @@ -291,7 +292,7 @@ - + Split(null, null) null @@ -319,7 +320,7 @@ - + StartsWith(null, null) null @@ -347,7 +348,7 @@ - + Substring(null, null) null @@ -400,7 +401,7 @@ - + Upper(null) null @@ -428,7 +429,7 @@ - + ToString(125 'cm') '125 \'cm\'' @@ -453,5 +454,10 @@ ToString(@T09:30:01.003) '09:30:01.003' + + + + + diff --git a/tests/cql/CqlTypeOperatorsTest.xml b/tests/cql/CqlTypeOperatorsTest.xml index 6e102b4..64bff23 100644 --- a/tests/cql/CqlTypeOperatorsTest.xml +++ b/tests/cql/CqlTypeOperatorsTest.xml @@ -1,5 +1,6 @@ - - + + @@ -21,7 +22,7 @@ - + convert 5 to Decimal 5.0 @@ -54,7 +55,7 @@ - + 5 is Integer true @@ -73,7 +74,7 @@ - + ToBoolean('NO') false @@ -81,7 +82,7 @@ - + ToConcept(Code { code: '8480-6' }) @@ -93,7 +94,7 @@ - + ToDateTime('2014-01-01') @2014-01-01T @@ -141,7 +142,7 @@ - + ToDecimal('+25.5') 25.5 @@ -149,7 +150,7 @@ - + ToInteger('-25') -25 @@ -157,7 +158,7 @@ - + ToQuantity('5.5 \'cm\'') 5.5'cm' @@ -165,7 +166,7 @@ - + ToString(-5) '-5' @@ -188,7 +189,7 @@ - + ToTime('T14:30:00.0') @T14:30:00.000 diff --git a/tests/cql/CqlTypesTest.xml b/tests/cql/CqlTypesTest.xml index a5844f8..452d75c 100644 --- a/tests/cql/CqlTypesTest.xml +++ b/tests/cql/CqlTypesTest.xml @@ -1,8 +1,20 @@ - - + + + - + 5.0 'g' @@ -40,12 +52,21 @@ - + - + DateTime(null) null @@ -53,12 +74,12 @@ DateTime(10000, 12, 31, 23, 59, 59, 999) - + DateTime(0000, 1, 1, 0, 0, 0, 0) - + @@ -74,7 +95,10 @@ days between DateTime(2015, 2, 10) and DateTime(2015, 3) Interval [ 18, 49 ] - + @@ -93,19 +117,47 @@ - + - + - + 150.2 '[lb_av]' 150.2 '[lb_av]' @@ -123,7 +175,7 @@ - + '\'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' @@ -136,21 +188,25 @@ - + @T24:59:59.999 + @T23:60:59.999 + @T23:59:60.999 + @T23:59:59.10000 + diff --git a/tests/cql/ValueLiteralsAndSelectors.xml b/tests/cql/ValueLiteralsAndSelectors.xml index 0f324d0..8317b89 100644 --- a/tests/cql/ValueLiteralsAndSelectors.xml +++ b/tests/cql/ValueLiteralsAndSelectors.xml @@ -1,13 +1,13 @@ - + - + - + null null @@ -17,14 +17,14 @@ - + - + false false - + true true @@ -113,38 +113,38 @@ 2147483648 - - + + +2147483648 - - + + -Power(2,30)-Power(2,30) -2147483648 - + 2147483649 - - + + +2147483649 - - + + -2147483649 - - + + - + 0.0 @@ -378,7 +378,7 @@ - + @@ -387,7 +387,7 @@ - + @@ -396,38 +396,38 @@ - + - + - + - + - + - + - + - +