ychess is a chess implementation written in nim.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1592 lines
65 KiB

  1. import einheit
  2. import algorithm
  3. import ./chess
  4. testSuite GameTest of TestSuite:
  5. var
  6. game: Game
  7. method setup() =
  8. self.game = initGame()
  9. ## Tests for isInCheck()
  10. method testIsInCheckFalse() =
  11. self.setup()
  12. self.game.checkedMove(notationToMove("e2e4", Color.White))
  13. self.game.checkedMove(notationToMove("e7e5", Color.Black))
  14. self.game.checkedMove(notationToMove("d2d3", Color.White))
  15. self.game.checkedMove(notationToMove("d8h4", Color.Black))
  16. self.check(not self.game.isInCheck(Color.White))
  17. self.check(not self.game.isInCheck(Color.White))
  18. method testIsInCheckTrueWhite() =
  19. self.setup()
  20. self.game.checkedMove(notationToMove("f2f4", Color.White))
  21. self.game.checkedMove(notationToMove("e7e5", Color.Black))
  22. self.game.checkedMove(notationToMove("e2e3", Color.White))
  23. self.game.checkedMove(notationToMove("d8h4", Color.Black))
  24. self.check(self.game.isInCheck(Color.White))
  25. method testIsInCheckTrueBlack() =
  26. self.setup()
  27. self.game.checkedMove(notationToMove("e2e4", Color.White))
  28. self.game.checkedMove(notationToMove("f7f6", Color.Black))
  29. self.game.checkedMove(notationToMove("d2d4", Color.White))
  30. self.game.checkedMove(notationToMove("g7g5", Color.Black))
  31. self.game.checkedMove(notationToMove("d1h5", Color.White))
  32. self.check(self.game.isInCheck(Color.Black))
  33. ## Tests for isCheckmate()
  34. method testIsCheckmateFalseWhite() =
  35. self.setup()
  36. self.game.checkedMove(notationToMove("f2f4", Color.White))
  37. self.game.checkedMove(notationToMove("e7e5", Color.Black))
  38. self.game.checkedMove(notationToMove("e2e3", Color.White))
  39. self.game.checkedMove(notationToMove("d8h4", Color.Black))
  40. self.check(not self.game.isCheckmate(Color.White))
  41. method testIsCheckmateFalseBlack() =
  42. self.setup()
  43. self.game.checkedMove(notationToMove("f2f4", Color.White))
  44. self.game.checkedMove(notationToMove("e7e5", Color.Black))
  45. self.game.checkedMove(notationToMove("e2e3", Color.White))
  46. self.game.checkedMove(notationToMove("d8h4", Color.Black))
  47. self.check(not self.game.isCheckmate(Color.Black))
  48. method testIsCheckmateTrueWhite() =
  49. self.setup()
  50. self.game.checkedMove(notationToMove("f2f3", Color.White))
  51. self.game.checkedMove(notationToMove("e7e6", Color.Black))
  52. self.game.checkedMove(notationToMove("g2g4", Color.White))
  53. self.game.checkedMove(notationToMove("d8h4", Color.Black))
  54. self.check(self.game.isCheckmate(Color.White))
  55. method testIsCheckmateTrueBlack() =
  56. self.setup()
  57. self.game.checkedMove(notationToMove("e2e4", Color.White))
  58. self.game.checkedMove(notationToMove("g7g5", Color.Black))
  59. self.game.checkedMove(notationToMove("d2d4", Color.White))
  60. self.game.checkedMove(notationToMove("f7f6", Color.Black))
  61. self.game.checkedMove(notationToMove("d1h5", Color.White))
  62. self.check(self.game.isCheckmate(Color.Black))
  63. ## Tests for isStalemate()
  64. method testIsStalemateFalse() =
  65. self.setup()
  66. self.game.checkedMove(notationToMove("f2f3", Color.White))
  67. self.game.checkedMove(notationToMove("e7e6", Color.Black))
  68. self.game.checkedMove(notationToMove("g2g4", Color.White))
  69. self.game.checkedMove(notationToMove("d8h4", Color.Black))
  70. self.check(not self.game.isStalemate(Color.White))
  71. self.check(not self.game.isStalemate(Color.Black))
  72. method testIsStalemateTrueWhite() =
  73. self.game = initGame([
  74. 0, 0, 0, 0, BRook, BQueen, BRook, BKnight,
  75. 0, BPawn, 0, 0, BPawn, BPawn, BBishop, WKing,
  76. 0, BPawn, 0, BPawn, 0, BPawn, 0, BKnight,
  77. 0, 0, 0, 0, 0, 0, BPawn, 0,
  78. 0, 0, BBishop, 0, 0, 0, 0, 0,
  79. 0, 0, 0, 0, 0, 0, 0, 0,
  80. 0, BPawn, BKing, 0, 0, 0, 0, 0,
  81. 0, 0, 0, 0, 0, 0, 0, 0
  82. ], Color.White)
  83. self.check(self.game.isStalemate(Color.White))
  84. method testIsStalemateTrueBlack() =
  85. self.game = initGame([
  86. 0, 0, 0, 0, WRook, WQueen, WRook, WKnight,
  87. 0, WPawn, 0, 0, WPawn, WPawn, WBishop, BKing,
  88. 0, WPawn, 0, WPawn, 0, WPawn, 0, WKnight,
  89. 0, 0, 0, 0, 0, 0, WPawn, 0,
  90. 0, 0, WBishop, 0, 0, 0, 0, 0,
  91. 0, 0, 0, 0, 0, 0, 0, 0,
  92. 0, WPawn, WKing, 0, 0, 0, 0, 0,
  93. 0, 0, 0, 0, 0, 0, 0, 0
  94. ], Color.Black)
  95. self.check(self.game.isStalemate(Color.Black))
  96. method testIsStalemateInsufficientMaterialTrue() =
  97. self.game = initGame([
  98. 0, 0, 0, 0, 0, 0, 0, 0,
  99. 0, 0, 0, WKing, 0, 0, 0, 0,
  100. 0, 0, 0, 0, 0, 0, 0, 0,
  101. 0, 0, 0, 0, 0, 0, 0, 0,
  102. 0, 0, 0, 0, 0, 0, 0, 0,
  103. 0, 0, 0, 0, 0, 0, 0, 0,
  104. 0, 0, 0, 0, 0, BKing, 0, 0,
  105. 0, 0, 0, 0, 0, 0, 0, 0
  106. ], Color.Black)
  107. self.check(self.game.isStalemate(Color.Black))
  108. self.check(self.game.isStalemate(Color.White))
  109. self.game = initGame([
  110. 0, 0, 0, 0, 0, 0, 0, 0,
  111. 0, 0, 0, WKing, 0, 0, 0, 0,
  112. 0, 0, 0, 0, 0, 0, 0, 0,
  113. 0, 0, 0, 0, 0, 0, 0, WKnight,
  114. 0, 0, WKnight, 0, 0, 0, 0, 0,
  115. 0, 0, 0, 0, 0, 0, 0, 0,
  116. 0, 0, 0, 0, 0, BKing, 0, 0,
  117. 0, 0, 0, 0, 0, 0, 0, 0
  118. ], Color.Black)
  119. self.check(self.game.isStalemate(Color.Black))
  120. self.check(self.game.isStalemate(Color.White))
  121. self.game = initGame([
  122. 0, 0, 0, 0, 0, 0, 0, 0,
  123. 0, 0, 0, WKing, 0, 0, 0, 0,
  124. 0, 0, 0, 0, 0, 0, 0, 0,
  125. 0, 0, 0, 0, 0, 0, 0, BKnight,
  126. 0, 0, BKnight, 0, 0, 0, 0, 0,
  127. 0, 0, 0, 0, 0, 0, 0, 0,
  128. 0, 0, 0, 0, 0, BKing, 0, 0,
  129. 0, 0, 0, 0, 0, 0, 0, 0
  130. ], Color.Black)
  131. self.check(self.game.isStalemate(Color.Black))
  132. self.check(self.game.isStalemate(Color.White))
  133. self.game = initGame([
  134. 0, 0, 0, 0, 0, 0, 0, 0,
  135. 0, 0, 0, WKing, 0, 0, 0, 0,
  136. 0, 0, 0, 0, 0, 0, 0, 0,
  137. 0, 0, 0, 0, 0, 0, 0, BKnight,
  138. 0, 0, 0, 0, 0, 0, 0, 0,
  139. 0, 0, 0, 0, 0, 0, 0, 0,
  140. 0, 0, 0, 0, 0, BKing, 0, 0,
  141. 0, 0, 0, 0, 0, 0, 0, 0
  142. ], Color.Black)
  143. self.check(self.game.isStalemate(Color.Black))
  144. self.check(self.game.isStalemate(Color.White))
  145. self.game = initGame([
  146. 0, 0, 0, 0, 0, 0, 0, 0,
  147. 0, 0, 0, WKing, 0, 0, 0, 0,
  148. 0, 0, 0, 0, 0, 0, 0, 0,
  149. 0, 0, 0, 0, 0, 0, 0, WKnight,
  150. 0, 0, 0, 0, 0, 0, 0, 0,
  151. 0, 0, 0, 0, 0, 0, 0, 0,
  152. 0, 0, 0, 0, 0, BKing, 0, 0,
  153. 0, 0, 0, 0, 0, 0, 0, 0
  154. ], Color.Black)
  155. self.check(self.game.isStalemate(Color.Black))
  156. self.check(self.game.isStalemate(Color.White))
  157. self.game = initGame([
  158. 0, 0, 0, 0, 0, 0, 0, 0,
  159. 0, 0, 0, WKing, 0, 0, 0, 0,
  160. 0, 0, 0, 0, 0, 0, 0, 0,
  161. 0, 0, 0, 0, 0, 0, 0, BBishop,
  162. 0, 0, 0, 0, 0, 0, 0, 0,
  163. 0, 0, 0, 0, 0, 0, 0, 0,
  164. 0, 0, 0, 0, 0, BKing, 0, 0,
  165. 0, 0, 0, 0, 0, 0, 0, 0
  166. ], Color.Black)
  167. self.check(self.game.isStalemate(Color.Black))
  168. self.check(self.game.isStalemate(Color.White))
  169. self.game = initGame([
  170. 0, 0, 0, 0, 0, 0, 0, 0,
  171. 0, 0, 0, WKing, 0, 0, 0, 0,
  172. 0, 0, 0, 0, 0, 0, 0, 0,
  173. 0, 0, 0, 0, 0, 0, 0, WBishop,
  174. 0, 0, 0, 0, 0, 0, 0, 0,
  175. 0, 0, 0, 0, 0, 0, 0, 0,
  176. 0, 0, 0, 0, 0, BKing, 0, 0,
  177. 0, 0, 0, 0, 0, 0, 0, 0
  178. ], Color.Black)
  179. self.check(self.game.isStalemate(Color.Black))
  180. self.check(self.game.isStalemate(Color.White))
  181. method testIsStalemateInsufficientMaterialFalse() =
  182. self.game = initGame([
  183. 0, 0, 0, 0, 0, 0, 0, 0,
  184. 0, 0, 0, WKing, 0, 0, 0, 0,
  185. 0, 0, 0, 0, 0, 0, 0, 0,
  186. 0, 0, 0, 0, 0, 0, 0, BPawn,
  187. 0, 0, 0, 0, 0, 0, 0, 0,
  188. 0, 0, 0, 0, 0, 0, 0, 0,
  189. 0, 0, 0, 0, 0, BKing, 0, 0,
  190. 0, 0, 0, 0, 0, 0, 0, 0
  191. ], Color.Black)
  192. self.check(not self.game.isStalemate(Color.Black))
  193. self.check(not self.game.isStalemate(Color.White))
  194. self.game = initGame([
  195. 0, 0, 0, 0, 0, 0, 0, 0,
  196. 0, 0, 0, WKing, 0, 0, 0, 0,
  197. 0, 0, 0, 0, 0, 0, 0, 0,
  198. 0, 0, 0, 0, 0, 0, 0, WPawn,
  199. 0, 0, 0, 0, 0, 0, 0, 0,
  200. 0, 0, 0, 0, 0, 0, 0, 0,
  201. 0, 0, 0, 0, 0, BKing, 0, 0,
  202. 0, 0, 0, 0, 0, 0, 0, 0
  203. ], Color.Black)
  204. self.check(not self.game.isStalemate(Color.Black))
  205. self.check(not self.game.isStalemate(Color.White))
  206. self.game = initGame([
  207. 0, 0, 0, 0, 0, 0, 0, 0,
  208. 0, 0, 0, WKing, 0, 0, 0, 0,
  209. 0, 0, 0, 0, 0, 0, 0, 0,
  210. 0, 0, 0, 0, 0, 0, 0, BRook,
  211. 0, 0, 0, 0, 0, 0, 0, 0,
  212. 0, 0, 0, 0, 0, 0, 0, 0,
  213. 0, 0, 0, 0, 0, BKing, 0, 0,
  214. 0, 0, 0, 0, 0, 0, 0, 0
  215. ], Color.Black)
  216. self.check(not self.game.isStalemate(Color.Black))
  217. self.check(not self.game.isStalemate(Color.White))
  218. self.game = initGame([
  219. 0, 0, 0, 0, 0, 0, 0, 0,
  220. 0, 0, 0, WKing, 0, 0, 0, 0,
  221. 0, 0, 0, 0, 0, 0, 0, 0,
  222. 0, 0, 0, 0, 0, 0, 0, WRook,
  223. 0, 0, 0, 0, 0, 0, 0, 0,
  224. 0, 0, 0, 0, 0, 0, 0, 0,
  225. 0, 0, 0, 0, 0, BKing, 0, 0,
  226. 0, 0, 0, 0, 0, 0, 0, 0
  227. ], Color.Black)
  228. self.check(not self.game.isStalemate(Color.Black))
  229. self.check(not self.game.isStalemate(Color.White))
  230. self.game = initGame([
  231. 0, 0, 0, 0, 0, 0, 0, 0,
  232. 0, 0, 0, WKing, 0, 0, 0, 0,
  233. 0, 0, 0, 0, 0, 0, 0, 0,
  234. 0, WBishop, 0, 0, 0, 0, 0, BPawn,
  235. 0, 0, 0, 0, 0, 0, 0, 0,
  236. 0, 0, 0, 0, 0, 0, 0, 0,
  237. 0, 0, 0, 0, 0, BKing, 0, 0,
  238. 0, 0, 0, 0, 0, 0, 0, 0
  239. ], Color.Black)
  240. self.check(not self.game.isStalemate(Color.Black))
  241. self.check(not self.game.isStalemate(Color.White))
  242. self.game = initGame([
  243. 0, 0, 0, 0, 0, 0, 0, 0,
  244. 0, 0, 0, WKing, 0, 0, 0, 0,
  245. 0, 0, 0, 0, 0, 0, 0, 0,
  246. 0, 0, BBishop, 0, 0, 0, 0, WPawn,
  247. 0, 0, 0, 0, 0, 0, 0, 0,
  248. 0, 0, 0, 0, 0, 0, 0, 0,
  249. 0, 0, 0, 0, 0, BKing, 0, 0,
  250. 0, 0, 0, 0, 0, 0, 0, 0
  251. ], Color.Black)
  252. self.check(not self.game.isStalemate(Color.Black))
  253. self.check(not self.game.isStalemate(Color.White))
  254. ## Check isDrawClaimable
  255. method testIsDrawClaimableThreeFoldRepTrue() =
  256. self.setup()
  257. self.game.checkedMove(notationToMove("g1f3", Color.White))
  258. self.game.checkedMove(notationToMove("g8f6", Color.Black))
  259. self.game.checkedMove(notationToMove("f3g1", Color.White))
  260. self.game.checkedMove(notationToMove("f6g8", Color.Black))
  261. self.game.checkedMove(notationToMove("g1f3", Color.White))
  262. self.game.checkedMove(notationToMove("g8f6", Color.Black))
  263. self.game.checkedMove(notationToMove("f3g1", Color.White))
  264. self.game.checkedMove(notationToMove("f6g8", Color.Black))
  265. self.game.checkedMove(notationToMove("g1f3", Color.White))
  266. self.check(self.game.isDrawClaimable())
  267. method testIsDrawClaimableThreeFoldRepFalse() =
  268. self.setup()
  269. self.game.checkedMove(notationToMove("g1f3", Color.White))
  270. self.game.checkedMove(notationToMove("g8f6", Color.Black))
  271. self.game.checkedMove(notationToMove("f3g1", Color.White))
  272. self.game.checkedMove(notationToMove("f6g8", Color.Black))
  273. self.game.checkedMove(notationToMove("g1f3", Color.White))
  274. self.game.checkedMove(notationToMove("g8f6", Color.Black))
  275. self.game.checkedMove(notationToMove("f3g1", Color.White))
  276. self.game.checkedMove(notationToMove("f6g8", Color.Black))
  277. self.check(not self.game.isDrawClaimable())
  278. method testIsDrawClaimableFiftyMoveRuleTrue() =
  279. self.game = initGame([
  280. 0, 0, 0, 0, 0, 0, 0, 0,
  281. 0, 0, 0, 0, 0, 0, 0, BRook,
  282. 0, 0, 0, 0, 0, 0, 0, 0,
  283. WBishop, 0, 0, 0, 0, 0, 0, 0,
  284. 0, 0, WKing, 0, 0, 0, 0, 0,
  285. 0, 0, 0, 0, 0, 0, 0, 0,
  286. 0, 0, 0, 0, 0, 0, WRook, 0,
  287. 0, 0, 0, BKing, 0, 0, 0, 0
  288. ], Color.Black)
  289. self.game.checkedMove(notationToMove("a2a5", Color.Black))
  290. self.game.checkedMove(notationToMove("f5g6", Color.White))
  291. self.game.checkedMove(notationToMove("a5e5", Color.Black))
  292. self.game.checkedMove(notationToMove("h4f6", Color.White))
  293. self.game.checkedMove(notationToMove("e5e2", Color.Black))
  294. self.game.checkedMove(notationToMove("b7a7", Color.White))
  295. self.game.checkedMove(notationToMove("e2e1", Color.Black))
  296. self.game.checkedMove(notationToMove("g6f5", Color.White))
  297. self.game.checkedMove(notationToMove("e1b1", Color.Black))
  298. self.game.checkedMove(notationToMove("f6d4", Color.White))
  299. self.game.checkedMove(notationToMove("e8d8", Color.Black))
  300. self.game.checkedMove(notationToMove("f5e6", Color.White))
  301. self.game.checkedMove(notationToMove("d8c8", Color.Black))
  302. self.game.checkedMove(notationToMove("d4e5", Color.White))
  303. self.game.checkedMove(notationToMove("b1c1", Color.Black))
  304. self.game.checkedMove(notationToMove("a7f7", Color.White))
  305. self.game.checkedMove(notationToMove("c1c2", Color.Black))
  306. self.game.checkedMove(notationToMove("e5d6", Color.White))
  307. self.game.checkedMove(notationToMove("c2c1", Color.Black))
  308. self.game.checkedMove(notationToMove("e6d5", Color.White))
  309. self.game.checkedMove(notationToMove("c1a1", Color.Black))
  310. self.game.checkedMove(notationToMove("f7h7", Color.White))
  311. self.game.checkedMove(notationToMove("a1a2", Color.Black))
  312. self.game.checkedMove(notationToMove("d6f4", Color.White))
  313. self.game.checkedMove(notationToMove("a2a6", Color.Black))
  314. self.game.checkedMove(notationToMove("f4e5", Color.White))
  315. self.game.checkedMove(notationToMove("a6b6", Color.Black))
  316. self.game.checkedMove(notationToMove("h7c7", Color.White))
  317. self.game.checkedMove(notationToMove("c8d8", Color.Black))
  318. self.game.checkedMove(notationToMove("c7a7", Color.White))
  319. self.game.checkedMove(notationToMove("d8c8", Color.Black))
  320. self.game.checkedMove(notationToMove("a7c7", Color.White))
  321. self.game.checkedMove(notationToMove("c8d8", Color.Black))
  322. self.game.checkedMove(notationToMove("e5d6", Color.White))
  323. self.game.checkedMove(notationToMove("b6b1", Color.Black))
  324. self.game.checkedMove(notationToMove("c7a7", Color.White))
  325. self.game.checkedMove(notationToMove("b1e1", Color.Black))
  326. self.game.checkedMove(notationToMove("d6e5", Color.White))
  327. self.game.checkedMove(notationToMove("e1d1", Color.Black))
  328. self.game.checkedMove(notationToMove("d5e6", Color.White))
  329. self.game.checkedMove(notationToMove("d1c1", Color.Black))
  330. self.game.checkedMove(notationToMove("a7b7", Color.White))
  331. self.game.checkedMove(notationToMove("c1c2", Color.Black))
  332. self.game.checkedMove(notationToMove("b7b3", Color.White))
  333. self.game.checkedMove(notationToMove("c2c6", Color.Black))
  334. self.game.checkedMove(notationToMove("e5d6", Color.White))
  335. self.game.checkedMove(notationToMove("c6c1", Color.Black))
  336. self.game.checkedMove(notationToMove("b3h3", Color.White))
  337. self.game.checkedMove(notationToMove("d8c8", Color.Black))
  338. self.game.checkedMove(notationToMove("h3h8", Color.White))
  339. self.game.checkedMove(notationToMove("c8b7", Color.Black))
  340. self.game.checkedMove(notationToMove("h8b8", Color.White))
  341. self.game.checkedMove(notationToMove("b7a7", Color.Black))
  342. self.game.checkedMove(notationToMove("b8b4", Color.White))
  343. self.game.checkedMove(notationToMove("c1d1", Color.Black))
  344. self.game.checkedMove(notationToMove("e6d7", Color.White))
  345. self.game.checkedMove(notationToMove("d1c1", Color.Black))
  346. self.game.checkedMove(notationToMove("d6c7", Color.White))
  347. self.game.checkedMove(notationToMove("c1h1", Color.Black))
  348. self.game.checkedMove(notationToMove("c7f4", Color.White))
  349. self.game.checkedMove(notationToMove("h1h3", Color.Black))
  350. self.game.checkedMove(notationToMove("f4e5", Color.White))
  351. self.game.checkedMove(notationToMove("h3h1", Color.Black))
  352. self.game.checkedMove(notationToMove("e5d6", Color.White))
  353. self.game.checkedMove(notationToMove("h1c1", Color.Black))
  354. self.game.checkedMove(notationToMove("d6f4", Color.White))
  355. self.game.checkedMove(notationToMove("c1c2", Color.Black))
  356. self.game.checkedMove(notationToMove("f4c7", Color.White))
  357. self.game.checkedMove(notationToMove("c2c1", Color.Black))
  358. self.game.checkedMove(notationToMove("b4b5", Color.White))
  359. self.game.checkedMove(notationToMove("c1c2", Color.Black))
  360. self.game.checkedMove(notationToMove("b5b6", Color.White))
  361. self.game.checkedMove(notationToMove("c2g2", Color.Black))
  362. self.game.checkedMove(notationToMove("b6b3", Color.White))
  363. self.game.checkedMove(notationToMove("g2c2", Color.Black))
  364. self.game.checkedMove(notationToMove("b3b1", Color.White))
  365. self.game.checkedMove(notationToMove("c2c3", Color.Black))
  366. self.game.checkedMove(notationToMove("c7e5", Color.White))
  367. self.game.checkedMove(notationToMove("c3c2", Color.Black))
  368. self.game.checkedMove(notationToMove("d7d6", Color.White))
  369. self.game.checkedMove(notationToMove("c2d2", Color.Black))
  370. self.game.checkedMove(notationToMove("d6c6", Color.White))
  371. self.game.checkedMove(notationToMove("d2c2", Color.Black))
  372. self.game.checkedMove(notationToMove("c6d5", Color.White))
  373. self.game.checkedMove(notationToMove("c2g2", Color.Black))
  374. self.game.checkedMove(notationToMove("e5d6", Color.White))
  375. self.game.checkedMove(notationToMove("g2g5", Color.Black))
  376. self.game.checkedMove(notationToMove("d5c6", Color.White))
  377. self.game.checkedMove(notationToMove("a7a6", Color.Black))
  378. self.game.checkedMove(notationToMove("b1b8", Color.White))
  379. self.game.checkedMove(notationToMove("g5g7", Color.Black))
  380. self.game.checkedMove(notationToMove("b8b6", Color.White))
  381. self.game.checkedMove(notationToMove("a6a7", Color.Black))
  382. self.game.checkedMove(notationToMove("b6b1", Color.White))
  383. self.game.checkedMove(notationToMove("a7a8", Color.Black))
  384. self.game.checkedMove(notationToMove("b1e1", Color.White))
  385. self.game.checkedMove(notationToMove("g7b7", Color.Black))
  386. self.game.checkedMove(notationToMove("e1e8", Color.White))
  387. self.game.checkedMove(notationToMove("a8a7", Color.Black))
  388. self.game.checkedMove(notationToMove("d6c5", Color.White))
  389. self.check(self.game.isDrawClaimable())
  390. method testIsDrawClaimableFiftyMoveRuleFalseNinetyFour() =
  391. self.game = initGame([
  392. 0, 0, 0, 0, 0, 0, 0, 0,
  393. 0, 0, 0, 0, 0, 0, 0, BRook,
  394. 0, 0, 0, 0, 0, 0, 0, 0,
  395. WBishop, 0, 0, 0, 0, 0, 0, 0,
  396. 0, 0, WKing, 0, 0, 0, 0, 0,
  397. 0, 0, 0, 0, 0, 0, 0, 0,
  398. 0, 0, 0, 0, 0, 0, WRook, 0,
  399. 0, 0, 0, BKing, 0, 0, 0, 0
  400. ], Color.Black)
  401. self.game.checkedMove(notationToMove("a2a5", Color.Black))
  402. self.game.checkedMove(notationToMove("f5g6", Color.White))
  403. self.game.checkedMove(notationToMove("a5e5", Color.Black))
  404. self.game.checkedMove(notationToMove("h4f6", Color.White))
  405. self.game.checkedMove(notationToMove("e5e2", Color.Black))
  406. self.game.checkedMove(notationToMove("b7a7", Color.White))
  407. self.game.checkedMove(notationToMove("e2e1", Color.Black))
  408. self.game.checkedMove(notationToMove("g6f5", Color.White))
  409. self.game.checkedMove(notationToMove("e1b1", Color.Black))
  410. self.game.checkedMove(notationToMove("f6d4", Color.White))
  411. self.game.checkedMove(notationToMove("e8d8", Color.Black))
  412. self.game.checkedMove(notationToMove("f5e6", Color.White))
  413. self.game.checkedMove(notationToMove("d8c8", Color.Black))
  414. self.game.checkedMove(notationToMove("d4e5", Color.White))
  415. self.game.checkedMove(notationToMove("b1c1", Color.Black))
  416. self.game.checkedMove(notationToMove("a7f7", Color.White))
  417. self.game.checkedMove(notationToMove("c1c2", Color.Black))
  418. self.game.checkedMove(notationToMove("e5d6", Color.White))
  419. self.game.checkedMove(notationToMove("c2c1", Color.Black))
  420. self.game.checkedMove(notationToMove("e6d5", Color.White))
  421. self.game.checkedMove(notationToMove("c1a1", Color.Black))
  422. self.game.checkedMove(notationToMove("f7h7", Color.White))
  423. self.game.checkedMove(notationToMove("a1a2", Color.Black))
  424. self.game.checkedMove(notationToMove("d6f4", Color.White))
  425. self.game.checkedMove(notationToMove("a2a6", Color.Black))
  426. self.game.checkedMove(notationToMove("f4e5", Color.White))
  427. self.game.checkedMove(notationToMove("a6b6", Color.Black))
  428. self.game.checkedMove(notationToMove("h7c7", Color.White))
  429. self.game.checkedMove(notationToMove("c8d8", Color.Black))
  430. self.game.checkedMove(notationToMove("c7a7", Color.White))
  431. self.game.checkedMove(notationToMove("d8c8", Color.Black))
  432. self.game.checkedMove(notationToMove("a7c7", Color.White))
  433. self.game.checkedMove(notationToMove("c8d8", Color.Black))
  434. self.game.checkedMove(notationToMove("e5d6", Color.White))
  435. self.game.checkedMove(notationToMove("b6b1", Color.Black))
  436. self.game.checkedMove(notationToMove("c7a7", Color.White))
  437. self.game.checkedMove(notationToMove("b1e1", Color.Black))
  438. self.game.checkedMove(notationToMove("d6e5", Color.White))
  439. self.game.checkedMove(notationToMove("e1d1", Color.Black))
  440. self.game.checkedMove(notationToMove("d5e6", Color.White))
  441. self.game.checkedMove(notationToMove("d1c1", Color.Black))
  442. self.game.checkedMove(notationToMove("a7b7", Color.White))
  443. self.game.checkedMove(notationToMove("c1c2", Color.Black))
  444. self.game.checkedMove(notationToMove("b7b3", Color.White))
  445. self.game.checkedMove(notationToMove("c2c6", Color.Black))
  446. self.game.checkedMove(notationToMove("e5d6", Color.White))
  447. self.game.checkedMove(notationToMove("c6c1", Color.Black))
  448. self.game.checkedMove(notationToMove("b3h3", Color.White))
  449. self.game.checkedMove(notationToMove("d8c8", Color.Black))
  450. self.game.checkedMove(notationToMove("h3h8", Color.White))
  451. self.game.checkedMove(notationToMove("c8b7", Color.Black))
  452. self.game.checkedMove(notationToMove("h8b8", Color.White))
  453. self.game.checkedMove(notationToMove("b7a7", Color.Black))
  454. self.game.checkedMove(notationToMove("b8b4", Color.White))
  455. self.game.checkedMove(notationToMove("c1d1", Color.Black))
  456. self.game.checkedMove(notationToMove("e6d7", Color.White))
  457. self.game.checkedMove(notationToMove("d1c1", Color.Black))
  458. self.game.checkedMove(notationToMove("d6c7", Color.White))
  459. self.game.checkedMove(notationToMove("c1h1", Color.Black))
  460. self.game.checkedMove(notationToMove("c7f4", Color.White))
  461. self.game.checkedMove(notationToMove("h1h3", Color.Black))
  462. self.game.checkedMove(notationToMove("f4e5", Color.White))
  463. self.game.checkedMove(notationToMove("h3h1", Color.Black))
  464. self.game.checkedMove(notationToMove("e5d6", Color.White))
  465. self.game.checkedMove(notationToMove("h1c1", Color.Black))
  466. self.game.checkedMove(notationToMove("d6f4", Color.White))
  467. self.game.checkedMove(notationToMove("c1c2", Color.Black))
  468. self.game.checkedMove(notationToMove("f4c7", Color.White))
  469. self.game.checkedMove(notationToMove("c2c1", Color.Black))
  470. self.game.checkedMove(notationToMove("b4b5", Color.White))
  471. self.game.checkedMove(notationToMove("c1c2", Color.Black))
  472. self.game.checkedMove(notationToMove("b5b6", Color.White))
  473. self.game.checkedMove(notationToMove("c2g2", Color.Black))
  474. self.game.checkedMove(notationToMove("b6b3", Color.White))
  475. self.game.checkedMove(notationToMove("g2c2", Color.Black))
  476. self.game.checkedMove(notationToMove("b3b1", Color.White))
  477. self.game.checkedMove(notationToMove("c2c3", Color.Black))
  478. self.game.checkedMove(notationToMove("c7e5", Color.White))
  479. self.game.checkedMove(notationToMove("c3c2", Color.Black))
  480. self.game.checkedMove(notationToMove("d7d6", Color.White))
  481. self.game.checkedMove(notationToMove("c2d2", Color.Black))
  482. self.game.checkedMove(notationToMove("d6c6", Color.White))
  483. self.game.checkedMove(notationToMove("d2c2", Color.Black))
  484. self.game.checkedMove(notationToMove("c6d5", Color.White))
  485. self.game.checkedMove(notationToMove("c2g2", Color.Black))
  486. self.game.checkedMove(notationToMove("e5d6", Color.White))
  487. self.game.checkedMove(notationToMove("g2g5", Color.Black))
  488. self.game.checkedMove(notationToMove("d5c6", Color.White))
  489. self.game.checkedMove(notationToMove("a7a6", Color.Black))
  490. self.game.checkedMove(notationToMove("b1b8", Color.White))
  491. self.game.checkedMove(notationToMove("g5g7", Color.Black))
  492. self.game.checkedMove(notationToMove("b8b6", Color.White))
  493. self.game.checkedMove(notationToMove("a6a7", Color.Black))
  494. self.game.checkedMove(notationToMove("b6b1", Color.White))
  495. self.game.checkedMove(notationToMove("a7a8", Color.Black))
  496. self.game.checkedMove(notationToMove("b1e1", Color.White))
  497. self.game.checkedMove(notationToMove("g7b7", Color.Black))
  498. self.game.checkedMove(notationToMove("e1e8", Color.White))
  499. self.game.checkedMove(notationToMove("a8a7", Color.Black))
  500. self.game.checkedMove(notationToMove("d6c5", Color.White))
  501. self.check(self.game.isDrawClaimable())
  502. method testIsDrawClaimableFiftyMoveRuleFalseCapture() =
  503. self.game = initGame([
  504. 0, 0, 0, 0, 0, 0, 0, 0,
  505. 0, 0, 0, 0, 0, 0, 0, BRook,
  506. 0, 0, 0, 0, 0, 0, 0, 0,
  507. WBishop, 0, 0, 0, 0, 0, 0, 0,
  508. 0, 0, WKing, 0, 0, 0, 0, 0,
  509. 0, 0, BPawn, 0, 0, 0, 0, 0,
  510. 0, 0, 0, 0, 0, 0, WRook, 0,
  511. 0, 0, 0, BKing, 0, 0, 0, 0
  512. ], Color.Black)
  513. self.game.checkedMove(notationToMove("a2a5", Color.Black))
  514. self.game.checkedMove(notationToMove("f5g6", Color.White))
  515. self.game.checkedMove(notationToMove("a5e5", Color.Black))
  516. self.game.checkedMove(notationToMove("h4f6", Color.White))
  517. self.game.checkedMove(notationToMove("e5e2", Color.Black))
  518. self.game.checkedMove(notationToMove("b7a7", Color.White))
  519. self.game.checkedMove(notationToMove("e2e1", Color.Black))
  520. self.game.checkedMove(notationToMove("g6f5", Color.White))
  521. self.game.checkedMove(notationToMove("e1b1", Color.Black))
  522. self.game.checkedMove(notationToMove("f6d4", Color.White))
  523. self.game.checkedMove(notationToMove("e8d8", Color.Black))
  524. self.game.checkedMove(notationToMove("f5e6", Color.White))
  525. self.game.checkedMove(notationToMove("d8c8", Color.Black))
  526. self.game.checkedMove(notationToMove("d4e5", Color.White))
  527. self.game.checkedMove(notationToMove("b1c1", Color.Black))
  528. self.game.checkedMove(notationToMove("a7f7", Color.White))
  529. self.game.checkedMove(notationToMove("c1c2", Color.Black))
  530. self.game.checkedMove(notationToMove("e5d6", Color.White))
  531. self.game.checkedMove(notationToMove("c2c1", Color.Black))
  532. self.game.checkedMove(notationToMove("e6d5", Color.White))
  533. self.game.checkedMove(notationToMove("c1a1", Color.Black))
  534. self.game.checkedMove(notationToMove("f7h7", Color.White))
  535. self.game.checkedMove(notationToMove("a1a2", Color.Black))
  536. self.game.checkedMove(notationToMove("d6f4", Color.White))
  537. self.game.checkedMove(notationToMove("a2a6", Color.Black))
  538. self.game.checkedMove(notationToMove("f4e5", Color.White))
  539. self.game.checkedMove(notationToMove("a6b6", Color.Black))
  540. self.game.checkedMove(notationToMove("h7c7", Color.White))
  541. self.game.checkedMove(notationToMove("c8d8", Color.Black))
  542. self.game.checkedMove(notationToMove("c7a7", Color.White))
  543. self.game.checkedMove(notationToMove("d8c8", Color.Black))
  544. self.game.checkedMove(notationToMove("a7c7", Color.White))
  545. self.game.checkedMove(notationToMove("c8d8", Color.Black))
  546. self.game.checkedMove(notationToMove("e5d6", Color.White))
  547. self.game.checkedMove(notationToMove("b6b1", Color.Black))
  548. self.game.checkedMove(notationToMove("c7a7", Color.White))
  549. self.game.checkedMove(notationToMove("b1e1", Color.Black))
  550. self.game.checkedMove(notationToMove("d6e5", Color.White))
  551. self.game.checkedMove(notationToMove("e1d1", Color.Black))
  552. self.game.checkedMove(notationToMove("d5e6", Color.White))
  553. self.game.checkedMove(notationToMove("d1c1", Color.Black))
  554. self.game.checkedMove(notationToMove("a7b7", Color.White))
  555. self.game.checkedMove(notationToMove("c1c2", Color.Black))
  556. self.game.checkedMove(notationToMove("b7b3", Color.White))
  557. self.game.checkedMove(notationToMove("c2c6", Color.Black))
  558. self.game.checkedMove(notationToMove("e5d6", Color.White))
  559. self.game.checkedMove(notationToMove("c6c1", Color.Black))
  560. self.game.checkedMove(notationToMove("b3h3", Color.White))
  561. self.game.checkedMove(notationToMove("d8c8", Color.Black))
  562. self.game.checkedMove(notationToMove("h3h8", Color.White))
  563. self.game.checkedMove(notationToMove("c8b7", Color.Black))
  564. self.game.checkedMove(notationToMove("h8b8", Color.White))
  565. self.game.checkedMove(notationToMove("b7a7", Color.Black))
  566. self.game.checkedMove(notationToMove("b8b4", Color.White))
  567. self.game.checkedMove(notationToMove("c1d1", Color.Black))
  568. self.game.checkedMove(notationToMove("e6d7", Color.White))
  569. self.game.checkedMove(notationToMove("d1c1", Color.Black))
  570. self.game.checkedMove(notationToMove("d6c7", Color.White))
  571. self.game.checkedMove(notationToMove("c1h1", Color.Black))
  572. self.game.checkedMove(notationToMove("c7f4", Color.White))
  573. self.game.checkedMove(notationToMove("h1h3", Color.Black))
  574. self.game.checkedMove(notationToMove("f4e5", Color.White))
  575. self.game.checkedMove(notationToMove("h3h1", Color.Black))
  576. self.game.checkedMove(notationToMove("e5d6", Color.White))
  577. self.game.checkedMove(notationToMove("h1c1", Color.Black))
  578. self.game.checkedMove(notationToMove("d6f4", Color.White))
  579. self.game.checkedMove(notationToMove("c1c2", Color.Black))
  580. self.game.checkedMove(notationToMove("f4c7", Color.White))
  581. self.game.checkedMove(notationToMove("c2c1", Color.Black))
  582. self.game.checkedMove(notationToMove("b4b5", Color.White))
  583. self.game.checkedMove(notationToMove("c1c2", Color.Black))
  584. self.game.checkedMove(notationToMove("b5b6", Color.White))
  585. self.game.checkedMove(notationToMove("c2g2", Color.Black))
  586. self.game.checkedMove(notationToMove("b6b3", Color.White))
  587. self.game.checkedMove(notationToMove("g2c2", Color.Black))
  588. self.game.checkedMove(notationToMove("b3b1", Color.White))
  589. self.game.checkedMove(notationToMove("c2c3", Color.Black))
  590. self.game.checkedMove(notationToMove("c7e5", Color.White))
  591. self.game.checkedMove(notationToMove("c3c2", Color.Black))
  592. self.game.checkedMove(notationToMove("d7d6", Color.White))
  593. self.game.checkedMove(notationToMove("c2d2", Color.Black))
  594. self.game.checkedMove(notationToMove("d6c6", Color.White))
  595. self.game.checkedMove(notationToMove("d2c2", Color.Black))
  596. self.game.checkedMove(notationToMove("c6d5", Color.White))
  597. self.game.checkedMove(notationToMove("c2g2", Color.Black))
  598. self.game.checkedMove(notationToMove("e5d6", Color.White))
  599. self.game.checkedMove(notationToMove("g2g5", Color.Black))
  600. self.game.checkedMove(notationToMove("d5c6", Color.White))
  601. self.game.checkedMove(notationToMove("a7a6", Color.Black))
  602. self.game.checkedMove(notationToMove("b1b8", Color.White))
  603. self.game.checkedMove(notationToMove("g5g7", Color.Black))
  604. self.game.checkedMove(notationToMove("b8b6", Color.White))
  605. self.game.checkedMove(notationToMove("a6a7", Color.Black))
  606. self.game.checkedMove(notationToMove("b6b1", Color.White))
  607. self.game.checkedMove(notationToMove("a7a8", Color.Black))
  608. self.game.checkedMove(notationToMove("b1e1", Color.White))
  609. self.game.checkedMove(notationToMove("g7b7", Color.Black))
  610. self.game.checkedMove(notationToMove("e1e8", Color.White))
  611. self.game.checkedMove(notationToMove("a8a7", Color.Black))
  612. self.game.checkedMove(notationToMove("d6c5", Color.White))
  613. self.check(not self.game.isDrawClaimable())
  614. ## Tests for Pawn moves
  615. method testCheckedMovePawnSingleTrue() =
  616. self.setup()
  617. var test: bool
  618. for file in "abcdefgh":
  619. test = self.game.checkedMove(notationToMove($file & "2" & $file & "3", Color.White))
  620. self.check(test)
  621. test = self.game.checkedMove(notationToMove($file & "7" & $file & "6", Color.Black))
  622. self.check(test)
  623. test = self.game.checkedMove(notationToMove($file & "3" & $file & "4", Color.White))
  624. self.check(test)
  625. test = self.game.checkedMove(notationToMove($file & "6" & $file & "5", Color.Black))
  626. self.check(test)
  627. method testCheckedMovePawnSingleFalseIntoEnemyPiece() =
  628. var test: bool
  629. let pos = initGame([
  630. WRook, 0, 0, WKing, 0, 0, 0, WRook,
  631. 0, 0, 0, 0, 0, 0, 0, 0,
  632. 0, 0, 0, 0, 0, 0, 0, 0,
  633. WPawn, WPawn, WPawn, WPawn, WPawn, WPawn, WPawn, WPawn,
  634. BPawn, BPawn, BPawn, BPawn, BPawn, BPawn, BPawn, BPawn,
  635. 0, 0, 0, 0, 0, 0, 0, 0,
  636. 0, 0, 0, 0, 0, 0, 0, 0,
  637. BRook, 0, 0, BKing, 0, 0, 0, BRook
  638. ], Color.White)
  639. self.game = pos
  640. for file in "abcdefgh":
  641. test = self.game.checkedMove(notationToMove($file & "4" & $file & "5", Color.White))
  642. self.check(not test)
  643. test = self.game.checkedMove(notationToMove($file & "5" & $file & "4", Color.Black))
  644. self.check(not test)
  645. method testCheckedMovePawnSingleFalseIntoOwnPiece() =
  646. var test: bool
  647. let pos = initGame([
  648. WRook, 0, 0, WKing, 0, 0, 0, WRook,
  649. WPawn, WPawn, WPawn, WPawn, WPawn, WPawn, WPawn, WPawn,
  650. WPawn, WPawn, WPawn, WPawn, WPawn, WPawn, WPawn, WPawn,
  651. 0, 0, 0, 0, 0, 0, 0, 0,
  652. 0, 0, 0, 0, 0, 0, 0, 0,
  653. BPawn, BPawn, BPawn, BPawn, BPawn, BPawn, BPawn, BPawn,
  654. BPawn, BPawn, BPawn, BPawn, BPawn, BPawn, BPawn, BPawn,
  655. BRook, 0, 0, BKing, 0, 0, 0, BRook
  656. ], Color.White)
  657. self.game = pos
  658. for file in "abcdefgh":
  659. test = self.game.checkedMove(notationToMove($file & "2" & $file & "3", Color.White))
  660. self.check(not test)
  661. test = self.game.checkedMove(notationToMove($file & "7" & $file & "6", Color.Black))
  662. self.check(not test)
  663. method testCheckedMovePawnDoubleTrue() =
  664. self.setup()
  665. var test: bool
  666. for file in "abcdefgh":
  667. test = self.game.checkedMove(notationToMove($file & "2" & $file & "4", Color.White))
  668. self.check(test)
  669. test = self.game.checkedMove(notationToMove($file & "7" & $file & "5", Color.Black))
  670. self.check(test)
  671. method testCheckedMovePawnDoubleFalseAlreadyMoved() =
  672. var test: bool
  673. let pos = initGame([
  674. WRook, 0, 0, WKing, 0, 0, 0, WRook,
  675. 0, 0, 0, 0, 0, 0, 0, 0,
  676. WPawn, WPawn, WPawn, WPawn, WPawn, WPawn, WPawn, WPawn,
  677. 0, 0, 0, 0, 0, 0, 0, 0,
  678. 0, 0, 0, 0, 0, 0, 0, 0,
  679. BPawn, BPawn, BPawn, BPawn, BPawn, BPawn, BPawn, BPawn,
  680. 0, 0, 0, 0, 0, 0, 0, 0,
  681. BRook, 0, 0, BKing, 0, 0, 0, BRook
  682. ], Color.White)
  683. self.game = pos
  684. for file in "abcdefgh":
  685. test = self.game.checkedMove(notationToMove($file & "3" & $file & "5", Color.White))
  686. self.check(not test)
  687. test = self.game.checkedMove(notationToMove($file & "6" & $file & "4", Color.Black))
  688. self.check(not test)
  689. method testCheckedMovePawnDoubleFalseThroughEnemyPiece() =
  690. var test: bool
  691. let pos = initGame([
  692. WRook, 0, 0, WKing, 0, 0, 0, WRook,
  693. WPawn, WPawn, WPawn, WPawn, WPawn, WPawn, WPawn, WPawn,
  694. BPawn, BPawn, BPawn, BPawn, BPawn, BPawn, BPawn, BPawn,
  695. 0, 0, 0, 0, 0, 0, 0, 0,
  696. 0, 0, 0, 0, 0, 0, 0, 0,
  697. WPawn, WPawn, WPawn, WPawn, WPawn, WPawn, WPawn, WPawn,
  698. BPawn, BPawn, BPawn, BPawn, BPawn, BPawn, BPawn, BPawn,
  699. BRook, 0, 0, BKing, 0, 0, 0, BRook
  700. ], Color.White)
  701. self.game = pos
  702. for file in "abcdefgh":
  703. test = self.game.checkedMove(notationToMove($file & "3" & $file & "5", Color.White))
  704. self.check(not test)
  705. test = self.game.checkedMove(notationToMove($file & "6" & $file & "4", Color.Black))
  706. self.check(not test)
  707. method testCheckedMovePawnDoubleFalseThroughOwnPiece() =
  708. var test: bool
  709. let pos = initGame([
  710. WRook, 0, 0, WKing, 0, 0, 0, WRook,
  711. WPawn, WPawn, WPawn, WPawn, WPawn, WPawn, WPawn, WPawn,
  712. WPawn, WPawn, WPawn, WPawn, WPawn, WPawn, WPawn, WPawn,
  713. 0, 0, 0, 0, 0, 0, 0, 0,
  714. 0, 0, 0, 0, 0, 0, 0, 0,
  715. BPawn, BPawn, BPawn, BPawn, BPawn, BPawn, BPawn, BPawn,
  716. BPawn, BPawn, BPawn, BPawn, BPawn, BPawn, BPawn, BPawn,
  717. BRook, 0, 0, BKing, 0, 0, 0, BRook
  718. ], Color.White)
  719. self.game = pos
  720. for file in "abcdefgh":
  721. test = self.game.checkedMove(notationToMove($file & "3" & $file & "5", Color.White))
  722. self.check(not test)
  723. test = self.game.checkedMove(notationToMove($file & "6" & $file & "4", Color.Black))
  724. self.check(not test)
  725. method testCheckedMovePawnDoubleFalseIntoEnemyPiece() =
  726. var test: bool
  727. let pos = initGame([
  728. WRook, 0, 0, WKing, 0, 0, 0, WRook,
  729. WPawn, WPawn, WPawn, WPawn, WPawn, WPawn, WPawn, WPawn,
  730. 0, 0, 0, 0, 0, 0, 0, 0,
  731. BPawn, BPawn, BPawn, BPawn, BPawn, BPawn, BPawn, BPawn,
  732. WPawn, WPawn, WPawn, WPawn, WPawn, WPawn, WPawn, WPawn,
  733. 0, 0, 0, 0, 0, 0, 0, 0,
  734. BPawn, BPawn, BPawn, BPawn, BPawn, BPawn, BPawn, BPawn,
  735. BRook, 0, 0, BKing, 0, 0, 0, BRook
  736. ], Color.White)
  737. self.game = pos
  738. for file in "abcdefgh":
  739. test = self.game.checkedMove(notationToMove($file & "3" & $file & "5", Color.White))
  740. self.check(not test)
  741. test = self.game.checkedMove(notationToMove($file & "6" & $file & "4", Color.Black))
  742. self.check(not test)
  743. method testCheckedMovePawnDoubleFalseIntoOwnPiece() =
  744. var test: bool
  745. let pos = initGame([
  746. WRook, 0, 0, WKing, 0, 0, 0, WRook,
  747. WPawn, WPawn, WPawn, WPawn, WPawn, WPawn, WPawn, WPawn,
  748. 0, 0, 0, 0, 0, 0, 0, 0,
  749. WPawn, WPawn, WPawn, WPawn, WPawn, WPawn, WPawn, WPawn,
  750. BPawn, BPawn, BPawn, BPawn, BPawn, BPawn, BPawn, BPawn,
  751. 0, 0, 0, 0, 0, 0, 0, 0,
  752. BPawn, BPawn, BPawn, BPawn, BPawn, BPawn, BPawn, BPawn,
  753. BRook, 0, 0, BKing, 0, 0, 0, BRook
  754. ], Color.White)
  755. self.game = pos
  756. for file in "abcdefgh":
  757. test = self.game.checkedMove(notationToMove($file & "3" & $file & "5", Color.White))
  758. self.check(not test)
  759. test = self.game.checkedMove(notationToMove($file & "6" & $file & "4", Color.Black))
  760. self.check(not test)
  761. method testCheckedMovePawnCaptureTrueWhite() =
  762. var test: bool
  763. let pos = initGame([
  764. WRook, 0, 0, WKing, 0, 0, 0, WRook,
  765. 0, 0, 0, 0, 0, 0, 0, 0,
  766. 0, 0, 0, 0, 0, 0, 0, 0,
  767. WPawn, WPawn, WPawn, WPawn, WPawn, WPawn, WPawn, WPawn,
  768. BPawn, BPawn, BPawn, BPawn, BPawn, BPawn, BPawn, BPawn,
  769. 0, 0, 0, 0, 0, 0, 0, 0,
  770. 0, 0, 0, 0, 0, 0, 0, 0,
  771. BRook, 0, 0, BKing, 0, 0, 0, BRook
  772. ], Color.White)
  773. var str: string
  774. str = "abcdefgh"
  775. for ind, file in str:
  776. if ind < len(str)-1:
  777. self.game = pos
  778. test = self.game.checkedMove(notationToMove($file & "4" & $str[ind+1] &
  779. "5", Color.White))
  780. self.check(test)
  781. str.reverse()
  782. for ind, file in str:
  783. if ind < len(str)-1:
  784. self.game = pos
  785. test = self.game.checkedMove(notationToMove($file & "4" & $str[ind+1] &
  786. "5", Color.White))
  787. self.check(test)
  788. method testCheckedMovePawnCaptureTrueBlack() =
  789. var test: bool
  790. let pos = initGame([
  791. WRook, 0, 0, WKing, 0, 0, 0, WRook,
  792. 0, 0, 0, 0, 0, 0, 0, 0,
  793. 0, 0, 0, 0, 0, 0, 0, 0,
  794. WPawn, WPawn, WPawn, WPawn, WPawn, WPawn, WPawn, WPawn,
  795. BPawn, BPawn, BPawn, BPawn, BPawn, BPawn, BPawn, BPawn,
  796. 0, 0, 0, 0, 0, 0, 0, 0,
  797. 0, 0, 0, 0, 0, 0, 0, 0,
  798. BRook, 0, 0, BKing, 0, 0, 0, BRook
  799. ], Color.Black)
  800. var str: string
  801. str = "abcdefgh"
  802. for ind, file in str:
  803. if ind < len(str)-1:
  804. self.game = pos
  805. test = self.game.checkedMove(notationToMove($file & "5" & $str[ind+1] &
  806. "4", Color.Black))
  807. self.check(test)
  808. str.reverse()
  809. for ind, file in str:
  810. if ind < len(str)-1:
  811. self.game = pos
  812. test = self.game.checkedMove(notationToMove($file & "5" & $str[ind+1] &
  813. "4", Color.Black))
  814. self.check(test)
  815. method testCheckedMovePawnCaptureFalseWhite() =
  816. var test: bool
  817. let pos = initGame([
  818. WRook, 0, 0, WKing, 0, 0, 0, WRook,
  819. 0, 0, 0, 0, 0, 0, 0, 0,
  820. 0, 0, 0, 0, 0, 0, 0, 0,
  821. WPawn, WPawn, WPawn, WPawn, WPawn, WPawn, WPawn, WPawn,
  822. 0, 0, 0, 0, 0, 0, 0, 0,
  823. 0, 0, 0, 0, 0, 0, 0, 0,
  824. 0, 0, 0, 0, 0, 0, 0, 0,
  825. BRook, 0, 0, BKing, 0, 0, 0, BRook
  826. ], Color.White)
  827. var str: string
  828. str = "abcdefgh"
  829. for ind, file in str:
  830. if ind < len(str)-1:
  831. self.game = pos
  832. test = self.game.checkedMove(notationToMove($file & "4" & $str[ind+1] &
  833. "5", Color.White))
  834. self.check(not test)
  835. str.reverse()
  836. for ind, file in str:
  837. if ind < len(str)-1:
  838. self.game = pos
  839. test = self.game.checkedMove(notationToMove($file & "4" & $str[ind+1] &
  840. "5", Color.White))
  841. self.check(not test)
  842. method testCheckedMovePawnCaptureFalseBlack() =
  843. var test: bool
  844. let pos = initGame([
  845. WRook, 0, 0, WKing, 0, 0, 0, WRook,
  846. 0, 0, 0, 0, 0, 0, 0, 0,
  847. 0, 0, 0, 0, 0, 0, 0, 0,
  848. 0, 0, 0, 0, 0, 0, 0, 0,
  849. BPawn, BPawn, BPawn, BPawn, BPawn, BPawn, BPawn, BPawn,
  850. 0, 0, 0, 0, 0, 0, 0, 0,
  851. 0, 0, 0, 0, 0, 0, 0, 0,
  852. BRook, 0, 0, BKing, 0, 0, 0, BRook
  853. ], Color.Black)
  854. var str: string
  855. str = "abcdefgh"
  856. for ind, file in str:
  857. if ind < len(str)-1:
  858. self.game = pos
  859. test = self.game.checkedMove(notationToMove($file & "5" & $str[ind+1] &
  860. "4", Color.Black))
  861. self.check(not test)
  862. str.reverse()
  863. for ind, file in str:
  864. if ind < len(str)-1:
  865. self.game = pos
  866. test = self.game.checkedMove(notationToMove($file & "5" & $str[ind+1] &
  867. "4", Color.Black))
  868. self.check(not test)
  869. method testCheckedMovePawnEnPassantTrueWhite() =
  870. var test: bool
  871. let pos = initGame([
  872. WRook, 0, 0, WKing, 0, 0, 0, WRook,
  873. WPawn, WPawn, WPawn, WPawn, WPawn, WPawn, WPawn, WPawn,
  874. 0, 0, 0, 0, 0, 0, 0, 0,
  875. 0, 0, 0, 0, 0, 0, 0, 0,
  876. 0, 0, 0, 0, 0, 0, 0, 0,
  877. 0, 0, 0, 0, 0, 0, 0, 0,
  878. BPawn, BPawn, BPawn, BPawn, BPawn, BPawn, BPawn, BPawn,
  879. BRook, 0, 0, BKing, 0, 0, 0, BRook
  880. ], Color.White)
  881. var str: string
  882. str = "abcdefgh"
  883. for ind, file in str:
  884. if ind < len(str)-1:
  885. self.game = pos
  886. test = self.game.checkedMove(notationToMove($file & "2" & $file & "4", Color.White))
  887. self.check(test)
  888. test = self.game.checkedMove(notationToMove($file & "7" & $file & "6", Color.Black))
  889. self.check(test)
  890. test = self.game.checkedMove(notationToMove($file & "4" & $file & "5", Color.White))
  891. self.check(test)
  892. test = self.game.checkedMove(notationToMove($str[ind+1] & "7" & $str[
  893. ind+1] & "5", Color.Black))
  894. self.check(test)
  895. test = self.game.checkedMove(notationToMove($file & "5" & $str[ind+1] &
  896. "6", Color.White))
  897. self.check(test)
  898. test = (0 == self.game.board[fieldToInd($str[ind+1] & "5")])
  899. self.check(test)
  900. str.reverse()
  901. for ind, file in str:
  902. if ind < len(str)-1:
  903. self.game = pos
  904. test = self.game.checkedMove(notationToMove($file & "2" & $file & "4", Color.White))
  905. self.check(test)
  906. test = self.game.checkedMove(notationToMove($file & "7" & $file & "6", Color.Black))
  907. self.check(test)
  908. test = self.game.checkedMove(notationToMove($file & "4" & $file & "5", Color.White))
  909. self.check(test)
  910. test = self.game.checkedMove(notationToMove($str[ind+1] & "7" & $str[
  911. ind+1] & "5", Color.Black))
  912. self.check(test)
  913. test = self.game.checkedMove(notationToMove($file & "5" & $str[ind+1] &
  914. "6", Color.White))
  915. self.check(test)
  916. test = (0 == self.game.board[fieldToInd($str[ind+1] & "5")])
  917. self.check(test)
  918. method testCheckedMovePawnEnPassantTrueBlack() =
  919. var test: bool
  920. let pos = initGame([
  921. WRook, 0, 0, WKing, 0, 0, 0, WRook,
  922. WPawn, WPawn, WPawn, WPawn, WPawn, WPawn, WPawn, WPawn,
  923. 0, 0, 0, 0, 0, 0, 0, 0,
  924. 0, 0, 0, 0, 0, 0, 0, 0,
  925. 0, 0, 0, 0, 0, 0, 0, 0,
  926. 0, 0, 0, 0, 0, 0, 0, 0,
  927. BPawn, BPawn, BPawn, BPawn, BPawn, BPawn, BPawn, BPawn,
  928. BRook, 0, 0, BKing, 0, 0, 0, BRook
  929. ], Color.Black)
  930. var str: string
  931. str = "abcdefgh"
  932. for ind, file in str:
  933. if ind < len(str)-1:
  934. self.game = pos
  935. test = self.game.checkedMove(notationToMove($file & "7" & $file & "5", Color.Black))
  936. self.check(test)
  937. test = self.game.checkedMove(notationToMove($file & "2" & $file & "3", Color.White))
  938. self.check(test)
  939. test = self.game.checkedMove(notationToMove($file & "5" & $file & "4", Color.Black))
  940. self.check(test)
  941. test = self.game.checkedMove(notationToMove($str[ind+1] & "2" & $str[
  942. ind+1] & "4", Color.White))
  943. self.check(test)
  944. test = self.game.checkedMove(notationToMove($file & "4" & $str[ind+1] &
  945. "3", Color.Black))
  946. self.check(test)
  947. test = (0 == self.game.board[fieldToInd($str[ind+1] & "4")])
  948. self.check(test)
  949. str.reverse()
  950. for ind, file in str:
  951. if ind < len(str)-1:
  952. self.game = pos
  953. test = self.game.checkedMove(notationToMove($file & "7" & $file & "5", Color.Black))
  954. self.check(test)
  955. test = self.game.checkedMove(notationToMove($file & "2" & $file & "3", Color.White))
  956. self.check(test)
  957. test = self.game.checkedMove(notationToMove($file & "5" & $file & "4", Color.Black))
  958. self.check(test)
  959. test = self.game.checkedMove(notationToMove($str[ind+1] & "2" & $str[
  960. ind+1] & "4", Color.White))
  961. self.check(test)
  962. test = self.game.checkedMove(notationToMove($file & "4" & $str[ind+1] &
  963. "3", Color.Black))
  964. self.check(test)
  965. test = (0 == self.game.board[fieldToInd($str[ind+1] & "4")])
  966. self.check(test)
  967. method testCheckedMovePawnEnPassantFalseWhite() =
  968. var test: bool
  969. let pos = initGame([
  970. WRook, 0, 0, WKing, 0, 0, 0, WRook,
  971. WPawn, WPawn, WPawn, WPawn, WPawn, WPawn, WPawn, WPawn,
  972. 0, 0, 0, 0, 0, 0, 0, 0,
  973. 0, 0, 0, 0, 0, 0, 0, 0,
  974. 0, 0, 0, 0, 0, 0, 0, 0,
  975. 0, 0, 0, 0, 0, 0, 0, 0,
  976. BPawn, BPawn, BPawn, BPawn, BPawn, BPawn, BPawn, BPawn,
  977. BRook, 0, 0, BKing, 0, 0, 0, BRook
  978. ], Color.White)
  979. var str: string
  980. str = "abcdefgh"
  981. for ind, file in str:
  982. if ind < len(str)-1:
  983. self.game = pos
  984. test = self.game.checkedMove(notationToMove($file & "2" & $file & "4", Color.White))
  985. self.check(test)
  986. test = self.game.checkedMove(notationToMove($str[ind+1] & "7" & $str[
  987. ind+1] & "5", Color.Black))
  988. self.check(test)
  989. test = self.game.checkedMove(notationToMove($file & "4" & $file & "5", Color.White))
  990. self.check(test)
  991. test = self.game.checkedMove(notationToMove($file & "7" & $file & "6", Color.Black))
  992. self.check(test)
  993. test = self.game.checkedMove(notationToMove($file & "5" & $str[ind+1] &
  994. "6", Color.White))
  995. self.check(not test)
  996. test = (0 == self.game.board[fieldToInd($str[ind+1] & "5")])
  997. self.check(not test)
  998. str.reverse()
  999. for ind, file in str:
  1000. if ind < len(str)-1:
  1001. self.game = pos
  1002. test = self.game.checkedMove(notationToMove($file & "2" & $file & "4", Color.White))
  1003. self.check(test)
  1004. test = self.game.checkedMove(notationToMove($str[ind+1] & "7" & $str[
  1005. ind+1] & "5", Color.Black))
  1006. self.check(test)
  1007. test = self.game.checkedMove(notationToMove($file & "4" & $file & "5", Color.White))
  1008. self.check(test)
  1009. test = self.game.checkedMove(notationToMove($file & "7" & $file & "6", Color.Black))
  1010. self.check(test)
  1011. test = self.game.checkedMove(notationToMove($file & "5" & $str[ind+1] &
  1012. "6", Color.White))
  1013. self.check(not test)
  1014. test = (0 == self.game.board[fieldToInd($str[ind+1] & "5")])
  1015. self.check(not test)
  1016. method testCheckedMovePawnEnPassantFalseBlack() =
  1017. var test: bool
  1018. let pos = initGame([
  1019. WRook, 0, 0, WKing, 0, 0, 0, WRook,
  1020. WPawn, WPawn, WPawn, WPawn, WPawn, WPawn, WPawn, WPawn,
  1021. 0, 0, 0, 0, 0, 0, 0, 0,
  1022. 0, 0, 0, 0, 0, 0, 0, 0,
  1023. 0, 0, 0, 0, 0, 0, 0, 0,
  1024. 0, 0, 0, 0, 0, 0, 0, 0,
  1025. BPawn, BPawn, BPawn, BPawn, BPawn, BPawn, BPawn, BPawn,
  1026. BRook, 0, 0, BKing, 0, 0, 0, BRook
  1027. ], Color.Black)
  1028. var str: string
  1029. str = "abcdefgh"
  1030. for ind, file in str:
  1031. if ind < len(str)-1:
  1032. self.game = pos
  1033. test = self.game.checkedMove(notationToMove($file & "7" & $file & "5", Color.Black))
  1034. self.check(test)
  1035. test = self.game.checkedMove(notationToMove($str[ind+1] & "2" & $str[
  1036. ind+1] & "4", Color.White))
  1037. self.check(test)
  1038. test = self.game.checkedMove(notationToMove($file & "5" & $file & "4", Color.Black))
  1039. self.check(test)
  1040. test = self.game.checkedMove(notationToMove($file & "2" & $file & "3", Color.White))
  1041. self.check(test)
  1042. test = self.game.checkedMove(notationToMove($file & "4" & $str[ind+1] &
  1043. "3", Color.Black))
  1044. self.check(not test)
  1045. test = (0 == self.game.board[fieldToInd($str[ind+1] & "4")])
  1046. self.check(not test)
  1047. str.reverse()
  1048. for ind, file in str:
  1049. if ind < len(str)-1:
  1050. self.game = pos
  1051. test = self.game.checkedMove(notationToMove($file & "7" & $file & "5", Color.Black))
  1052. self.check(test)
  1053. test = self.game.checkedMove(notationToMove($str[ind+1] & "2" & $str[
  1054. ind+1] & "4", Color.White))
  1055. self.check(test)
  1056. test = self.game.checkedMove(notationToMove($file & "5" & $file & "4", Color.Black))
  1057. self.check(test)
  1058. test = self.game.checkedMove(notationToMove($file & "2" & $file & "3", Color.White))
  1059. self.check(test)
  1060. test = self.game.checkedMove(notationToMove($file & "4" & $str[ind+1] &
  1061. "3", Color.Black))
  1062. self.check(not test)
  1063. test = (0 == self.game.board[fieldToInd($str[ind+1] & "4")])
  1064. self.check(not test)
  1065. ## Tests for King moves
  1066. method testCheckedMoveKingCastleTrueWhite() =
  1067. var test: bool
  1068. let pos = initGame([
  1069. WRook, 0, 0, WKing, 0, 0, 0, WRook,
  1070. WPawn, WPawn, WPawn, WPawn, WPawn, WPawn, WPawn, WPawn,
  1071. 0, 0, 0, 0, 0, 0, 0, 0,
  1072. 0, 0, 0, 0, 0, 0, 0, 0,
  1073. 0, 0, 0, 0, 0, 0, 0, 0,
  1074. 0, 0, 0, 0, 0, 0, 0, 0,
  1075. BPawn, BPawn, BPawn, BPawn, BPawn, BPawn, BPawn, BPawn,
  1076. BRook, 0, 0, BKing, 0, 0, 0, BRook
  1077. ], Color.White)
  1078. self.game = pos
  1079. test = self.game.checkedMove(notationToMove("e1c1", Color.White))
  1080. self.check(test)
  1081. self.game = pos
  1082. self.game.checkedMove(notationToMove("e1g1", Color.White))
  1083. self.check(test)
  1084. method testCheckedMoveKingCastleTrueBlack() =
  1085. var test: bool
  1086. let pos = initGame([
  1087. WRook, 0, 0, WKing, 0, 0, 0, WRook,
  1088. WPawn, WPawn, WPawn, WPawn, WPawn, WPawn, WPawn, WPawn,
  1089. 0, 0, 0, 0, 0, 0, 0, 0,
  1090. 0, 0, 0, 0, 0, 0, 0, 0,
  1091. 0, 0, 0, 0, 0, 0, 0, 0,
  1092. 0, 0, 0, 0, 0, 0, 0, 0,
  1093. BPawn, BPawn, BPawn, BPawn, BPawn, BPawn, BPawn, BPawn,
  1094. BRook, 0, 0, BKing, 0, 0, 0, BRook
  1095. ], Color.Black)
  1096. self.game = pos
  1097. test = self.game.checkedMove(notationToMove("e8c8", Color.Black))
  1098. self.check(test)
  1099. self.game = pos
  1100. test = self.game.checkedMove(notationToMove("e8g8", Color.Black))
  1101. self.check(test)
  1102. method testCheckedMoveKingCastleFalseAlreadyMovedKing() =
  1103. var test: bool
  1104. let pos = initGame([
  1105. WRook, 0, 0, 0, WKing, 0, 0, WRook,
  1106. WPawn, WPawn, WPawn, WPawn, WPawn, WPawn, WPawn, WPawn,
  1107. 0, 0, 0, 0, 0, 0, 0, 0,
  1108. 0, 0, 0, 0, 0, 0, 0, 0,
  1109. 0, 0, 0, 0, 0, 0, 0, 0,
  1110. 0, 0, 0, 0, 0, 0, 0, 0,
  1111. BPawn, BPawn, BPawn, BPawn, BPawn, BPawn, BPawn, BPawn,
  1112. BRook, 0, 0, 0, BKing, 0, 0, BRook
  1113. ], Color.White)
  1114. self.game.checkedMove(notationToMove("d1e1", Color.White))
  1115. self.game.checkedMove(notationToMove("d8e8", Color.White))
  1116. self.game = pos
  1117. test = self.game.checkedMove(notationToMove("e1c1", Color.White))
  1118. self.check(not test)
  1119. test = self.game.checkedMove(notationToMove("e8c8", Color.Black))
  1120. self.check(not test)
  1121. self.game.checkedMove(notationToMove("e1g1", Color.White))
  1122. self.check(not test)
  1123. test = self.game.checkedMove(notationToMove("e8g8", Color.Black))
  1124. self.check(not test)
  1125. method testCheckedMoveKingCastleFalseAlreadyMovedRook() =
  1126. var test: bool
  1127. let pos = initGame([
  1128. 0, WRook, 0, WKing, 0, 0, WRook, 0,
  1129. WPawn, WPawn, WPawn, WPawn, WPawn, WPawn, WPawn, WPawn,
  1130. 0, 0, 0, 0, 0, 0, 0, 0,
  1131. 0, 0, 0, 0, 0, 0, 0, 0,
  1132. 0, 0, 0, 0, 0, 0, 0, 0,
  1133. 0, 0, 0, 0, 0, 0, 0, 0,
  1134. BPawn, BPawn, BPawn, BPawn, BPawn, BPawn, BPawn, BPawn,
  1135. 0, BRook, 0, BKing, 0, 0, BRook, 0
  1136. ], Color.White)
  1137. self.game = pos
  1138. self.game.checkedMove(notationToMove("b1a1", Color.White))
  1139. self.game.checkedMove(notationToMove("b8a8", Color.Black))
  1140. self.game.checkedMove(notationToMove("g1h1", Color.White))
  1141. self.game.checkedMove(notationToMove("g8h8", Color.Black))
  1142. test = self.game.checkedMove(notationToMove("e1c1", Color.White))
  1143. self.check(not test)
  1144. test = self.game.checkedMove(notationToMove("e8c8", Color.Black))
  1145. self.check(not test)
  1146. self.game.checkedMove(notationToMove("e1g1", Color.White))
  1147. self.check(not test)
  1148. test = self.game.checkedMove(notationToMove("e8g8", Color.Black))
  1149. self.check(not test)
  1150. method testCheckedMoveKingCastleFalseThroughCheck() =
  1151. var test: bool
  1152. let pos = initGame([
  1153. WRook, 0, 0, WKing, 0, 0, 0, WRook,
  1154. WPawn, WPawn, BRook, WPawn, BRook, WPawn, WPawn, WPawn,
  1155. 0, 0, 0, 0, 0, 0, 0, 0,
  1156. 0, 0, 0, 0, 0, 0, 0, 0,
  1157. 0, 0, 0, 0, 0, 0, 0, 0,
  1158. 0, 0, 0, 0, 0, 0, 0, 0,
  1159. BPawn, BPawn, WRook, BPawn, WRook, BPawn, BPawn, BPawn,
  1160. BRook, 0, 0, BKing, 0, 0, 0, BRook
  1161. ], Color.White)
  1162. self.game = pos
  1163. test = self.game.checkedMove(notationToMove("e1c1", Color.White))
  1164. self.check(not test)
  1165. test = self.game.checkedMove(notationToMove("e8c8", Color.Black))
  1166. self.check(not test)
  1167. self.game.checkedMove(notationToMove("e1g1", Color.White))
  1168. self.check(not test)
  1169. test = self.game.checkedMove(notationToMove("e8g8", Color.Black))
  1170. self.check(not test)
  1171. method testCheckedMoveKingCastleFalseIntoCheck() =
  1172. var test: bool
  1173. let pos = initGame([
  1174. WRook, 0, 0, WKing, 0, 0, 0, WRook,
  1175. WPawn, BRook, WPawn, WPawn, WPawn, BRook, WPawn, WPawn,
  1176. 0, 0, 0, 0, 0, 0, 0, 0,
  1177. 0, 0, 0, 0, 0, 0, 0, 0,
  1178. 0, 0, 0, 0, 0, 0, 0, 0,
  1179. 0, 0, 0, 0, 0, 0, 0, 0,
  1180. BPawn, WRook, BPawn, BPawn, BPawn, WRook, BPawn, BPawn,
  1181. BRook, 0, 0, BKing, 0, 0, 0, BRook
  1182. ], Color.White)
  1183. self.game = pos
  1184. test = self.game.checkedMove(notationToMove("e1c1", Color.White))
  1185. self.check(not test)
  1186. test = self.game.checkedMove(notationToMove("e8c8", Color.Black))
  1187. self.check(not test)
  1188. self.game.checkedMove(notationToMove("e1g1", Color.White))
  1189. self.check(not test)
  1190. test = self.game.checkedMove(notationToMove("e8g8", Color.Black))
  1191. self.check(not test)
  1192. method testCheckedMoveKingCastleFalseThroughOwnPiece() =
  1193. var test: bool
  1194. let pos = initGame([
  1195. WRook, 0, WBishop, WKing, WBishop, 0, 0, WRook,
  1196. WPawn, WPawn, WPawn, WPawn, WPawn, WPawn, WPawn, WPawn,
  1197. 0, 0, 0, 0, 0, 0, 0, 0,
  1198. 0, 0, 0, 0, 0, 0, 0, 0,
  1199. 0, 0, 0, 0, 0, 0, 0, 0,
  1200. 0, 0, 0, 0, 0, 0, 0, 0,
  1201. BPawn, BPawn, BPawn, BPawn, BPawn, BPawn, BPawn, BPawn,
  1202. BRook, 0, BBishop, BKing, BBishop, 0, 0, BRook
  1203. ], Color.White)
  1204. self.game = pos
  1205. test = self.game.checkedMove(notationToMove("e1c1", Color.White))
  1206. self.check(not test)
  1207. test = self.game.checkedMove(notationToMove("e8c8", Color.Black))
  1208. self.check(not test)
  1209. self.game.checkedMove(notationToMove("e1g1", Color.White))
  1210. self.check(not test)
  1211. test = self.game.checkedMove(notationToMove("e8g8", Color.Black))
  1212. self.check(not test)
  1213. method testCheckedMoveKingCastleFalseThroughEnemyPiece() =
  1214. var test: bool
  1215. let pos = initGame([
  1216. WRook, 0, BBishop, WKing, BBishop, 0, 0, WRook,
  1217. WPawn, WPawn, WPawn, WPawn, WPawn, WPawn, WPawn, WPawn,
  1218. 0, 0, 0, 0, 0, 0, 0, 0,
  1219. 0, 0, 0, 0, 0, 0, 0, 0,
  1220. 0, 0, 0, 0, 0, 0, 0, 0,
  1221. 0, 0, 0, 0, 0, 0, 0, 0,
  1222. BPawn, BPawn, BPawn, BPawn, BPawn, BPawn, BPawn, BPawn,
  1223. BRook, 0, WBishop, BKing, WBishop, 0, 0, BRook
  1224. ], Color.White)
  1225. self.game = pos
  1226. test = self.game.checkedMove(notationToMove("e1c1", Color.White))
  1227. self.check(not test)
  1228. test = self.game.checkedMove(notationToMove("e8c8", Color.Black))
  1229. self.check(not test)
  1230. self.game.checkedMove(notationToMove("e1g1", Color.White))
  1231. self.check(not test)
  1232. test = self.game.checkedMove(notationToMove("e8g8", Color.Black))
  1233. self.check(not test)
  1234. method testCheckedMoveKingCastleFalseIntoOwnPiece() =
  1235. var test: bool
  1236. let pos = initGame([
  1237. WRook, WBishop, 0, WKing, 0, WBishop, 0, WRook,
  1238. WPawn, WPawn, WPawn, WPawn, WPawn, WPawn, WPawn, WPawn,
  1239. 0, 0, 0, 0, 0, 0, 0, 0,
  1240. 0, 0, 0, 0, 0, 0, 0, 0,
  1241. 0, 0, 0, 0, 0, 0, 0, 0,
  1242. 0, 0, 0, 0, 0, 0, 0, 0,
  1243. BPawn, BPawn, BPawn, BPawn, BPawn, BPawn, BPawn, BPawn,
  1244. BRook, BBishop, 0, BKing, 0, BBishop, 0, BRook
  1245. ], Color.White)
  1246. self.game = pos
  1247. test = self.game.checkedMove(notationToMove("e1c1", Color.White))
  1248. self.check(not test)
  1249. test = self.game.checkedMove(notationToMove("e8c8", Color.Black))
  1250. self.check(not test)
  1251. self.game.checkedMove(notationToMove("e1g1", Color.White))
  1252. self.check(not test)
  1253. test = self.game.checkedMove(notationToMove("e8g8", Color.Black))
  1254. self.check(not test)
  1255. method testCheckedMoveKingCastleFalseIntoEnemyPiece() =
  1256. var test: bool
  1257. let pos = initGame([
  1258. WRook, BBishop, 0, WKing, 0, BBishop, 0, WRook,
  1259. WPawn, WPawn, WPawn, WPawn, WPawn, WPawn, WPawn, WPawn,
  1260. 0, 0, 0, 0, 0, 0, 0, 0,
  1261. 0, 0, 0, 0, 0, 0, 0, 0,
  1262. 0, 0, 0, 0, 0, 0, 0, 0,
  1263. 0, 0, 0, 0, 0, 0, 0, 0,
  1264. BPawn, BPawn, BPawn, BPawn, BPawn, BPawn, BPawn, BPawn,
  1265. BRook, WBishop, 0, BKing, 0, WBishop, 0, BRook
  1266. ], Color.White)
  1267. self.game = pos
  1268. test = self.game.checkedMove(notationToMove("e1c1", Color.White))
  1269. self.check(not test)
  1270. test = self.game.checkedMove(notationToMove("e8c8", Color.Black))
  1271. self.check(not test)
  1272. self.game.checkedMove(notationToMove("e1g1", Color.White))
  1273. self.check(not test)
  1274. test = self.game.checkedMove(notationToMove("e8g8", Color.Black))
  1275. self.check(not test)
  1276. method testCheckedMoveKingWhite() =
  1277. var test: bool
  1278. let pos = initGame([
  1279. 0, 0, 0, 0, 0, 0, 0, 0,
  1280. 0, 0, 0, 0, 0, 0, 0, 0,
  1281. 0, 0, 0, 0, 0, 0, 0, 0,
  1282. 0, 0, 0, 0, WEnPassant, 0, 0, 0,
  1283. 0, 0, BPawn, WKing, WPawn, 0, 0, 0,
  1284. 0, 0, BEnPassant, 0, 0, 0, 0, 0,
  1285. 0, 0, 0, 0, 0, 0, 0, 0,
  1286. 0, 0, 0, 0, 0, 0, 0, 0,
  1287. ], Color.White)
  1288. let start = "e5"
  1289. let legalMoves = ["f4", "d4", "f5", "f6", "e6", "d6"]
  1290. let str = "abcdefgh"
  1291. var move: string
  1292. for cha in str:
  1293. for num in 1..8:
  1294. self.game = pos
  1295. move = $cha & $num
  1296. test = self.game.checkedMove(notationToMove(start & move, Color.White))
  1297. if move in legalMoves:
  1298. self.check(test)
  1299. else:
  1300. self.check(not test)
  1301. method testCheckedMoveKingBlack() =
  1302. var test: bool
  1303. let pos = initGame([
  1304. 0, 0, 0, 0, 0, 0, 0, 0,
  1305. 0, 0, 0, 0, 0, 0, 0, 0,
  1306. 0, 0, 0, 0, 0, 0, 0, 0,
  1307. 0, 0, 0, 0, BEnPassant, 0, 0, 0,
  1308. 0, 0, WPawn, BKing, BPawn, 0, 0, 0,
  1309. 0, 0, WEnPassant, 0, 0, 0, 0, 0,
  1310. 0, 0, 0, 0, 0, 0, 0, 0,
  1311. 0, 0, 0, 0, 0, 0, 0, 0,
  1312. ], Color.Black)
  1313. let start = "e5"
  1314. let legalMoves = ["f4", "d4", "f5", "f6", "e4", "d6"]
  1315. let str = "abcdefgh"
  1316. var move: string
  1317. for cha in str:
  1318. for num in 1..8:
  1319. self.game = pos
  1320. move = $cha & $num
  1321. test = self.game.checkedMove(notationToMove(start & move, Color.Black))
  1322. if move in legalMoves:
  1323. self.check(test)
  1324. else:
  1325. self.check(not test)
  1326. ## Tests for Bishop moves
  1327. method testCheckedMoveBishopWhite() =
  1328. var test: bool
  1329. let pos = initGame([
  1330. 0, 0, 0, 0, 0, 0, 0, 0,
  1331. 0, 0, 0, 0, 0, 0, 0, 0,
  1332. 0, 0, 0, 0, 0, 0, 0, 0,
  1333. 0, 0, 0, BEnPassant, 0, WPawn, 0, 0,
  1334. 0, 0, 0, 0, WBishop, 0, 0, 0,
  1335. 0, 0, 0, BPawn, 0, WEnPassant, 0, 0,
  1336. 0, 0, 0, 0, 0, 0, 0, 0,
  1337. 0, 0, 0, 0, 0, 0, 0, 0,
  1338. ], Color.White)
  1339. let start = "d5"
  1340. let legalMoves = ["e4", "f3", "g2", "h1", "c6", "b7", "a8", "e6"]
  1341. let str = "abcdefgh"
  1342. var move: string
  1343. for cha in str:
  1344. for num in 1..8:
  1345. self.game = pos
  1346. move = $cha & $num
  1347. test = self.game.checkedMove(notationToMove(start & move, Color.White))
  1348. if move in legalMoves:
  1349. self.check(test)
  1350. else:
  1351. self.check(not test)
  1352. method testCheckedMoveBishopBlack() =
  1353. var test: bool
  1354. let pos = initGame([
  1355. 0, 0, 0, 0, 0, 0, 0, 0,
  1356. 0, 0, 0, 0, 0, 0, 0, 0,
  1357. 0, 0, 0, 0, 0, 0, 0, 0,
  1358. 0, 0, 0, WEnPassant, 0, BPawn, 0, 0,
  1359. 0, 0, 0, 0, BBishop, 0, 0, 0,
  1360. 0, 0, 0, WPawn, 0, BEnPassant, 0, 0,
  1361. 0, 0, 0, 0, 0, 0, 0, 0,
  1362. 0, 0, 0, 0, 0, 0, 0, 0,
  1363. ], Color.Black)
  1364. let start = "d5"
  1365. let legalMoves = ["e4", "f3", "g2", "h1", "c6", "b7", "a8", "e6"]
  1366. let str = "abcdefgh"
  1367. var move: string
  1368. for cha in str:
  1369. for num in 1..8:
  1370. self.game = pos
  1371. move = $cha & $num
  1372. test = self.game.checkedMove(notationToMove(start & move, Color.Black))
  1373. if move in legalMoves:
  1374. self.check(test)
  1375. else:
  1376. self.check(not test)
  1377. ## Tests for Knight moves
  1378. method testCheckedMoveKnightWhite() =
  1379. var test: bool
  1380. let pos = initGame([
  1381. 0, 0, 0, 0, 0, 0, 0, 0,
  1382. 0, 0, 0, 0, 0, 0, 0, 0,
  1383. 0, 0, 0, WEnPassant, 0, WPawn, 0, 0,
  1384. 0, 0, BEnPassant, 0, 0, 0, 0, 0,
  1385. 0, 0, 0, 0, WKnight, 0, 0, 0,
  1386. 0, 0, BPawn, 0, 0, 0, 0, 0,
  1387. 0, 0, 0, 0, 0, 0, 0, 0,
  1388. 0, 0, 0, 0, 0, 0, 0, 0,
  1389. ], Color.White)
  1390. let start = "d5"
  1391. let legalMoves = ["f6", "f4", "e3", "b4", "b6", "c7", "e7"]
  1392. let str = "abcdefgh"
  1393. var move: string
  1394. for cha in str:
  1395. for num in 1..8:
  1396. self.game = pos
  1397. move = $cha & $num
  1398. test = self.game.checkedMove(notationToMove(start & move, Color.White))
  1399. if move in legalMoves:
  1400. self.check(test)
  1401. else:
  1402. self.check(not test)
  1403. method testCheckedMoveKnightBlack() =
  1404. var test: bool
  1405. let pos = initGame([
  1406. 0, 0, 0, 0, 0, 0, 0, 0,
  1407. 0, 0, 0, 0, 0, 0, 0, 0,
  1408. 0, 0, 0, BEnPassant, 0, BPawn, 0, 0,
  1409. 0, 0, WEnPassant, 0, 0, 0, 0, 0,
  1410. 0, 0, 0, 0, BKnight, 0, 0, 0,
  1411. 0, 0, WPawn, 0, 0, 0, 0, 0,
  1412. 0, 0, 0, 0, 0, 0, 0, 0,
  1413. 0, 0, 0, 0, 0, 0, 0, 0,
  1414. ], Color.Black)
  1415. let start = "d5"
  1416. let legalMoves = ["f6", "f4", "e3", "b4", "b6", "c7", "e7"]
  1417. let str = "abcdefgh"
  1418. var move: string
  1419. for cha in str:
  1420. for num in 1..8:
  1421. self.game = pos
  1422. move = $cha & $num
  1423. test = self.game.checkedMove(notationToMove(start & move, Color.Black))
  1424. if move in legalMoves:
  1425. self.check(test)
  1426. else:
  1427. self.check(not test)
  1428. ## Tests for Rook moves
  1429. method testCheckedMoveRookWhite() =
  1430. var test: bool
  1431. let pos = initGame([
  1432. 0, 0, 0, 0, 0, 0, 0, 0,
  1433. 0, 0, 0, 0, 0, 0, 0, 0,
  1434. 0, 0, 0, 0, 0, 0, 0, 0,
  1435. 0, 0, 0, 0, WPawn, 0, 0, 0,
  1436. 0, 0, 0, BPawn, WRook, WEnPassant, 0, 0,
  1437. 0, 0, 0, 0, BEnPassant, 0, 0, 0,
  1438. 0, 0, 0, 0, 0, 0, 0, 0,
  1439. 0, 0, 0, 0, 0, 0, 0, 0,
  1440. ], Color.White)
  1441. let start = "d5"
  1442. let legalMoves = ["e5", "d6", "d7", "d8", "c5", "b5", "a5"]
  1443. let str = "abcdefgh"
  1444. var move: string
  1445. for cha in str:
  1446. for num in 1..8:
  1447. self.game = pos
  1448. move = $cha & $num
  1449. test = self.game.checkedMove(notationToMove(start & move, Color.White))
  1450. if move in legalMoves:
  1451. self.check(test)
  1452. else:
  1453. self.check(not test)
  1454. method testCheckedMoveRookBlack() =
  1455. var test: bool
  1456. let pos = initGame([
  1457. 0, 0, 0, 0, 0, 0, 0, 0,
  1458. 0, 0, 0, 0, 0, 0, 0, 0,
  1459. 0, 0, 0, 0, 0, 0, 0, 0,
  1460. 0, 0, 0, 0, BPawn, 0, 0, 0,
  1461. 0, 0, 0, WPawn, BRook, BEnPassant, 0, 0,
  1462. 0, 0, 0, 0, WEnPassant, 0, 0, 0,
  1463. 0, 0, 0, 0, 0, 0, 0, 0,
  1464. 0, 0, 0, 0, 0, 0, 0, 0,
  1465. ], Color.Black)
  1466. let start = "d5"
  1467. let legalMoves = ["e5", "d6", "d7", "d8", "c5", "b5", "a5"]
  1468. let str = "abcdefgh"
  1469. var move: string
  1470. for cha in str:
  1471. for num in 1..8:
  1472. self.game = pos
  1473. move = $cha & $num
  1474. test = self.game.checkedMove(notationToMove(start & move, Color.Black))
  1475. if move in legalMoves:
  1476. self.check(test)
  1477. else:
  1478. self.check(not test)
  1479. ## Tests for Queen moves
  1480. method testCheckedMoveQueenWhite() =
  1481. var test: bool
  1482. let pos = initGame([
  1483. 0, 0, 0, 0, 0, 0, 0, 0,
  1484. 0, 0, 0, 0, 0, 0, 0, 0,
  1485. 0, 0, 0, 0, 0, 0, 0, 0,
  1486. 0, 0, 0, 0, WPawn, 0, 0, 0,
  1487. 0, 0, 0, BPawn, WQueen, WEnPassant, 0, 0,
  1488. 0, 0, 0, 0, BEnPassant, 0, 0, 0,
  1489. 0, 0, 0, 0, 0, 0, 0, 0,
  1490. 0, 0, 0, 0, 0, 0, 0, 0,
  1491. ], Color.White)
  1492. let start = "d5"
  1493. let legalMoves = ["e5", "d6", "d7", "d8", "c5", "b5", "a5", "h1", "g2",
  1494. "f3", "e4", "c4", "b3", "a2", "g8", "f7", "e6", "c6", "b7", "a8"]
  1495. let str = "abcdefgh"
  1496. var move: string
  1497. for cha in str:
  1498. for num in 1..8:
  1499. self.game = pos
  1500. move = $cha & $num
  1501. test = self.game.checkedMove(notationToMove(start & move, Color.White))
  1502. if move in legalMoves:
  1503. self.check(test)
  1504. else:
  1505. self.check(not test)
  1506. method testCheckedMoveQueenBlack() =
  1507. var test: bool
  1508. let pos = initGame([
  1509. 0, 0, 0, 0, 0, 0, 0, 0,
  1510. 0, 0, 0, 0, 0, 0, 0, 0,
  1511. 0, 0, 0, 0, 0, 0, 0, 0,
  1512. 0, 0, 0, 0, BPawn, 0, 0, 0,
  1513. 0, 0, 0, WPawn, BQueen, BEnPassant, 0, 0,
  1514. 0, 0, 0, 0, WEnPassant, 0, 0, 0,
  1515. 0, 0, 0, 0, 0, 0, 0, 0,
  1516. 0, 0, 0, 0, 0, 0, 0, 0,
  1517. ], Color.Black)
  1518. let start = "d5"
  1519. let legalMoves = ["e5", "d6", "d7", "d8", "c5", "b5", "a5", "h1", "g2",
  1520. "f3", "e4", "c4", "b3", "a2", "g8", "f7", "e6", "c6", "b7", "a8"]
  1521. let str = "abcdefgh"
  1522. var move: string
  1523. for cha in str:
  1524. for num in 1..8:
  1525. self.game = pos
  1526. move = $cha & $num
  1527. test = self.game.checkedMove(notationToMove(start & move, Color.Black))
  1528. if move in legalMoves:
  1529. self.check(test)
  1530. else:
  1531. self.check(not test)
  1532. when isMainModule:
  1533. einheit.runTests()