Integrate perlio:
[p5sagit/p5-mst-13.2.git] / t / lib / st-overload.t
1 #!./perl
2
3 # $Id: overload.t,v 1.0.1.1 2001/02/17 12:27:22 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: overload.t,v $
11 # Revision 1.0.1.1  2001/02/17 12:27:22  ram
12 # patch8: added test for structures with indirect ref to overloaded
13 #
14 # Revision 1.0  2000/09/01 19:40:42  ram
15 # Baseline for first official release.
16 #
17
18 sub BEGIN {
19     chdir('t') if -d 't';
20     @INC = '.'; 
21     push @INC, '../lib';
22     require Config; import Config;
23     if ($Config{'extensions'} !~ /\bStorable\b/) {
24         print "1..0 # Skip: Storable was not built\n";
25         exit 0;
26     }
27     require 'lib/st-dump.pl';
28 }
29
30 sub ok;
31
32 use Storable qw(freeze thaw);
33
34 print "1..12\n";
35
36 package OVERLOADED;
37
38 use overload
39         '""' => sub { $_[0][0] };
40
41 package main;
42
43 $a = bless [77], OVERLOADED;
44
45 $b = thaw freeze $a;
46 ok 1, ref $b eq 'OVERLOADED';
47 ok 2, "$b" eq "77";
48
49 $c = thaw freeze \$a;
50 ok 3, ref $c eq 'REF';
51 ok 4, ref $$c eq 'OVERLOADED';
52 ok 5, "$$c" eq "77";
53
54 $d = thaw freeze [$a, $a];
55 ok 6, "$d->[0]" eq "77";
56 $d->[0][0]++;
57 ok 7, "$d->[1]" eq "78";
58
59 package REF_TO_OVER;
60
61 sub make {
62         my $self = bless {}, shift;
63         my ($over) = @_;
64         $self->{over} = $over;
65         return $self;
66 }
67
68 package OVER;
69
70 use overload
71         '+'             => \&plus,
72         '""'    => sub { ref $_[0] };
73
74 sub plus {
75         return 314;
76 }
77
78 sub make {
79         my $self = bless {}, shift;
80         my $ref = REF_TO_OVER->make($self);
81         $self->{ref} = $ref;
82         return $self;
83 }
84
85 package main;
86
87 $a = OVER->make();
88 $b = thaw freeze $a;
89
90 ok 8, ref $b eq 'OVER';
91 ok 9, $a + $a == 314;
92 ok 10, ref $b->{ref} eq 'REF_TO_OVER';
93 ok 11, "$b->{ref}->{over}" eq "$b";
94 ok 12, $b + $b == 314;
95
96 1;
97