summaryrefslogtreecommitdiff
path: root/lib/Memoize/t/expire_module_n.t
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Memoize/t/expire_module_n.t')
-rw-r--r--lib/Memoize/t/expire_module_n.t60
1 files changed, 60 insertions, 0 deletions
diff --git a/lib/Memoize/t/expire_module_n.t b/lib/Memoize/t/expire_module_n.t
new file mode 100644
index 0000000000..b6b4521f7b
--- /dev/null
+++ b/lib/Memoize/t/expire_module_n.t
@@ -0,0 +1,60 @@
+#!/usr/bin/perl
+
+use lib '..';
+use Memoize;
+
+my $n = 0;
+
+
+print "1..21\n";
+
+++$n; print "ok $n\n";
+
+$RETURN = 1;
+
+%CALLS = ();
+sub call {
+# print "CALL $_[0] => $RETURN\n";
+ ++$CALLS{$_[0]};
+ $RETURN;
+}
+
+memoize 'call',
+ SCALAR_CACHE => ['TIE', 'Memoize::Expire', NUM_USES => 2],
+ LIST_CACHE => 'FAULT';
+
+# $Memoize::Expire::DEBUG = 1;
+++$n; print "ok $n\n";
+
+# 3--6
+for (0,1,2,3) {
+ print "not " unless call($_) == 1;
+ ++$n; print "ok $n\n";
+}
+
+# 7--10
+for (keys %CALLS) {
+ print "not " unless $CALLS{$_} == (1,1,1,1)[$_];
+ ++$n; print "ok $n\n";
+}
+
+# 11--13
+$RETURN = 2;
+++$n; print ((call(1) == 1 ? '' : 'not '), "ok $n\n"); # 1 expires
+++$n; print ((call(1) == 2 ? '' : 'not '), "ok $n\n"); # 1 gets new val
+++$n; print ((call(2) == 1 ? '' : 'not '), "ok $n\n"); # 2 expires
+
+# 14--17
+$RETURN = 3;
+for (0,1,2,3) {
+ # 0 expires, 1 expires, 2 gets new val, 3 expires
+ print "not " unless call($_) == (1,2,3,1)[$_];
+ ++$n; print "ok $n\n";
+}
+
+for (0,1,2,3) {
+ print "not " unless $CALLS{$_} == (1,2,2,1)[$_];
+ ++$n; print "ok $n\n";
+}
+
+