@@ -43,4 +43,197 @@ class TestTimePeriodChain: XCTestCase {
4343 XCTAssert ( chain. periods [ 3 ] . duration == originalDuration_2, " Unexpected duration of 3 period – Actual: \( chain. periods [ 3 ] . duration) – Expected: \( originalDuration_2) " )
4444 XCTAssert ( chain. periods [ 4 ] . duration == originalDuration_3, " Unexpected duration of 4 period – Actual: \( chain. periods [ 4 ] . duration) – Expected: \( originalDuration_3) " )
4545 }
46+
47+ func testPrependPeriod ( ) {
48+ let period = TimePeriod ( start: . init( year: 2020 , month: 1 , day: 1 ) , end: . init( year: 2020 , month: 1 , day: 20 ) )
49+ let chain = TimePeriodChain ( periods)
50+
51+ chain. prepend ( period)
52+
53+ XCTAssert (
54+ chain [ 0 ] . start == DateInRegion ( year: 2020 , month: 1 , day: 13 ) ,
55+ " Prepended TimePeriodChain contains unexpected period start date – Actual: \( chain [ 0 ] . start!) – Expected: \( DateInRegion ( year: 2020 , month: 1 , day: 13 ) ) "
56+ )
57+
58+ XCTAssert (
59+ chain [ 1 ] . start == DateInRegion ( year: 2020 , month: 2 , day: 1 ) ,
60+ " Prepended TimePeriodChain contains unexpected period start date – Actual: \( chain [ 1 ] . start!) – Expected: \( DateInRegion ( year: 2020 , month: 2 , day: 1 ) ) "
61+ )
62+
63+ XCTAssert (
64+ chain [ 2 ] . start == DateInRegion ( year: 2020 , month: 3 , day: 1 ) ,
65+ " Prepended TimePeriodChain contains unexpected period start date – Actual: \( chain [ 2 ] . start!) – Expected: \( DateInRegion ( year: 2020 , month: 3 , day: 1 ) ) "
66+ )
67+
68+ XCTAssert (
69+ chain [ 3 ] . start == DateInRegion ( year: 2020 , month: 4 , day: 1 ) ,
70+ " Prepended TimePeriodChain contains unexpected period start date – Actual: \( chain [ 3 ] . start!) – Expected: \( DateInRegion ( year: 2020 , month: 4 , day: 1 ) ) "
71+ )
72+
73+ XCTAssert (
74+ chain [ 4 ] . start == DateInRegion ( year: 2020 , month: 5 , day: 1 ) ,
75+ " Prepended TimePeriodChain contains unexpected period start date – Actual: \( chain [ 4 ] . start!) – Expected: \( DateInRegion ( year: 2020 , month: 5 , day: 1 ) ) "
76+ )
77+ }
78+
79+ func testPrependGroup ( ) {
80+ let testPeriods = [
81+ TimePeriod ( start: . init( year: 2019 , month: 10 , day: 1 ) , end: . init( year: 2019 , month: 10 , day: 31 ) ) ,
82+ TimePeriod ( start: . init( year: 2019 , month: 11 , day: 1 ) , end: . init( year: 2019 , month: 11 , day: 30 ) ) ,
83+ TimePeriod ( start: . init( year: 2019 , month: 12 , day: 1 ) , end: . init( year: 2019 , month: 12 , day: 31 ) ) ,
84+ ]
85+ let group = TimePeriodGroup ( testPeriods)
86+ let chain = TimePeriodChain ( periods)
87+
88+ chain. prepend ( contentsOf: group)
89+
90+ XCTAssert (
91+ chain [ 0 ] . start == DateInRegion ( year: 2019 , month: 11 , day: 4 ) ,
92+ " Prepended TimePeriodChain contains unexpected period start date – Actual: \( chain [ 0 ] . start!) – Expected: \( DateInRegion ( year: 2019 , month: 11 , day: 1 ) ) "
93+ )
94+
95+ XCTAssert (
96+ chain [ 1 ] . start == DateInRegion ( year: 2019 , month: 12 , day: 4 ) ,
97+ " Prepended TimePeriodChain contains unexpected period start date – Actual: \( chain [ 1 ] . start!) – Expected: \( DateInRegion ( year: 2019 , month: 12 , day: 4 ) ) "
98+ )
99+
100+ XCTAssert (
101+ chain [ 2 ] . start == DateInRegion ( year: 2020 , month: 1 , day: 2 ) ,
102+ " Prepended TimePeriodChain contains unexpected period start date – Actual: \( chain [ 2 ] . start!) – Expected: \( DateInRegion ( year: 2020 , month: 1 , day: 2 ) ) "
103+ )
104+
105+ XCTAssert (
106+ chain [ 3 ] . start == DateInRegion ( year: 2020 , month: 2 , day: 1 ) ,
107+ " Prepended TimePeriodChain contains unexpected period start date – Actual: \( chain [ 3 ] . start!) – Expected: \( DateInRegion ( year: 2020 , month: 2 , day: 1 ) ) "
108+ )
109+
110+ XCTAssert (
111+ chain [ 4 ] . start == DateInRegion ( year: 2020 , month: 3 , day: 1 ) ,
112+ " Prepended TimePeriodChain contains unexpected period start date – Actual: \( chain [ 4 ] . start!) – Expected: \( DateInRegion ( year: 2020 , month: 3 , day: 1 ) ) "
113+ )
114+
115+ XCTAssert (
116+ chain [ 5 ] . start == DateInRegion ( year: 2020 , month: 4 , day: 1 ) ,
117+ " Prepended TimePeriodChain contains unexpected period start date – Actual: \( chain [ 5 ] . start!) – Expected: \( DateInRegion ( year: 2020 , month: 4 , day: 1 ) ) "
118+ )
119+
120+ XCTAssert (
121+ chain [ 6 ] . start == DateInRegion ( year: 2020 , month: 5 , day: 1 ) ,
122+ " Prepended TimePeriodChain contains unexpected period start date – Actual: \( chain [ 6 ] . start!) – Expected: \( DateInRegion ( year: 2020 , month: 5 , day: 1 ) ) "
123+ )
124+ }
125+
126+ func testAppendPeriod ( ) {
127+ let period = TimePeriod ( start: . init( year: 2020 , month: 1 , day: 1 ) , end: . init( year: 2020 , month: 1 , day: 20 ) )
128+ let chain = TimePeriodChain ( periods)
129+
130+ chain. append ( period)
131+
132+ XCTAssert (
133+ chain [ 0 ] . end == DateInRegion ( year: 2020 , month: 2 , day: 28 ) ,
134+ " Appended TimePeriodChain contains unexpected period end date – Actual: \( chain [ 0 ] . end!) – Expected: \( DateInRegion ( year: 2020 , month: 2 , day: 28 ) ) "
135+ )
136+
137+ XCTAssert (
138+ chain [ 1 ] . end == DateInRegion ( year: 2020 , month: 3 , day: 31 ) ,
139+ " Appended TimePeriodChain contains unexpected period end date – Actual: \( chain [ 1 ] . end!) – Expected: \( DateInRegion ( year: 2020 , month: 3 , day: 31 ) ) "
140+ )
141+
142+ XCTAssert (
143+ chain [ 2 ] . end == DateInRegion ( year: 2020 , month: 4 , day: 30 ) ,
144+ " Appended TimePeriodChain contains unexpected period end date – Actual: \( chain [ 2 ] . end!) – Expected: \( DateInRegion ( year: 2020 , month: 4 , day: 30 ) ) "
145+ )
146+
147+ XCTAssert (
148+ chain [ 3 ] . end == DateInRegion ( year: 2020 , month: 5 , day: 31 ) ,
149+ " Appended TimePeriodChain contains unexpected period end date – Actual: \( chain [ 3 ] . end!) – Expected: \( DateInRegion ( year: 2020 , month: 5 , day: 31 ) ) "
150+ )
151+
152+ XCTAssert (
153+ chain [ 4 ] . end == DateInRegion ( year: 2020 , month: 6 , day: 19 ) ,
154+ " Appended TimePeriodChain contains unexpected period end date – Actual: \( chain [ 4 ] . end!) – Expected: \( DateInRegion ( year: 2020 , month: 6 , day: 19 ) ) "
155+ )
156+ }
157+
158+ func testAppendGroup ( ) {
159+ let testPeriods = [
160+ TimePeriod ( start: . init( year: 2019 , month: 10 , day: 1 ) , end: . init( year: 2019 , month: 10 , day: 31 ) ) ,
161+ TimePeriod ( start: . init( year: 2019 , month: 11 , day: 1 ) , end: . init( year: 2019 , month: 11 , day: 30 ) ) ,
162+ TimePeriod ( start: . init( year: 2019 , month: 12 , day: 1 ) , end: . init( year: 2019 , month: 12 , day: 31 ) ) ,
163+ ]
164+ let group = TimePeriodGroup ( testPeriods)
165+ let chain = TimePeriodChain ( periods)
166+
167+ chain. append ( contentsOf: group)
168+
169+ XCTAssert (
170+ chain [ 0 ] . end == DateInRegion ( year: 2020 , month: 2 , day: 28 ) ,
171+ " Prepended TimePeriodChain contains unexpected period end date – Actual: \( chain [ 0 ] . end!) – Expected: \( DateInRegion ( year: 2020 , month: 2 , day: 28 ) ) "
172+ )
173+
174+ XCTAssert (
175+ chain [ 1 ] . end == DateInRegion ( year: 2020 , month: 3 , day: 31 ) ,
176+ " Prepended TimePeriodChain contains unexpected period end date – Actual: \( chain [ 1 ] . end!) – Expected: \( DateInRegion ( year: 2020 , month: 3 , day: 31 ) ) "
177+ )
178+
179+ XCTAssert (
180+ chain [ 2 ] . end == DateInRegion ( year: 2020 , month: 4 , day: 30 ) ,
181+ " Prepended TimePeriodChain contains unexpected period end date – Actual: \( chain [ 2 ] . end!) – Expected: \( DateInRegion ( year: 2020 , month: 4 , day: 30 ) ) "
182+ )
183+
184+ XCTAssert (
185+ chain [ 3 ] . end == DateInRegion ( year: 2020 , month: 5 , day: 31 ) ,
186+ " Prepended TimePeriodChain contains unexpected period end date – Actual: \( chain [ 3 ] . end!) – Expected: \( DateInRegion ( year: 2020 , month: 5 , day: 31 ) ) "
187+ )
188+
189+ XCTAssert (
190+ chain [ 4 ] . end == DateInRegion ( year: 2020 , month: 6 , day: 30 ) ,
191+ " Prepended TimePeriodChain contains unexpected period end date – Actual: \( chain [ 4 ] . end!) – Expected: \( DateInRegion ( year: 2020 , month: 6 , day: 30 ) ) "
192+ )
193+
194+ XCTAssert (
195+ chain [ 5 ] . end == DateInRegion ( year: 2020 , month: 7 , day: 29 ) ,
196+ " Prepended TimePeriodChain contains unexpected period end date – Actual: \( chain [ 5 ] . end!) – Expected: \( DateInRegion ( year: 2020 , month: 7 , day: 29 ) ) "
197+ )
198+
199+ XCTAssert (
200+ chain [ 6 ] . end == DateInRegion ( year: 2020 , month: 8 , day: 28 ) ,
201+ " Prepended TimePeriodChain contains unexpected period end date – Actual: \( chain [ 6 ] . end!) – Expected: \( DateInRegion ( year: 2020 , month: 8 , day: 28 ) ) "
202+ )
203+ }
204+
205+ func testShiftStartToDate ( ) {
206+ let date = DateInRegion ( year: 2020 , month: 1 , day: 1 )
207+ let chain = TimePeriodChain ( periods)
208+
209+ chain. shiftStart ( to: date)
210+
211+ XCTAssert (
212+ chain. start == DateInRegion ( year: 2020 , month: 1 , day: 1 ) ,
213+ " Shifted TimePeriodChain has unexpected start date – Actual: \( chain. start!) – Expected: \( DateInRegion ( year: 2020 , month: 1 , day: 1 ) ) "
214+ )
215+
216+ XCTAssert (
217+ chain. end == DateInRegion ( year: 2020 , month: 4 , day: 30 ) ,
218+ " Shifted TimePeriodChain has unexpected end date – Actual: \( chain. end!) – Expected: \( DateInRegion ( year: 2020 , month: 4 , day: 30 ) ) "
219+ )
220+ }
221+
222+ func testShiftEndToDate ( ) {
223+ let date = DateInRegion ( year: 2020 , month: 1 , day: 1 )
224+ let chain = TimePeriodChain ( periods)
225+
226+ chain. shiftEnd ( to: date)
227+
228+ XCTAssert (
229+ chain. start == DateInRegion ( year: 2019 , month: 9 , day: 3 ) ,
230+ " Shifted TimePeriodChain has unexpected start date – Actual: \( chain. start!) – Expected: \( DateInRegion ( year: 2019 , month: 9 , day: 3 ) ) "
231+ )
232+
233+ XCTAssert (
234+ chain. end == DateInRegion ( year: 2020 , month: 1 , day: 1 ) ,
235+ " Shifted TimePeriodChain has unexpected end date – Actual: \( chain. end!) – Expected: \( DateInRegion ( year: 2020 , month: 1 , day: 1 ) ) "
236+ )
237+ }
238+
46239}
0 commit comments