for beter make distclean (was Re: [PATCH] Re: [ID 20020305.026] Not OK: perl v5.7...
[p5sagit/p5-mst-13.2.git] / lib / Memoize / t / normalize.t
CommitLineData
a0cb3900 1#!/usr/bin/perl
2
5317c87c 3BEGIN {
4 chdir 't' if -d 't';
5 @INC = '../lib';
6}
a0cb3900 7use Memoize;
8
9print "1..7\n";
10
11
12sub 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
26my $a_normal = memoize('a1', INSTALL => undef);
27my $a_nomemo = memoize('a2', INSTALL => undef, NORMALIZER => 'n_diff');
28my $a_allmemo = memoize('a3', INSTALL => undef, NORMALIZER => 'n_null');
29
30@ARGS = (1, 2, 3, 2, 1);
31
32@res = map { &$a_normal($_) } @ARGS;
33print ((("@res" eq "1-1 2-2 3-3 2-2 1-1") ? '' : 'not '), "ok 1\n");
34
35@res = map { &$a_nomemo($_) } @ARGS;
36print ((("@res" eq "1-1 2-2 3-3 2-4 1-5") ? '' : 'not '), "ok 2\n");
37
38@res = map { &$a_allmemo($_) } @ARGS;
39print ((("@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;
45sub parity { $COUNT++; $_[0] % 2 }
46sub parnorm { $_[0] % 2 }
47memoize('parity', NORMALIZER => 'main::parnorm');
48@res = map { &parity($_) } @ARGS;
49print ((("@res" eq "1 0 1 0 1") ? '' : 'not '), "ok 4\n");
50print (( ($COUNT == 2) ? '' : 'not '), "ok 5\n");
51
52# Test normalization with reference to normalizer function
53$COUNT = 0;
54sub par2 { $COUNT++; $_[0] % 2 }
55memoize('par2', NORMALIZER => \&parnorm);
56@res = map { &par2($_) } @ARGS;
57print ((("@res" eq "1 0 1 0 1") ? '' : 'not '), "ok 6\n");
58print (( ($COUNT == 2) ? '' : 'not '), "ok 7\n");
59
60