13 # A function that should only be called once.
25 print (($c1 == 11) ? "ok 1\n" : "not ok 1\n");
27 print (($c2 == 11) ? "ok 2\n" : "not ok 2\n");
28 print $FAIL ? "not ok 3\n" : "ok 3\n"; # Was it really memoized?
31 $f = do { my $COUNT = 0; sub { $FAIL++ if $COUNT++; 12 } };
35 print (($c1 == 12) ? "ok 4\n" : "not ok 4\n");
37 print (($c2 == 12) ? "ok 5\n" : "not ok 5\n");
38 print $FAIL ? "not ok 6\n" : "ok 6\n"; # Was it really memoized?
40 $f = do { my $COUNT = 0; sub { $FAIL++ if $COUNT++; 13 } };
41 $fm = memoize($f, INSTALL => 'another');
43 $c1 = &another(); # Was it really installed?
44 print (($c1 == 13) ? "ok 7\n" : "not ok 7\n");
46 print (($c2 == 13) ? "ok 8\n" : "not ok 8\n");
47 print $FAIL ? "not ok 9\n" : "ok 9\n"; # Was it really memoized?
48 $c3 = &$fm(); # Call memoized version through returned ref
49 print (($c3 == 13) ? "ok 10\n" : "not ok 10\n");
50 print $FAIL ? "not ok 11\n" : "ok 11\n"; # Was it really memoized?
51 $c4 = &$f(); # Call original version again
52 print (($c4 == 13) ? "ok 12\n" : "not ok 12\n");
53 print $FAIL ? "ok 13\n" : "not ok 13\n"; # Did we get the original?
55 print "# Fibonacci\n";
60 mt1($n-1) + mt2($n-2);
65 mt1($n-1) + mt2($n-2);
68 @f1 = map { mt1($_) } (0 .. 15);
69 @f2 = map { mt2($_) } (0 .. 15);
71 @f3 = map { mt1($_) } (0 .. 15);
72 @f4 = map { mt1($_) } (0 .. 15);
73 @arrays = (\@f1, \@f2, \@f3, \@f4);
75 for ($i=0; $i<3; $i++) {
76 for ($j=$i+1; $j<3; $j++) {
78 print ((@{$arrays[$i]} == @{$arrays[$j]}) ? "ok $n\n" : "not ok $n\n");
80 for ($k=0; $k < @{$arrays[$i]}; $k++) {
81 (print "not ok $n\n", next) if $arrays[$i][$k] != $arrays[$j][$k];
89 print "# Normalizers\n";
105 &memoize('f2', NORMALIZER => 'fake_normalize');
106 &memoize('f3', NORMALIZER => \&fake_normalize);
107 @f1r = map { f1($_) } (1 .. 10);
108 @f2r = map { f2($_) } (1 .. 10);
109 @f3r = map { f3($_) } (1 .. 10);
111 print (("@f1r" eq "1 2 3 4 5 6 7 8 9 10") ? "ok $n\n" : "not ok $n\n");
113 print (("@f2r" eq "1 1 1 1 1 1 1 1 1 1") ? "ok $n\n" : "not ok $n\n");
115 print (("@f3r" eq "1 1 1 1 1 1 1 1 1 1") ? "ok $n\n" : "not ok $n\n");
117 print "# INSTALL => undef option.\n";
121 my $um = memoize('u1', INSTALL => undef);
122 @umr = (&$um, &$um, &$um);
123 @u1r = (&u1, &u1, &u1 ); # Did *not* clobber &u1
125 print (("@umr" eq "1 1 1") ? "ok $n\n" : "not ok $n\n"); # Increment once
127 print (("@u1r" eq "2 3 4") ? "ok $n\n" : "not ok $n\n"); # Increment thrice
129 print ((defined &{"undef"}) ? "not ok $n\n" : "ok $n\n"); # Just in case
131 print "# $n tests in all.\n";