neuro_gammon 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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