diff --git a/tests/cql/CqlAggregateFunctionsTest.xml b/tests/cql/CqlAggregateFunctionsTest.xml index 9a7d40b..698e497 100644 --- a/tests/cql/CqlAggregateFunctionsTest.xml +++ b/tests/cql/CqlAggregateFunctionsTest.xml @@ -1,6 +1,7 @@ + AllTrue({true,true}) @@ -85,6 +86,7 @@ + Product({5L, 4L, 5L}) 100L @@ -95,10 +97,12 @@ 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 +117,7 @@ 90 + Max({ 5L, 12L, 1L, 15L, 0L, 4L, 90L, 44L }) 90L @@ -121,10 +126,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 +148,7 @@ 0 + Min({5L, 12L, 1L, 15L, 0L, 4L, 90L, 44L}) 0L @@ -149,10 +157,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 +173,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 +226,12 @@ 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..941ae3b 100644 --- a/tests/cql/CqlAggregateTest.xml +++ b/tests/cql/CqlAggregateTest.xml @@ -1,12 +1,18 @@ + + + + ({ 1, 2, 3, 4, 5 }) Num aggregate Result starting 1: Result * Num 120 + + ({ Interval[@2012-01-01, @2012-02-28], @@ -30,6 +36,8 @@ + + ({ 1, 2, 3, 4, 5 }) Num aggregate Result starting 1: Result + Num @@ -38,6 +46,8 @@ + + ({ 1, 2, 3, 4, 5 }) Num aggregate Result: Coalesce(Result, 0) + Num @@ -46,6 +56,8 @@ + + ({ 1, 1, 2, 2, 2, 3, 4, 4, 5 }) Num aggregate all Result: Coalesce(Result, 0) + Num @@ -54,6 +66,8 @@ + + ({ 1, 1, 2, 2, 2, 3, 4, 4, 5 }) Num aggregate distinct Result: Coalesce(Result, 0) + Num @@ -62,6 +76,8 @@ + + from ({1}) X, ({2}) Y, ({3}) Z aggregate Agg: Coalesce(Agg, 0) + X + Y + Z @@ -69,6 +85,8 @@ 6 + + from ({1, 2}) X, ({1, 2}) Y, ({1, 2}) Z aggregate Agg starting 0: Agg + X + Y + Z @@ -77,6 +95,8 @@ + + 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 diff --git a/tests/cql/CqlArithmeticFunctionsTest.xml b/tests/cql/CqlArithmeticFunctionsTest.xml index 3e580c8..175c581 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..075b6bf 100644 --- a/tests/cql/CqlComparisonOperatorsTest.xml +++ b/tests/cql/CqlComparisonOperatorsTest.xml @@ -1,13 +1,16 @@ + + 4 between 2 and 6 true + true = true true @@ -73,6 +76,7 @@ true + 1'cm' = 0.01'm' true @@ -81,50 +85,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 +182,7 @@ + 0 > 0 false @@ -207,10 +224,12 @@ true + 1'm' > 1'cm' true + 1'm' > 10'cm' true @@ -268,6 +287,7 @@ + 0 >= 0 true @@ -309,10 +329,12 @@ true + 1'm' >= 1'cm' true + 1'm' >= 10'cm' true @@ -378,6 +400,7 @@ + 0 < 0 false @@ -419,10 +442,12 @@ false + 1'm' < 1'cm' false + 1'm' < 10'cm' false @@ -480,6 +505,7 @@ + 0 <= 0 true @@ -521,10 +547,12 @@ false + 1'm' <= 1'cm' false + 1'm' <= 10'cm' false @@ -590,6 +618,7 @@ + true ~ true true @@ -655,22 +684,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 +726,7 @@ + true != true false @@ -757,38 +792,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..9541628 100644 --- a/tests/cql/CqlConditionalOperatorsTest.xml +++ b/tests/cql/CqlConditionalOperatorsTest.xml @@ -1,22 +1,43 @@ + + + + + + + + + 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 @@ -27,6 +48,9 @@ 5 + + + case when 5 > 10 then 5 + 10 @@ -37,6 +61,9 @@ 5 + + + case when null ~ 10 then null + 10 @@ -48,7 +75,13 @@ + + + + + + case 5 when 5 then 12 @@ -59,6 +92,9 @@ 12 + + + case 10 when 5 then 12 @@ -69,6 +105,9 @@ 15 + + + case 10 + 5 when 5 then 12 diff --git a/tests/cql/CqlDateTimeOperatorsTest.xml b/tests/cql/CqlDateTimeOperatorsTest.xml index e200841..08e060e 100644 --- a/tests/cql/CqlDateTimeOperatorsTest.xml +++ b/tests/cql/CqlDateTimeOperatorsTest.xml @@ -1,24 +1,47 @@ + + + + + + + + + + + + + + + + + + + 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 @@ -26,6 +49,7 @@ + DateTime(2018, 5, 23) + 52 weeks = DateTime(2019, 5, 22) true @@ -33,6 +57,7 @@ + DateTime(2023, 3, 2) + 52 weeks = DateTime(2024, 2, 29) true @@ -40,6 +65,7 @@ + DateTime(2024, 2, 28) + 52 weeks = DateTime(2025, 2, 26) true @@ -47,563 +73,741 @@ + 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 + + @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 ] @@ -651,6 +866,8 @@ currently Equivalent() results in null from comparing with an Interval. --> + + (days between DateTime(2014, 1, 15) and DateTime(2014, 2)) - (months between DateTime(2005) and DateTime(2006, 5)) Interval[ 0, 40 ] @@ -660,6 +877,8 @@ currently Equivalent() results in null from comparing with an Interval. --> + + (days between DateTime(2014, 1, 15) and DateTime(2014, 2)) * (days between DateTime(2014, 1, 15) and DateTime(2014, 2)) Interval[ 256, 1936 ] @@ -669,541 +888,704 @@ currently Equivalent() results in null from comparing with an Interval. --> + + (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 @@ -1211,6 +1593,7 @@ + DateTime(2018, 5, 23) - 52 weeks = DateTime(2017, 5, 24) true @@ -1218,6 +1601,7 @@ + DateTime(2024, 2, 29) - 52 weeks = DateTime(2023, 3, 2) true @@ -1225,6 +1609,7 @@ + DateTime(2024, 3, 1) - 52 weeks = DateTime(2023, 3, 3) true @@ -1232,132 +1617,178 @@ + 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 6ff7602..0470b8a 100644 --- a/tests/cql/CqlErrorsAndMessagingOperatorsTest.xml +++ b/tests/cql/CqlErrorsAndMessagingOperatorsTest.xml @@ -1,20 +1,26 @@ + + + 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..fb752bc 100644 --- a/tests/cql/CqlIntervalOperatorsTest.xml +++ b/tests/cql/CqlIntervalOperatorsTest.xml @@ -1,630 +1,793 @@ + + + (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 @@ -634,1101 +797,1385 @@ + + Interval[1, 10] includes null null + Interval[1, 10] includes Interval[4, 10] true + Interval[1, 10] includes Interval[44, 50] false + Interval[1.0, 10.0] includes Interval[4.0, 10.0] true + Interval[1.0, 10.0] includes Interval[11.0, 20.0] false + Interval[1.0 'g', 10.0 'g'] includes Interval[5.0 'g', 10.0 'g'] true + Interval[1.0 'g', 10.0 'g'] includes Interval[11.0 'g', 20.0 'g'] false + Interval[DateTime(2012, 1, 5), DateTime(2012, 1, 15)] includes Interval[DateTime(2012, 1, 7), DateTime(2012, 1, 14)] true + Interval[DateTime(2012, 1, 5), DateTime(2012, 1, 15)] includes Interval[DateTime(2012, 1, 4), DateTime(2012, 1, 14)] false + Interval[@T05:59:59.999, @T10:59:59.999] includes Interval[@T06:59:59.999, @T09:59:59.999] true + Interval[@T05:59:59.999, @T10:59:59.999] includes Interval[@T04:59:59.999, @T09:59:59.999] false + + null included in Interval[1, 10] null + Interval[4, 10] included in Interval[1, 10] true + Interval[44, 50] included in Interval[1, 10] false + Interval[4.0, 10.0] included in Interval[1.0, 10.0] true + Interval[11.0, 20.0] included in Interval[1.0, 10.0] false + Interval[5.0 'g', 10.0 'g'] included in Interval[1.0 'g', 10.0 'g'] true + Interval[11.0 'g', 20.0 'g'] included in Interval[1.0 'g', 10.0 'g'] false + Interval[DateTime(2012, 1, 7), DateTime(2012, 1, 14)] included in Interval[DateTime(2012, 1, 5), DateTime(2012, 1, 15)] true + Interval[DateTime(2012, 1, 4), DateTime(2012, 1, 14)] included in Interval[DateTime(2012, 1, 5), DateTime(2012, 1, 15)] false + Interval[@T06:59:59.999, @T09:59:59.999] included in Interval[@T05:59:59.999, @T10:59:59.999] true + Interval[@T04:59:59.999, @T09:59:59.999] included in Interval[@T05:59:59.999, @T10:59:59.999] false + Interval [@2017-09-01T00:00:00, @2017-09-01T00:00:00] included in Interval [@2017-09-01T00:00:00.000, @2017-12-30T23:59:59.999] null + Interval [@2017-09-01T00:00:00, @2017-09-01T00:00:00] included in day of Interval [@2017-09-01T00:00:00.000, @2017-12-30T23:59:59.999] true + Interval [@2017-09-01T00:00:00, @2017-09-01T00:00:00] included in millisecond of Interval [@2017-09-01T00:00:00.000, @2017-12-30T23:59:59.999] null + + Interval[1, 10] intersect Interval[5, null) Interval[5, null) + start of (Interval[1, 10] intersect Interval[5, null)) <= 10 true + start of (Interval[1, 10] intersect Interval[5, null)) >= 5 true + start of (Interval[1, 10] intersect Interval[5, null)) > 10 false + start of (Interval[1, 10] intersect Interval[5, null)) < 5 false + Interval[1, 10] intersect Interval[4, 10] Interval [ 4, 10 ] + Interval[1, 10] intersect Interval[11, 20] null + Interval[1.0, 10.0] intersect Interval[4.0, 10.0] Interval [ 4.0, 10.0 ] + Interval[1.0, 10.0] intersect Interval[11.0, 20.0] null + Interval[1.0 'g', 10.0 'g'] intersect Interval[5.0 'g', 10.0 'g'] Interval [ 5.0 'g', 10.0 'g' ] + Interval[1.0 'g', 10.0 'g'] intersect Interval[11.0 'g', 20.0 'g'] null + Interval[DateTime(2012, 1, 7), DateTime(2012, 1, 14)] intersect Interval[DateTime(2012, 1, 7), DateTime(2012, 1, 10)] Interval [ @2012-01-07T, @2012-01-10T ] + Interval[@T04:59:59.999, @T09:59:59.999] intersect Interval[@T04:59:59.999, @T06:59:59.999] Interval [ @T04:59:59.999, @T06:59:59.999 ] + + Interval[1, 10] ~ Interval[1, 10] true + Interval[44, 50] ~ Interval[1, 10] false + Interval[1.0, 10.0] ~ Interval[1.0, 10.0] true + Interval[11.0, 20.0] ~ Interval[1.0, 10.0] false + Interval[1.0 'g', 10.0 'g'] ~ Interval[1.0 'g', 10.0 'g'] true + Interval[11.0 'g', 20.0 'g'] ~ Interval[1.0 'g', 10.0 'g'] false + Interval[DateTime(2012, 1, 7), DateTime(2012, 1, 14)] ~ Interval[DateTime(2012, 1, 7), DateTime(2012, 1, 14)] true + Interval[DateTime(2012, 1, 7), DateTime(2012, 1, 14)] ~ Interval[DateTime(2012, 1, 7), DateTime(2012, 1, 15)] false + Interval[@T04:59:59.999, @T09:59:59.999] ~ Interval[@T04:59:59.999, @T09:59:59.999] true + Interval[@T04:59:59.999, @T09:59:59.999] ~ Interval[@T04:58:59.999, @T09:59:59.999] false + + Interval(null, 5] meets Interval(null, 15) null + Interval[1, 10] meets Interval[11, 20] true + Interval[1, 10] meets Interval[44, 50] false + Interval[3.01, 5.00000001] meets Interval[5.00000002, 8.50] true + Interval[3.01, 5.00000001] meets Interval[5.5, 8.50] false + Interval[3.01 'g', 5.00000001 'g'] meets Interval[5.00000002 'g', 8.50 'g'] true + Interval[3.01 'g', 5.00000001 'g'] meets Interval[5.5 'g', 8.50 'g'] false + Interval[DateTime(2012, 1, 7), DateTime(2012, 1, 14)] meets Interval[DateTime(2012, 1, 15), DateTime(2012, 1, 25)] true + Interval[DateTime(2012, 1, 7), DateTime(2012, 1, 14)] meets Interval[DateTime(2012, 1, 20), DateTime(2012, 1, 25)] false + Interval[@T04:59:59.999, @T09:59:59.999] meets Interval[@T10:00:00.000, @T19:59:59.999] true + Interval[@T04:59:59.999, @T09:59:59.999] meets Interval[@T10:12:00.000, @T19:59:59.999] false + + Interval(null, 5] meets before Interval(null, 25] null + Interval[1, 10] meets before Interval[11, 20] true + Interval[1, 10] meets before Interval[44, 50] false + Interval[3.50000001, 5.00000011] meets before Interval[5.00000012, 8.50] true + Interval[8.01, 15.00000001] meets before Interval[15.00000000, 18.50] false + Interval[3.50000001 'g', 5.00000011 'g'] meets before Interval[5.00000012 'g', 8.50 'g'] true + Interval[8.01 'g', 15.00000001 'g'] meets before Interval[15.00000000 'g', 18.50 'g'] false + Interval[DateTime(2012, 1, 7), DateTime(2012, 1, 14)] meets Interval[DateTime(2012, 1, 15), DateTime(2012, 1, 25)] true + Interval[DateTime(2012, 1, 7), DateTime(2012, 1, 14)] meets Interval[DateTime(2012, 1, 20), DateTime(2012, 1, 25)] false + Interval[@T04:59:59.999, @T09:59:59.999] meets Interval[@T10:00:00.000, @T19:59:59.999] true + Interval[@T04:59:59.999, @T09:59:59.999] meets Interval[@T10:12:00.000, @T19:59:59.999] false + + Interval(null, 5] meets after Interval[11, null) false + Interval[11, 20] meets after Interval[1, 10] true + Interval[44, 50] meets after Interval[1, 10] false + Interval[55.00000123, 128.032156] meets after Interval[12.00258, 55.00000122] true + Interval[55.00000124, 150.222222] meets after Interval[12.00258, 55.00000122] false + Interval[55.00000123 'g', 128.032156 'g'] meets after Interval[12.00258 'g', 55.00000122 'g'] true + Interval[55.00000124 'g', 150.222222 'g'] meets after Interval[12.00258 'g', 55.00000122 'g'] false + Interval[DateTime(2012, 1, 15), DateTime(2012, 1, 25)] meets Interval[DateTime(2012, 1, 7), DateTime(2012, 1, 14)] true + Interval[DateTime(2012, 1, 20), DateTime(2012, 1, 25)] meets Interval[DateTime(2012, 1, 7), DateTime(2012, 1, 14)] false + Interval[@T10:00:00.000, @T19:59:59.999] meets Interval[@T04:59:59.999, @T09:59:59.999] true + Interval[@T10:12:00.000, @T19:59:59.999] meets Interval[@T04:59:59.999, @T09:59:59.999] false + + Interval[1, 10] != Interval[11, 20] true + Interval[1, 10] != Interval[1, 10] false + Interval[1.0, 10.0] != Interval[11.0, 20.0] true + Interval[1.0, 10.0] != Interval[1.0, 10.0] false + Interval[1.0 'g', 10.0 'g'] != Interval[11.0 'g', 20.0 'g'] true + Interval[1.0 'g', 10.0 'g'] != Interval[1.0 'g', 10.0 'g'] false + Interval[DateTime(2012, 1, 15, 0, 0, 0, 0), DateTime(2012, 1, 25, 0, 0, 0, 0)] != Interval[DateTime(2012, 1, 15, 0, 0, 0, 0), DateTime(2012, 1, 25, 0, 0, 0, 22)] true + Interval[DateTime(2012, 1, 15, 0, 0, 0, 0), DateTime(2012, 1, 25, 0, 0, 0, 0)] != Interval[DateTime(2012, 1, 15, 0, 0, 0, 0), DateTime(2012, 1, 25, 0, 0, 0, 0)] false + Interval[@T10:00:00.000, @T19:59:59.999] != Interval[@T10:10:00.000, @T19:59:59.999] true + Interval[@T10:00:00.000, @T19:59:59.999] != Interval[@T10:00:00.000, @T19:59:59.999] false + + Interval[@2012-12-01, @2013-12-01] on or after (null as Interval<Date>) null + Interval[@2012-12-01, @2013-12-01] on or after month of @2012-11-15 true + @2012-11-15 on or after month of Interval[@2012-12-01, @2013-12-01] false + Interval[@T10:00:00.000, @T19:59:59.999] on or after hour of Interval[@T08:00:00.000, @T09:59:59.999] true + Interval[@T10:00:00.000, @T19:59:59.999] on or after hour of Interval[@T08:00:00.000, @T11:59:59.999] false + Interval[6, 10] on or after 6 true + 2.5 on or after Interval[1.666, 2.50000001] false + 2.5 'mg' on or after Interval[1.666 'mg', 2.50000000 'mg'] true + + Interval[@2012-12-01, @2013-12-01] on or before (null as Interval<Date>) null + Interval[@2012-10-01, @2012-11-01] on or before month of @2012-11-15 true + @2012-11-15 on or before month of Interval[@2012-10-01, @2013-12-01] false + Interval[@T05:00:00.000, @T07:59:59.999] on or before hour of Interval[@T08:00:00.000, @T09:59:59.999] true + Interval[@T10:00:00.000, @T19:59:59.999] on or before hour of Interval[@T08:00:00.000, @T11:59:59.999] false + Interval[4, 6] on or before 6 true + 1.6667 on or before Interval[1.666, 2.50000001] false + 1.666 'mg' on or before Interval[1.666 'mg', 2.50000000 'mg'] true + + Interval[null, null] overlaps Interval[1, 10] null + Interval[1, 10] overlaps Interval[4, 10] true + Interval[4, 10] overlaps Interval[4, 10] true + Interval[10, 15] overlaps Interval[4, 10] true + Interval[1, 10] overlaps Interval[11, 20] false + Interval[4, 10) overlaps Interval[4, 10) true + Interval[4, 11) overlaps Interval[10, 20] true + Interval[4, 10] overlaps Interval(9, 20] true + Interval[4, 11) overlaps Interval(9, 20] true + Interval[4, 10] overlaps Interval(10, 20] false + + Interval[4, 10) overlaps Interval[10, 20] false + Interval[4, 10) overlaps Interval(10, 20] false + Interval[4, 10) overlaps Interval(9, 20] false + Interval[1.0, 10.0] overlaps Interval[4.0, 10.0] true + Interval[1.0, 10.0] overlaps Interval[11.0, 20.0] false + Interval[1.0 'g', 10.0 'g'] overlaps Interval[5.0 'g', 10.0 'g'] true + Interval[1.0 'g', 10.0 'g'] overlaps Interval[11.0 'g', 20.0 'g'] false + Interval[DateTime(2012, 1, 5), DateTime(2012, 1, 25)] overlaps Interval[DateTime(2012, 1, 15), DateTime(2012, 1, 28)] true + Interval[DateTime(2012, 1, 5), DateTime(2012, 1, 25)] overlaps Interval[DateTime(2012, 1, 26), DateTime(2012, 1, 28)] false + Interval[DateTime(2012, 2, 25), DateTime(2012, 3, 26)] overlaps Interval[DateTime(2012, 1, 10), DateTime(2012, 2)] null + Interval[DateTime(2012, 1, 25), DateTime(2012, 2, 26)] overlaps Interval[DateTime(2012, 2), DateTime(2012, 3, 28)] null + Interval[DateTime(2012, 2), DateTime(2012, 3)] overlaps Interval[DateTime(2011, 1, 10), DateTime(2012)] null + Interval[DateTime(2012), DateTime(2013, 3)] overlaps Interval[DateTime(2012, 2), DateTime(2013, 2)] true + Interval[DateTime(2012, 2), DateTime(2013)] overlaps Interval[DateTime(2012, 3), DateTime(2013, 2)] true + Interval[@T10:00:00.000, @T19:59:59.999] overlaps Interval[@T12:00:00.000, @T21:59:59.999] true + Interval[@T10:00:00.000, @T19:59:59.999] overlaps Interval[@T20:00:00.000, @T21:59:59.999] false + + Interval[null, null] overlaps before Interval[1, 10] null + Interval[1, 10] overlaps before Interval[4, 10] true + Interval[4, 10] overlaps before Interval[1, 10] false + Interval[4, 10] overlaps before Interval[4, 10] false + Interval[4, 10] overlaps before Interval(4, 10] true + Interval(3, 10] overlaps before Interval(4, 10] true + Interval(3, 10] overlaps before Interval[5, 10] true + Interval(3, 10] overlaps before Interval(3, 10] false + Interval(3, 10] overlaps before Interval[4, 10] false + Interval[4, 10] overlaps before Interval(3, 10] false + Interval[1.0, 10.0] overlaps before Interval[4.0, 10.0] true + Interval[4.0, 10.0] overlaps before Interval[1.0, 10.0] false + Interval[1.0 'g', 10.0 'g'] overlaps before Interval[5.0 'g', 10.0 'g'] true + Interval[5.0 'g', 10.0 'g'] overlaps before Interval[1.0 'g', 10.0 'g'] false + Interval[DateTime(2012, 1, 5), DateTime(2012, 1, 25)] overlaps Interval[DateTime(2012, 1, 15), DateTime(2012, 1, 28)] true + Interval[DateTime(2012, 1, 5), DateTime(2012, 1, 25)] overlaps Interval[DateTime(2012, 1, 26), DateTime(2012, 1, 28)] false + Interval[@T10:00:00.000, @T19:59:59.999] overlaps Interval[@T12:00:00.000, @T21:59:59.999] true + Interval[@T10:00:00.000, @T19:59:59.999] overlaps Interval[@T20:00:00.000, @T21:59:59.999] false + + Interval[null, null] overlaps after Interval[1, 10] null + Interval[4, 15] overlaps after Interval[1, 10] true + Interval[4, 10] overlaps after Interval[1, 10] false + Interval[4, 10] overlaps after Interval[4, 10] false + Interval[4, 11) overlaps after Interval[4, 9] true + Interval[4, 11) overlaps after Interval[4, 10) true + Interval[4, 10] overlaps after Interval[4, 10) true + Interval[4, 11) overlaps after Interval[4, 11) false + Interval[4, 11) overlaps after Interval[4, 10] false + Interval[4, 10] overlaps after Interval[4, 11) false + Interval[4.0, 15.0] overlaps after Interval[1.0, 10.0] true + Interval[4.0, 10.0] overlaps after Interval[1.0, 10.0] false + Interval[5.0 'g', 15.0 'g'] overlaps after Interval[1.0 'g', 10.0 'g'] true + Interval[5.0 'g', 10.0 'g'] overlaps after Interval[1.0 'g', 10.0 'g'] false + Interval[DateTime(2012, 1, 15), DateTime(2012, 1, 28)] overlaps Interval[DateTime(2012, 1, 5), DateTime(2012, 1, 25)] true + Interval[DateTime(2012, 1, 26), DateTime(2012, 1, 28)] overlaps Interval[DateTime(2012, 1, 5), DateTime(2012, 1, 25)] false + Interval[@T12:00:00.000, @T21:59:59.999] overlaps Interval[@T10:00:00.000, @T19:59:59.999] true + Interval[@T20:00:00.000, @T21:59:59.999] overlaps Interval[@T10:00:00.000, @T19:59:59.999] false + + point from Interval[null, null] null + point from Interval[1, 1] 1 + point from Interval[1.0, 1.0] 1.0 + point from Interval[1.0 'cm', 1.0 'cm'] 1.0'cm' + + Interval[@T12:00:00.000, @T21:59:59.999] properly includes @T12:00:00.001 true + Interval[@T12:00:00.000, @T21:59:59.999] properly includes @T12:00:00.000 false + Interval[@T12:00:00.001, @T21:59:59.999] properly includes @T12:00:00 null + Interval[@T12:00:00.000, @T21:59:59.999] properly includes second of @T12:00:01 true + Interval[@T12:00:00.001, @T21:59:59.999] properly includes second of @T12:00:00 false + Interval[@T12:00:00.001, @T21:59:59.999] properly includes millisecond of @T12:00:00 null + + @T12:00:00.001 properly included in Interval[@T12:00:00.000, @T21:59:59.999] true + @T12:00:00.000 properly included in Interval[@T12:00:00.000, @T21:59:59.999] false + @T12:00:00 properly included in Interval[@T12:00:00.001, @T21:59:59.999] null + @T12:00:01 properly included in second of Interval[@T12:00:00.000, @T21:59:59.999] true + @T12:00:00 properly included in second of Interval[@T12:00:00.001, @T21:59:59.999] false + @T12:00:00 properly included in millisecond of Interval[@T12:00:00.001, @T21:59:59.999] null + + Interval[null as Integer, null as Integer] properly includes Interval[1, 10] true + Interval[1, 10] properly includes Interval[4, 10] true + Interval[1, 10] properly includes Interval[4, 15] false + Interval[1.0, 10.0] properly includes Interval[4.0, 10.0] true + Interval[1.0, 10.0] properly includes Interval[4.0, 15.0] false + Interval[1.0 'g', 10.0 'g'] properly includes Interval[5.0 'g', 10.0 'g'] true + Interval[1.0 'g', 10.0 'g'] properly includes Interval[5.0 'g', 15.0 'g'] false + Interval[DateTime(2012, 1, 15), DateTime(2012, 1, 28)] properly includes Interval[DateTime(2012, 1, 16), DateTime(2012, 1, 27)] true + Interval[DateTime(2012, 1, 15), DateTime(2012, 1, 28)] properly includes Interval[DateTime(2012, 1, 16), DateTime(2012, 1, 29)] false + Interval[@T12:00:00.000, @T21:59:59.999] properly includes Interval[@T12:01:01.000, @T21:59:59.998] true + Interval[@T12:00:00.000, @T21:59:59.999] properly includes Interval[@T12:01:01.000, @T22:00:00.000] false + + Interval[1, 10] properly included in Interval[null, null] true + Interval[4, 10] properly included in Interval[1, 10] true + Interval[4, 15] properly included in Interval[1, 10] false + Interval[4.0, 10.0] properly included in Interval[1.0, 10.0] true + Interval[4.0, 15.0] properly included in Interval[1.0, 10.0] false + Interval[5.0 'g', 10.0 'g'] properly included in Interval[1.0 'g', 10.0 'g'] true + Interval[1.0 'g', 10.0 'g'] properly included in Interval[5.0 'g', 15.0 'g'] false + Interval[DateTime(2012, 1, 16), DateTime(2012, 1, 27)] properly included in Interval[DateTime(2012, 1, 15), DateTime(2012, 1, 28)] true + Interval[DateTime(2012, 1, 16), DateTime(2012, 1, 29)] properly included in Interval[DateTime(2012, 1, 15), DateTime(2012, 1, 28)] false + Interval[@T12:01:01.000, @T21:59:59.998] properly included in Interval[@T12:00:00.000, @T21:59:59.999] true + Interval[@T12:01:01.000, @T22:00:00.000] properly included in Interval[@T12:00:00.000, @T21:59:59.999] false + + start of Interval[1, 10] 1 + start of Interval[1.0, 10.0] 1.0 + start of Interval[1.0 'g', 10.0 'g'] 1.0'g' + start of Interval[@2016-05-01T00:00:00.000, @2016-05-02T00:00:00.000] @2016-05-01T00:00:00.000 + start of Interval[@T00:00:00.000, @T23:59:59.599] @T00:00:00.000 + + Interval[null, null] starts Interval[1, 10] null + Interval[4, 10] starts Interval[4, 15] true + Interval[1, 10] starts Interval[4, 10] false + Interval[4.0, 10.0] starts Interval[4.0, 15.0] true + Interval[1.0, 10.0] starts Interval[4.0, 10.0] false + Interval[5.0 'g', 10.0 'g'] starts Interval[5.0 'g', 15.0 'g'] true + Interval[1.0 'g', 10.0 'g'] starts Interval[5.0 'g', 10.0 'g'] false + Interval[DateTime(2012, 1, 5), DateTime(2012, 1, 25)] starts Interval[DateTime(2012, 1, 5), DateTime(2012, 1, 27)] true + Interval[DateTime(2012, 1, 5), DateTime(2012, 1, 25)] starts Interval[DateTime(2012, 1, 6), DateTime(2012, 1, 27)] false + Interval[@T05:59:59.999, @T15:59:59.999] starts Interval[@T05:59:59.999, @T17:59:59.999] true + Interval[@T05:59:59.999, @T15:59:59.999] starts Interval[@T04:59:59.999, @T17:59:59.999] false + + Interval[null, null] union Interval[1, 10] null + Interval[1, 10] union Interval[4, 15] Interval [ 1, 15 ] + Interval[1, 10] union Interval[44, 50] null + Interval[1.0, 10.0] union Interval[4.0, 15.0] Interval [ 1.0, 15.0 ] + Interval[1.0, 10.0] union Interval[14.0, 15.0] null + Interval[1.0 'g', 10.0 'g'] union Interval[5.0 'g', 15.0 'g'] Interval [ 1.0 'g', 15.0 'g' ] + Interval[1.0 'g', 10.0 'g'] union Interval[14.0 'g', 15.0 'g'] null + Interval[DateTime(2012, 1, 5), DateTime(2012, 1, 25)] union Interval[DateTime(2012, 1, 25), DateTime(2012, 1, 28)] Interval [ @2012-01-05T, @2012-01-28T ] + Interval[DateTime(2012, 1, 5), DateTime(2012, 1, 25)] union Interval[DateTime(2012, 1, 27), DateTime(2012, 1, 28)] null + Interval[@T05:59:59.999, @T15:59:59.999] union Interval[@T10:59:59.999, @T20:59:59.999] Interval [ @T05:59:59.999, @T20:59:59.999 ] + Interval[@T05:59:59.999, @T15:59:59.999] union Interval[@T16:59:59.999, @T20:59:59.999] null + + width of Interval[1, 10] 9 + width of (null as Interval<Any>) null + width of Interval[4.0, 15.0] 11.0 + width of Interval[5.0 'g', 10.0 'g'] 5.0'g' + width of Interval[DateTime(2012, 1, 5), DateTime(2012, 1, 25)] + width of Interval[@T05:59:59.999, @T15:59:59.999] + + Interval[1, 10] Interval[1, 10] + Interval[11, 20] Interval[11, 20] + Interval[44, 50] Interval[44, 50] + Interval[4, 10] Interval[4, 10] + Interval[4, 15] Interval[4, 15] + Interval[1.0, 10.0] Interval[1.0, 10.0] + Interval[11.0, 20.0] Interval[11.0, 20.0] + Interval[4.0, 10.0] Interval[4.0, 10.0] + Interval[4.0, 15.0] Interval[4.0, 15.0] + Interval[14.0, 15.0] Interval[14.0, 15.0] + Interval[1.0 'g', 10.0 'g'] Interval[1.0 'g', 10.0 'g'] + Interval[11.0 'g', 20.0 'g'] Interval[11.0 'g', 20.0 'g'] + Interval[5.0 'g', 10.0 'g'] Interval[5.0 'g', 10.0 'g'] + Interval[5.0 'g', 15.0 'g'] Interval[5.0 'g', 15.0 'g'] + Interval[14.0 'g', 15.0 'g'] Interval[14.0 'g', 15.0 'g'] + Interval[@2016-05-01T00:00:00.000, @2016-05-02T00:00:00.000] Interval[@2016-05-01T00:00:00.000, @2016-05-02T00:00:00.000] + Interval[@T00:00:00.000, @T23:59:59.599] Interval[@T00:00:00.000, @T23:59:59.599] + {Interval[1, 10], Interval[11, 20], Interval[44, 50]} {Interval[1, 10], Interval[11, 20], Interval[44, 50]} + Interval[5, 3] + Interval[5, 5) diff --git a/tests/cql/CqlListOperatorsTest.xml b/tests/cql/CqlListOperatorsTest.xml index a6065e9..3319102 100644 --- a/tests/cql/CqlListOperatorsTest.xml +++ b/tests/cql/CqlListOperatorsTest.xml @@ -1,916 +1,1157 @@ + + + ({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..5b71371 100644 --- a/tests/cql/CqlLogicalOperatorsTest.xml +++ b/tests/cql/CqlLogicalOperatorsTest.xml @@ -1,169 +1,214 @@ + + + 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..d3b89bc 100644 --- a/tests/cql/CqlNullologicalOperatorsTest.xml +++ b/tests/cql/CqlNullologicalOperatorsTest.xml @@ -1,98 +1,125 @@ + + + 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..c7ce167 100644 --- a/tests/cql/CqlQueryTests.xml +++ b/tests/cql/CqlQueryTests.xml @@ -1,56 +1,72 @@ + + + (4) l 4 + (4) l return 'Hello World' 'Hello World' + from ({2, 3}) A, ({5, 6}) B {{ A: 2, B: 5 }, { A: 2, B: 6 }, { A: 3, B: 5 }, { A: 3, B: 6 }} + + ({1, 2, 3}) l sort desc {3, 2, 1} + ({1, 3, 2}) l sort ascending {1, 2, 3} + ({@2013-01-02T00:00:00.000Z, @2014-01-02T00:00:00.000Z, @2015-01-02T00:00:00.000Z}) l sort desc {@2015-01-02T00:00:00.000Z, @2014-01-02T00:00:00.000Z, @2013-01-02T00:00:00.000Z} + ({@2013-01-02T00:00:00.000Z, @2015-01-02T00:00:00.000Z, @2014-01-02T00:00:00.000Z}) l sort ascending {@2013-01-02T00:00:00.000Z, @2014-01-02T00:00:00.000Z, @2015-01-02T00:00:00.000Z} + + ({1, 2, 3, 3, 4}) L aggregate A starting 1: A * L 72 + ({1, 2, 3, 3, 4}) L aggregate all A starting 1: A * L 72 + ({1, 2, 3, 3, 4}) L aggregate distinct A starting 1: A * L 24 + ({1, 2, 3}) L aggregate A : A * L null + from ({1, 2, 3}) B, (4) C aggregate A : A + B + C null diff --git a/tests/cql/CqlStringOperatorsTest.xml b/tests/cql/CqlStringOperatorsTest.xml index 007789f..5d4cde8 100644 --- a/tests/cql/CqlStringOperatorsTest.xml +++ b/tests/cql/CqlStringOperatorsTest.xml @@ -1,359 +1,456 @@ + + + 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..64bff23 100644 --- a/tests/cql/CqlTypeOperatorsTest.xml +++ b/tests/cql/CqlTypeOperatorsTest.xml @@ -1,69 +1,89 @@ + + + 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 +93,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..452d75c 100644 --- a/tests/cql/CqlTypesTest.xml +++ b/tests/cql/CqlTypesTest.xml @@ -3,6 +3,7 @@ name="CqlTypesTest" reference="https://cql.hl7.org/09-b-cqlreference.html#types-2" version="1.0"> + + 5.0 'g' 5.0'g' + DateTime(2012, 4, 4) @2012-04-04T + @T09:00:00.000 @T09:00:00.000 + Interval[2, 7] Interval[2, 7] + {1, 2, 3} {1, 2, 3} + Tuple { id: 5, name: 'Chris'} Tuple { id: 5, name: 'Chris'} + Tuple { id: 5, name: 'Chris'}.name 'Chris' + + + DateTime(null) null + DateTime(10000, 12, 31, 23, 59, 59, 999) + DateTime(0000, 1, 1, 0, 0, 0, 0) + DateTime(2016, 7, 7, 6, 25, 33, 910) @2016-07-07T06:25:33.910 + DateTime(2015, 2, 10) @2015-02-10T + days between DateTime(2015, 2, 10) and DateTime(2015, 3) Interval [ 18, 49 ] + DateTime(0001, 1, 1, 0, 0, 0, 0) @0001-01-01T00:00:00.000 + DateTime(9999, 12, 31, 23, 59, 59, 999) @9999-12-31T23:59:59.999 + hour from @2015-02-10T is null true + + + + + 150.2 '[lb_av]' 150.2 '[lb_av]' + 2.5589 '{eskimo kisses}' 2.5589 '{eskimo kisses}' + 5.999999999 'g' 5.999999999 'g' + + '\'I start with a single quote and end with a double quote\"' '\u0027I start with a single quote and end with a double quote\u0022' + '\u0048\u0069' 'Hi' + + @T24:59:59.999 + @T23:60:59.999 + @T23:59:60.999 + @T23:59:59.10000 + @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..8317b89 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,92 +34,114 @@ + + 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 @@ -124,179 +152,222 @@ + + 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 @@ + + + + + + + +