AI-Pathfinding-OptimizeMultiple
view release on metacpan or search on metacpan
t/optimize-multiple-full-test.t view on Meta::CPAN
#!/usr/bin/perl
use strict;
use warnings;
use Carp ();
use Test::More tests => 4;
use Test::Differences qw(eq_or_diff);
use PDL (qw/ pdl /);
use AI::Pathfinding::OptimizeMultiple ();
# TEST:$c=0;
sub test_based_on_data
{
local $Test::Builder::Level = $Test::Builder::Level + 1;
my ( $scans_aref, $quotas_aref, $want_results, $stats_factors, $blurb ) =
@_;
my $results_aref = [];
my $selected_scans = [
map {
my $id = $_->{name};
AI::Pathfinding::OptimizeMultiple::Scan->new(
id => $id,
cmd_line => "-l $id",
)
} @{$scans_aref},
];
my %num_boards = ( map { scalar( @{ $_->{data} } ) => 1 } @$scans_aref );
my @nums = keys(%num_boards);
if ( @nums != 1 )
{
Carp::confess("num is not 1.");
}
my $obj = AI::Pathfinding::OptimizeMultiple->new(
{
scans => [ map { +{ name => $_->{name} } } @$scans_aref, ],
num_boards => $nums[0],
scans_iters_pdls =>
{ map { $_->{name} => pdl( $_->{data} ), } @$scans_aref, },
quotas => $quotas_aref,
selected_scans => $selected_scans,
optimize_for => "speed",
( $stats_factors ? ( stats_factors => $stats_factors ) : () ),
}
);
$obj->calc_meta_scan();
my @have = (
map {
+{
name => $scans_aref->[ $_->scan_idx ]->{name},
iters => $_->iters,
}
} @{ $obj->chosen_scans() }
);
# TEST:$c++;
return eq_or_diff( \@have, $want_results, "$blurb - (eq_or_diff)", );
( run in 1.065 second using v1.01-cache-2.11-cpan-2ed5026b665 )