#!/usr/bin/perl BEGIN { chdir 't' if -d 't'; @INC = '../lib'; } use Memoize; print "1..11\n"; sub timelist { return (time) x $_[0]; } memoize('timelist'); @t1 = &timelist(1); sleep 2; @u1 = &timelist(1); print ((("@t1" eq "@u1") ? '' : 'not '), "ok 1\n"); @t7 = &timelist(7); print (((@t7 == 7) ? '' : 'not '), "ok 2\n"); $BAD = 0; for ($i = 1; $i < 7; $i++) { $BAD++ unless $t7[$i-1] == $t7[$i]; } print (($BAD ? 'not ' : ''), "ok 3\n"); sleep 2; @u7 = &timelist(7); print (((@u7 == 7) ? '' : 'not '), "ok 4\n"); $BAD = 0; for ($i = 1; $i < 7; $i++) { $BAD++ unless $u7[$i-1] == $u7[$i]; } print (($BAD ? 'not ' : ''), "ok 5\n"); # Properly memoized? print ((("@t7" eq "@u7") ? '' : 'not '), "ok 6\n"); sub con { return wantarray() } # Same arguments yield different results in different contexts? memoize('con'); $s = con(1); @a = con(1); print ((($s == $a[0]) ? 'not ' : ''), "ok 7\n"); # Context propagated correctly? print ((($s eq '') ? '' : 'not '), "ok 8\n"); # Scalar context print ((("@a" eq '1' && @a == 1) ? '' : 'not '), "ok 9\n"); # List context # Context propagated correctly to normalizer? sub n { my $arg = shift; my $test = shift; if (wantarray) { print ((($arg eq ARRAY) ? '' : 'not '), "ok $test\n"); # List context } else { print ((($arg eq SCALAR) ? '' : 'not '), "ok $test\n"); # Scalar context } } sub f { 1 } memoize('f', NORMALIZER => 'n'); $s = f('SCALAR', 10); # Test 10 @a = f('ARRAY' , 11); # Test 11