9
9
import XCTest
10
10
@testable import PGNParser
11
11
12
+ // swiftlint:disable type_body_length
12
13
class DraughtsMoveTests : XCTestCase {
13
14
14
15
func testSingleValidMoveWhiteOnly( ) {
@@ -26,6 +27,7 @@ class DraughtsMoveTests: XCTestCase {
26
27
XCTAssertEqual ( 9 , firstMove. white. origin)
27
28
XCTAssertEqual ( 14 , firstMove. white. destination)
28
29
XCTAssertEqual ( false , firstMove. white. isCapture)
30
+ XCTAssertEqual ( [ ] , firstMove. white. intermediatePositions)
29
31
30
32
XCTAssertNil ( firstMove. black)
31
33
}
@@ -52,10 +54,12 @@ class DraughtsMoveTests: XCTestCase {
52
54
XCTAssertEqual ( 9 , firstMove. white. origin)
53
55
XCTAssertEqual ( 14 , firstMove. white. destination)
54
56
XCTAssertEqual ( false , firstMove. white. isCapture)
57
+ XCTAssertEqual ( [ ] , firstMove. white. intermediatePositions)
55
58
56
59
XCTAssertEqual ( 23 , firstMove. black? . origin)
57
60
XCTAssertEqual ( 18 , firstMove. black? . destination)
58
61
XCTAssertEqual ( false , firstMove. black? . isCapture)
62
+ XCTAssertEqual ( [ ] , firstMove. black? . intermediatePositions ?? [ 0 ] )
59
63
}
60
64
61
65
case . failure( _) :
@@ -77,10 +81,12 @@ class DraughtsMoveTests: XCTestCase {
77
81
XCTAssertEqual ( 9 , firstMove. white. origin)
78
82
XCTAssertEqual ( 14 , firstMove. white. destination)
79
83
XCTAssertEqual ( false , firstMove. white. isCapture)
84
+ XCTAssertEqual ( [ ] , firstMove. white. intermediatePositions)
80
85
81
86
XCTAssertEqual ( 23 , firstMove. black? . origin)
82
87
XCTAssertEqual ( 18 , firstMove. black? . destination)
83
88
XCTAssertEqual ( false , firstMove. black? . isCapture)
89
+ XCTAssertEqual ( [ ] , firstMove. black? . intermediatePositions ?? [ 0 ] )
84
90
}
85
91
86
92
case . failure( _) :
@@ -102,20 +108,24 @@ class DraughtsMoveTests: XCTestCase {
102
108
XCTAssertEqual ( 9 , firstMove. white. origin)
103
109
XCTAssertEqual ( 14 , firstMove. white. destination)
104
110
XCTAssertEqual ( false , firstMove. white. isCapture)
111
+ XCTAssertEqual ( [ ] , firstMove. white. intermediatePositions)
105
112
106
113
XCTAssertEqual ( 23 , firstMove. black? . origin)
107
114
XCTAssertEqual ( 18 , firstMove. black? . destination)
108
115
XCTAssertEqual ( false , firstMove. black? . isCapture)
116
+ XCTAssertEqual ( [ ] , firstMove. black? . intermediatePositions ?? [ 0 ] )
109
117
}
110
118
111
119
if let lastMove = moves. last {
112
120
XCTAssertEqual ( 14 , lastMove. white. origin)
113
121
XCTAssertEqual ( 17 , lastMove. white. destination)
114
122
XCTAssertEqual ( false , lastMove. white. isCapture)
123
+ XCTAssertEqual ( [ ] , lastMove. white. intermediatePositions)
115
124
116
125
XCTAssertEqual ( 18 , lastMove. black? . origin)
117
126
XCTAssertEqual ( 15 , lastMove. black? . destination)
118
127
XCTAssertEqual ( false , lastMove. black? . isCapture)
128
+ XCTAssertEqual ( [ ] , lastMove. black? . intermediatePositions ?? [ 0 ] )
119
129
}
120
130
121
131
case . failure( _) :
@@ -137,16 +147,19 @@ class DraughtsMoveTests: XCTestCase {
137
147
XCTAssertEqual ( 9 , firstMove. white. origin)
138
148
XCTAssertEqual ( 14 , firstMove. white. destination)
139
149
XCTAssertEqual ( false , firstMove. white. isCapture)
150
+ XCTAssertEqual ( [ ] , firstMove. white. intermediatePositions)
140
151
141
152
XCTAssertEqual ( 23 , firstMove. black? . origin)
142
153
XCTAssertEqual ( 18 , firstMove. black? . destination)
143
154
XCTAssertEqual ( false , firstMove. black? . isCapture)
155
+ XCTAssertEqual ( [ ] , firstMove. black? . intermediatePositions ?? [ 0 ] )
144
156
}
145
157
146
158
if let lastMove = moves. last {
147
159
XCTAssertEqual ( 14 , lastMove. white. origin)
148
160
XCTAssertEqual ( 17 , lastMove. white. destination)
149
161
XCTAssertEqual ( false , lastMove. white. isCapture)
162
+ XCTAssertEqual ( [ ] , lastMove. white. intermediatePositions)
150
163
151
164
XCTAssertNil ( lastMove. black)
152
165
}
@@ -172,10 +185,68 @@ class DraughtsMoveTests: XCTestCase {
172
185
XCTAssertEqual ( 9 , firstMove. white. origin)
173
186
XCTAssertEqual ( 14 , firstMove. white. destination)
174
187
XCTAssertEqual ( true , firstMove. white. isCapture)
188
+ XCTAssertEqual ( [ ] , firstMove. white. intermediatePositions)
175
189
176
190
XCTAssertEqual ( 23 , firstMove. black? . origin)
177
191
XCTAssertEqual ( 18 , firstMove. black? . destination)
178
192
XCTAssertEqual ( true , firstMove. black? . isCapture)
193
+ XCTAssertEqual ( [ ] , firstMove. black? . intermediatePositions ?? [ 0 ] )
194
+ }
195
+
196
+ case . failure( _) :
197
+ XCTFail ( )
198
+ }
199
+ }
200
+
201
+ func testValidMovesWithMultipleCaptures( ) {
202
+
203
+ // Both players move and as they do they capture other pieces.
204
+ let multipleMoves = " 1. 9x14x17 23x18x12 "
205
+
206
+ switch DraughtsMove . parse ( fromPortableGameNotation: multipleMoves) {
207
+ case . success( let moves, let tail) :
208
+
209
+ XCTAssertEqual ( 1 , moves. count)
210
+ XCTAssertEqual ( " " , String ( tail) )
211
+
212
+ if let firstMove = moves. first {
213
+ XCTAssertEqual ( 9 , firstMove. white. origin)
214
+ XCTAssertEqual ( 17 , firstMove. white. destination)
215
+ XCTAssertEqual ( true , firstMove. white. isCapture)
216
+ XCTAssertEqual ( [ 14 ] , firstMove. white. intermediatePositions)
217
+
218
+ XCTAssertEqual ( 23 , firstMove. black? . origin)
219
+ XCTAssertEqual ( 12 , firstMove. black? . destination)
220
+ XCTAssertEqual ( true , firstMove. black? . isCapture)
221
+ XCTAssertEqual ( [ 18 ] , firstMove. black? . intermediatePositions ?? [ ] )
222
+ }
223
+
224
+ case . failure( _) :
225
+ XCTFail ( )
226
+ }
227
+ }
228
+
229
+ func testValidMovesWithManyCaptures( ) {
230
+
231
+ // Both players move and as they do they capture another pieces.
232
+ let multipleMoves = " 1. 9x14x17x21 23x18x12x9x6 "
233
+
234
+ switch DraughtsMove . parse ( fromPortableGameNotation: multipleMoves) {
235
+ case . success( let moves, let tail) :
236
+
237
+ XCTAssertEqual ( 1 , moves. count)
238
+ XCTAssertEqual ( " " , String ( tail) )
239
+
240
+ if let firstMove = moves. first {
241
+ XCTAssertEqual ( 9 , firstMove. white. origin)
242
+ XCTAssertEqual ( 21 , firstMove. white. destination)
243
+ XCTAssertEqual ( true , firstMove. white. isCapture)
244
+ XCTAssertEqual ( [ 14 , 17 ] , firstMove. white. intermediatePositions)
245
+
246
+ XCTAssertEqual ( 23 , firstMove. black? . origin)
247
+ XCTAssertEqual ( 6 , firstMove. black? . destination)
248
+ XCTAssertEqual ( true , firstMove. black? . isCapture)
249
+ XCTAssertEqual ( [ 18 , 12 , 9 ] , firstMove. black? . intermediatePositions ?? [ ] )
179
250
}
180
251
181
252
case . failure( _) :
@@ -203,10 +274,12 @@ class DraughtsMoveTests: XCTestCase {
203
274
XCTAssertEqual ( 9 , firstMove. white. origin)
204
275
XCTAssertEqual ( 14 , firstMove. white. destination)
205
276
XCTAssertEqual ( false , firstMove. white. isCapture)
277
+ XCTAssertEqual ( [ ] , firstMove. white. intermediatePositions)
206
278
207
279
XCTAssertEqual ( 23 , firstMove. black? . origin)
208
280
XCTAssertEqual ( 18 , firstMove. black? . destination)
209
281
XCTAssertEqual ( false , firstMove. black? . isCapture)
282
+ XCTAssertEqual ( [ ] , firstMove. black? . intermediatePositions ?? [ 0 ] )
210
283
} else {
211
284
XCTFail ( )
212
285
}
@@ -215,15 +288,18 @@ class DraughtsMoveTests: XCTestCase {
215
288
XCTAssertEqual ( 10 , moveWithCapture. white. origin)
216
289
XCTAssertEqual ( 19 , moveWithCapture. white. destination)
217
290
XCTAssertEqual ( true , moveWithCapture. white. isCapture)
291
+ XCTAssertEqual ( [ ] , moveWithCapture. white. intermediatePositions)
218
292
219
293
XCTAssertEqual ( 23 , moveWithCapture. black? . origin)
220
294
XCTAssertEqual ( 16 , moveWithCapture. black? . destination)
221
295
XCTAssertEqual ( true , moveWithCapture. black? . isCapture)
296
+ XCTAssertEqual ( [ ] , moveWithCapture. black? . intermediatePositions ?? [ 0 ] )
222
297
223
298
if let lastMove = moves. last {
224
299
XCTAssertEqual ( 18 , lastMove. white. origin)
225
300
XCTAssertEqual ( 22 , lastMove. white. destination)
226
301
XCTAssertEqual ( false , lastMove. white. isCapture)
302
+ XCTAssertEqual ( [ ] , lastMove. white. intermediatePositions)
227
303
228
304
XCTAssertNil ( lastMove. black)
229
305
} else {
@@ -279,18 +355,19 @@ class DraughtsMoveTests: XCTestCase {
279
355
280
356
// NOTE: This succeeds because there are valid results at the start of the input sting.
281
357
// It may be deemed as unexpected and it may be better to find a way to make this fail.
282
-
283
358
XCTAssertEqual ( 1 , moves. count)
284
359
XCTAssertEqual ( " 14x23 27x18 " , String ( tail) )
285
360
286
361
if let firstMove = moves. first {
287
362
XCTAssertEqual ( 9 , firstMove. white. origin)
288
363
XCTAssertEqual ( 14 , firstMove. white. destination)
289
364
XCTAssertEqual ( false , firstMove. white. isCapture)
365
+ XCTAssertEqual ( [ ] , firstMove. white. intermediatePositions)
290
366
291
367
XCTAssertEqual ( 23 , firstMove. black? . origin)
292
368
XCTAssertEqual ( 18 , firstMove. black? . destination)
293
369
XCTAssertEqual ( false , firstMove. black? . isCapture)
370
+ XCTAssertEqual ( [ ] , firstMove. black? . intermediatePositions ?? [ 0 ] )
294
371
}
295
372
296
373
case . failure( _) :
@@ -299,3 +376,4 @@ class DraughtsMoveTests: XCTestCase {
299
376
}
300
377
301
378
}
379
+ // swiftlint:enable type_body_length
0 commit comments