RC3: lib/constant.t #35
[p5sagit/p5-mst-13.2.git] / lib / Memoize / t / tie.t
1 #!/usr/bin/perl
2
3 use lib qw(. ..);
4 use Memoize 0.52 qw(memoize unmemoize);
5 use Fcntl;
6 eval {require Memoize::AnyDBM_File};
7 if ($@) {
8   print "1..0\n";
9   exit 0;
10 }
11
12
13
14 print "1..4\n";
15
16 sub i {
17   $_[0];
18 }
19
20 $ARG = 'Keith Bostic is a pinhead';
21
22 sub c119 { 119 }
23 sub c7 { 7 }
24 sub c43 { 43 }
25 sub c23 { 23 }
26 sub c5 { 5 }
27
28 sub n {
29   $_[0]+1;
30 }
31
32 if (eval {require File::Spec::Functions}) {
33   File::Spec::Functions->import('tmpdir', 'catfile');
34   $tmpdir = tmpdir();
35 } else {
36   *catfile = sub { join '/', @_ };
37   $tmpdir = $ENV{TMP} || $ENV{TMPDIR} || '/tmp';
38 }
39 $file = catfile($tmpdir, "md$$");
40 @files = ($file, "$file.db", "$file.dir", "$file.pag");
41 1 while unlink @files;
42
43
44 tryout('Memoize::AnyDBM_File', $file, 1);  # Test 1..4
45 # tryout('DB_File', $file, 1);  # Test 1..4
46 1 while unlink $file, "$file.dir", "$file.pag";
47
48 sub tryout {
49   my ($tiepack, $file, $testno) = @_;
50
51   tie my %cache => $tiepack, $file, O_RDWR | O_CREAT, 0666
52     or die $!;
53
54   memoize 'c5', 
55     SCALAR_CACHE => [HASH => \%cache],
56     LIST_CACHE => 'FAULT'
57     ;
58
59   my $t1 = c5($ARG);    
60   my $t2 = c5($ARG);    
61   print (($t1 == 5) ? "ok $testno\n" : "not ok $testno\n");
62   $testno++;
63   print (($t2 == 5) ? "ok $testno\n" : "not ok $testno\n");
64   unmemoize 'c5';
65   
66   # Now something tricky---we'll memoize c23 with the wrong table that
67   # has the 5 already cached.
68   memoize 'c23', 
69   SCALAR_CACHE => ['HASH', \%cache],
70   LIST_CACHE => 'FAULT'
71     ;
72   
73   my $t3 = c23($ARG);
74   my $t4 = c23($ARG);
75   $testno++;
76   print (($t3 == 5) ? "ok $testno\n" : "not ok $testno  #   Result $t3\n");
77   $testno++;
78   print (($t4 == 5) ? "ok $testno\n" : "not ok $testno  #   Result $t4\n");
79   unmemoize 'c23';
80 }
81
82
83   my @present = grep -e, @files;
84   if (@present && (@failed = grep { not unlink } @present)) {
85     warn "Can't unlink @failed!  ($!)";
86   }
87 }