Game-TileMap-Pathfinding
view release on metacpan or search on metacpan
t/author-leaks.t view on Meta::CPAN
################################################################################
my $map_str = <<MAP;
____
_##_
_##_
____
MAP
Test::MemoryGrowth::no_growth {
my $legend = Game::TileMap->new_legend;
$legend
->add_wall('#')
->add_void('.')
->add_terrain('_' => 'pavement')
;
my $map = Game::TileMap->new(
legend => $legend,
map => $map_str
);
my $pf = Game::TileMap::Pathfinding->new(map => $map);
my $path;
$path = $pf->find_path(0, 0, 4, 4);
$path = $pf->find_path(4, 4, 0, 0);
$path = $pf->find_path(2, 2, 3, 3);
use Test2::V0;
use Game::TileMap::Pathfinding;
use Game::TileMap;
################################################################################
# This tests whether interface works and very basic paths are found
################################################################################
my $legend = Game::TileMap->new_legend;
$legend
->add_wall('#')
->add_void('.')
->add_terrain('_' => 'pavement')
;
my $map_str = <<MAP;
____
____
____
____
MAP
my $map = Game::TileMap->new(
legend => $legend,
map => $map_str
);
subtest 'should have a working interface' => sub {
my $pf = Game::TileMap::Pathfinding->new(map => $map);
my $path = $pf->find_path(0, 3, 1, 2);
isa_ok $path, 'Game::TileMap::Pathfinding::Result';
is $path->step_count, 2, 'step count ok';
is [$path->steps], [
t/diagonal_movement.t view on Meta::CPAN
use Test2::V0;
use Game::TileMap::Pathfinding;
use Game::TileMap;
################################################################################
# This tests whether different paths are taken when diagonal movement is
# enabled.
################################################################################
my $legend = Game::TileMap->new_legend;
$legend
->add_wall('#')
->add_void('.')
->add_terrain('_' => 'pavement')
->add_object(tests => '1' => 'first test')
->add_object(tests => '2' => 'second test')
->add_object(tests => '3' => 'third test')
->add_object(tests => '4' => 'fourth test')
;
my $map_str = <<MAP;
t/diagonal_movement.t view on Meta::CPAN
_1______
________
4_2_____
_##_____
_##___1_
2___####
3______4
MAP
my $map = Game::TileMap->new(
legend => $legend,
map => $map_str
);
subtest 'should prefer moving diagonally rather than orthogonally' => sub {
my $pf = Game::TileMap::Pathfinding->new(map => $map, diagonal_movement => !!1);
my $path = $pf->find_path(1, 6, 6, 2);
ok defined $path, 'path found ok';
is [@{$path}], [
2, 5,
t/pathfinding.t view on Meta::CPAN
use Test2::V0;
use Game::TileMap::Pathfinding;
use Game::TileMap;
################################################################################
# This tests whether more complex paths are found, and if the shortest path is
# always taken
################################################################################
my $legend = Game::TileMap->new_legend;
$legend
->add_wall('#')
->add_void('.')
->add_terrain('_' => 'pavement')
->add_object(tests => '1' => 'first test')
->add_object(tests => '2' => 'second test')
->add_object(tests => '3' => 'third test')
;
my $map_str = <<MAP;
#_#####3
2_______
#_#####_
#___.2__
#___###_
##______
##_#####
1#1____3
MAP
my $map = Game::TileMap->new(
legend => $legend,
map => $map_str
);
subtest 'should return undef if the destination is unreachable' => sub {
my $pf = Game::TileMap::Pathfinding->new(map => $map);
my $path = $pf->find_path(0, 0, 2, 0);
ok !defined $path, 'path not found ok';
};
( run in 1.620 second using v1.01-cache-2.11-cpan-364913b4093 )