This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
INADDR_ANY INADDR_BROADCAST INADDR_LOOPBACK INADDR_NONE
[perl5.git] / t / lib / st-tieditems.t
1 #!./perl
2
3 # $Id: tied_items.t,v 1.0 2000/09/01 19:40:42 ram Exp $
4 #
5 #  Copyright (c) 1995-2000, Raphael Manfredi
6 #  
7 #  You may redistribute only under the same terms as Perl 5, as specified
8 #  in the README file that comes with the distribution.
9 #
10 # $Log: tied_items.t,v $
11 # Revision 1.0  2000/09/01 19:40:42  ram
12 # Baseline for first official release.
13 #
14
15 #
16 # Tests ref to items in tied hash/array structures.
17 #
18
19 sub BEGIN {
20     chdir('t') if -d 't';
21     @INC = '.'; 
22     push @INC, '../lib';
23     require Config; import Config;
24     if ($Config{'extensions'} !~ /\bStorable\b/) {
25         print "1..0 # Skip: Storable was not built\n";
26         exit 0;
27     }
28     require 'lib/st-dump.pl';
29 }
30
31 sub ok;
32 $^W = 0;
33
34 print "1..8\n";
35
36 use Storable qw(dclone);
37
38 $h_fetches = 0;
39
40 sub H::TIEHASH { bless \(my $x), "H" }
41 sub H::FETCH { $h_fetches++; $_[1] - 70 }
42
43 tie %h, "H";
44
45 $ref = \$h{77};
46 $ref2 = dclone $ref;
47
48 ok 1, $h_fetches == 0;
49 ok 2, $$ref2 eq $$ref;
50 ok 3, $$ref2 == 7;
51 ok 4, $h_fetches == 2;
52
53 $a_fetches = 0;
54
55 sub A::TIEARRAY { bless \(my $x), "A" }
56 sub A::FETCH { $a_fetches++; $_[1] - 70 }
57
58 tie @a, "A";
59
60 $ref = \$a[78];
61 $ref2 = dclone $ref;
62
63 ok 5, $a_fetches == 0;
64 ok 6, $$ref2 eq $$ref;
65 ok 7, $$ref2 == 8;
66 # I don't understand why it's 3 and not 2
67 ok 8, $a_fetches == 3;
68