@@ -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