The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use Test::More 'no_plan';

use strict;
use warnings;

use_ok('Games::Goban::Board');

{ # skip_i == 0
  my $board = Games::Goban::Board->new(size => 19);

  isa_ok($board, 'Games::Goban::Board');
  isa_ok($board, 'Games::Board::Grid');
  isa_ok($board, 'Games::Board');

  is( $board->index2id([ 0, 0]), 'aa', "0,0 is 'aa'");
  is( $board->index2id([ 5, 9]), 'fj', "5,9 is 'fj'");
  is( $board->index2id([18,18]), 'ss', "18,18 is 'ss'");

  ok( eq_array( $board->id2index('aa'), [ 0, 0] ), "space 'aa' is 0,0");
  ok( eq_array( $board->id2index('fj'), [ 5, 9] ), "space 'fj' is 5,9");
  ok( eq_array( $board->id2index('ss'), [18,18] ), "space 'ss' is 18,18");

  my $stone = $board->add_piece( color => 'b', move  => 2 );

  isa_ok($stone, 'Games::Goban::Piece');
  is($stone->color,  'b', "correct color");
  is($stone->colour, 'b', "correct colour");
  is($stone->moved_on, 2, "moved on second move");
  is($stone->position, undef, "not yet on board");

  $stone->move(to => $board->space('cd'));

  is($stone->position, 'cd', "moved to position cd");
}

{ # skip_i == 1
  my $board = Games::Goban::Board->new(size => 19, skip_i => 1);

  isa_ok($board, 'Games::Goban::Board');
  isa_ok($board, 'Games::Board::Grid');
  isa_ok($board, 'Games::Board');

  is( $board->index2id([ 0, 0]), 'aa', "0,0 is 'aa'");
  is( $board->index2id([ 5, 9]), 'fk', "5,9 is 'fk'");
  is( $board->index2id([18,18]), 'tt', "18,18 is 'tt'");

  ok( eq_array( $board->id2index('aa'), [ 0, 0] ), "space 'aa' is 0,0");
  ok( eq_array( $board->id2index('fk'), [ 5, 9] ), "space 'fk' is 5,9");
  ok( eq_array( $board->id2index('ss'), [17,17] ), "space 'ss' is 17,17");
  ok( eq_array( $board->id2index('tt'), [18,18] ), "space 'tt' is 18,18");

  my $stone = $board->add_piece( color => 'b', move  => 2 );

  isa_ok($stone, 'Games::Goban::Piece');
  is($stone->color,  'b', "correct color");
  is($stone->colour, 'b', "correct colour");
  is($stone->moved_on, 2, "moved on second move");
  is($stone->position, undef, "not yet on board");

  $stone->move(to => $board->space('cd'));

  is($stone->position, 'cd', "moved to position cd");
}