AI-Evolve-Befunge
view release on metacpan or search on metacpan
t/08physics_othello.t view on Meta::CPAN
#!/usr/bin/perl
use strict;
use warnings;
use Test::More;
use Test::Exception;
use AI::Evolve::Befunge::Util qw(v);
use aliased 'AI::Evolve::Befunge::Board' => 'Board';
use aliased 'AI::Evolve::Befunge::Physics' => 'Physics';
my $num_tests;
BEGIN { $num_tests = 0; };
# basic game
# try to create an othello object
my $othello = Physics->new('othello');
ok(ref($othello) eq "AI::Evolve::Befunge::Physics::othello", "create an othello object");
BEGIN { $num_tests += 1 };
# setup_board
my $board = Board->new(Size => 8, Dimensions => 2);
$othello->setup_board($board);
is($board->as_string, <<EOF, 'setup_board initial values');
........
........
........
...xo...
...ox...
........
........
........
EOF
BEGIN { $num_tests += 1 };
# valid_move
for(my $y = 0; $y < 2; $y++) {
for(my $x = 0; $x < 8; $x++) {
for(my $player = 1; $player < 3; $player++) {
ok(!$othello->valid_move($board, $player, v($x, $y)), "any out-of-range move is invalid");
ok(!$othello->valid_move($board, $player, v($y, $x)), "any out-of-range move is invalid");
ok(!$othello->valid_move($board, $player, v(7-$x, 7-$y)), "any out-of-range move is invalid");
ok(!$othello->valid_move($board, $player, v(7-$y, 7-$x)), "any out-of-range move is invalid");
}
}
}
BEGIN { $num_tests += 128 };
for(my $player = 1; $player < 3; $player++) {
ok(!$othello->valid_move($board, $player, v(2, 2)), "non-jump moves are invalid");
ok(!$othello->valid_move($board, $player, v(2, 5)), "non-jump moves are invalid");
ok(!$othello->valid_move($board, $player, v(5, 2)), "non-jump moves are invalid");
ok(!$othello->valid_move($board, $player, v(5, 5)), "non-jump moves are invalid");
ok(!$othello->valid_move($board, $player, v(3, 3)), "already taken moves are invalid");
ok(!$othello->valid_move($board, $player, v(3, 4)), "already taken moves are invalid");
ok(!$othello->valid_move($board, $player, v(4, 3)), "already taken moves are invalid");
ok(!$othello->valid_move($board, $player, v(4, 4)), "already taken moves are invalid");
}
is($othello->try_move_vector($board,1,v(3,3),v(-1,0)), 0, 'already taken moves are invalid');
ok($othello->valid_move($board, 1, v(4, 2)), "valid move");
ok($othello->valid_move($board, 1, v(5, 3)), "valid move");
ok($othello->valid_move($board, 1, v(2, 4)), "valid move");
ok($othello->valid_move($board, 1, v(3, 5)), "valid move");
ok($othello->valid_move($board, 2, v(3, 2)), "valid move");
ok($othello->valid_move($board, 2, v(5, 4)), "valid move");
( run in 0.864 second using v1.01-cache-2.11-cpan-437f7b0c052 )