AUTHORS updates.
[p5sagit/p5-mst-13.2.git] / lib / Memoize / t / normalize.t
1 #!/usr/bin/perl
2
3 BEGIN {
4     chdir 't' if -d 't';
5     @INC = '../lib';
6 }
7 use Memoize;
8
9 print "1..7\n";
10
11
12 sub n_null { '' }
13
14 { my $I = 0;
15   sub n_diff { $I++ }
16 }
17
18 { my $I = 0;
19   sub a1 { $I++; "$_[0]-$I"  }
20   my $J = 0;
21   sub a2 { $J++; "$_[0]-$J"  }
22   my $K = 0;
23   sub a3 { $K++; "$_[0]-$K"  }
24 }
25
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');
29
30 @ARGS = (1, 2, 3, 2, 1);
31
32 @res  = map { &$a_normal($_) } @ARGS;
33 print ((("@res" eq "1-1 2-2 3-3 2-2 1-1") ? '' : 'not '), "ok 1\n");
34
35 @res  = map { &$a_nomemo($_) } @ARGS;
36 print ((("@res" eq "1-1 2-2 3-3 2-4 1-5") ? '' : 'not '), "ok 2\n");
37
38 @res = map { &$a_allmemo($_) } @ARGS;
39 print ((("@res" eq "1-1 1-1 1-1 1-1 1-1") ? '' : 'not '), "ok 3\n");
40
41                 
42        
43 # Test fully-qualified name and installation
44 $COUNT = 0;
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");
51
52 # Test normalization with reference to normalizer function
53 $COUNT = 0;
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");
59
60