19 sub a1 { $I++; "$_[0]-$I" }
21 sub a2 { $J++; "$_[0]-$J" }
23 sub a3 { $K++; "$_[0]-$K" }
26 my $a_normal = memoize('a1', INSTALL => undef);
27 my $a_nomemo = memoize('a2', INSTALL => undef, NORMALIZER => 'n_diff');
28 my $a_allmemo = memoize('a3', INSTALL => undef, NORMALIZER => 'n_null');
30 @ARGS = (1, 2, 3, 2, 1);
32 @res = map { &$a_normal($_) } @ARGS;
33 print ((("@res" eq "1-1 2-2 3-3 2-2 1-1") ? '' : 'not '), "ok 1\n");
35 @res = map { &$a_nomemo($_) } @ARGS;
36 print ((("@res" eq "1-1 2-2 3-3 2-4 1-5") ? '' : 'not '), "ok 2\n");
38 @res = map { &$a_allmemo($_) } @ARGS;
39 print ((("@res" eq "1-1 1-1 1-1 1-1 1-1") ? '' : 'not '), "ok 3\n");
43 # Test fully-qualified name and installation
45 sub parity { $COUNT++; $_[0] % 2 }
46 sub parnorm { $_[0] % 2 }
47 memoize('parity', NORMALIZER => 'main::parnorm');
48 @res = map { &parity($_) } @ARGS;
49 print ((("@res" eq "1 0 1 0 1") ? '' : 'not '), "ok 4\n");
50 print (( ($COUNT == 2) ? '' : 'not '), "ok 5\n");
52 # Test normalization with reference to normalizer function
54 sub par2 { $COUNT++; $_[0] % 2 }
55 memoize('par2', NORMALIZER => \&parnorm);
56 @res = map { &par2($_) } @ARGS;
57 print ((("@res" eq "1 0 1 0 1") ? '' : 'not '), "ok 6\n");
58 print (( ($COUNT == 2) ? '' : 'not '), "ok 7\n");