You need to run the following little test to catch any errors with negative x and y values before firing off any benchmarks:
# tgol.t - Simple blinker test of Conway Game of Life Organism class
use strict;
use warnings;
use Organism;
use Test::More;
my $nblinks = 5;
my $ntests = ( $nblinks + 1 ) * 3;
plan tests => $ntests;
sub test_one {
my $org = shift; # Organism handle
my $desc = shift; # Test description
my $expected = shift; # Array ref of (sorted) expected cells
my $nexpected = @{$expected};
my $ncells = $org->count();
my @cells = $org->get_live_cells();
cmp_ok( $ncells, '==', $nexpected, "$desc cell count ($ncells)" );
cmp_ok( scalar(@cells), '==', $nexpected, "$desc cell array count"
+);
is_deeply( \@cells, $expected, "$desc cell array" );
}
# Blinker pattern
my @blinker1 = (
[ -101, -100 ], [ -100, -100 ], [ -99, -100 ],
[ -101, 100 ], [ -100, 100 ], [ -99, 100 ],
[ -1, 0 ], [ 0, 0 ], [ 1, 0 ],
[ 99, -100 ], [ 100, -100 ], [ 101, -100 ],
[ 99, 100 ], [ 100, 100 ], [ 101, 100 ],
);
my @blinker2 = (
[ -100, -99 ], [ -100, -100 ], [ -100, -101 ],
[ -100, 99 ], [ -100, 100 ], [ -100, 101 ],
[ 0, -1 ], [ 0, 0 ], [ 0, 1 ],
[ 100, -99 ], [ 100, -100 ], [ 100, -101 ],
[ 100, 99 ], [ 100, 100 ], [ 100, 101 ],
);
my @sblinker1 = sort { $a->[0] <=> $b->[0] || $a->[1] <=> $b->[1] } @b
+linker1;
my @sblinker2 = sort { $a->[0] <=> $b->[0] || $a->[1] <=> $b->[1] } @b
+linker2;
# Initialization
my $org = Organism->new();
$org->insert_cells(@blinker1);
test_one( $org, "initial", \@sblinker1 );
# Pattern should just blink back and forth
for my $i ( 1 .. $nblinks ) {
$org->tick();
test_one( $org, "blinker $i", $i % 2 ? \@sblinker2 : \@sblinker1 );
}
with the command line:
prove tgol.t
Unfortunately, your latest effort fails this test on my machine as shown below:
# Failed test 'initial cell count (11)'
# at tgol.t line 17.
# got: 11
# expected: 15
# Failed test 'initial cell array count'
# at tgol.t line 18.
# got: 11
# expected: 15
# Failed test 'initial cell array'
# at tgol.t line 19.
# Structures begin differing at:
# $got->[0][0] = '-281474976710655'
# $expected->[0][0] = '-101'
# Failed test 'blinker 1 cell count (10)'
# at tgol.t line 17.
# got: 10
# expected: 15
# Failed test 'blinker 1 cell array count'
# at tgol.t line 18.
# got: 10
# expected: 15
# Failed test 'blinker 1 cell array'
# at tgol.t line 19.
# Structures begin differing at:
# $got->[0][0] = '-281474976710655'
# $expected->[0][0] = '-100'
# Failed test 'blinker 2 cell count (11)'
# at tgol.t line 17.
# got: 11
# expected: 15
# Failed test 'blinker 2 cell array count'
# at tgol.t line 18.
# got: 11
# expected: 15
# Failed test 'blinker 2 cell array'
# at tgol.t line 19.
# Structures begin differing at:
# $got->[0][0] = '-281474976710655'
# $expected->[0][0] = '-101'
# Failed test 'blinker 3 cell count (9)'
# at tgol.t line 17.
# got: 9
# expected: 15
# Failed test 'blinker 3 cell array count'
# at tgol.t line 18.
# got: 9
# expected: 15
# Failed test 'blinker 3 cell array'
# at tgol.t line 19.
# Structures begin differing at:
# $got->[0][1] = '99'
# $expected->[0][1] = '-101'
# Failed test 'blinker 4 cell count (9)'
# at tgol.t line 17.
# got: 9
# expected: 15
# Failed test 'blinker 4 cell array count'
# at tgol.t line 18.
# got: 9
# expected: 15
# Failed test 'blinker 4 cell array'
# at tgol.t line 19.
# Structures begin differing at:
# $got->[0][1] = '100'
# $expected->[0][1] = '-100'
# Failed test 'blinker 5 cell count (8)'
# at tgol.t line 17.
# got: 8
# expected: 15
# Failed test 'blinker 5 cell array count'
# at tgol.t line 18.
# got: 8
# expected: 15
# Failed test 'blinker 5 cell array'
# at tgol.t line 19.
# Structures begin differing at:
# $got->[0][1] = '99'
# $expected->[0][1] = '-101'
# Looks like you failed 18 tests of 18.
I left this tgol.t test program out of the root node because it was already way too long ... then forgot about it.
Sorry 'bout that. Update: I've now remedied my oversight by adding the tgol.t test program above to the root node.
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.