1
+ /*
2
+ * Copyright (c) 2025, Firely, NCQA and contributors
3
+ * See the file CONTRIBUTORS for details.
4
+ *
5
+ * This file is licensed under the BSD 3-Clause license
6
+ * available at https://raw.githubusercontent.com/FirelyTeam/firely-cql-sdk/main/LICENSE
7
+ */
8
+
9
+ #nullable enable
10
+ using Hl7 . Cql . Iso8601 ;
11
+ using Hl7 . Cql . Primitives ;
12
+
13
+ namespace CoreTests ;
14
+
15
+ [ TestClass ]
16
+ [ TestCategory ( "UnitTest" ) ]
17
+ public class CqlDateTests
18
+ {
19
+ [ TestMethod ]
20
+ public void Add_Years ( )
21
+ {
22
+ var date = new CqlDate ( 2020 , 1 , 1 ) ;
23
+ var quantity = new CqlQuantity ( 2 , "year" ) ;
24
+ var result = date . Add ( quantity ) ;
25
+ Assert . AreEqual ( new CqlDate ( 2022 , 1 , 1 ) , result ) ;
26
+ }
27
+
28
+ [ TestMethod ]
29
+ public void Add_Months ( )
30
+ {
31
+ var date = new CqlDate ( 2020 , 1 , 31 ) ;
32
+ var quantity = new CqlQuantity ( 1 , "month" ) ;
33
+ var result = date . Add ( quantity ) ;
34
+ Assert . AreEqual ( new CqlDate ( 2020 , 2 , 29 ) , result ) ; // Leap year
35
+ }
36
+
37
+ [ TestMethod ]
38
+ public void Add_Days ( )
39
+ {
40
+ var date = new CqlDate ( 2020 , 2 , 27 ) ;
41
+ var quantity = new CqlQuantity ( 2 , "day" ) ;
42
+ var result = date . Add ( quantity ) ;
43
+ Assert . AreEqual ( new CqlDate ( 2020 , 2 , 29 ) , result ) ;
44
+ }
45
+
46
+ [ TestMethod ]
47
+ public void Subtract_Years ( )
48
+ {
49
+ var date = new CqlDate ( 2020 , 1 , 1 ) ;
50
+ var quantity = new CqlQuantity ( 5 , "year" ) ;
51
+ var result = date . Subtract ( quantity ) ;
52
+ Assert . AreEqual ( new CqlDate ( 2015 , 1 , 1 ) , result ) ;
53
+ }
54
+
55
+ [ TestMethod ]
56
+ public void Subtract_Months ( )
57
+ {
58
+ var date = new CqlDate ( 2020 , 3 , 31 ) ;
59
+ var quantity = new CqlQuantity ( 1 , "month" ) ;
60
+ var result = date . Subtract ( quantity ) ;
61
+ Assert . AreEqual ( new CqlDate ( 2020 , 2 , 29 ) , result ) ; // Leap year
62
+ }
63
+
64
+ [ TestMethod ]
65
+ public void Subtract_Days ( )
66
+ {
67
+ var date = new CqlDate ( 2020 , 3 , 1 ) ;
68
+ var quantity = new CqlQuantity ( 1 , "day" ) ;
69
+ var result = date . Subtract ( quantity ) ;
70
+ Assert . AreEqual ( new CqlDate ( 2020 , 2 , 29 ) , result ) ;
71
+ }
72
+
73
+ [ TestMethod ]
74
+ public void Operator_Addition ( )
75
+ {
76
+ var date = new CqlDate ( 2021 , 12 , 31 ) ;
77
+ var quantity = new CqlQuantity ( 1 , "day" ) ;
78
+ var result = date + quantity ;
79
+ Assert . AreEqual ( new CqlDate ( 2022 , 1 , 1 ) , result ) ;
80
+ }
81
+
82
+ [ TestMethod ]
83
+ public void Operator_Subtraction ( )
84
+ {
85
+ var date = new CqlDate ( 2022 , 1 , 1 ) ;
86
+ var quantity = new CqlQuantity ( 1 , "day" ) ;
87
+ var result = date - quantity ;
88
+ Assert . AreEqual ( new CqlDate ( 2021 , 12 , 31 ) , result ) ;
89
+ }
90
+
91
+ [ TestMethod ]
92
+ public void Add_NullQuantity_ReturnsNull ( )
93
+ {
94
+ var date = new CqlDate ( 2020 , 1 , 1 ) ;
95
+ CqlQuantity ? quantity = null ;
96
+ var result = date . Add ( quantity ) ;
97
+ Assert . IsNull ( result ) ;
98
+ }
99
+
100
+ [ TestMethod ]
101
+ public void Subtract_NullQuantity_ReturnsNull ( )
102
+ {
103
+ var date = new CqlDate ( 2020 , 1 , 1 ) ;
104
+ CqlQuantity ? quantity = null ;
105
+ var result = date . Subtract ( quantity ) ;
106
+ Assert . IsNull ( result ) ;
107
+ }
108
+
109
+ [ TestMethod ]
110
+ public void Operator_Addition_NullDate_ReturnsNull ( )
111
+ {
112
+ CqlDate ? date = null ;
113
+ var quantity = new CqlQuantity ( 1 , "day" ) ;
114
+ var result = date + quantity ;
115
+ Assert . IsNull ( result ) ;
116
+ }
117
+
118
+ [ TestMethod ]
119
+ public void Operator_Subtraction_NullDate_ReturnsNull ( )
120
+ {
121
+ CqlDate ? date = null ;
122
+ var quantity = new CqlQuantity ( 1 , "day" ) ;
123
+ var result = date - quantity ;
124
+ Assert . IsNull ( result ) ;
125
+ }
126
+ }
0 commit comments