use strict; use warnings; use Test::More tests => 1 + 6 + 10*4 + 10*4 + 12; use_ok('Math::Sequence'); my $cached = Math::Sequence->new('x+1', 0); isa_ok($cached, 'Math::Sequence'); $cached = Math::Sequence->new('x+1', 0, 'x'); isa_ok($cached, 'Math::Sequence'); my $ncache = Math::Sequence->new('y+1', 0, 'y'); isa_ok($ncache, 'Math::Sequence'); $ncache = Math::Sequence->new('y+1', 0); isa_ok($ncache, 'Math::Sequence'); ok($cached->cached() == 1, 'sequence cached by default'); $ncache->cached(0); ok($ncache->cached() == 0, 'sequence not cached after change'); foreach (0..9) { ok($cached->current_index() == $_, 'Testing current_index() of cached object.'); ok($ncache->current_index() == $_, 'Testing current_index() of uncached object.'); ok($cached->next()->value() == $_, 'Testing next() of cached object.'); ok($ncache->next()->value() == $_, 'Testing next() of uncached object.'); } $Math::Sequence::warnings = $Math::Sequence::warnings = 0; foreach (reverse 0..9) { ok($cached->back()->value() == $_, 'Testing back() of cached object.'); ok($ncache->back()->value() == $_, 'Testing back() of uncached object.'); ok($cached->current_index() == $_, 'Testing current_index() of cached object after back().'); ok($ncache->current_index() == $_, 'Testing current_index() of uncached object after back().'); } ok($cached->current_index(8) == 8, 'Testing setting current_index() on cached object.'); ok($ncache->current_index(8) == 8, 'Testing setting current_index() on cached object.'); ok($cached->at_index(5)->value() == 5, 'Testing at_index() (below current index) on cached object.'); ok($ncache->at_index(5)->value() == 5, 'Testing at_index() (below current index) on uncached object.'); ok($cached->at_index(9)->value() == 9, 'Testing at_index() (above current index but cached) on cached object.'); ok($ncache->at_index(9)->value() == 9, 'Testing at_index() (above current index) on uncached object.'); ok($cached->at_index(12)->value() == 12, 'Testing at_index() (above current index) on cached object.'); ok($ncache->at_index(12)->value() == 12, 'Testing at_index() (above current index) on uncached object.'); ok(!defined($cached->at_index(-1)), 'Testing at_index() with invalid index on cached object.'); ok(!defined($ncache->at_index(-1)), 'Testing at_index() with invalid index on uncached object.'); ok(!defined($cached->current_index(-1)), 'Testing current_index() with invalid index on cached object.'); ok(!defined($ncache->current_index(-1)), 'Testing current_index() with invalid index on uncached object.');