The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use Test::Simple tests => 18;

use Chess::Piece::Pawn;
use Chess::Game::MoveListEntry;

$pawn = Chess::Piece::Pawn->new("e2", "white", "White King's pawn");
$entry = Chess::Game::MoveListEntry->new(1, $pawn, "e2", "e4");
ok( $entry );
ok( $entry->get_move_num() == 1 );
ok( $entry->get_piece() eq $pawn );
ok( $entry->get_start_square() eq "e2" );
ok( $entry->get_dest_square() eq "e4" );
$clone = $entry->clone();
ok( $clone );
ok( $clone ne $entry );
$piece1 = $entry->get_piece();
$piece2 = $clone->get_piece();
$piece2->set_description("cloned");
ok( $piece1->get_description() ne $piece2->get_description() );
ok( !$entry->is_capture() );
ok( !$entry->is_short_castle() );
ok( !$entry->is_long_castle() );
ok( !$entry->is_en_passant() );
$entry = Chess::Game::MoveListEntry->new(1, $pawn, "e2", "e4", 0x0f);
ok( $entry->is_capture() );
ok( $entry->is_short_castle() );
ok( $entry->is_long_castle() );
ok( $entry->is_en_passant() );
$entry = Chess::Game::MoveListEntry->new(1, $pawn, "e7", "e8", 0x10);
ok( $entry->is_promotion() );
$entry->set_promoted_to("queen");
ok( $entry->get_promoted_to() eq "queen" );