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