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 )