Commit | Line | Data |
a0cb3900 |
1 | #!/usr/bin/perl |
2 | |
3 | use lib '..'; |
4 | use Memoize; |
5 | |
6 | my $n = 0; |
7 | |
8 | |
9 | print "1..21\n"; |
10 | |
11 | ++$n; print "ok $n\n"; |
12 | |
13 | $RETURN = 1; |
14 | |
15 | %CALLS = (); |
16 | sub call { |
17 | # print "CALL $_[0] => $RETURN\n"; |
18 | ++$CALLS{$_[0]}; |
19 | $RETURN; |
20 | } |
21 | |
22 | memoize 'call', |
23 | SCALAR_CACHE => ['TIE', 'Memoize::Expire', NUM_USES => 2], |
24 | LIST_CACHE => 'FAULT'; |
25 | |
26 | # $Memoize::Expire::DEBUG = 1; |
27 | ++$n; print "ok $n\n"; |
28 | |
29 | # 3--6 |
30 | for (0,1,2,3) { |
31 | print "not " unless call($_) == 1; |
32 | ++$n; print "ok $n\n"; |
33 | } |
34 | |
35 | # 7--10 |
36 | for (keys %CALLS) { |
37 | print "not " unless $CALLS{$_} == (1,1,1,1)[$_]; |
38 | ++$n; print "ok $n\n"; |
39 | } |
40 | |
41 | # 11--13 |
42 | $RETURN = 2; |
43 | ++$n; print ((call(1) == 1 ? '' : 'not '), "ok $n\n"); # 1 expires |
44 | ++$n; print ((call(1) == 2 ? '' : 'not '), "ok $n\n"); # 1 gets new val |
45 | ++$n; print ((call(2) == 1 ? '' : 'not '), "ok $n\n"); # 2 expires |
46 | |
47 | # 14--17 |
48 | $RETURN = 3; |
49 | for (0,1,2,3) { |
50 | # 0 expires, 1 expires, 2 gets new val, 3 expires |
51 | print "not " unless call($_) == (1,2,3,1)[$_]; |
52 | ++$n; print "ok $n\n"; |
53 | } |
54 | |
55 | for (0,1,2,3) { |
56 | print "not " unless $CALLS{$_} == (1,2,2,1)[$_]; |
57 | ++$n; print "ok $n\n"; |
58 | } |
59 | |
60 | |