Game-TextPatterns
view release on metacpan or search on metacpan
t/Game-TextPatterns.t view on Meta::CPAN
$f = $f->rebuild;
$f->flip_rows;
is($f->string, "#...\n###.\n", "flipped rows");
$f = $f->rebuild;
$f->flip_both;
is($f->string, "...#\n.###\n", "flipped rows and columns");
}
# flip_four, four_up
{
my $wide = Game::TextPatterns->new(pattern => <<"EOF" );
123
456
EOF
eq_or_diff($wide->clone->flip_four->pattern,
[ "321123", "654456", "654456", "321123" ]);
eq_or_diff($wide->clone->four_up('?', 1)->pattern,
[ "2512", "1445", "5441", "2152" ]);
eq_or_diff($wide->clone->four_up('x')->pattern,
[ "x36xxx", "x25123", "x14456", "65441x", "32152x", "xxx63x" ]);
# or with reduction
eq_or_diff($wide->clone->flip_four(1)->pattern, [ "32123", "65456", "32123" ]);
eq_or_diff(
$wide->clone->flip_four(1, 0)->pattern,
[ "32123", "65456", "65456", "32123" ]
);
eq_or_diff($wide->clone->flip_four(0, 1)->pattern,
[ "321123", "654456", "321123" ]);
my $tall = Game::TextPatterns->new(pattern => <<"EOF" );
12
34
56
EOF
eq_or_diff($tall->clone->flip_four->pattern,
[ "2112", "4334", "6556", "6556", "4334", "2112" ]);
eq_or_diff($tall->clone->four_up('?', 1)->pattern,
[ "4634", "3556", "6553", "4364" ]);
eq_or_diff($tall->clone->four_up('x')->pattern,
[ "xxx12x", "24634x", "13556x", "x65531", "x43642", "x21xxx" ]);
}
# mask
{
my $p = Game::TextPatterns->new(pattern => <<'EOF' );
xxx
x.x
xxx
EOF
my $r = Game::TextPatterns->new(pattern => <<'EOF' );
qqq
q?q
qqq
EOF
$p->mask('.', $r);
eq_or_diff($p->pattern, [ "xxx", "x?x", "xxx" ]);
}
# overlay
{
my $field = Game::TextPatterns->new(pattern => "a123\nb456\nc789");
my $piece = Game::TextPatterns->new(pattern => "#??\n###");
dies_ok(sub { $field->overlay([ 99, 99 ], $piece) }, 'out of bounds');
$field->overlay([ 0, 0 ], $piece, '?');
eq_or_diff($field->pattern, [ "#123", "###6", "c789" ]);
$field = $field->rebuild;
$field->overlay([ 1, 1 ], $piece, '?');
eq_or_diff($field->pattern, [ "a123", "b#56", "c###" ]);
$field = $field->rebuild;
$field->overlay([ 2, 2 ], $piece, '?');
eq_or_diff($field->pattern, [ "a123", "b456", "c7#9" ]);
}
# rotate
{
my $r = Game::TextPatterns->new(pattern => <<'EOF' );
###.
#...
EOF
$r->rotate(0);
is($r->string, "###.\n#...\n");
$r->rotate(4);
is($r->string, "###.\n#...\n");
$r->rotate(1); # 90 - up and to the left
eq_or_diff($r->pattern, [ "..", "#.", "#.", "##" ]);
$r = $r->rebuild;
$r->rotate(2); # 180 or the same as flip_both
is($r->string, "...#\n.###\n");
$r = $r->rebuild;
$r->rotate(3); # 270 - down and to the right
eq_or_diff($r->pattern, [ "##", ".#", ".#", ".." ]);
my $bigger = Game::TextPatterns->new(pattern => <<'EOF' );
###.##..#...
##..#..##..#
#..##.###.##
EOF
$bigger->rotate(1);
eq_or_diff(
$bigger->pattern,
[ ".##", "..#", "...", "###", ".##", "..#",
"#..", "###", "..#", "#..", "##.", "###"
]
);
$bigger = $bigger->rebuild;
$bigger->rotate(3);
eq_or_diff(
$bigger->pattern,
[ "###", ".##", "..#", "#..", "###", "..#",
"#..", "##.", "###", "...", "#..", "##."
]
);
}
# white_noise
{
srand 42;
my $x = Game::TextPatterns->new(pattern => <<'EOF' );
.....
.....
EOF
$x->white_noise('x', .5);
eq_or_diff($x->pattern, [ ".xxxx", "....x" ]);
$x->white_noise('x', 1);
( run in 0.788 second using v1.01-cache-2.11-cpan-e1769b4cff6 )