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