chess 0.0.1.dummy → 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +6 -0
- data/LICENSE +165 -0
- data/README.rdoc +40 -0
- data/Rakefile +17 -1
- data/chess.gemspec +12 -13
- data/ext/MakefileC +22 -0
- data/ext/bitboard.c +376 -0
- data/ext/bitboard.h +64 -0
- data/ext/board.c +586 -0
- data/ext/board.h +62 -0
- data/ext/chess.c +481 -0
- data/ext/chess.h +43 -0
- data/ext/common.c +101 -0
- data/ext/common.h +110 -0
- data/ext/extconf.rb +29 -0
- data/ext/game.c +385 -0
- data/ext/game.h +42 -0
- data/ext/special.c +191 -0
- data/ext/special.h +23 -0
- data/lib/chess.rb +5 -7
- data/lib/chess/exceptions.rb +31 -0
- data/lib/chess/game.rb +142 -0
- data/lib/chess/gnuchess.rb +93 -0
- data/lib/chess/pgn.rb +66 -0
- data/lib/chess/version.rb +4 -2
- data/test/pgn_collection/checkmate/black_wins/0001.pgn +17 -0
- data/test/pgn_collection/checkmate/black_wins/0002.pgn +13 -0
- data/test/pgn_collection/checkmate/black_wins/0003.pgn +13 -0
- data/test/pgn_collection/checkmate/black_wins/0004.pgn +20 -0
- data/test/pgn_collection/checkmate/black_wins/0005.pgn +19 -0
- data/test/pgn_collection/checkmate/black_wins/0006.pgn +15 -0
- data/test/pgn_collection/checkmate/black_wins/0007.pgn +16 -0
- data/test/pgn_collection/checkmate/black_wins/0008.pgn +16 -0
- data/test/pgn_collection/checkmate/black_wins/0009.pgn +21 -0
- data/test/pgn_collection/checkmate/black_wins/0010.pgn +15 -0
- data/test/pgn_collection/checkmate/black_wins/0011.pgn +15 -0
- data/test/pgn_collection/checkmate/black_wins/0012.pgn +14 -0
- data/test/pgn_collection/checkmate/black_wins/0013.pgn +17 -0
- data/test/pgn_collection/checkmate/black_wins/0014.pgn +17 -0
- data/test/pgn_collection/checkmate/black_wins/0015.pgn +15 -0
- data/test/pgn_collection/checkmate/black_wins/0016.pgn +20 -0
- data/test/pgn_collection/checkmate/black_wins/0017.pgn +14 -0
- data/test/pgn_collection/checkmate/black_wins/0018.pgn +19 -0
- data/test/pgn_collection/checkmate/black_wins/0019.pgn +16 -0
- data/test/pgn_collection/checkmate/black_wins/0020.pgn +14 -0
- data/test/pgn_collection/checkmate/black_wins/0021.pgn +20 -0
- data/test/pgn_collection/checkmate/black_wins/0022.pgn +16 -0
- data/test/pgn_collection/checkmate/black_wins/0023.pgn +17 -0
- data/test/pgn_collection/checkmate/black_wins/0024.pgn +20 -0
- data/test/pgn_collection/checkmate/black_wins/0025.pgn +20 -0
- data/test/pgn_collection/checkmate/black_wins/0026.pgn +19 -0
- data/test/pgn_collection/checkmate/black_wins/0027.pgn +14 -0
- data/test/pgn_collection/checkmate/black_wins/0028.pgn +15 -0
- data/test/pgn_collection/checkmate/black_wins/0029.pgn +18 -0
- data/test/pgn_collection/checkmate/black_wins/0030.pgn +16 -0
- data/test/pgn_collection/checkmate/black_wins/0031.pgn +17 -0
- data/test/pgn_collection/checkmate/black_wins/0032.pgn +17 -0
- data/test/pgn_collection/checkmate/black_wins/0033.pgn +15 -0
- data/test/pgn_collection/checkmate/black_wins/0034.pgn +13 -0
- data/test/pgn_collection/checkmate/black_wins/0035.pgn +16 -0
- data/test/pgn_collection/checkmate/black_wins/0036.pgn +20 -0
- data/test/pgn_collection/checkmate/black_wins/0037.pgn +20 -0
- data/test/pgn_collection/checkmate/black_wins/0038.pgn +14 -0
- data/test/pgn_collection/checkmate/black_wins/0039.pgn +19 -0
- data/test/pgn_collection/checkmate/black_wins/0040.pgn +13 -0
- data/test/pgn_collection/checkmate/black_wins/0041.pgn +20 -0
- data/test/pgn_collection/checkmate/black_wins/0042.pgn +12 -0
- data/test/pgn_collection/checkmate/black_wins/0043.pgn +20 -0
- data/test/pgn_collection/checkmate/black_wins/0044.pgn +19 -0
- data/test/pgn_collection/checkmate/black_wins/0045.pgn +16 -0
- data/test/pgn_collection/checkmate/black_wins/0046.pgn +15 -0
- data/test/pgn_collection/checkmate/black_wins/0047.pgn +14 -0
- data/test/pgn_collection/checkmate/black_wins/0048.pgn +16 -0
- data/test/pgn_collection/checkmate/black_wins/0049.pgn +15 -0
- data/test/pgn_collection/checkmate/black_wins/0050.pgn +17 -0
- data/test/pgn_collection/checkmate/black_wins/0051.pgn +13 -0
- data/test/pgn_collection/checkmate/black_wins/0052.pgn +12 -0
- data/test/pgn_collection/checkmate/black_wins/0053.pgn +20 -0
- data/test/pgn_collection/checkmate/black_wins/0054.pgn +15 -0
- data/test/pgn_collection/checkmate/black_wins/0055.pgn +19 -0
- data/test/pgn_collection/checkmate/black_wins/0056.pgn +14 -0
- data/test/pgn_collection/checkmate/black_wins/0057.pgn +15 -0
- data/test/pgn_collection/checkmate/black_wins/0058.pgn +21 -0
- data/test/pgn_collection/checkmate/black_wins/0059.pgn +16 -0
- data/test/pgn_collection/checkmate/black_wins/0060.pgn +23 -0
- data/test/pgn_collection/checkmate/black_wins/0061.pgn +17 -0
- data/test/pgn_collection/checkmate/black_wins/0062.pgn +25 -0
- data/test/pgn_collection/checkmate/black_wins/0063.pgn +18 -0
- data/test/pgn_collection/checkmate/black_wins/0064.pgn +12 -0
- data/test/pgn_collection/checkmate/black_wins/0065.pgn +19 -0
- data/test/pgn_collection/checkmate/black_wins/0066.pgn +20 -0
- data/test/pgn_collection/checkmate/black_wins/0067.pgn +14 -0
- data/test/pgn_collection/checkmate/black_wins/0068.pgn +18 -0
- data/test/pgn_collection/checkmate/black_wins/0069.pgn +16 -0
- data/test/pgn_collection/checkmate/black_wins/0070.pgn +14 -0
- data/test/pgn_collection/checkmate/black_wins/0071.pgn +21 -0
- data/test/pgn_collection/checkmate/black_wins/0072.pgn +13 -0
- data/test/pgn_collection/checkmate/black_wins/0073.pgn +15 -0
- data/test/pgn_collection/checkmate/black_wins/0074.pgn +25 -0
- data/test/pgn_collection/checkmate/black_wins/0075.pgn +16 -0
- data/test/pgn_collection/checkmate/black_wins/0076.pgn +11 -0
- data/test/pgn_collection/checkmate/black_wins/0077.pgn +23 -0
- data/test/pgn_collection/checkmate/black_wins/0078.pgn +18 -0
- data/test/pgn_collection/checkmate/white_wins/0001.pgn +14 -0
- data/test/pgn_collection/checkmate/white_wins/0002.pgn +19 -0
- data/test/pgn_collection/checkmate/white_wins/0003.pgn +19 -0
- data/test/pgn_collection/checkmate/white_wins/0004.pgn +12 -0
- data/test/pgn_collection/checkmate/white_wins/0005.pgn +27 -0
- data/test/pgn_collection/checkmate/white_wins/0006.pgn +19 -0
- data/test/pgn_collection/checkmate/white_wins/0007.pgn +13 -0
- data/test/pgn_collection/checkmate/white_wins/0008.pgn +14 -0
- data/test/pgn_collection/checkmate/white_wins/0009.pgn +17 -0
- data/test/pgn_collection/checkmate/white_wins/0010.pgn +19 -0
- data/test/pgn_collection/checkmate/white_wins/0011.pgn +19 -0
- data/test/pgn_collection/checkmate/white_wins/0012.pgn +19 -0
- data/test/pgn_collection/checkmate/white_wins/0013.pgn +15 -0
- data/test/pgn_collection/checkmate/white_wins/0014.pgn +12 -0
- data/test/pgn_collection/checkmate/white_wins/0015.pgn +20 -0
- data/test/pgn_collection/checkmate/white_wins/0016.pgn +12 -0
- data/test/pgn_collection/checkmate/white_wins/0017.pgn +12 -0
- data/test/pgn_collection/checkmate/white_wins/0018.pgn +21 -0
- data/test/pgn_collection/checkmate/white_wins/0019.pgn +21 -0
- data/test/pgn_collection/checkmate/white_wins/0020.pgn +15 -0
- data/test/pgn_collection/checkmate/white_wins/0021.pgn +18 -0
- data/test/pgn_collection/checkmate/white_wins/0022.pgn +14 -0
- data/test/pgn_collection/checkmate/white_wins/0023.pgn +27 -0
- data/test/pgn_collection/checkmate/white_wins/0024.pgn +19 -0
- data/test/pgn_collection/checkmate/white_wins/0025.pgn +19 -0
- data/test/pgn_collection/checkmate/white_wins/0026.pgn +19 -0
- data/test/pgn_collection/checkmate/white_wins/0027.pgn +27 -0
- data/test/pgn_collection/checkmate/white_wins/0028.pgn +17 -0
- data/test/pgn_collection/checkmate/white_wins/0029.pgn +19 -0
- data/test/pgn_collection/checkmate/white_wins/0030.pgn +19 -0
- data/test/pgn_collection/checkmate/white_wins/0031.pgn +19 -0
- data/test/pgn_collection/checkmate/white_wins/0032.pgn +19 -0
- data/test/pgn_collection/checkmate/white_wins/0033.pgn +28 -0
- data/test/pgn_collection/checkmate/white_wins/0034.pgn +12 -0
- data/test/pgn_collection/checkmate/white_wins/0035.pgn +12 -0
- data/test/pgn_collection/checkmate/white_wins/0036.pgn +16 -0
- data/test/pgn_collection/checkmate/white_wins/0037.pgn +19 -0
- data/test/pgn_collection/checkmate/white_wins/0038.pgn +19 -0
- data/test/pgn_collection/checkmate/white_wins/0039.pgn +28 -0
- data/test/pgn_collection/checkmate/white_wins/0040.pgn +19 -0
- data/test/pgn_collection/checkmate/white_wins/0041.pgn +18 -0
- data/test/pgn_collection/checkmate/white_wins/0042.pgn +18 -0
- data/test/pgn_collection/checkmate/white_wins/0043.pgn +14 -0
- data/test/pgn_collection/checkmate/white_wins/0044.pgn +15 -0
- data/test/pgn_collection/checkmate/white_wins/0045.pgn +14 -0
- data/test/pgn_collection/checkmate/white_wins/0046.pgn +15 -0
- data/test/pgn_collection/checkmate/white_wins/0047.pgn +14 -0
- data/test/pgn_collection/checkmate/white_wins/0048.pgn +19 -0
- data/test/pgn_collection/checkmate/white_wins/0049.pgn +19 -0
- data/test/pgn_collection/checkmate/white_wins/0050.pgn +15 -0
- data/test/pgn_collection/checkmate/white_wins/0051.pgn +16 -0
- data/test/pgn_collection/checkmate/white_wins/0052.pgn +18 -0
- data/test/pgn_collection/checkmate/white_wins/0053.pgn +14 -0
- data/test/pgn_collection/checkmate/white_wins/0054.pgn +15 -0
- data/test/pgn_collection/checkmate/white_wins/0055.pgn +16 -0
- data/test/pgn_collection/checkmate/white_wins/0056.pgn +15 -0
- data/test/pgn_collection/checkmate/white_wins/0057.pgn +20 -0
- data/test/pgn_collection/checkmate/white_wins/0058.pgn +17 -0
- data/test/pgn_collection/checkmate/white_wins/0059.pgn +13 -0
- data/test/pgn_collection/checkmate/white_wins/0060.pgn +18 -0
- data/test/pgn_collection/checkmate/white_wins/0061.pgn +19 -0
- data/test/pgn_collection/checkmate/white_wins/0062.pgn +21 -0
- data/test/pgn_collection/checkmate/white_wins/0063.pgn +17 -0
- data/test/pgn_collection/checkmate/white_wins/0064.pgn +14 -0
- data/test/pgn_collection/checkmate/white_wins/0065.pgn +17 -0
- data/test/pgn_collection/checkmate/white_wins/0066.pgn +19 -0
- data/test/pgn_collection/checkmate/white_wins/0067.pgn +12 -0
- data/test/pgn_collection/checkmate/white_wins/0068.pgn +15 -0
- data/test/pgn_collection/checkmate/white_wins/0069.pgn +12 -0
- data/test/pgn_collection/checkmate/white_wins/0070.pgn +15 -0
- data/test/pgn_collection/checkmate/white_wins/0071.pgn +14 -0
- data/test/pgn_collection/checkmate/white_wins/0072.pgn +17 -0
- data/test/pgn_collection/checkmate/white_wins/0073.pgn +19 -0
- data/test/pgn_collection/checkmate/white_wins/0074.pgn +25 -0
- data/test/pgn_collection/fifty_move_rule/0001.pgn +27 -0
- data/test/pgn_collection/fifty_move_rule/0002.pgn +29 -0
- data/test/pgn_collection/fifty_move_rule/0003.pgn +24 -0
- data/test/pgn_collection/fifty_move_rule/0004.pgn +24 -0
- data/test/pgn_collection/fifty_move_rule/0005.pgn +29 -0
- data/test/pgn_collection/fifty_move_rule/0006.pgn +24 -0
- data/test/pgn_collection/fifty_move_rule/0007.pgn +24 -0
- data/test/pgn_collection/fifty_move_rule/0008.pgn +27 -0
- data/test/pgn_collection/fifty_move_rule/0009.pgn +24 -0
- data/test/pgn_collection/fifty_move_rule/0010.pgn +24 -0
- data/test/pgn_collection/fifty_move_rule/0011.pgn +24 -0
- data/test/pgn_collection/fifty_move_rule/0012.pgn +24 -0
- data/test/pgn_collection/insufficient_material/0001.pgn +29 -0
- data/test/pgn_collection/stalemate/0001.pgn +17 -0
- data/test/pgn_collection/stalemate/0002.pgn +17 -0
- data/test/pgn_collection/stalemate/0003.pgn +17 -0
- data/test/pgn_collection/stalemate/0004.pgn +17 -0
- data/test/pgn_collection/stalemate/0005.pgn +19 -0
- data/test/pgn_collection/stalemate/0006.pgn +17 -0
- data/test/pgn_collection/stalemate/0007.pgn +17 -0
- data/test/pgn_collection/stalemate/0008.pgn +17 -0
- data/test/pgn_collection/threefold_repetition/0001.pgn +15 -0
- data/test/pgn_collection/threefold_repetition/0002.pgn +22 -0
- data/test/pgn_collection/threefold_repetition/0003.pgn +11 -0
- data/test/pgn_collection/threefold_repetition/0004.pgn +16 -0
- data/test/pgn_collection/threefold_repetition/0005.pgn +11 -0
- data/test/pgn_collection/threefold_repetition/0006.pgn +23 -0
- data/test/pgn_collection/threefold_repetition/0007.pgn +15 -0
- data/test/pgn_collection/threefold_repetition/0008.pgn +22 -0
- data/test/pgn_collection/threefold_repetition/0009.pgn +26 -0
- data/test/pgn_collection/threefold_repetition/0010.pgn +11 -0
- data/test/pgn_collection/threefold_repetition/0011.pgn +22 -0
- data/test/pgn_collection/threefold_repetition/0012.pgn +23 -0
- data/test/pgn_collection/threefold_repetition/0013.pgn +27 -0
- data/test/pgn_collection/threefold_repetition/0014.pgn +15 -0
- data/test/pgn_collection/threefold_repetition/0015.pgn +15 -0
- data/test/pgn_collection/threefold_repetition/0016.pgn +17 -0
- data/test/pgn_collection/threefold_repetition/0017.pgn +20 -0
- data/test/pgn_collection/threefold_repetition/0018.pgn +11 -0
- data/test/pgn_collection/threefold_repetition/0019.pgn +17 -0
- data/test/pgn_collection/threefold_repetition/0020.pgn +22 -0
- data/test/pgn_collection/threefold_repetition/0021.pgn +17 -0
- data/test/pgn_collection/threefold_repetition/0022.pgn +15 -0
- data/test/pgn_collection/threefold_repetition/0023.pgn +23 -0
- data/test/pgn_collection/threefold_repetition/0024.pgn +23 -0
- data/test/pgn_collection/valid/0001.pgn +19 -0
- data/test/pgn_collection/valid/0002.pgn +18 -0
- data/test/pgn_collection/valid/0003.pgn +19 -0
- data/test/pgn_collection/valid/0004.pgn +18 -0
- data/test/pgn_collection/valid/0005.pgn +17 -0
- data/test/pgn_collection/valid/0006.pgn +13 -0
- data/test/pgn_collection/valid/0007.pgn +18 -0
- data/test/pgn_collection/valid/0008.pgn +14 -0
- data/test/pgn_collection/valid/0009.pgn +25 -0
- data/test/pgn_collection/valid/0010.pgn +22 -0
- data/test/pgn_collection/valid/0011.pgn +19 -0
- data/test/pgn_collection/valid/0012.pgn +15 -0
- data/test/pgn_collection/valid/0013.pgn +23 -0
- data/test/pgn_collection/valid/0014.pgn +17 -0
- data/test/pgn_collection/valid/0015.pgn +21 -0
- data/test/pgn_collection/valid/0016.pgn +18 -0
- data/test/pgn_collection/valid/0017.pgn +20 -0
- data/test/pgn_collection/valid/0018.pgn +23 -0
- data/test/pgn_collection/valid/0019.pgn +18 -0
- data/test/pgn_collection/valid/0020.pgn +16 -0
- data/test/pgn_collection/valid/0021.pgn +26 -0
- data/test/pgn_collection/valid/0022.pgn +19 -0
- data/test/pgn_collection/valid/0023.pgn +17 -0
- data/test/pgn_collection/valid/0024.pgn +23 -0
- data/test/pgn_collection/valid/0025.pgn +16 -0
- data/test/pgn_collection/valid/0026.pgn +22 -0
- data/test/pgn_collection/valid/0027.pgn +24 -0
- data/test/pgn_collection/valid/0028.pgn +16 -0
- data/test/pgn_collection/valid/0029.pgn +20 -0
- data/test/pgn_collection/valid/0030.pgn +17 -0
- data/test/pgn_collection/valid/0031.pgn +18 -0
- data/test/pgn_collection/valid/0032.pgn +20 -0
- data/test/pgn_collection/valid/0033.pgn +19 -0
- data/test/pgn_collection/valid/0034.pgn +19 -0
- data/test/pgn_collection/valid/0035.pgn +16 -0
- data/test/pgn_collection/valid/0036.pgn +19 -0
- data/test/pgn_collection/valid/0037.pgn +20 -0
- data/test/pgn_collection/valid/0038.pgn +23 -0
- data/test/pgn_collection/valid/0039.pgn +25 -0
- data/test/pgn_collection/valid/0040.pgn +17 -0
- data/test/pgn_collection/valid/0041.pgn +19 -0
- data/test/pgn_collection/valid/0042.pgn +17 -0
- data/test/pgn_collection/valid/0043.pgn +20 -0
- data/test/pgn_collection/valid/0044.pgn +22 -0
- data/test/pgn_collection/valid/0045.pgn +18 -0
- data/test/pgn_collection/valid/0046.pgn +20 -0
- data/test/pgn_collection/valid/0047.pgn +15 -0
- data/test/pgn_collection/valid/0048.pgn +15 -0
- data/test/pgn_collection/valid/0049.pgn +18 -0
- data/test/pgn_collection/valid/0050.pgn +23 -0
- data/test/pgn_collection/valid/0051.pgn +18 -0
- data/test/pgn_collection/valid/0052.pgn +26 -0
- data/test/pgn_collection/valid/0053.pgn +17 -0
- data/test/pgn_collection/valid/0054.pgn +18 -0
- data/test/pgn_collection/valid/0055.pgn +20 -0
- data/test/pgn_collection/valid/0056.pgn +17 -0
- data/test/pgn_collection/valid/0057.pgn +16 -0
- data/test/pgn_collection/valid/0058.pgn +12 -0
- data/test/pgn_collection/valid/0059.pgn +15 -0
- data/test/pgn_collection/valid/0060.pgn +23 -0
- data/test/pgn_collection/valid/0061.pgn +18 -0
- data/test/pgn_collection/valid/0062.pgn +20 -0
- data/test/pgn_collection/valid/0063.pgn +16 -0
- data/test/pgn_collection/valid/0064.pgn +17 -0
- data/test/pgn_collection/valid/0065.pgn +16 -0
- data/test/pgn_collection/valid/0066.pgn +14 -0
- data/test/pgn_collection/valid/0067.pgn +15 -0
- data/test/pgn_collection/valid/0068.pgn +18 -0
- data/test/pgn_collection/valid/0069.pgn +19 -0
- data/test/pgn_collection/valid/0070.pgn +17 -0
- data/test/pgn_collection/valid/0071.pgn +15 -0
- data/test/pgn_collection/valid/0072.pgn +18 -0
- data/test/pgn_collection/valid/0073.pgn +21 -0
- data/test/pgn_collection/valid/0074.pgn +20 -0
- data/test/pgn_collection/valid/0075.pgn +14 -0
- data/test/pgn_collection/valid/0076.pgn +20 -0
- data/test/pgn_collection/valid/0077.pgn +14 -0
- data/test/pgn_collection/valid/0078.pgn +22 -0
- data/test/pgn_collection/valid/0079.pgn +16 -0
- data/test/pgn_collection/valid/0080.pgn +17 -0
- data/test/pgn_collection/valid/0081.pgn +17 -0
- data/test/pgn_collection/valid/0082.pgn +27 -0
- data/test/pgn_collection/valid/0083.pgn +23 -0
- data/test/pgn_collection/valid/0084.pgn +22 -0
- data/test/pgn_collection/valid/0085.pgn +21 -0
- data/test/pgn_collection/valid/0086.pgn +22 -0
- data/test/pgn_collection/valid/0087.pgn +21 -0
- data/test/pgn_collection/valid/0088.pgn +19 -0
- data/test/pgn_collection/valid/0089.pgn +18 -0
- data/test/pgn_collection/valid/0090.pgn +14 -0
- data/test/pgn_collection/valid/0091.pgn +14 -0
- data/test/pgn_collection/valid/0092.pgn +22 -0
- data/test/pgn_collection/valid/0093.pgn +19 -0
- data/test/pgn_collection/valid/0094.pgn +22 -0
- data/test/pgn_collection/valid/0095.pgn +22 -0
- data/test/pgn_collection/valid/0096.pgn +19 -0
- data/test/pgn_collection/valid/0097.pgn +22 -0
- data/test/pgn_collection/valid/0098.pgn +20 -0
- data/test/pgn_collection/valid/0099.pgn +17 -0
- data/test/pgn_collection/valid/0100.pgn +21 -0
- data/test/pgn_collection/valid/0101.pgn +18 -0
- data/test/pgn_collection/valid/0102.pgn +19 -0
- data/test/pgn_collection/valid/0103.pgn +27 -0
- data/test/pgn_collection/valid/0104.pgn +21 -0
- data/test/pgn_collection/valid/0105.pgn +14 -0
- data/test/pgn_collection/valid/0106.pgn +18 -0
- data/test/pgn_collection/valid/0107.pgn +18 -0
- data/test/pgn_collection/valid/0108.pgn +19 -0
- data/test/pgn_collection/valid/0109.pgn +17 -0
- data/test/pgn_collection/valid/0110.pgn +18 -0
- data/test/pgn_collection/valid/0111.pgn +16 -0
- data/test/pgn_collection/valid/0112.pgn +18 -0
- data/test/pgn_collection/valid/0113.pgn +20 -0
- data/test/pgn_collection/valid/0114.pgn +31 -0
- data/test/pgn_collection/valid/0115.pgn +23 -0
- data/test/pgn_collection/valid/0116.pgn +17 -0
- data/test/pgn_collection/valid/0117.pgn +19 -0
- data/test/pgn_collection/valid/0118.pgn +20 -0
- data/test/pgn_collection/valid/0119.pgn +25 -0
- data/test/pgn_collection/valid/0120.pgn +15 -0
- data/test/pgn_collection/valid/0121.pgn +19 -0
- data/test/pgn_collection/valid/0122.pgn +23 -0
- data/test/pgn_collection/valid/0123.pgn +21 -0
- data/test/pgn_collection/valid/0124.pgn +20 -0
- data/test/pgn_collection/valid/0125.pgn +19 -0
- data/test/pgn_collection/valid/0126.pgn +11 -0
- data/test/pgn_collection/valid/0127.pgn +19 -0
- data/test/pgn_collection/valid/0128.pgn +21 -0
- data/test/pgn_collection/valid/0129.pgn +25 -0
- data/test/pgn_collection/valid/0130.pgn +16 -0
- data/test/pgn_collection/valid/0131.pgn +20 -0
- data/test/pgn_collection/valid/0132.pgn +17 -0
- data/test/pgn_collection/valid/0133.pgn +17 -0
- data/test/pgn_collection/valid/0134.pgn +17 -0
- data/test/pgn_collection/valid/0135.pgn +19 -0
- data/test/pgn_collection/valid/0136.pgn +14 -0
- data/test/pgn_collection/valid/0137.pgn +20 -0
- data/test/pgn_collection/valid/0138.pgn +23 -0
- data/test/pgn_collection/valid/0139.pgn +21 -0
- data/test/pgn_collection/valid/0140.pgn +27 -0
- data/test/pgn_collection/valid/0141.pgn +15 -0
- data/test/pgn_collection/valid/0142.pgn +21 -0
- data/test/pgn_collection/valid/0143.pgn +23 -0
- data/test/pgn_collection/valid/0144.pgn +23 -0
- data/test/pgn_collection/valid/0145.pgn +22 -0
- data/test/pgn_collection/valid/0146.pgn +14 -0
- data/test/pgn_collection/valid/0147.pgn +23 -0
- data/test/pgn_collection/valid/0148.pgn +20 -0
- data/test/pgn_collection/valid/0149.pgn +16 -0
- data/test/pgn_collection/valid/0150.pgn +17 -0
- data/test/pgn_collection/valid/0151.pgn +19 -0
- data/test/pgn_collection/valid/0152.pgn +19 -0
- data/test/pgn_collection/valid/0153.pgn +22 -0
- data/test/pgn_collection/valid/0154.pgn +15 -0
- data/test/pgn_collection/valid/0155.pgn +20 -0
- data/test/pgn_collection/valid/0156.pgn +19 -0
- data/test/pgn_collection/valid/0157.pgn +15 -0
- data/test/pgn_collection/valid/0158.pgn +15 -0
- data/test/pgn_collection/valid/0159.pgn +18 -0
- data/test/pgn_collection/valid/0160.pgn +21 -0
- data/test/pgn_collection/valid/0161.pgn +22 -0
- data/test/pgn_collection/valid/0162.pgn +22 -0
- data/test/pgn_collection/valid/0163.pgn +15 -0
- data/test/pgn_collection/valid/0164.pgn +17 -0
- data/test/pgn_collection/valid/0165.pgn +19 -0
- data/test/pgn_collection/valid/0166.pgn +18 -0
- data/test/pgn_collection/valid/0167.pgn +23 -0
- data/test/pgn_collection/valid/0168.pgn +15 -0
- data/test/pgn_collection/valid/0169.pgn +21 -0
- data/test/pgn_collection/valid/0170.pgn +22 -0
- data/test/pgn_collection/valid/0171.pgn +15 -0
- data/test/pgn_collection/valid/0172.pgn +21 -0
- data/test/pgn_collection/valid/0173.pgn +13 -0
- data/test/pgn_collection/valid/0174.pgn +24 -0
- data/test/pgn_collection/valid/0175.pgn +21 -0
- data/test/pgn_collection/valid/0176.pgn +23 -0
- data/test/pgn_collection/valid/0177.pgn +19 -0
- data/test/pgn_collection/valid/0178.pgn +21 -0
- data/test/pgn_collection/valid/0179.pgn +22 -0
- data/test/pgn_collection/valid/0180.pgn +19 -0
- data/test/pgn_collection/valid/0181.pgn +24 -0
- data/test/pgn_collection/valid/0182.pgn +14 -0
- data/test/pgn_collection/valid/0183.pgn +15 -0
- data/test/pgn_collection/valid/0184.pgn +24 -0
- data/test/pgn_collection/valid/0185.pgn +14 -0
- data/test/pgn_collection/valid/0186.pgn +15 -0
- data/test/pgn_collection/valid/0187.pgn +19 -0
- data/test/pgn_collection/valid/0188.pgn +17 -0
- data/test/pgn_collection/valid/0189.pgn +20 -0
- data/test/pgn_collection/valid/0190.pgn +19 -0
- data/test/pgn_collection/valid/0191.pgn +26 -0
- data/test/pgn_collection/valid/0192.pgn +16 -0
- data/test/pgn_collection/valid/0193.pgn +18 -0
- data/test/pgn_collection/valid/0194.pgn +24 -0
- data/test/pgn_collection/valid/0195.pgn +16 -0
- data/test/pgn_collection/valid/0196.pgn +21 -0
- data/test/pgn_collection/valid/0197.pgn +21 -0
- data/test/pgn_collection/valid/0198.pgn +20 -0
- data/test/pgn_collection/valid/0199.pgn +13 -0
- data/test/pgn_collection/valid/0200.pgn +22 -0
- data/test/pgn_collection/valid/0201.pgn +19 -0
- data/test/pgn_collection/valid/0202.pgn +12 -0
- data/test/pgn_collection/valid/0203.pgn +13 -0
- data/test/pgn_collection/valid/0204.pgn +14 -0
- data/test/pgn_collection/valid/0205.pgn +13 -0
- data/test/pgn_collection/valid/0206.pgn +18 -0
- data/test/pgn_collection/valid/0207.pgn +17 -0
- data/test/pgn_collection/valid/0208.pgn +17 -0
- data/test/pgn_collection/valid/0209.pgn +20 -0
- data/test/pgn_collection/valid/0210.pgn +15 -0
- data/test/pgn_collection/valid/0211.pgn +21 -0
- data/test/pgn_collection/valid/0212.pgn +22 -0
- data/test/pgn_collection/valid/0213.pgn +15 -0
- data/test/pgn_collection/valid/0214.pgn +21 -0
- data/test/pgn_collection/valid/0215.pgn +15 -0
- data/test/pgn_collection/valid/0216.pgn +17 -0
- data/test/pgn_collection/valid/0217.pgn +21 -0
- data/test/pgn_collection/valid/0218.pgn +20 -0
- data/test/pgn_collection/valid/0219.pgn +15 -0
- data/test/pgn_collection/valid/0220.pgn +23 -0
- data/test/pgn_collection/valid/0221.pgn +26 -0
- data/test/pgn_collection/valid/0222.pgn +21 -0
- data/test/pgn_collection/valid/0223.pgn +16 -0
- data/test/pgn_collection/valid/0224.pgn +24 -0
- data/test/pgn_collection/valid/0225.pgn +19 -0
- data/test/pgn_collection/valid/0226.pgn +19 -0
- data/test/pgn_collection/valid/0227.pgn +20 -0
- data/test/pgn_collection/valid/0228.pgn +21 -0
- data/test/pgn_collection/valid/0229.pgn +16 -0
- data/test/pgn_collection/valid/0230.pgn +21 -0
- data/test/pgn_collection/valid/0231.pgn +22 -0
- data/test/pgn_collection/valid/0232.pgn +18 -0
- data/test/pgn_collection/valid/0233.pgn +17 -0
- data/test/pgn_collection/valid/0234.pgn +21 -0
- data/test/pgn_collection/valid/0235.pgn +23 -0
- data/test/pgn_collection/valid/0236.pgn +14 -0
- data/test/pgn_collection/valid/0237.pgn +21 -0
- data/test/pgn_collection/valid/0238.pgn +16 -0
- data/test/pgn_collection/valid/0239.pgn +21 -0
- data/test/pgn_collection/valid/0240.pgn +15 -0
- data/test/pgn_collection/valid/0241.pgn +21 -0
- data/test/pgn_collection/valid/0242.pgn +26 -0
- data/test/pgn_collection/valid/0243.pgn +13 -0
- data/test/pgn_collection/valid/0244.pgn +23 -0
- data/test/pgn_collection/valid/0245.pgn +19 -0
- data/test/pgn_collection/valid/0246.pgn +15 -0
- data/test/pgn_collection/valid/0247.pgn +21 -0
- data/test/pgn_collection/valid/0248.pgn +21 -0
- data/test/pgn_collection/valid/0249.pgn +15 -0
- data/test/pgn_collection/valid/0250.pgn +19 -0
- data/test/pgn_collection/valid/0251.pgn +22 -0
- data/test/pgn_collection/valid/0252.pgn +25 -0
- data/test/pgn_collection/valid/0253.pgn +29 -0
- data/test/pgn_collection/valid/0254.pgn +19 -0
- data/test/pgn_collection/valid/0255.pgn +20 -0
- data/test/pgn_collection/valid/0256.pgn +18 -0
- data/test/pgn_collection/valid/0257.pgn +22 -0
- data/test/pgn_collection/valid/0258.pgn +16 -0
- data/test/pgn_collection/valid/0259.pgn +19 -0
- data/test/pgn_collection/valid/0260.pgn +23 -0
- data/test/pgn_collection/valid/0261.pgn +16 -0
- data/test/pgn_collection/valid/0262.pgn +18 -0
- data/test/pgn_collection/valid/0263.pgn +12 -0
- data/test/pgn_collection/valid/0264.pgn +23 -0
- data/test/pgn_collection/valid/0265.pgn +19 -0
- data/test/pgn_collection/valid/0266.pgn +13 -0
- data/test/pgn_collection/valid/0267.pgn +14 -0
- data/test/pgn_collection/valid/0268.pgn +16 -0
- data/test/pgn_collection/valid/0269.pgn +23 -0
- data/test/pgn_collection/valid/0270.pgn +45 -0
- data/test/pgn_collection/valid/0271.pgn +22 -0
- data/test/pgn_collection/valid/0272.pgn +21 -0
- data/test/pgn_collection/valid/0273.pgn +15 -0
- data/test/pgn_collection/valid/0274.pgn +17 -0
- data/test/pgn_collection/valid/0275.pgn +21 -0
- data/test/pgn_collection/valid/0276.pgn +24 -0
- data/test/pgn_collection/valid/0277.pgn +15 -0
- data/test/pgn_collection/valid/0278.pgn +17 -0
- data/test/pgn_collection/valid/0279.pgn +19 -0
- data/test/pgn_collection/valid/0280.pgn +21 -0
- data/test/pgn_collection/valid/0281.pgn +23 -0
- data/test/pgn_collection/valid/0282.pgn +22 -0
- data/test/pgn_collection/valid/0283.pgn +20 -0
- data/test/pgn_collection/valid/0284.pgn +11 -0
- data/test/pgn_collection/valid/0285.pgn +16 -0
- data/test/pgn_collection/valid/0286.pgn +23 -0
- data/test/pgn_collection/valid/0287.pgn +19 -0
- data/test/pgn_collection/valid/0288.pgn +13 -0
- data/test/pgn_collection/valid/0289.pgn +23 -0
- data/test/pgn_collection/valid/0290.pgn +24 -0
- data/test/pgn_collection/valid/0291.pgn +20 -0
- data/test/pgn_collection/valid/0292.pgn +15 -0
- data/test/pgn_collection/valid/0293.pgn +20 -0
- data/test/pgn_collection/valid/0294.pgn +21 -0
- data/test/pgn_collection/valid/0295.pgn +15 -0
- data/test/pgn_collection/valid/0296.pgn +21 -0
- data/test/pgn_collection/valid/0297.pgn +19 -0
- data/test/pgn_collection/valid/0298.pgn +25 -0
- data/test/pgn_collection/valid/0299.pgn +23 -0
- data/test/pgn_collection/valid/0300.pgn +15 -0
- data/test/pgn_collection/valid/0301.pgn +18 -0
- data/test/pgn_collection/valid/0302.pgn +26 -0
- data/test/pgn_collection/valid/0303.pgn +20 -0
- data/test/pgn_collection/valid/0304.pgn +18 -0
- data/test/pgn_collection/valid/0305.pgn +16 -0
- data/test/pgn_collection/valid/0306.pgn +20 -0
- data/test/pgn_collection/valid/0307.pgn +25 -0
- data/test/pgn_collection/valid/0308.pgn +20 -0
- data/test/pgn_collection/valid/0309.pgn +19 -0
- data/test/pgn_collection/valid/0310.pgn +24 -0
- data/test/pgn_collection/valid/0311.pgn +13 -0
- data/test/pgn_collection/valid/0312.pgn +18 -0
- data/test/pgn_collection/valid/0313.pgn +15 -0
- data/test/pgn_collection/valid/0314.pgn +21 -0
- data/test/pgn_collection/valid/0315.pgn +14 -0
- data/test/pgn_collection/valid/0316.pgn +19 -0
- data/test/pgn_collection/valid/0317.pgn +23 -0
- data/test/pgn_collection/valid/0318.pgn +12 -0
- data/test/pgn_collection/valid/0319.pgn +17 -0
- data/test/pgn_collection/valid/0320.pgn +18 -0
- data/test/pgn_collection/valid/0321.pgn +22 -0
- data/test/pgn_collection/valid/0322.pgn +17 -0
- data/test/pgn_collection/valid/0323.pgn +24 -0
- data/test/pgn_collection/valid/0324.pgn +21 -0
- data/test/pgn_collection/valid/0325.pgn +21 -0
- data/test/pgn_collection/valid/0326.pgn +21 -0
- data/test/pgn_collection/valid/0327.pgn +20 -0
- data/test/pgn_collection/valid/0328.pgn +15 -0
- data/test/pgn_collection/valid/0329.pgn +19 -0
- data/test/pgn_collection/valid/0330.pgn +17 -0
- data/test/pgn_collection/valid/0331.pgn +19 -0
- data/test/pgn_collection/valid/0332.pgn +18 -0
- data/test/pgn_collection/valid/0333.pgn +16 -0
- data/test/pgn_collection/valid/0334.pgn +18 -0
- data/test/pgn_collection/valid/0335.pgn +12 -0
- data/test/pgn_collection/valid/0336.pgn +16 -0
- data/test/pgn_collection/valid/0337.pgn +20 -0
- data/test/pgn_collection/valid/0338.pgn +24 -0
- data/test/pgn_collection/valid/0339.pgn +22 -0
- data/test/pgn_collection/valid/0340.pgn +12 -0
- data/test/pgn_collection/valid/0341.pgn +22 -0
- data/test/pgn_collection/valid/0342.pgn +19 -0
- data/test/pgn_collection/valid/0343.pgn +14 -0
- data/test/pgn_collection/valid/0344.pgn +16 -0
- data/test/pgn_collection/valid/0345.pgn +23 -0
- data/test/pgn_collection/valid/0346.pgn +19 -0
- data/test/pgn_collection/valid/0347.pgn +20 -0
- data/test/pgn_collection/valid/0348.pgn +24 -0
- data/test/pgn_collection/valid/0349.pgn +30 -0
- data/test/pgn_collection/valid/0350.pgn +20 -0
- data/test/pgn_collection/valid/0351.pgn +16 -0
- data/test/pgn_collection/valid/0352.pgn +16 -0
- data/test/pgn_collection/valid/0353.pgn +23 -0
- data/test/pgn_collection/valid/0354.pgn +24 -0
- data/test/pgn_collection/valid/0355.pgn +26 -0
- data/test/pgn_collection/valid/0356.pgn +17 -0
- data/test/pgn_collection/valid/0357.pgn +22 -0
- data/test/pgn_collection/valid/0358.pgn +21 -0
- data/test/pgn_collection/valid/0359.pgn +17 -0
- data/test/pgn_collection/valid/0360.pgn +13 -0
- data/test/pgn_collection/valid/0361.pgn +21 -0
- data/test/pgn_collection/valid/0362.pgn +17 -0
- data/test/pgn_collection/valid/0363.pgn +20 -0
- data/test/pgn_collection/valid/0364.pgn +16 -0
- data/test/pgn_collection/valid/0365.pgn +23 -0
- data/test/pgn_collection/valid/0366.pgn +17 -0
- data/test/pgn_collection/valid/0367.pgn +19 -0
- data/test/pgn_collection/valid/0368.pgn +23 -0
- data/test/pgn_collection/valid/0369.pgn +25 -0
- data/test/pgn_collection/valid/0370.pgn +20 -0
- data/test/pgn_collection/valid/0371.pgn +15 -0
- data/test/pgn_collection/valid/0372.pgn +17 -0
- data/test/pgn_collection/valid/0373.pgn +19 -0
- data/test/pgn_collection/valid/0374.pgn +16 -0
- data/test/pgn_collection/valid/0375.pgn +23 -0
- data/test/pgn_collection/valid/0376.pgn +16 -0
- data/test/pgn_collection/valid/0377.pgn +24 -0
- data/test/pgn_collection/valid/0378.pgn +19 -0
- data/test/pgn_collection/valid/0379.pgn +21 -0
- data/test/pgn_collection/valid/0380.pgn +22 -0
- data/test/pgn_collection/valid/0381.pgn +17 -0
- data/test/pgn_collection/valid/0382.pgn +24 -0
- data/test/pgn_collection/valid/0383.pgn +21 -0
- data/test/pgn_collection/valid/0384.pgn +16 -0
- data/test/pgn_collection/valid/0385.pgn +27 -0
- data/test/pgn_collection/valid/0386.pgn +21 -0
- data/test/pgn_collection/valid/0387.pgn +17 -0
- data/test/pgn_collection/valid/0388.pgn +20 -0
- data/test/pgn_collection/valid/0389.pgn +20 -0
- data/test/pgn_collection/valid/0390.pgn +17 -0
- data/test/pgn_collection/valid/0391.pgn +15 -0
- data/test/pgn_collection/valid/0392.pgn +23 -0
- data/test/pgn_collection/valid/0393.pgn +18 -0
- data/test/pgn_collection/valid/0394.pgn +25 -0
- data/test/pgn_collection/valid/0395.pgn +13 -0
- data/test/pgn_collection/valid/0396.pgn +17 -0
- data/test/pgn_collection/valid/0397.pgn +21 -0
- data/test/pgn_collection/valid/0398.pgn +16 -0
- data/test/pgn_collection/valid/0399.pgn +24 -0
- data/test/pgn_collection/valid/0400.pgn +17 -0
- data/test/pgn_collection/valid/0401.pgn +22 -0
- data/test/pgn_collection/valid/0402.pgn +22 -0
- data/test/pgn_collection/valid/0403.pgn +17 -0
- data/test/pgn_collection/valid/0404.pgn +21 -0
- data/test/pgn_collection/valid/0405.pgn +22 -0
- data/test/pgn_collection/valid/0406.pgn +27 -0
- data/test/pgn_collection/valid/0407.pgn +19 -0
- data/test/pgn_collection/valid/0408.pgn +23 -0
- data/test/pgn_collection/valid/0409.pgn +23 -0
- data/test/pgn_collection/valid/0410.pgn +20 -0
- data/test/pgn_collection/valid/0411.pgn +17 -0
- data/test/pgn_collection/valid/0412.pgn +17 -0
- data/test/pgn_collection/valid/0413.pgn +17 -0
- data/test/pgn_collection/valid/0414.pgn +21 -0
- data/test/pgn_collection/valid/0415.pgn +25 -0
- data/test/pgn_collection/valid/0416.pgn +24 -0
- data/test/pgn_collection/valid/0417.pgn +21 -0
- data/test/pgn_collection/valid/0418.pgn +18 -0
- data/test/pgn_collection/valid/0419.pgn +19 -0
- data/test/pgn_collection/valid/0420.pgn +21 -0
- data/test/pgn_collection/valid/0421.pgn +24 -0
- data/test/pgn_collection/valid/0422.pgn +22 -0
- data/test/pgn_collection/valid/0423.pgn +23 -0
- data/test/pgn_collection/valid/0424.pgn +23 -0
- data/test/pgn_collection/valid/0425.pgn +18 -0
- data/test/pgn_collection/valid/0426.pgn +16 -0
- data/test/pgn_collection/valid/0427.pgn +14 -0
- data/test/pgn_collection/valid/0428.pgn +21 -0
- data/test/pgn_collection/valid/0429.pgn +16 -0
- data/test/pgn_collection/valid/0430.pgn +21 -0
- data/test/pgn_collection/valid/0431.pgn +17 -0
- data/test/pgn_collection/valid/0432.pgn +19 -0
- data/test/pgn_collection/valid/0433.pgn +17 -0
- data/test/pgn_collection/valid/0434.pgn +20 -0
- data/test/pgn_collection/valid/0435.pgn +15 -0
- data/test/pgn_collection/valid/0436.pgn +24 -0
- data/test/pgn_collection/valid/0437.pgn +22 -0
- data/test/pgn_collection/valid/0438.pgn +16 -0
- data/test/pgn_collection/valid/0439.pgn +26 -0
- data/test/pgn_collection/valid/0440.pgn +24 -0
- data/test/pgn_collection/valid/0441.pgn +14 -0
- data/test/pgn_collection/valid/0442.pgn +21 -0
- data/test/pgn_collection/valid/0443.pgn +20 -0
- data/test/pgn_collection/valid/0444.pgn +18 -0
- data/test/pgn_collection/valid/0445.pgn +22 -0
- data/test/pgn_collection/valid/0446.pgn +20 -0
- data/test/pgn_collection/valid/0447.pgn +25 -0
- data/test/pgn_collection/valid/0448.pgn +18 -0
- data/test/pgn_collection/valid/0449.pgn +17 -0
- data/test/pgn_collection/valid/0450.pgn +16 -0
- data/test/pgn_collection/valid/0451.pgn +14 -0
- data/test/pgn_collection/valid/0452.pgn +21 -0
- data/test/pgn_collection/valid/0453.pgn +15 -0
- data/test/pgn_collection/valid/0454.pgn +17 -0
- data/test/pgn_collection/valid/0455.pgn +22 -0
- data/test/pgn_collection/valid/0456.pgn +15 -0
- data/test/pgn_collection/valid/0457.pgn +23 -0
- data/test/pgn_collection/valid/0458.pgn +21 -0
- data/test/pgn_collection/valid/0459.pgn +20 -0
- data/test/pgn_collection/valid/0460.pgn +16 -0
- data/test/pgn_collection/valid/0461.pgn +16 -0
- data/test/pgn_collection/valid/0462.pgn +25 -0
- data/test/pgn_collection/valid/0463.pgn +14 -0
- data/test/pgn_collection/valid/0464.pgn +12 -0
- data/test/pgn_collection/valid/0465.pgn +20 -0
- data/test/pgn_collection/valid/0466.pgn +17 -0
- data/test/pgn_collection/valid/0467.pgn +23 -0
- data/test/pgn_collection/valid/0468.pgn +17 -0
- data/test/pgn_collection/valid/0469.pgn +18 -0
- data/test/pgn_collection/valid/0470.pgn +15 -0
- data/test/pgn_collection/valid/0471.pgn +15 -0
- data/test/pgn_collection/valid/0472.pgn +29 -0
- data/test/pgn_collection/valid/0473.pgn +19 -0
- data/test/pgn_collection/valid/0474.pgn +20 -0
- data/test/pgn_collection/valid/0475.pgn +17 -0
- data/test/pgn_collection/valid/0476.pgn +18 -0
- data/test/pgn_collection/valid/0477.pgn +30 -0
- data/test/pgn_collection/valid/0478.pgn +18 -0
- data/test/pgn_collection/valid/0479.pgn +20 -0
- data/test/pgn_collection/valid/0480.pgn +18 -0
- data/test/pgn_collection/valid/0481.pgn +23 -0
- data/test/pgn_collection/valid/0482.pgn +17 -0
- data/test/pgn_collection/valid/0483.pgn +15 -0
- data/test/pgn_collection/valid/0484.pgn +18 -0
- data/test/pgn_collection/valid/0485.pgn +19 -0
- data/test/pgn_collection/valid/0486.pgn +18 -0
- data/test/pgn_collection/valid/0487.pgn +19 -0
- data/test/pgn_collection/valid/0488.pgn +18 -0
- data/test/pgn_collection/valid/0489.pgn +15 -0
- data/test/pgn_collection/valid/0490.pgn +21 -0
- data/test/pgn_collection/valid/0491.pgn +15 -0
- data/test/pgn_collection/valid/0492.pgn +18 -0
- data/test/pgn_collection/valid/0493.pgn +19 -0
- data/test/pgn_collection/valid/0494.pgn +16 -0
- data/test/pgn_collection/valid/0495.pgn +18 -0
- data/test/pgn_collection/valid/0496.pgn +28 -0
- data/test/pgn_collection/valid/0497.pgn +24 -0
- data/test/pgn_collection/valid/0498.pgn +23 -0
- data/test/pgn_collection/valid/0499.pgn +14 -0
- data/test/pgn_collection/valid/0500.pgn +16 -0
- data/test/pgn_collection/valid/0501.pgn +21 -0
- data/test/pgn_collection/valid/0502.pgn +19 -0
- data/test/pgn_collection/valid/0503.pgn +23 -0
- data/test/pgn_collection/valid/0504.pgn +14 -0
- data/test/pgn_collection/valid/0505.pgn +16 -0
- data/test/pgn_collection/valid/0506.pgn +19 -0
- data/test/pgn_collection/valid/0507.pgn +18 -0
- data/test/pgn_collection/valid/0508.pgn +13 -0
- data/test/pgn_collection/valid/0509.pgn +22 -0
- data/test/pgn_collection/valid/0510.pgn +25 -0
- data/test/pgn_collection/valid/0511.pgn +15 -0
- data/test/pgn_collection/valid/0512.pgn +25 -0
- data/test/pgn_collection/valid/0513.pgn +24 -0
- data/test/pgn_collection/valid/0514.pgn +17 -0
- data/test/pgn_collection/valid/0515.pgn +12 -0
- data/test/pgn_collection/valid/0516.pgn +22 -0
- data/test/pgn_collection/valid/0517.pgn +13 -0
- data/test/pgn_collection/valid/0518.pgn +23 -0
- data/test/pgn_collection/valid/0519.pgn +25 -0
- data/test/pgn_collection/valid/0520.pgn +15 -0
- data/test/pgn_collection/valid/0521.pgn +15 -0
- data/test/pgn_collection/valid/0522.pgn +16 -0
- data/test/pgn_collection/valid/0523.pgn +16 -0
- data/test/pgn_collection/valid/0524.pgn +28 -0
- data/test/pgn_collection/valid/0525.pgn +25 -0
- data/test/pgn_collection/valid/0526.pgn +21 -0
- data/test/pgn_collection/valid/0527.pgn +18 -0
- data/test/pgn_collection/valid/0528.pgn +20 -0
- data/test/pgn_collection/valid/0529.pgn +19 -0
- data/test/pgn_collection/valid/0530.pgn +19 -0
- data/test/pgn_collection/valid/0531.pgn +18 -0
- data/test/pgn_collection/valid/0532.pgn +25 -0
- data/test/pgn_collection/valid/0533.pgn +19 -0
- data/test/pgn_collection/valid/0534.pgn +25 -0
- data/test/pgn_collection/valid/0535.pgn +17 -0
- data/test/pgn_collection/valid/0536.pgn +21 -0
- data/test/pgn_collection/valid/0537.pgn +17 -0
- data/test/pgn_collection/valid/0538.pgn +19 -0
- data/test/pgn_collection/valid/0539.pgn +31 -0
- data/test/pgn_collection/valid/0540.pgn +19 -0
- data/test/pgn_collection/valid/0541.pgn +17 -0
- data/test/pgn_collection/valid/0542.pgn +17 -0
- data/test/pgn_collection/valid/0543.pgn +21 -0
- data/test/pgn_collection/valid/0544.pgn +23 -0
- data/test/pgn_collection/valid/0545.pgn +19 -0
- data/test/pgn_collection/valid/0546.pgn +21 -0
- data/test/pgn_collection/valid/0547.pgn +17 -0
- data/test/pgn_collection/valid/0548.pgn +17 -0
- data/test/pgn_collection/valid/0549.pgn +17 -0
- data/test/pgn_collection/valid/0550.pgn +20 -0
- data/test/pgn_collection/valid/0551.pgn +22 -0
- data/test/pgn_collection/valid/0552.pgn +22 -0
- data/test/pgn_collection/valid/0553.pgn +14 -0
- data/test/pgn_collection/valid/0554.pgn +20 -0
- data/test/pgn_collection/valid/0555.pgn +23 -0
- data/test/pgn_collection/valid/0556.pgn +22 -0
- data/test/pgn_collection/valid/0557.pgn +14 -0
- data/test/pgn_collection/valid/0558.pgn +21 -0
- data/test/pgn_collection/valid/0559.pgn +15 -0
- data/test/pgn_collection/valid/0560.pgn +19 -0
- data/test/pgn_collection/valid/0561.pgn +15 -0
- data/test/pgn_collection/valid/0562.pgn +17 -0
- data/test/pgn_collection/valid/0563.pgn +15 -0
- data/test/pgn_collection/valid/0564.pgn +15 -0
- data/test/pgn_collection/valid/0565.pgn +23 -0
- data/test/pgn_collection/valid/0566.pgn +14 -0
- data/test/pgn_collection/valid/0567.pgn +14 -0
- data/test/pgn_collection/valid/0568.pgn +20 -0
- data/test/pgn_collection/valid/0569.pgn +20 -0
- data/test/pgn_collection/valid/0570.pgn +25 -0
- data/test/pgn_collection/valid/0571.pgn +19 -0
- data/test/pgn_collection/valid/0572.pgn +17 -0
- data/test/pgn_collection/valid/0573.pgn +17 -0
- data/test/pgn_collection/valid/0574.pgn +23 -0
- data/test/pgn_collection/valid/0575.pgn +22 -0
- data/test/pgn_collection/valid/0576.pgn +21 -0
- data/test/pgn_collection/valid/0577.pgn +19 -0
- data/test/pgn_collection/valid/0578.pgn +20 -0
- data/test/pgn_collection/valid/0579.pgn +25 -0
- data/test/pgn_collection/valid/0580.pgn +19 -0
- data/test/pgn_collection/valid/0581.pgn +13 -0
- data/test/pgn_collection/valid/0582.pgn +21 -0
- data/test/pgn_collection/valid/0583.pgn +25 -0
- data/test/pgn_collection/valid/0584.pgn +18 -0
- data/test/pgn_collection/valid/0585.pgn +20 -0
- data/test/pgn_collection/valid/0586.pgn +20 -0
- data/test/pgn_collection/valid/0587.pgn +16 -0
- data/test/pgn_collection/valid/0588.pgn +21 -0
- data/test/pgn_collection/valid/0589.pgn +15 -0
- data/test/pgn_collection/valid/0590.pgn +23 -0
- data/test/pgn_collection/valid/0591.pgn +19 -0
- data/test/pgn_collection/valid/0592.pgn +21 -0
- data/test/pgn_collection/valid/0593.pgn +15 -0
- data/test/pgn_collection/valid/0594.pgn +18 -0
- data/test/pgn_collection/valid/0595.pgn +16 -0
- data/test/pgn_collection/valid/0596.pgn +21 -0
- data/test/pgn_collection/valid/0597.pgn +20 -0
- data/test/pgn_collection/valid/0598.pgn +18 -0
- data/test/pgn_collection/valid/0599.pgn +16 -0
- data/test/pgn_collection/valid/0600.pgn +22 -0
- data/test/pgn_collection/valid/0601.pgn +17 -0
- data/test/pgn_collection/valid/0602.pgn +21 -0
- data/test/pgn_collection/valid/0603.pgn +21 -0
- data/test/pgn_collection/valid/0604.pgn +14 -0
- data/test/pgn_collection/valid/0605.pgn +20 -0
- data/test/pgn_collection/valid/0606.pgn +23 -0
- data/test/pgn_collection/valid/0607.pgn +16 -0
- data/test/pgn_collection/valid/0608.pgn +22 -0
- data/test/pgn_collection/valid/0609.pgn +15 -0
- data/test/pgn_collection/valid/0610.pgn +16 -0
- data/test/pgn_collection/valid/0611.pgn +21 -0
- data/test/pgn_collection/valid/0612.pgn +18 -0
- data/test/pgn_collection/valid/0613.pgn +12 -0
- data/test/pgn_collection/valid/0614.pgn +15 -0
- data/test/pgn_collection/valid/0615.pgn +18 -0
- data/test/pgn_collection/valid/0616.pgn +16 -0
- data/test/pgn_collection/valid/0617.pgn +26 -0
- data/test/pgn_collection/valid/0618.pgn +19 -0
- data/test/pgn_collection/valid/0619.pgn +18 -0
- data/test/pgn_collection/valid/0620.pgn +22 -0
- data/test/pgn_collection/valid/0621.pgn +18 -0
- data/test/pgn_collection/valid/0622.pgn +20 -0
- data/test/pgn_collection/valid/0623.pgn +23 -0
- data/test/pgn_collection/valid/0624.pgn +19 -0
- data/test/pgn_collection/valid/0625.pgn +19 -0
- data/test/pgn_collection/valid/0626.pgn +22 -0
- data/test/pgn_collection/valid/0627.pgn +23 -0
- data/test/pgn_collection/valid/0628.pgn +23 -0
- data/test/pgn_collection/valid/0629.pgn +16 -0
- data/test/pgn_collection/valid/0630.pgn +15 -0
- data/test/pgn_collection/valid/0631.pgn +21 -0
- data/test/pgn_collection/valid/0632.pgn +22 -0
- data/test/pgn_collection/valid/0633.pgn +22 -0
- data/test/pgn_collection/valid/0634.pgn +16 -0
- data/test/pgn_collection/valid/0635.pgn +20 -0
- data/test/pgn_collection/valid/0636.pgn +12 -0
- data/test/pgn_collection/valid/0637.pgn +19 -0
- data/test/pgn_collection/valid/0638.pgn +27 -0
- data/test/pgn_collection/valid/0639.pgn +19 -0
- data/test/pgn_collection/valid/0640.pgn +22 -0
- data/test/pgn_collection/valid/0641.pgn +14 -0
- data/test/pgn_collection/valid/0642.pgn +16 -0
- data/test/pgn_collection/valid/0643.pgn +19 -0
- data/test/pgn_collection/valid/0644.pgn +19 -0
- data/test/pgn_collection/valid/0645.pgn +16 -0
- data/test/pgn_collection/valid/0646.pgn +18 -0
- data/test/pgn_collection/valid/0647.pgn +21 -0
- data/test/pgn_collection/valid/0648.pgn +28 -0
- data/test/pgn_collection/valid/0649.pgn +18 -0
- data/test/pgn_collection/valid/0650.pgn +16 -0
- data/test/pgn_collection/valid/0651.pgn +20 -0
- data/test/pgn_collection/valid/0652.pgn +19 -0
- data/test/pgn_collection/valid/0653.pgn +23 -0
- data/test/pgn_collection/valid/0654.pgn +21 -0
- data/test/pgn_collection/valid/0655.pgn +20 -0
- data/test/pgn_collection/valid/0656.pgn +22 -0
- data/test/pgn_collection/valid/0657.pgn +14 -0
- data/test/pgn_collection/valid/0658.pgn +26 -0
- data/test/pgn_collection/valid/0659.pgn +22 -0
- data/test/pgn_collection/valid/0660.pgn +27 -0
- data/test/pgn_collection/valid/0661.pgn +25 -0
- data/test/pgn_collection/valid/0662.pgn +15 -0
- data/test/pgn_collection/valid/0663.pgn +17 -0
- data/test/pgn_collection/valid/0664.pgn +19 -0
- data/test/pgn_collection/valid/0665.pgn +13 -0
- data/test/pgn_collection/valid/0666.pgn +19 -0
- data/test/pgn_collection/valid/0667.pgn +20 -0
- data/test/pgn_collection/valid/0668.pgn +22 -0
- data/test/pgn_collection/valid/0669.pgn +22 -0
- data/test/pgn_collection/valid/0670.pgn +16 -0
- data/test/pgn_collection/valid/0671.pgn +19 -0
- data/test/pgn_collection/valid/0672.pgn +15 -0
- data/test/pgn_collection/valid/0673.pgn +19 -0
- data/test/pgn_collection/valid/0674.pgn +15 -0
- data/test/pgn_collection/valid/0675.pgn +22 -0
- data/test/pgn_collection/valid/0676.pgn +21 -0
- data/test/pgn_collection/valid/0677.pgn +18 -0
- data/test/pgn_collection/valid/0678.pgn +17 -0
- data/test/pgn_collection/valid/0679.pgn +16 -0
- data/test/pgn_collection/valid/0680.pgn +21 -0
- data/test/pgn_collection/valid/0681.pgn +19 -0
- data/test/pgn_collection/valid/0682.pgn +19 -0
- data/test/pgn_collection/valid/0683.pgn +15 -0
- data/test/pgn_collection/valid/0684.pgn +19 -0
- data/test/pgn_collection/valid/0685.pgn +14 -0
- data/test/pgn_collection/valid/0686.pgn +16 -0
- data/test/pgn_collection/valid/0687.pgn +15 -0
- data/test/pgn_collection/valid/0688.pgn +15 -0
- data/test/pgn_collection/valid/0689.pgn +24 -0
- data/test/pgn_collection/valid/0690.pgn +24 -0
- data/test/pgn_collection/valid/0691.pgn +16 -0
- data/test/pgn_collection/valid/0692.pgn +26 -0
- data/test/pgn_collection/valid/0693.pgn +19 -0
- data/test/pgn_collection/valid/0694.pgn +21 -0
- data/test/pgn_collection/valid/0695.pgn +21 -0
- data/test/pgn_collection/valid/0696.pgn +26 -0
- data/test/pgn_collection/valid/0697.pgn +14 -0
- data/test/pgn_collection/valid/0698.pgn +24 -0
- data/test/pgn_collection/valid/0699.pgn +18 -0
- data/test/pgn_collection/valid/0700.pgn +15 -0
- data/test/pgn_collection/valid/0701.pgn +13 -0
- data/test/pgn_collection/valid/0702.pgn +18 -0
- data/test/pgn_collection/valid/0703.pgn +18 -0
- data/test/pgn_collection/valid/0704.pgn +17 -0
- data/test/pgn_collection/valid/0705.pgn +19 -0
- data/test/pgn_collection/valid/0706.pgn +16 -0
- data/test/pgn_collection/valid/0707.pgn +19 -0
- data/test/pgn_collection/valid/0708.pgn +24 -0
- data/test/pgn_collection/valid/0709.pgn +13 -0
- data/test/pgn_collection/valid/0710.pgn +29 -0
- data/test/pgn_collection/valid/0711.pgn +18 -0
- data/test/pgn_collection/valid/0712.pgn +12 -0
- data/test/pgn_collection/valid/0713.pgn +19 -0
- data/test/pgn_collection/valid/0714.pgn +21 -0
- data/test/pgn_collection/valid/0715.pgn +17 -0
- data/test/pgn_collection/valid/0716.pgn +17 -0
- data/test/pgn_collection/valid/0717.pgn +23 -0
- data/test/pgn_collection/valid/0718.pgn +16 -0
- data/test/pgn_collection/valid/0719.pgn +19 -0
- data/test/pgn_collection/valid/0720.pgn +21 -0
- data/test/pgn_collection/valid/0721.pgn +19 -0
- data/test/pgn_collection/valid/0722.pgn +32 -0
- data/test/pgn_collection/valid/0723.pgn +22 -0
- data/test/pgn_collection/valid/0724.pgn +17 -0
- data/test/pgn_collection/valid/0725.pgn +16 -0
- data/test/pgn_collection/valid/0726.pgn +20 -0
- data/test/pgn_collection/valid/0727.pgn +17 -0
- data/test/pgn_collection/valid/0728.pgn +16 -0
- data/test/pgn_collection/valid/0729.pgn +18 -0
- data/test/pgn_collection/valid/0730.pgn +17 -0
- data/test/pgn_collection/valid/0731.pgn +37 -0
- data/test/pgn_collection/valid/0732.pgn +21 -0
- data/test/pgn_collection/valid/0733.pgn +25 -0
- data/test/pgn_collection/valid/0734.pgn +20 -0
- data/test/pgn_collection/valid/0735.pgn +17 -0
- data/test/pgn_collection/valid/0736.pgn +17 -0
- data/test/pgn_collection/valid/0737.pgn +14 -0
- data/test/pgn_collection/valid/0738.pgn +21 -0
- data/test/pgn_collection/valid/0739.pgn +20 -0
- data/test/pgn_collection/valid/0740.pgn +15 -0
- data/test/pgn_collection/valid/0741.pgn +24 -0
- data/test/pgn_collection/valid/0742.pgn +18 -0
- data/test/pgn_collection/valid/0743.pgn +18 -0
- data/test/pgn_collection/valid/0744.pgn +23 -0
- data/test/pgn_collection/valid/0745.pgn +23 -0
- data/test/pgn_collection/valid/0746.pgn +15 -0
- data/test/pgn_collection/valid/0747.pgn +23 -0
- data/test/pgn_collection/valid/0748.pgn +16 -0
- data/test/pgn_collection/valid/0749.pgn +18 -0
- data/test/pgn_collection/valid/0750.pgn +18 -0
- data/test/pgn_collection/valid/0751.pgn +21 -0
- data/test/pgn_collection/valid/0752.pgn +18 -0
- data/test/pgn_collection/valid/0753.pgn +17 -0
- data/test/pgn_collection/valid/0754.pgn +24 -0
- data/test/pgn_collection/valid/0755.pgn +25 -0
- data/test/pgn_collection/valid/0756.pgn +20 -0
- data/test/pgn_collection/valid/0757.pgn +19 -0
- data/test/pgn_collection/valid/0758.pgn +14 -0
- data/test/pgn_collection/valid/0759.pgn +19 -0
- data/test/pgn_collection/valid/0760.pgn +21 -0
- data/test/pgn_collection/valid/0761.pgn +17 -0
- data/test/pgn_collection/valid/0762.pgn +16 -0
- data/test/pgn_collection/valid/0763.pgn +21 -0
- data/test/pgn_collection/valid/0764.pgn +21 -0
- data/test/pgn_collection/valid/0765.pgn +21 -0
- data/test/pgn_collection/valid/0766.pgn +15 -0
- data/test/pgn_collection/valid/0767.pgn +25 -0
- data/test/pgn_collection/valid/0768.pgn +15 -0
- data/test/pgn_collection/valid/0769.pgn +20 -0
- data/test/pgn_collection/valid/0770.pgn +21 -0
- data/test/pgn_collection/valid/0771.pgn +22 -0
- data/test/pgn_collection/valid/0772.pgn +16 -0
- data/test/pgn_collection/valid/0773.pgn +24 -0
- data/test/pgn_collection/valid/0774.pgn +27 -0
- data/test/pgn_collection/valid/0775.pgn +14 -0
- data/test/pgn_collection/valid/0776.pgn +25 -0
- data/test/pgn_collection/valid/0777.pgn +20 -0
- data/test/pgn_collection/valid/0778.pgn +13 -0
- data/test/pgn_collection/valid/0779.pgn +20 -0
- data/test/pgn_collection/valid/0780.pgn +26 -0
- data/test/pgn_collection/valid/0781.pgn +22 -0
- data/test/pgn_collection/valid/0782.pgn +20 -0
- data/test/pgn_collection/valid/0783.pgn +21 -0
- data/test/pgn_collection/valid/0784.pgn +21 -0
- data/test/pgn_collection/valid/0785.pgn +19 -0
- data/test/pgn_collection/valid/0786.pgn +20 -0
- data/test/pgn_collection/valid/0787.pgn +21 -0
- data/test/pgn_collection/valid/0788.pgn +22 -0
- data/test/pgn_collection/valid/0789.pgn +21 -0
- data/test/pgn_collection/valid/0790.pgn +16 -0
- data/test/pgn_collection/valid/0791.pgn +13 -0
- data/test/pgn_collection/valid/0792.pgn +14 -0
- data/test/pgn_collection/valid/0793.pgn +18 -0
- data/test/pgn_collection/valid/0794.pgn +14 -0
- data/test/pgn_collection/valid/0795.pgn +23 -0
- data/test/pgn_collection/valid/0796.pgn +17 -0
- data/test/pgn_collection/valid/0797.pgn +24 -0
- data/test/pgn_collection/valid/0798.pgn +19 -0
- data/test/pgn_collection/valid/0799.pgn +20 -0
- data/test/pgn_collection/valid/0800.pgn +12 -0
- data/test/pgn_collection/valid/0801.pgn +18 -0
- data/test/pgn_collection/valid/0802.pgn +24 -0
- data/test/pgn_collection/valid/0803.pgn +16 -0
- data/test/pgn_collection/valid/0804.pgn +22 -0
- data/test/pgn_collection/valid/0805.pgn +15 -0
- data/test/pgn_collection/valid/0806.pgn +21 -0
- data/test/pgn_collection/valid/0807.pgn +16 -0
- data/test/pgn_collection/valid/0808.pgn +21 -0
- data/test/pgn_collection/valid/0809.pgn +16 -0
- data/test/pgn_collection/valid/0810.pgn +16 -0
- data/test/pgn_collection/valid/0811.pgn +14 -0
- data/test/pgn_collection/valid/0812.pgn +16 -0
- data/test/pgn_collection/valid/0813.pgn +21 -0
- data/test/pgn_collection/valid/0814.pgn +21 -0
- data/test/pgn_collection/valid/0815.pgn +20 -0
- data/test/pgn_collection/valid/0816.pgn +13 -0
- data/test/pgn_collection/valid/0817.pgn +19 -0
- data/test/pgn_collection/valid/0818.pgn +12 -0
- data/test/pgn_collection/valid/0819.pgn +15 -0
- data/test/pgn_collection/valid/0820.pgn +27 -0
- data/test/pgn_collection/valid/0821.pgn +20 -0
- data/test/pgn_collection/valid/0822.pgn +25 -0
- data/test/pgn_collection/valid/0823.pgn +22 -0
- data/test/pgn_collection/valid/0824.pgn +16 -0
- data/test/pgn_collection/valid/0825.pgn +19 -0
- data/test/pgn_collection/valid/0826.pgn +18 -0
- data/test/pgn_collection/valid/0827.pgn +19 -0
- data/test/pgn_collection/valid/0828.pgn +12 -0
- data/test/pgn_collection/valid/0829.pgn +15 -0
- data/test/pgn_collection/valid/0830.pgn +16 -0
- data/test/pgn_collection/valid/0831.pgn +19 -0
- data/test/pgn_collection/valid/0832.pgn +23 -0
- data/test/pgn_collection/valid/0833.pgn +23 -0
- data/test/pgn_collection/valid/0834.pgn +19 -0
- data/test/pgn_collection/valid/0835.pgn +18 -0
- data/test/pgn_collection/valid/0836.pgn +16 -0
- data/test/pgn_collection/valid/0837.pgn +15 -0
- data/test/pgn_collection/valid/0838.pgn +21 -0
- data/test/pgn_collection/valid/0839.pgn +17 -0
- data/test/pgn_collection/valid/0840.pgn +17 -0
- data/test/pgn_collection/valid/0841.pgn +20 -0
- data/test/pgn_collection/valid/0842.pgn +29 -0
- data/test/pgn_collection/valid/0843.pgn +18 -0
- data/test/pgn_collection/valid/0844.pgn +20 -0
- data/test/pgn_collection/valid/0845.pgn +23 -0
- data/test/pgn_collection/valid/0846.pgn +23 -0
- data/test/pgn_collection/valid/0847.pgn +17 -0
- data/test/pgn_collection/valid/0848.pgn +16 -0
- data/test/pgn_collection/valid/0849.pgn +18 -0
- data/test/pgn_collection/valid/0850.pgn +16 -0
- data/test/pgn_collection/valid/0851.pgn +23 -0
- data/test/pgn_collection/valid/0852.pgn +18 -0
- data/test/pgn_collection/valid/0853.pgn +15 -0
- data/test/pgn_collection/valid/0854.pgn +21 -0
- data/test/pgn_collection/valid/0855.pgn +15 -0
- data/test/pgn_collection/valid/0856.pgn +23 -0
- data/test/pgn_collection/valid/0857.pgn +21 -0
- data/test/pgn_collection/valid/0858.pgn +14 -0
- data/test/pgn_collection/valid/0859.pgn +26 -0
- data/test/pgn_collection/valid/0860.pgn +22 -0
- data/test/pgn_collection/valid/0861.pgn +14 -0
- data/test/pgn_collection/valid/0862.pgn +21 -0
- data/test/pgn_collection/valid/0863.pgn +20 -0
- data/test/pgn_collection/valid/0864.pgn +25 -0
- data/test/pgn_collection/valid/0865.pgn +22 -0
- data/test/pgn_collection/valid/0866.pgn +24 -0
- data/test/pgn_collection/valid/0867.pgn +17 -0
- data/test/pgn_collection/valid/0868.pgn +25 -0
- data/test/pgn_collection/valid/0869.pgn +19 -0
- data/test/pgn_collection/valid/0870.pgn +17 -0
- data/test/pgn_collection/valid/0871.pgn +23 -0
- data/test/pgn_collection/valid/0872.pgn +14 -0
- data/test/pgn_collection/valid/0873.pgn +18 -0
- data/test/pgn_collection/valid/0874.pgn +20 -0
- data/test/pgn_collection/valid/0875.pgn +13 -0
- data/test/pgn_collection/valid/0876.pgn +23 -0
- data/test/pgn_collection/valid/0877.pgn +17 -0
- data/test/pgn_collection/valid/0878.pgn +16 -0
- data/test/pgn_collection/valid/0879.pgn +25 -0
- data/test/pgn_collection/valid/0880.pgn +15 -0
- data/test/pgn_collection/valid/0881.pgn +21 -0
- data/test/pgn_collection/valid/0882.pgn +17 -0
- data/test/pgn_collection/valid/0883.pgn +14 -0
- data/test/pgn_collection/valid/0884.pgn +17 -0
- data/test/pgn_collection/valid/0885.pgn +22 -0
- data/test/pgn_collection/valid/0886.pgn +18 -0
- data/test/pgn_collection/valid/0887.pgn +16 -0
- data/test/pgn_collection/valid/0888.pgn +27 -0
- data/test/pgn_collection/valid/0889.pgn +39 -0
- data/test/pgn_collection/valid/0890.pgn +18 -0
- data/test/pgn_collection/valid/0891.pgn +17 -0
- data/test/pgn_collection/valid/0892.pgn +18 -0
- data/test/pgn_collection/valid/0893.pgn +18 -0
- data/test/pgn_collection/valid/0894.pgn +20 -0
- data/test/pgn_collection/valid/0895.pgn +17 -0
- data/test/pgn_collection/valid/0896.pgn +23 -0
- data/test/pgn_collection/valid/0897.pgn +21 -0
- data/test/pgn_collection/valid/0898.pgn +17 -0
- data/test/pgn_collection/valid/0899.pgn +27 -0
- data/test/pgn_collection/valid/0900.pgn +20 -0
- data/test/pgn_collection/valid/0901.pgn +16 -0
- data/test/pgn_collection/valid/0902.pgn +19 -0
- data/test/pgn_collection/valid/0903.pgn +22 -0
- data/test/pgn_collection/valid/0904.pgn +23 -0
- data/test/pgn_collection/valid/0905.pgn +18 -0
- data/test/pgn_collection/valid/0906.pgn +12 -0
- data/test/pgn_collection/valid/0907.pgn +21 -0
- data/test/pgn_collection/valid/0908.pgn +12 -0
- data/test/pgn_collection/valid/0909.pgn +16 -0
- data/test/pgn_collection/valid/0910.pgn +19 -0
- data/test/pgn_collection/valid/0911.pgn +22 -0
- data/test/pgn_collection/valid/0912.pgn +20 -0
- data/test/pgn_collection/valid/0913.pgn +25 -0
- data/test/pgn_collection/valid/0914.pgn +21 -0
- data/test/pgn_collection/valid/0915.pgn +21 -0
- data/test/pgn_collection/valid/0916.pgn +21 -0
- data/test/pgn_collection/valid/0917.pgn +21 -0
- data/test/pgn_collection/valid/0918.pgn +14 -0
- data/test/pgn_collection/valid/0919.pgn +17 -0
- data/test/pgn_collection/valid/0920.pgn +23 -0
- data/test/pgn_collection/valid/0921.pgn +15 -0
- data/test/pgn_collection/valid/0922.pgn +25 -0
- data/test/pgn_collection/valid/0923.pgn +22 -0
- data/test/pgn_collection/valid/0924.pgn +16 -0
- data/test/pgn_collection/valid/0925.pgn +26 -0
- data/test/pgn_collection/valid/0926.pgn +17 -0
- data/test/pgn_collection/valid/0927.pgn +18 -0
- data/test/pgn_collection/valid/0928.pgn +14 -0
- data/test/pgn_collection/valid/0929.pgn +20 -0
- data/test/pgn_collection/valid/0930.pgn +20 -0
- data/test/pgn_collection/valid/0931.pgn +18 -0
- data/test/pgn_collection/valid/0932.pgn +23 -0
- data/test/pgn_collection/valid/0933.pgn +19 -0
- data/test/pgn_collection/valid/0934.pgn +19 -0
- data/test/pgn_collection/valid/0935.pgn +27 -0
- data/test/pgn_collection/valid/0936.pgn +15 -0
- data/test/pgn_collection/valid/0937.pgn +17 -0
- data/test/pgn_collection/valid/0938.pgn +14 -0
- data/test/pgn_collection/valid/0939.pgn +51 -0
- data/test/pgn_collection/valid/0940.pgn +15 -0
- data/test/pgn_collection/valid/0941.pgn +19 -0
- data/test/pgn_collection/valid/0942.pgn +25 -0
- data/test/pgn_collection/valid/0943.pgn +21 -0
- data/test/pgn_collection/valid/0944.pgn +22 -0
- data/test/pgn_collection/valid/0945.pgn +20 -0
- data/test/pgn_collection/valid/0946.pgn +18 -0
- data/test/pgn_collection/valid/0947.pgn +18 -0
- data/test/pgn_collection/valid/0948.pgn +13 -0
- data/test/pgn_collection/valid/0949.pgn +23 -0
- data/test/pgn_collection/valid/0950.pgn +26 -0
- data/test/pgn_collection/valid/0951.pgn +21 -0
- data/test/pgn_collection/valid/0952.pgn +27 -0
- data/test/pgn_collection/valid/0953.pgn +30 -0
- data/test/pgn_collection/valid/0954.pgn +16 -0
- data/test/pgn_collection/valid/0955.pgn +19 -0
- data/test/pgn_collection/valid/0956.pgn +21 -0
- data/test/pgn_collection/valid/0957.pgn +19 -0
- data/test/pgn_collection/valid/0958.pgn +15 -0
- data/test/pgn_collection/valid/0959.pgn +23 -0
- data/test/pgn_collection/valid/0960.pgn +23 -0
- data/test/pgn_collection/valid/0961.pgn +18 -0
- data/test/pgn_collection/valid/0962.pgn +15 -0
- data/test/pgn_collection/valid/0963.pgn +18 -0
- data/test/pgn_collection/valid/0964.pgn +18 -0
- data/test/pgn_collection/valid/0965.pgn +21 -0
- data/test/pgn_collection/valid/0966.pgn +16 -0
- data/test/pgn_collection/valid/0967.pgn +26 -0
- data/test/pgn_collection/valid/0968.pgn +19 -0
- data/test/pgn_collection/valid/0969.pgn +23 -0
- data/test/pgn_collection/valid/0970.pgn +18 -0
- data/test/pgn_collection/valid/0971.pgn +14 -0
- data/test/pgn_collection/valid/0972.pgn +17 -0
- data/test/pgn_collection/valid/0973.pgn +20 -0
- data/test/pgn_collection/valid/0974.pgn +24 -0
- data/test/pgn_collection/valid/0975.pgn +14 -0
- data/test/pgn_collection/valid/0976.pgn +17 -0
- data/test/pgn_collection/valid/0977.pgn +14 -0
- data/test/pgn_collection/valid/0978.pgn +18 -0
- data/test/pgn_collection/valid/0979.pgn +19 -0
- data/test/pgn_collection/valid/0980.pgn +21 -0
- data/test/pgn_collection/valid/0981.pgn +21 -0
- data/test/pgn_collection/valid/0982.pgn +18 -0
- data/test/pgn_collection/valid/0983.pgn +22 -0
- data/test/pgn_collection/valid/0984.pgn +27 -0
- data/test/pgn_collection/valid/0985.pgn +19 -0
- data/test/pgn_collection/valid/0986.pgn +20 -0
- data/test/pgn_collection/valid/0987.pgn +15 -0
- data/test/pgn_collection/valid/0988.pgn +20 -0
- data/test/pgn_collection/valid/0989.pgn +19 -0
- data/test/pgn_collection/valid/0990.pgn +15 -0
- data/test/pgn_collection/valid/0991.pgn +25 -0
- data/test/pgn_collection/valid/0992.pgn +19 -0
- data/test/pgn_collection/valid/0993.pgn +15 -0
- data/test/pgn_collection/valid/0994.pgn +17 -0
- data/test/pgn_collection/valid/0995.pgn +26 -0
- data/test/pgn_collection/valid/0996.pgn +16 -0
- data/test/pgn_collection/valid/0997.pgn +24 -0
- data/test/pgn_collection/valid/0998.pgn +20 -0
- data/test/pgn_collection/valid/0999.pgn +21 -0
- data/test/pgn_collection/valid/1000.pgn +19 -0
- data/test/pgn_collection/valid/checkmate/0925.pgn +26 -0
- data/test/pgn_collection/valid/checkmate/checkmate.pgn +11 -0
- data/test/pgn_collection/valid/checkmate/ciccio.pgn +11 -0
- data/test/test_big_pgn_collection.rb +14 -0
- data/test/test_checkmate.rb +22 -0
- data/test/test_fifty_rule_move.rb +16 -0
- data/test/test_helper.rb +13 -0
- data/test/test_insufficient_material.rb +30 -0
- data/test/test_pgn_collection.rb +22 -0
- data/test/test_stalemate.rb +16 -0
- data/test/test_threefold_repetition.rb +16 -0
- metadata +2450 -12
data/.gitignore
CHANGED
data/LICENSE
ADDED
@@ -0,0 +1,165 @@
|
|
1
|
+
GNU LESSER GENERAL PUBLIC LICENSE
|
2
|
+
Version 3, 29 June 2007
|
3
|
+
|
4
|
+
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
|
5
|
+
Everyone is permitted to copy and distribute verbatim copies
|
6
|
+
of this license document, but changing it is not allowed.
|
7
|
+
|
8
|
+
|
9
|
+
This version of the GNU Lesser General Public License incorporates
|
10
|
+
the terms and conditions of version 3 of the GNU General Public
|
11
|
+
License, supplemented by the additional permissions listed below.
|
12
|
+
|
13
|
+
0. Additional Definitions.
|
14
|
+
|
15
|
+
As used herein, "this License" refers to version 3 of the GNU Lesser
|
16
|
+
General Public License, and the "GNU GPL" refers to version 3 of the GNU
|
17
|
+
General Public License.
|
18
|
+
|
19
|
+
"The Library" refers to a covered work governed by this License,
|
20
|
+
other than an Application or a Combined Work as defined below.
|
21
|
+
|
22
|
+
An "Application" is any work that makes use of an interface provided
|
23
|
+
by the Library, but which is not otherwise based on the Library.
|
24
|
+
Defining a subclass of a class defined by the Library is deemed a mode
|
25
|
+
of using an interface provided by the Library.
|
26
|
+
|
27
|
+
A "Combined Work" is a work produced by combining or linking an
|
28
|
+
Application with the Library. The particular version of the Library
|
29
|
+
with which the Combined Work was made is also called the "Linked
|
30
|
+
Version".
|
31
|
+
|
32
|
+
The "Minimal Corresponding Source" for a Combined Work means the
|
33
|
+
Corresponding Source for the Combined Work, excluding any source code
|
34
|
+
for portions of the Combined Work that, considered in isolation, are
|
35
|
+
based on the Application, and not on the Linked Version.
|
36
|
+
|
37
|
+
The "Corresponding Application Code" for a Combined Work means the
|
38
|
+
object code and/or source code for the Application, including any data
|
39
|
+
and utility programs needed for reproducing the Combined Work from the
|
40
|
+
Application, but excluding the System Libraries of the Combined Work.
|
41
|
+
|
42
|
+
1. Exception to Section 3 of the GNU GPL.
|
43
|
+
|
44
|
+
You may convey a covered work under sections 3 and 4 of this License
|
45
|
+
without being bound by section 3 of the GNU GPL.
|
46
|
+
|
47
|
+
2. Conveying Modified Versions.
|
48
|
+
|
49
|
+
If you modify a copy of the Library, and, in your modifications, a
|
50
|
+
facility refers to a function or data to be supplied by an Application
|
51
|
+
that uses the facility (other than as an argument passed when the
|
52
|
+
facility is invoked), then you may convey a copy of the modified
|
53
|
+
version:
|
54
|
+
|
55
|
+
a) under this License, provided that you make a good faith effort to
|
56
|
+
ensure that, in the event an Application does not supply the
|
57
|
+
function or data, the facility still operates, and performs
|
58
|
+
whatever part of its purpose remains meaningful, or
|
59
|
+
|
60
|
+
b) under the GNU GPL, with none of the additional permissions of
|
61
|
+
this License applicable to that copy.
|
62
|
+
|
63
|
+
3. Object Code Incorporating Material from Library Header Files.
|
64
|
+
|
65
|
+
The object code form of an Application may incorporate material from
|
66
|
+
a header file that is part of the Library. You may convey such object
|
67
|
+
code under terms of your choice, provided that, if the incorporated
|
68
|
+
material is not limited to numerical parameters, data structure
|
69
|
+
layouts and accessors, or small macros, inline functions and templates
|
70
|
+
(ten or fewer lines in length), you do both of the following:
|
71
|
+
|
72
|
+
a) Give prominent notice with each copy of the object code that the
|
73
|
+
Library is used in it and that the Library and its use are
|
74
|
+
covered by this License.
|
75
|
+
|
76
|
+
b) Accompany the object code with a copy of the GNU GPL and this license
|
77
|
+
document.
|
78
|
+
|
79
|
+
4. Combined Works.
|
80
|
+
|
81
|
+
You may convey a Combined Work under terms of your choice that,
|
82
|
+
taken together, effectively do not restrict modification of the
|
83
|
+
portions of the Library contained in the Combined Work and reverse
|
84
|
+
engineering for debugging such modifications, if you also do each of
|
85
|
+
the following:
|
86
|
+
|
87
|
+
a) Give prominent notice with each copy of the Combined Work that
|
88
|
+
the Library is used in it and that the Library and its use are
|
89
|
+
covered by this License.
|
90
|
+
|
91
|
+
b) Accompany the Combined Work with a copy of the GNU GPL and this license
|
92
|
+
document.
|
93
|
+
|
94
|
+
c) For a Combined Work that displays copyright notices during
|
95
|
+
execution, include the copyright notice for the Library among
|
96
|
+
these notices, as well as a reference directing the user to the
|
97
|
+
copies of the GNU GPL and this license document.
|
98
|
+
|
99
|
+
d) Do one of the following:
|
100
|
+
|
101
|
+
0) Convey the Minimal Corresponding Source under the terms of this
|
102
|
+
License, and the Corresponding Application Code in a form
|
103
|
+
suitable for, and under terms that permit, the user to
|
104
|
+
recombine or relink the Application with a modified version of
|
105
|
+
the Linked Version to produce a modified Combined Work, in the
|
106
|
+
manner specified by section 6 of the GNU GPL for conveying
|
107
|
+
Corresponding Source.
|
108
|
+
|
109
|
+
1) Use a suitable shared library mechanism for linking with the
|
110
|
+
Library. A suitable mechanism is one that (a) uses at run time
|
111
|
+
a copy of the Library already present on the user's computer
|
112
|
+
system, and (b) will operate properly with a modified version
|
113
|
+
of the Library that is interface-compatible with the Linked
|
114
|
+
Version.
|
115
|
+
|
116
|
+
e) Provide Installation Information, but only if you would otherwise
|
117
|
+
be required to provide such information under section 6 of the
|
118
|
+
GNU GPL, and only to the extent that such information is
|
119
|
+
necessary to install and execute a modified version of the
|
120
|
+
Combined Work produced by recombining or relinking the
|
121
|
+
Application with a modified version of the Linked Version. (If
|
122
|
+
you use option 4d0, the Installation Information must accompany
|
123
|
+
the Minimal Corresponding Source and Corresponding Application
|
124
|
+
Code. If you use option 4d1, you must provide the Installation
|
125
|
+
Information in the manner specified by section 6 of the GNU GPL
|
126
|
+
for conveying Corresponding Source.)
|
127
|
+
|
128
|
+
5. Combined Libraries.
|
129
|
+
|
130
|
+
You may place library facilities that are a work based on the
|
131
|
+
Library side by side in a single library together with other library
|
132
|
+
facilities that are not Applications and are not covered by this
|
133
|
+
License, and convey such a combined library under terms of your
|
134
|
+
choice, if you do both of the following:
|
135
|
+
|
136
|
+
a) Accompany the combined library with a copy of the same work based
|
137
|
+
on the Library, uncombined with any other library facilities,
|
138
|
+
conveyed under the terms of this License.
|
139
|
+
|
140
|
+
b) Give prominent notice with the combined library that part of it
|
141
|
+
is a work based on the Library, and explaining where to find the
|
142
|
+
accompanying uncombined form of the same work.
|
143
|
+
|
144
|
+
6. Revised Versions of the GNU Lesser General Public License.
|
145
|
+
|
146
|
+
The Free Software Foundation may publish revised and/or new versions
|
147
|
+
of the GNU Lesser General Public License from time to time. Such new
|
148
|
+
versions will be similar in spirit to the present version, but may
|
149
|
+
differ in detail to address new problems or concerns.
|
150
|
+
|
151
|
+
Each version is given a distinguishing version number. If the
|
152
|
+
Library as you received it specifies that a certain numbered version
|
153
|
+
of the GNU Lesser General Public License "or any later version"
|
154
|
+
applies to it, you have the option of following the terms and
|
155
|
+
conditions either of that published version or of any later version
|
156
|
+
published by the Free Software Foundation. If the Library as you
|
157
|
+
received it does not specify a version number of the GNU Lesser
|
158
|
+
General Public License, you may choose any version of the GNU Lesser
|
159
|
+
General Public License ever published by the Free Software Foundation.
|
160
|
+
|
161
|
+
If the Library as you received it specifies that a proxy can decide
|
162
|
+
whether future versions of the GNU Lesser General Public License shall
|
163
|
+
apply, that proxy's public statement of acceptance of any version is
|
164
|
+
permanent authorization for you to choose that version for the
|
165
|
+
Library.
|
data/README.rdoc
ADDED
@@ -0,0 +1,40 @@
|
|
1
|
+
= Chess
|
2
|
+
|
3
|
+
A fast Ruby library to play chess with Ruby.
|
4
|
+
This library is quite fast because rappresent
|
5
|
+
the game situations with bitboards. In addition, the
|
6
|
+
move generator is written in C as a Ruby extension.
|
7
|
+
|
8
|
+
== Installation
|
9
|
+
|
10
|
+
gem install chess
|
11
|
+
|
12
|
+
== Usage
|
13
|
+
|
14
|
+
require 'chess'
|
15
|
+
g = Chess::Game.new
|
16
|
+
while (!g.over?)
|
17
|
+
begin
|
18
|
+
print "Give me a #{g.active_player} move: "
|
19
|
+
input = gets.chop
|
20
|
+
break if input == 'quit'
|
21
|
+
g << input
|
22
|
+
puts g.board
|
23
|
+
puts g.moves.last
|
24
|
+
rescue Chess::IllegalMoveError => e
|
25
|
+
puts 'Illegal move!'
|
26
|
+
end
|
27
|
+
end
|
28
|
+
puts g.status
|
29
|
+
|
30
|
+
Documentation is available {here}[http://pioz.github.com/chess].
|
31
|
+
|
32
|
+
== Questions or problems?
|
33
|
+
|
34
|
+
If you have any issues please add an {issue on GitHub}[https://github.com/pioz/chess/issues]
|
35
|
+
or fork the project and send a pull request.
|
36
|
+
|
37
|
+
== Copyright
|
38
|
+
|
39
|
+
Copyright (c) 2012 {Enrico Pilotto (@pioz)}[https://github.com/pioz].
|
40
|
+
See {LICENSE}[https://github.com/pioz/chess/blob/master/LICENSE] for details.
|
data/Rakefile
CHANGED
@@ -1 +1,17 @@
|
|
1
|
-
require
|
1
|
+
require 'bundler/gem_tasks'
|
2
|
+
|
3
|
+
require 'rdoc/task'
|
4
|
+
Rake::RDocTask.new do |rd|
|
5
|
+
rd.title = 'Chess'
|
6
|
+
rd.main = 'README.rdoc'
|
7
|
+
rd.rdoc_dir = 'doc'
|
8
|
+
rd.rdoc_files.include('README.rdoc', 'lib/**/*.rb', 'ext/*.c')
|
9
|
+
rd.options << '-f' << 'horo'
|
10
|
+
end
|
11
|
+
|
12
|
+
require 'rake/testtask'
|
13
|
+
task :default => :test
|
14
|
+
Rake::TestTask.new do |test|
|
15
|
+
test.libs << 'test'
|
16
|
+
test.test_files = FileList["test/test_#{ENV['T'] || '*'}.rb"]
|
17
|
+
end
|
data/chess.gemspec
CHANGED
@@ -1,23 +1,22 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
|
-
$:.push File.expand_path(
|
3
|
-
require
|
2
|
+
$:.push File.expand_path('../lib', __FILE__)
|
3
|
+
require 'chess/version'
|
4
4
|
|
5
5
|
Gem::Specification.new do |s|
|
6
|
-
s.name =
|
6
|
+
s.name = 'chess'
|
7
7
|
s.version = Chess::VERSION
|
8
|
-
s.authors = [
|
9
|
-
s.email = [
|
10
|
-
s.homepage =
|
11
|
-
s.summary = %q{
|
12
|
-
s.description = %q{
|
8
|
+
s.authors = ['Enrico Pilotto']
|
9
|
+
s.email = ['enrico@megiston.it']
|
10
|
+
s.homepage = 'https://github.com/pioz/chess'
|
11
|
+
s.summary = %q{A fast chess library to play chess with Ruby.}
|
12
|
+
s.description = %q{A fast chess library that use bitboards to play chess with Ruby.}
|
13
|
+
s.license = 'LGPLv3'
|
13
14
|
|
14
|
-
s.rubyforge_project =
|
15
|
+
s.rubyforge_project = 'chess'
|
15
16
|
|
16
17
|
s.files = `git ls-files`.split("\n")
|
17
18
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
18
19
|
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
19
|
-
s.
|
20
|
-
|
21
|
-
s.post_install_message = "This is a dummy gem only to reserve the name on rubygems.org"
|
22
|
-
|
20
|
+
s.extensions = ['ext/extconf.rb']
|
21
|
+
s.require_paths = ['lib']
|
23
22
|
end
|
data/ext/MakefileC
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
# Compile this C chess library
|
2
|
+
|
3
|
+
chess: bitboard.o board.o common.o game.o special.o
|
4
|
+
gcc -g -o chess bitboard.o board.o common.o game.o special.o
|
5
|
+
|
6
|
+
bitboard.o: bitboard.h bitboard.c
|
7
|
+
gcc -g -c bitboard.c -o bitboard.o
|
8
|
+
|
9
|
+
board.o: board.h board.c
|
10
|
+
gcc -g -c board.c -o board.o
|
11
|
+
|
12
|
+
common.o: common.h common.c
|
13
|
+
gcc -g -c common.c -o common.o
|
14
|
+
|
15
|
+
game.o: game.h game.c
|
16
|
+
gcc -g -c game.c -o game.o
|
17
|
+
|
18
|
+
special.o: special.h special.c
|
19
|
+
gcc -g -c special.c -o special.o
|
20
|
+
|
21
|
+
clean:
|
22
|
+
rm *.o
|
data/ext/bitboard.c
ADDED
@@ -0,0 +1,376 @@
|
|
1
|
+
/*
|
2
|
+
* chess - a fast library to play chess in Ruby
|
3
|
+
*
|
4
|
+
* Copyright (c) 2011-2012, Enrico Pilotto <enrico@megiston.it>
|
5
|
+
* This code is under LICENSE LGPLv3
|
6
|
+
*/
|
7
|
+
|
8
|
+
#include "bitboard.h"
|
9
|
+
|
10
|
+
// Pre-calculate variables
|
11
|
+
bboard ALL_XRAY_ATTACK_WHITE_PAWN[64];
|
12
|
+
bboard ALL_XRAY_ATTACK_BLACK_PAWN[64];
|
13
|
+
bboard ALL_XRAY_KNIGHT[64];
|
14
|
+
bboard ALL_XRAY_KING[64];
|
15
|
+
|
16
|
+
/*
|
17
|
+
Shift by direction
|
18
|
+
[7] [0] [1]
|
19
|
+
+7 +8 +9
|
20
|
+
\ | /
|
21
|
+
[6] -1 <- X -> +1 [2]
|
22
|
+
/ | \
|
23
|
+
-9 -8 -7
|
24
|
+
[5] [4] [3]
|
25
|
+
*/
|
26
|
+
const int DIR[8] = { 8, 9, 1, -7, -8, -9, -1, 7 };
|
27
|
+
|
28
|
+
/*
|
29
|
+
Avoid wrap bitboard masks
|
30
|
+
[7] -> +7 [0] -> +8 [1] -> +9
|
31
|
+
0x7F7F7F7F7F7F7F00 0xFFFFFFFFFFFFFF00 0xFEFEFEFEFEFEFE00
|
32
|
+
1 1 1 1 1 1 1 . 1 1 1 1 1 1 1 1 . 1 1 1 1 1 1 1
|
33
|
+
1 1 1 1 1 1 1 . 1 1 1 1 1 1 1 1 . 1 1 1 1 1 1 1
|
34
|
+
1 1 1 1 1 1 1 . 1 1 1 1 1 1 1 1 . 1 1 1 1 1 1 1
|
35
|
+
1 1 1 1 1 1 1 . 1 1 1 1 1 1 1 1 . 1 1 1 1 1 1 1
|
36
|
+
1 1 1 1 1 1 1 . 1 1 1 1 1 1 1 1 . 1 1 1 1 1 1 1
|
37
|
+
1 1 1 1 1 1 1 . 1 1 1 1 1 1 1 1 . 1 1 1 1 1 1 1
|
38
|
+
1 1 1 1 1 1 1 . 1 1 1 1 1 1 1 1 . 1 1 1 1 1 1 1
|
39
|
+
. . . . . . . . . . . . . . . . . . . . . . . .
|
40
|
+
|
41
|
+
[6] -> -1 [2] -> +1
|
42
|
+
0x7F7F7F7F7F7F7F7F 0xFEFEFEFEFEFEFEFE
|
43
|
+
1 1 1 1 1 1 1 . . 1 1 1 1 1 1 1
|
44
|
+
1 1 1 1 1 1 1 . . 1 1 1 1 1 1 1
|
45
|
+
1 1 1 1 1 1 1 . . 1 1 1 1 1 1 1
|
46
|
+
1 1 1 1 1 1 1 . . 1 1 1 1 1 1 1
|
47
|
+
1 1 1 1 1 1 1 . . 1 1 1 1 1 1 1
|
48
|
+
1 1 1 1 1 1 1 . . 1 1 1 1 1 1 1
|
49
|
+
1 1 1 1 1 1 1 . . 1 1 1 1 1 1 1
|
50
|
+
1 1 1 1 1 1 1 . . 1 1 1 1 1 1 1
|
51
|
+
|
52
|
+
[5] -> -9 [4] -> -8 [3] -> -7
|
53
|
+
0x007F7F7F7F7F7F7F 0x00FFFFFFFFFFFFFF 0x00FEFEFEFEFEFEFE
|
54
|
+
. . . . . . . . . . . . . . . . . . . . . . . .
|
55
|
+
1 1 1 1 1 1 1 . 1 1 1 1 1 1 1 1 . 1 1 1 1 1 1 1
|
56
|
+
1 1 1 1 1 1 1 . 1 1 1 1 1 1 1 1 . 1 1 1 1 1 1 1
|
57
|
+
1 1 1 1 1 1 1 . 1 1 1 1 1 1 1 1 . 1 1 1 1 1 1 1
|
58
|
+
1 1 1 1 1 1 1 . 1 1 1 1 1 1 1 1 . 1 1 1 1 1 1 1
|
59
|
+
1 1 1 1 1 1 1 . 1 1 1 1 1 1 1 1 . 1 1 1 1 1 1 1
|
60
|
+
1 1 1 1 1 1 1 . 1 1 1 1 1 1 1 1 . 1 1 1 1 1 1 1
|
61
|
+
1 1 1 1 1 1 1 . 1 1 1 1 1 1 1 1 . 1 1 1 1 1 1 1
|
62
|
+
*/
|
63
|
+
const bboard AVOID_WRAP[8] =
|
64
|
+
{
|
65
|
+
0xffffffffffffff00,
|
66
|
+
0xfefefefefefefe00,
|
67
|
+
0xfefefefefefefefe,
|
68
|
+
0x00fefefefefefefe,
|
69
|
+
0x00ffffffffffffff,
|
70
|
+
0x007f7f7f7f7f7f7f,
|
71
|
+
0x7f7f7f7f7f7f7f7f,
|
72
|
+
0x7f7f7f7f7f7f7f00
|
73
|
+
};
|
74
|
+
|
75
|
+
// Bitboard getters
|
76
|
+
int
|
77
|
+
square (int file, int rank)
|
78
|
+
{
|
79
|
+
return 8 * rank + file;
|
80
|
+
}
|
81
|
+
|
82
|
+
int
|
83
|
+
square2 (bboard b)
|
84
|
+
{
|
85
|
+
int pos = -1;
|
86
|
+
while (b)
|
87
|
+
{
|
88
|
+
b >>= 1;
|
89
|
+
pos++;
|
90
|
+
}
|
91
|
+
return pos;
|
92
|
+
}
|
93
|
+
|
94
|
+
void
|
95
|
+
squares (bboard b, int *array, int *n)
|
96
|
+
{
|
97
|
+
int i;
|
98
|
+
*n = 0;
|
99
|
+
for (i = 0; i < 64; i++)
|
100
|
+
if (b & 1ULL << i)
|
101
|
+
{
|
102
|
+
array[*n] = i;
|
103
|
+
(*n)++;
|
104
|
+
}
|
105
|
+
}
|
106
|
+
|
107
|
+
int
|
108
|
+
file (int square)
|
109
|
+
{
|
110
|
+
return square & 7;
|
111
|
+
}
|
112
|
+
|
113
|
+
int rank (int square)
|
114
|
+
{
|
115
|
+
return square >> 3;
|
116
|
+
}
|
117
|
+
|
118
|
+
bboard
|
119
|
+
get (bboard b, int square)
|
120
|
+
{
|
121
|
+
return b & (1ULL << square);
|
122
|
+
}
|
123
|
+
|
124
|
+
bboard
|
125
|
+
get2 (bboard b, int file, int rank)
|
126
|
+
{
|
127
|
+
return b & (1ULL << (8 * rank + file));
|
128
|
+
}
|
129
|
+
|
130
|
+
void
|
131
|
+
print_bitboard (bboard b)
|
132
|
+
{
|
133
|
+
int i, j;
|
134
|
+
for (i = 7; i >= 0; i--) // rank => top to bottom
|
135
|
+
{
|
136
|
+
for (j = 0; j < 8; j++) // file => left to right
|
137
|
+
printf ("%d ", get2 (b, j, i) ? 1 : 0);
|
138
|
+
printf ("\n");
|
139
|
+
}
|
140
|
+
}
|
141
|
+
|
142
|
+
// Bitboard manipulations
|
143
|
+
|
144
|
+
bboard
|
145
|
+
has_only_one_one (bboard b)
|
146
|
+
{
|
147
|
+
return b && !(b & (b-1));
|
148
|
+
}
|
149
|
+
|
150
|
+
bboard
|
151
|
+
only_white_squares (bboard b)
|
152
|
+
{
|
153
|
+
return !((b ^ WHITE_SQUARES) & b);
|
154
|
+
}
|
155
|
+
|
156
|
+
bboard
|
157
|
+
only_black_squares (bboard b)
|
158
|
+
{
|
159
|
+
return !((b ^ BLACK_SQUARES) & b);
|
160
|
+
}
|
161
|
+
|
162
|
+
bboard
|
163
|
+
mirror_horizontal (bboard b)
|
164
|
+
{
|
165
|
+
const bboard k1 = 0x5555555555555555;
|
166
|
+
const bboard k2 = 0x3333333333333333;
|
167
|
+
const bboard k3 = 0x0f0f0f0f0f0f0f0f;
|
168
|
+
b = ((b >> 1) & k1) + 2 * (b & k1);
|
169
|
+
b = ((b >> 2) & k2) + 4 * (b & k2);
|
170
|
+
b = ((b >> 4) & k3) + 16 * (b & k3);
|
171
|
+
return b;
|
172
|
+
}
|
173
|
+
|
174
|
+
bboard
|
175
|
+
mirror_vertical (bboard b)
|
176
|
+
{
|
177
|
+
const bboard k1 = 0x00ff00ff00ff00ff;
|
178
|
+
const bboard k2 = 0x0000ffff0000ffff;
|
179
|
+
b = ((b >> 8) & k1) | ((b & k1) << 8);
|
180
|
+
b = ((b >> 16) & k2) | ((b & k2) << 16);
|
181
|
+
b = ( b >> 32) | ( b << 32);
|
182
|
+
return b;
|
183
|
+
}
|
184
|
+
|
185
|
+
bboard
|
186
|
+
rotate_left (bboard b, int s)
|
187
|
+
{
|
188
|
+
//return (b << s) | (b >> (64 - s));
|
189
|
+
//return (b << s) | (b >> -s);
|
190
|
+
return s > 0 ? b << s : b >> -s;
|
191
|
+
}
|
192
|
+
|
193
|
+
bboard
|
194
|
+
rotate_right (bboard b, int s)
|
195
|
+
{
|
196
|
+
//return (b >> s) | (b << (64 - s));
|
197
|
+
//return (b >> s) | (b << -s);
|
198
|
+
return s > 0 ? b >> s : b << -s;
|
199
|
+
}
|
200
|
+
|
201
|
+
bboard
|
202
|
+
occluded_fill (bboard gen, bboard pro, int dir)
|
203
|
+
{
|
204
|
+
int r = DIR[dir];
|
205
|
+
pro &= AVOID_WRAP[dir];
|
206
|
+
gen |= pro & rotate_left (gen, r);
|
207
|
+
pro &= rotate_left (pro, r);
|
208
|
+
gen |= pro & rotate_left (gen, 2 * r);
|
209
|
+
pro &= rotate_left (pro, 2 * r);
|
210
|
+
gen |= pro & rotate_left (gen, 4 * r);
|
211
|
+
return gen;
|
212
|
+
}
|
213
|
+
|
214
|
+
bboard
|
215
|
+
shift_one (bboard b, int dir)
|
216
|
+
{
|
217
|
+
return rotate_left (b, DIR[dir]) & AVOID_WRAP[dir];
|
218
|
+
}
|
219
|
+
|
220
|
+
bboard
|
221
|
+
sliding_attacks (bboard slider, bboard propagator, int dir)
|
222
|
+
{
|
223
|
+
bboard fill = occluded_fill (slider, propagator, dir);
|
224
|
+
return shift_one (fill, dir);
|
225
|
+
}
|
226
|
+
|
227
|
+
// Pre-calculators
|
228
|
+
void
|
229
|
+
precalculate_xray_attack_white_pawn (bboard xray[64])
|
230
|
+
{
|
231
|
+
int i;
|
232
|
+
for (i = 0; i < 64; i++)
|
233
|
+
{
|
234
|
+
xray[i] = EMPTY_BOARD;
|
235
|
+
xray[i] = shift_one (1ULL << i, 7) | shift_one (1ULL << i, 1);
|
236
|
+
}
|
237
|
+
}
|
238
|
+
|
239
|
+
void
|
240
|
+
precalculate_xray_attack_black_pawn (bboard xray[64])
|
241
|
+
{
|
242
|
+
int i;
|
243
|
+
for (i = 0; i < 64; i++)
|
244
|
+
{
|
245
|
+
xray[i] = EMPTY_BOARD;
|
246
|
+
xray[i] = shift_one (1ULL << i, 5) | shift_one (1ULL << i, 3);
|
247
|
+
}
|
248
|
+
}
|
249
|
+
|
250
|
+
void
|
251
|
+
precalculate_xray_knight (bboard xray[64])
|
252
|
+
{
|
253
|
+
int i;
|
254
|
+
for (i = 0; i < 64; i++)
|
255
|
+
{
|
256
|
+
xray[i] = 1ULL << i;
|
257
|
+
xray[i] = ((xray[i] << 17) & NOT_FILE_A)
|
258
|
+
| ((xray[i] << 10) & NOT_FILE_AB)
|
259
|
+
| ((xray[i] >> 6) & NOT_FILE_AB)
|
260
|
+
| ((xray[i] >> 15) & NOT_FILE_A)
|
261
|
+
| ((xray[i] << 15) & NOT_FILE_H)
|
262
|
+
| ((xray[i] << 6) & NOT_FILE_GH)
|
263
|
+
| ((xray[i] >> 10) & NOT_FILE_GH)
|
264
|
+
| ((xray[i] >> 17) & NOT_FILE_H);
|
265
|
+
}
|
266
|
+
}
|
267
|
+
|
268
|
+
void
|
269
|
+
precalculate_xray_king (bboard xray[64])
|
270
|
+
{
|
271
|
+
int i, j;
|
272
|
+
for (i = 0; i < 64; i++)
|
273
|
+
{
|
274
|
+
xray[i] = EMPTY_BOARD;
|
275
|
+
for (j = 0; j < 8; j++)
|
276
|
+
xray[i] = sliding_attacks (1ULL << i, EMPTY_BOARD, j) | xray[i];
|
277
|
+
}
|
278
|
+
}
|
279
|
+
|
280
|
+
void
|
281
|
+
precalculate_all_xray ()
|
282
|
+
{
|
283
|
+
precalculate_xray_attack_white_pawn (ALL_XRAY_ATTACK_WHITE_PAWN);
|
284
|
+
precalculate_xray_attack_black_pawn (ALL_XRAY_ATTACK_BLACK_PAWN);
|
285
|
+
precalculate_xray_knight (ALL_XRAY_KNIGHT);
|
286
|
+
precalculate_xray_king (ALL_XRAY_KING);
|
287
|
+
}
|
288
|
+
|
289
|
+
// XRay generators
|
290
|
+
bboard
|
291
|
+
xray_white_pawn (bboard occupied_square, int square)
|
292
|
+
{
|
293
|
+
bboard empty_square = ~occupied_square;
|
294
|
+
bboard one_step = shift_one (1ULL << square, 0) & empty_square;
|
295
|
+
if (square > 7 && square < 16)
|
296
|
+
{
|
297
|
+
bboard two_step = shift_one (1ULL << (square + 8), 0) & empty_square & ~shift_one (occupied_square, 0);
|
298
|
+
return one_step | two_step | (ALL_XRAY_ATTACK_WHITE_PAWN[square] & occupied_square);
|
299
|
+
}
|
300
|
+
return one_step | (ALL_XRAY_ATTACK_WHITE_PAWN[square] & occupied_square);
|
301
|
+
}
|
302
|
+
|
303
|
+
bboard
|
304
|
+
xray_black_pawn (bboard occupied_square, int square)
|
305
|
+
{
|
306
|
+
bboard empty_square = ~occupied_square;
|
307
|
+
bboard one_step = shift_one (1ULL << square, 4) & empty_square;
|
308
|
+
if (square > 47 && square < 56)
|
309
|
+
{
|
310
|
+
bboard two_step = shift_one (1ULL << (square - 8), 4) & empty_square & ~shift_one (occupied_square, 4);
|
311
|
+
return one_step | two_step | (ALL_XRAY_ATTACK_BLACK_PAWN[square] & occupied_square);
|
312
|
+
}
|
313
|
+
return one_step | (ALL_XRAY_ATTACK_BLACK_PAWN[square] & occupied_square);
|
314
|
+
}
|
315
|
+
|
316
|
+
bboard
|
317
|
+
xray_attack_white_pawn (int square)
|
318
|
+
{
|
319
|
+
return ALL_XRAY_ATTACK_WHITE_PAWN[square];
|
320
|
+
}
|
321
|
+
|
322
|
+
bboard
|
323
|
+
xray_attack_black_pawn (int square)
|
324
|
+
{
|
325
|
+
return ALL_XRAY_ATTACK_BLACK_PAWN[square];
|
326
|
+
}
|
327
|
+
|
328
|
+
bboard
|
329
|
+
xray_rook (bboard occupied_square, int square)
|
330
|
+
{
|
331
|
+
int i, dir;
|
332
|
+
bboard xray[4];
|
333
|
+
bboard collision, shielded_square;
|
334
|
+
for (i = 0, dir = 0; i < 4; i++, dir+=2)
|
335
|
+
{
|
336
|
+
xray[i] = sliding_attacks (1ULL << square, FULL_BOARD, dir);
|
337
|
+
collision = xray[i] & occupied_square;
|
338
|
+
shielded_square = sliding_attacks (collision, FULL_BOARD, dir);
|
339
|
+
xray[i] ^= shielded_square;
|
340
|
+
}
|
341
|
+
return xray[0] | xray[1] | xray[2] | xray[3];
|
342
|
+
}
|
343
|
+
|
344
|
+
bboard
|
345
|
+
xray_knight (int square)
|
346
|
+
{
|
347
|
+
return ALL_XRAY_KNIGHT[square];
|
348
|
+
}
|
349
|
+
|
350
|
+
bboard
|
351
|
+
xray_bishop (bboard occupied_square, int square)
|
352
|
+
{
|
353
|
+
int i, dir;
|
354
|
+
bboard xray[4];
|
355
|
+
bboard collision, shielded_square;
|
356
|
+
for (i = 0, dir = 1; i < 4; i++, dir+=2)
|
357
|
+
{
|
358
|
+
xray[i] = sliding_attacks (1ULL << square, FULL_BOARD, dir);
|
359
|
+
collision = xray[i] & occupied_square;
|
360
|
+
shielded_square = sliding_attacks (collision, FULL_BOARD, dir);
|
361
|
+
xray[i] ^= shielded_square;
|
362
|
+
}
|
363
|
+
return xray[0] | xray[1] | xray[2] | xray[3];
|
364
|
+
}
|
365
|
+
|
366
|
+
bboard
|
367
|
+
xray_queen (bboard occupied_square, int square)
|
368
|
+
{
|
369
|
+
return xray_rook (occupied_square, square) | xray_bishop (occupied_square, square);
|
370
|
+
}
|
371
|
+
|
372
|
+
bboard
|
373
|
+
xray_king (int square)
|
374
|
+
{
|
375
|
+
return ALL_XRAY_KING[square];
|
376
|
+
}
|