neuro_gammon 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,32 @@
1
+ #
2
+ # To change this template, choose Tools | Templates
3
+ # and open the template in the editor.
4
+
5
+
6
+ $:.unshift File.join(File.dirname(__FILE__),'..','lib')
7
+
8
+ require 'test/unit'
9
+ require 'neuro_gammon/base_player'
10
+
11
+ class TestBasePlayer < Test::Unit::TestCase
12
+ include NeuroGammon
13
+
14
+ def test_init
15
+ b=BasePlayer.new
16
+ assert_not_nil b.id, "id should not be nil"
17
+ assert_not_nil b.name, "name should not be nil"
18
+ assert_equal "NeuroGammon::BasePlayer",b.name,"unexpected default name"
19
+ end
20
+
21
+ def test_name
22
+ b=BasePlayer.new
23
+ b.name="bob"
24
+ assert_equal "bob",b.name,"name should be bob"
25
+ end
26
+
27
+ def test_id
28
+ b=BasePlayer.new
29
+ b.id="bob"
30
+ assert_equal "bob",b.id,"id should be bob"
31
+ end
32
+ end
@@ -0,0 +1,384 @@
1
+ #
2
+ # To change this template, choose Tools | Templates
3
+ # and open the template in the editor.
4
+
5
+
6
+ $:.unshift File.join(File.dirname(__FILE__),'..','lib')
7
+
8
+ require 'test/unit'
9
+ require 'neuro_gammon/board'
10
+ require 'neuro_gammon/dice'
11
+
12
+
13
+ class Array
14
+ def diff other_array
15
+ result=[]
16
+ self.each do |x|
17
+ result << x if (not other_array.include?(x))
18
+ end
19
+
20
+ other_array.each do |x|
21
+ result << x if (not self.include?(x))
22
+ end
23
+
24
+ return result.uniq
25
+ end
26
+
27
+ def shuffle!
28
+ size.downto(1) { |n| push delete_at(rand(n)) }
29
+ self
30
+ end
31
+
32
+ end
33
+
34
+ class TestBoard < Test::Unit::TestCase
35
+ include NeuroGammon
36
+ def setup
37
+ @board=Board.new
38
+ class << @board
39
+ def set=s
40
+ @board_state=s[0]
41
+ @bar=s[1]
42
+ raise Exception.new("Invalid state, wrong number of board positions:" << @board_state.size.to_s << ", should be 24") if @board_state.size!=24
43
+ raise Exception.new("Invalid state, wrong number of bar positions:" << @bar.size.to_s << ", should be 2") if @bar.size!=2
44
+ end
45
+ end
46
+
47
+ @dice=Dice.new
48
+ class << @dice
49
+ def set=values
50
+ @values=values
51
+ check_state
52
+ end
53
+ end
54
+ end
55
+
56
+ def test_init
57
+ assert_equal [[-2,0,0,0,0,5,0,3,0,0,0,-5,5,0,0,0,-3,0,-5,0,0,0,0,2],[0,0]],@board.state
58
+ assert_equal 15,@board.piece_count(Board::BLACK)
59
+ assert_equal 15,@board.piece_count(Board::WHITE)
60
+ assert_equal 0,@board.bar_count(Board::WHITE)
61
+ assert_equal 0,@board.bar_count(Board::BLACK)
62
+ end
63
+
64
+ def test_colours
65
+ assert_equal(-1, Board::BLACK)
66
+ assert_equal(1,Board::WHITE)
67
+ end
68
+
69
+ def test_move
70
+
71
+ @board.move!([23,20],Board::WHITE)
72
+ assert_equal [[-2,0,0,0,0,5,0,3,0,0,0,-5,5,0,0,0,-3,0,-5,0,1,0,0,1],[0,0]],@board.state
73
+ @board.move!([0,1],Board::BLACK)
74
+ assert_equal [[-1,-1,0,0,0,5,0,3,0,0,0,-5,5,0,0,0,-3,0,-5,0,1,0,0,1],[0,0]],@board.state
75
+ end
76
+
77
+ def test_invalid_moves
78
+
79
+ #test for moving to a row containing 5
80
+ assert_raise(Exception) {@board.move!([7,5],Board::WHITE)}
81
+ assert_equal [[-2,0,0,0,0,5,0,3,0,0,0,-5,5,0,0,0,-3,0,-5,0,0,0,0,2],[0,0]],@board.state
82
+
83
+ #test start with no pieces
84
+ assert_raise(Exception) {@board.move!([22,21],Board::WHITE)}
85
+ assert_equal [[-2,0,0,0,0,5,0,3,0,0,0,-5,5,0,0,0,-3,0,-5,0,0,0,0,2],[0,0]],@board.state
86
+
87
+ #test opposing colour at start
88
+ assert_raise(Exception) {@board.move!([11,10],Board::WHITE)}
89
+ assert_equal [[-2,0,0,0,0,5,0,3,0,0,0,-5,5,0,0,0,-3,0,-5,0,0,0,0,2],[0,0]],@board.state
90
+
91
+ #test wrong direction (black)
92
+ assert_raise(Exception) {@board.move!([11,10],Board::BLACK)}
93
+ assert_equal [[-2,0,0,0,0,5,0,3,0,0,0,-5,5,0,0,0,-3,0,-5,0,0,0,0,2],[0,0]],@board.state
94
+
95
+ #test wrong direction (white)
96
+ assert_raise(Exception) {@board.move!([12,13],Board::WHITE)}
97
+ assert_equal [[-2,0,0,0,0,5,0,3,0,0,0,-5,5,0,0,0,-3,0,-5,0,0,0,0,2],[0,0]],@board.state
98
+
99
+ #test for destination wrong colour
100
+ assert_raise(Exception) {@board.move!([18,23],Board::BLACK)}
101
+ assert_equal [[-2,0,0,0,0,5,0,3,0,0,0,-5,5,0,0,0,-3,0,-5,0,0,0,0,2],[0,0]],@board.state
102
+
103
+ end
104
+
105
+ def test_bearing_off
106
+ assert_equal false, @board.bearing_off?(Board::BLACK)
107
+ assert_equal false, @board.bearing_off?(Board::WHITE)
108
+
109
+ @board.set=[[1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1],[0,0]]
110
+ assert_equal true, @board.bearing_off?(Board::BLACK)
111
+ assert_equal true, @board.bearing_off?(Board::WHITE)
112
+
113
+ @board.set=[[1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,-1,-1,-1],[0,0]]
114
+ assert_equal false, @board.bearing_off?(Board::BLACK)
115
+ assert_equal false, @board.bearing_off?(Board::WHITE)
116
+
117
+ @board.set=[[1,1,1,1,1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1],[0,0]]
118
+ assert_equal false, @board.bearing_off?(Board::BLACK)
119
+ assert_equal true, @board.bearing_off?(Board::WHITE)
120
+
121
+ @board.set=[[1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1],[0,0]]
122
+ assert_equal true, @board.bearing_off?(Board::BLACK)
123
+ assert_equal false, @board.bearing_off?(Board::WHITE)
124
+
125
+ @board.set=[[1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1],[1,0]]
126
+ assert_equal false, @board.bearing_off?(Board::BLACK)
127
+ assert_equal true, @board.bearing_off?(Board::WHITE)
128
+
129
+ @board.set=[[1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1],[0,1]]
130
+ assert_equal true, @board.bearing_off?(Board::BLACK)
131
+ assert_equal false, @board.bearing_off?(Board::WHITE)
132
+
133
+ @board.set=[[-5,5,5,4,1,0,0,-1,0,0,0,0,0,0,0,0,-1,0,0,0,-2,-1,-1,-4],[0,0]]
134
+ assert_equal true, @board.bearing_off?(Board::WHITE)
135
+ end
136
+
137
+ def test_bar_count
138
+
139
+ @board.set=[[0,0,0,0,0,0,0,0,0,0,0,0,1,-1,0,0,0,0,0,0,0,0,0,0],[2,3]]
140
+
141
+ assert_equal 2,@board.bar_count(Board::BLACK)
142
+ assert_equal 3,@board.bar_count(Board::WHITE)
143
+ end
144
+
145
+ def test_piece_count
146
+
147
+ assert_equal 15,@board.piece_count(Board::BLACK)
148
+ assert_equal 15,@board.piece_count(Board::WHITE)
149
+
150
+ @board.set=@board.set=[[0,0,0,0,-3,5,5,0,0,0,0,0,1,-1,0,0,0,0,0,0,0,0,0,0],[2,3]]
151
+ assert_equal 6,@board.piece_count(Board::BLACK)
152
+ assert_equal 14,@board.piece_count(Board::WHITE)
153
+ end
154
+
155
+ def test_move_bear_off
156
+
157
+ @board.set=[[-1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1],[0,0]]
158
+ @board.move!([5,-1],Board::WHITE)
159
+ assert_equal([[-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1],[0,0]],@board.state)
160
+
161
+ @board.set=[[1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1],[0,0]]
162
+ @board.move!([23,-1],Board::BLACK)
163
+ assert_equal([[1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0],[0,0]],@board.state)
164
+
165
+ @board.move!([22,-1],Board::BLACK)
166
+ assert_equal([[1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0]],@board.state)
167
+
168
+ @board.set=[[-5,5,5,4,1,0,0,-1,0,0,0,0,0,0,0,0,-1,0,0,0,-2,-1,-1,-4],[0,0]]
169
+ @board.move!([4,-1],Board::WHITE)
170
+ assert_equal([[-5,5,5,4,0,0,0,-1,0,0,0,0,0,0,0,0,-1,0,0,0,-2,-1,-1,-4],[0,0]],@board.state)
171
+
172
+ end
173
+
174
+ def test_move_off_bar
175
+
176
+ @board.set=[[-1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,1],[1,1]]
177
+
178
+ @board.move!([-1,1],Board::BLACK)
179
+ assert_equal([[-1,-1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,1],[0,1]],@board.state)
180
+
181
+ @board.set=[[-1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,1],[1,1]]
182
+ @board.move!([-1,21],Board::WHITE)
183
+ assert_equal([[-1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,-1,1],[1,0]],@board.state)
184
+
185
+ @board.set=[[-1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,1],[2,1]]
186
+ @board.move!([-1,2],Board::BLACK)
187
+ assert_equal([[-1,0,-1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,1],[1,1]],@board.state)
188
+
189
+ @board.set=[[-1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,1],[1,3]]
190
+ @board.move!([-1,20],Board::WHITE)
191
+ assert_equal([[-1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,-1,1],[1,2]],@board.state)
192
+ end
193
+
194
+ def test_invalid_moves_bearing_off
195
+
196
+ @board.set=[[-1,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,1],[0,0]]
197
+ assert_raises(Exception) {@board.move!([22,-1],Board::BLACK)}
198
+ assert_equal [[-1,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,1],[0,0]],@board.state
199
+
200
+ @board.set=[[1,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1],[1,0]]
201
+ assert_raises(Exception) {@board.move!([1,-1],Board::WHITE)}
202
+ assert_raises(Exception) {@board.move!([5,-1],Board::WHITE)}
203
+ assert_equal [[1,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1],[1,0]],@board.state
204
+
205
+ end
206
+
207
+ def test_invalid_moves_bar
208
+
209
+ @board.set=[[-1,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,1],[1,1]]
210
+
211
+ #test trying to move a piece
212
+ assert_raises(Exception) {@board.move!([23,20],Board::WHITE)}
213
+ assert_equal [[-1,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,1],[1,1]],@board.state
214
+
215
+ #test landing on oposing peice square
216
+ assert_raises(Exception) {@board.move!([-1,4],Board::BLACK)}
217
+ assert_equal [[-1,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,1],[1,1]],@board.state
218
+
219
+ #test out of range
220
+ assert_raises(Exception) {@board.move!([-1,17],Board::WHITE)}
221
+ assert_equal [[-1,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,1],[1,1]],@board.state
222
+
223
+ #test wrong end
224
+ assert_raises(Exception) {@board.move!([-1,2],Board::WHITE)}
225
+ assert_equal [[-1,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,1],[1,1]],@board.state
226
+
227
+ end
228
+
229
+ def test_move_knockoff
230
+
231
+ @board.set=[[-1,-1,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,-1,1],[0,0]]
232
+ @board.move!([0,4],Board::BLACK)
233
+ assert_equal([[0,-1,0,0,-1,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,-1,1],[0,1]],@board.state)
234
+
235
+ @board.set=[[-1,-1,0,0,1,-1,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,-1,1],[0,0]]
236
+ @board.move!([7,5],Board::WHITE)
237
+ assert_equal([[-1,-1,0,0,1,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,-1,1],[1,0]],@board.state)
238
+
239
+ @board.set=[[-1,-1,0,0,1,-1,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,-1,1],[1,0]]
240
+ @board.move!([7,5],Board::WHITE)
241
+ assert_equal([[-1,-1,0,0,1,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,-1,1],[2,0]],@board.state)
242
+
243
+ @board.set=[[-1,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,1],[1,1]]
244
+ @board.move!([-1,22],Board::WHITE)
245
+ assert_equal([[-1,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1],[2,0]],@board.state)
246
+
247
+ @board.set=[[-1,1,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,1],[1,1]]
248
+ @board.move!([-1,1],Board::BLACK)
249
+ assert_equal([[-1,-1,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,1],[0,2]],@board.state)
250
+ end
251
+
252
+ #Array.diff added method, added for tests
253
+ def test_array_diff
254
+ a=[1,2,3]
255
+ assert_equal [1],a.diff([2,3])
256
+ assert_equal [1],[2,3].diff(a)
257
+ assert_equal [1,2,3,4],a.diff([4])
258
+ assert_equal [4,1,2,3],[4].diff(a)
259
+ assert_equal [[1,2][3,4]], [[1,2][3,4],[5,6]].diff([[5,6]])
260
+
261
+ assert_equal [1,2],[1,1,2,2,3,3,2,1].diff([3])
262
+
263
+ assert_equal [[23,17],[23,25],[23,26]],[[23,17]].diff([[23,25],[23,26]])
264
+
265
+ end
266
+
267
+ def test_legal_moves
268
+ #very simple to start
269
+
270
+ @board.set=[[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],[0,0]]
271
+
272
+ @dice.set=[6,6]
273
+ valid=@board.valid_moves(Board::WHITE, @dice)
274
+ assert_equal [],valid.diff([[23,17]])
275
+
276
+ @board.set=[[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],[0,0]]
277
+ @dice.set=[6,5]
278
+ valid=@board.valid_moves(Board::WHITE, @dice)
279
+ assert_equal [],valid.diff([[23,17],[23,18]])
280
+
281
+ @board.set=[[0,0,0,0,0,-2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],[0,0]]
282
+ @dice.set=[1,2]
283
+ valid=@board.valid_moves(Board::BLACK, @dice)
284
+ assert_equal [],valid.diff([[5,6],[5,7]])
285
+
286
+ @board.set=[[0,0,0,0,0,-2,-5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],[0,0]]
287
+ @dice.set=[1,2]
288
+ valid=@board.valid_moves(Board::BLACK, @dice)
289
+ assert_equal [],valid.diff([[5,7],[6,7],[6,8]])
290
+
291
+ #now for a piece on the bar
292
+ @board.set=[[0,0,0,0,0,-2,-5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],[1,0]]
293
+ @dice.set=[1,2]
294
+ valid=@board.valid_moves(Board::BLACK, @dice)
295
+ assert_equal [],valid.diff([[-1,0],[-1,1]])
296
+
297
+ @board.set=[[0,0,0,0,0,-2,-5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],[1,2]]
298
+ @dice.set=[1,5]
299
+ valid=@board.valid_moves(Board::WHITE, @dice)
300
+ assert_equal [],valid.diff([[-1,23],[-1,19]])
301
+
302
+ #test moving out of range
303
+ @board.set=[[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1],[0,0]]
304
+ @dice.set=[1,5]
305
+ valid=@board.valid_moves(Board::WHITE, @dice)
306
+ assert_equal [],valid.diff([[0,-1]])
307
+ valid=@board.valid_moves(Board::BLACK, @dice)
308
+ assert_equal [],valid.diff([[23,-1]])
309
+
310
+ @board.set=[[1,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,-1],[0,0]]
311
+ @dice.set=[1,5]
312
+ valid=@board.valid_moves(Board::WHITE, @dice)
313
+ assert_equal [],valid.diff([[21,16],[21,20]])
314
+ valid=@board.valid_moves(Board::BLACK, @dice)
315
+ assert_equal [],valid.diff([[3,4],[3,8]])
316
+ end
317
+
318
+ def test_valid_moves_bearing_off
319
+
320
+ @board.set=[[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1],[0,0]]
321
+ assert_equal true,@board.bearing_off?(Board::WHITE)
322
+ assert_equal true,@board.bearing_off?(Board::BLACK)
323
+ @dice.set=[1,2]
324
+ valid=@board.valid_moves(Board::WHITE, @dice)
325
+ assert_equal [],valid.diff([[0,-1]])
326
+
327
+ @dice.set=[3,2]
328
+ valid=@board.valid_moves(Board::BLACK, @dice)
329
+ assert_equal [],valid.diff([[22,-1]])
330
+
331
+ #test can't bear off with higher slot taken
332
+ @board.set=[[1,1,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1],[0,0]]
333
+ @dice.set=[3,3]
334
+ valid=@board.valid_moves(Board::WHITE, @dice)
335
+ assert_equal [],valid.diff([[4,1]])
336
+
337
+ #test bear off with dice higher than highest slot
338
+ @dice.set=[6,6]
339
+ valid=@board.valid_moves(Board::WHITE, @dice)
340
+ assert_equal [],valid.diff([[4,-1]])
341
+
342
+ @board.set=[[1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1],[0,0]]
343
+ @dice.set=[6,6]
344
+ valid=@board.valid_moves(Board::WHITE, @dice)
345
+ assert_equal [],valid.diff([[1,-1]])
346
+ valid=@board.valid_moves(Board::BLACK, @dice)
347
+ assert_equal [],valid.diff([[22,-1]])
348
+ end
349
+
350
+ def test_random_sample_moves
351
+ r=rand(1000)
352
+ srand r
353
+
354
+ @board.state.shuffle!
355
+ c=rand(10)>5 ? Board::WHITE : Board::BLACK
356
+ valid=@board.valid_moves c,@dice
357
+ valid.each do |move|
358
+ begin
359
+ @board.validate_move(move,c)
360
+ rescue Exception => e
361
+ add_failure("Invalid move found. rand seed=" << r.to_s << ", error was " << e.message)
362
+ end
363
+ end
364
+ end
365
+
366
+
367
+ def test_winner
368
+
369
+ assert_nil @board.winner
370
+ @board.set=[[1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0]]
371
+ assert_equal Board::BLACK,@board.winner
372
+ @board.set=[[-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0]]
373
+ assert_equal Board::WHITE,@board.winner
374
+ end
375
+
376
+ def test_move
377
+
378
+ b2=Board.new
379
+ assert_equal([[-2, 0, 0, 0, 0, 5, 0, 3, 0, 0, 0, -5, 5, 0, 0, 0, -3, 0, -5, 0, 0, 0, 1, 1],
380
+ [0, 0]],@board.move([23,22],Board::WHITE))
381
+ assert_equal b2.state,@board.state
382
+ end
383
+
384
+ end
@@ -0,0 +1,91 @@
1
+ #
2
+ # To change this template, choose Tools | Templates
3
+ # and open the template in the editor.
4
+
5
+
6
+ $:.unshift File.join(File.dirname(__FILE__),'..','lib')
7
+
8
+ require 'test/unit'
9
+ require 'neuro_gammon/board_tools'
10
+ require 'neuro_gammon/board' #FIXME: cyclic dependency on board, caused by Board::<colour> - this constant needs moving.
11
+
12
+ class TestBoardTools < Test::Unit::TestCase
13
+ include NeuroGammon
14
+ include NeuroGammon::BoardTools
15
+
16
+ def test_reverse_state
17
+ state=[[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1],[1,0]]
18
+ new_state=reverse_state state
19
+ assert_equal [[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,1]],new_state
20
+ assert_equal [[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1],[1,0]],state
21
+ new_state = reverse_state [[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-4,5],[3,2]]
22
+ assert_equal [[-5,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[2,3]],new_state
23
+ new_state = reverse_state [[-2,0,0,0,0,5,0,3,0,0,0,-5,5,0,0,0,-3,0,-5,0,0,0,0,2],[0,0]]
24
+ assert_equal [[-2,0,0,0,0,5,0,3,0,0,0,-5,5,0,0,0,-3,0,-5,0,0,0,0,2],[0,0]],new_state
25
+ end
26
+
27
+ def test_test_for_gammon
28
+ state=[[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1],[0,0]]
29
+ assert_equal false,test_for_gammon(state,Board::WHITE)
30
+ assert_equal false,test_for_gammon(state,Board::BLACK)
31
+
32
+ state=[[-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0]]
33
+ assert_equal true,test_for_gammon(state,Board::WHITE)
34
+ assert_equal false,test_for_gammon(state,Board::BLACK)
35
+
36
+ state=[[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],[0,0]]
37
+ assert_equal false,test_for_gammon(state,Board::WHITE)
38
+ assert_equal true,test_for_gammon(state,Board::BLACK)
39
+
40
+ state=[[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0]]
41
+ assert_equal false,test_for_gammon(state,Board::WHITE)
42
+ assert_equal false,test_for_gammon(state,Board::BLACK)
43
+
44
+ state=[[0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1],[0,0]]
45
+ assert_equal false,test_for_gammon(state,Board::WHITE)
46
+ assert_equal false,test_for_gammon(state,Board::BLACK)
47
+
48
+ state=[[-2,0,0,-2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0]]
49
+ assert_equal true,test_for_gammon(state,Board::WHITE)
50
+ assert_equal false,test_for_gammon(state,Board::BLACK)
51
+
52
+ state=[[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,5],[0,0]]
53
+ assert_equal false,test_for_gammon(state,Board::WHITE)
54
+ assert_equal true,test_for_gammon(state,Board::BLACK)
55
+
56
+ state=[[4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4],[0,0]]
57
+ assert_equal false,test_for_gammon(state,Board::WHITE)
58
+ assert_equal false,test_for_gammon(state,Board::BLACK)
59
+
60
+ state=[[-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,1]]
61
+ assert_equal true,test_for_gammon(state,Board::WHITE)
62
+ assert_equal false,test_for_gammon(state,Board::BLACK)
63
+
64
+ state=[[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],[0,1]]
65
+ assert_equal false,test_for_gammon(state,Board::WHITE)
66
+ assert_equal false,test_for_gammon(state,Board::BLACK)
67
+
68
+ state=[[-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[1,0]]
69
+ assert_equal false,test_for_gammon(state,Board::WHITE)
70
+ assert_equal false,test_for_gammon(state,Board::BLACK)
71
+
72
+ state=[[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],[1,0]]
73
+ assert_equal false,test_for_gammon(state,Board::WHITE)
74
+ assert_equal true,test_for_gammon(state,Board::BLACK)
75
+
76
+ state=[[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0]]
77
+ assert_equal false,test_for_gammon(state,Board::WHITE)
78
+ assert_equal false,test_for_gammon(state,Board::BLACK)
79
+
80
+ state=[[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,1]]
81
+ assert_equal true,test_for_gammon(state,Board::WHITE)
82
+ assert_equal false,test_for_gammon(state,Board::BLACK)
83
+
84
+ state=[[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[1,0]]
85
+ assert_equal false,test_for_gammon(state,Board::WHITE)
86
+ assert_equal true,test_for_gammon(state,Board::BLACK)
87
+
88
+
89
+
90
+ end
91
+ end