Add Storable 0.7.2 from Raphael Manfredi,
[p5sagit/p5-mst-13.2.git] / t / lib / st-06compat.t
CommitLineData
7a6a85bf 1#!./perl
2
3# $Id: compat-0.6.t,v 0.7 2000/08/03 22:04:44 ram Exp $
4#
5# Copyright (c) 1995-2000, Raphael Manfredi
6#
7# You may redistribute only under the terms of the Artistic License,
8# as specified in the README file that comes with the distribution.
9#
10# $Log: compat-0.6.t,v $
11# Revision 0.7 2000/08/03 22:04:44 ram
12# Baseline for second beta release.
13#
14
15BEGIN {
16 chdir('t') if -d 't';
17 unshift @INC, '../lib';
18 require 'lib/st-dump.pl';
19}
20
21sub ok;
22
23print "1..8\n";
24
25use Storable qw(freeze nfreeze thaw);
26
27package TIED_HASH;
28
29sub TIEHASH {
30 my $self = bless {}, shift;
31 return $self;
32}
33
34sub FETCH {
35 my $self = shift;
36 my ($key) = @_;
37 $main::hash_fetch++;
38 return $self->{$key};
39}
40
41sub STORE {
42 my $self = shift;
43 my ($key, $val) = @_;
44 $self->{$key} = $val;
45}
46
47package SIMPLE;
48
49sub make {
50 my $self = bless [], shift;
51 my ($x) = @_;
52 $self->[0] = $x;
53 return $self;
54}
55
56package ROOT;
57
58sub make {
59 my $self = bless {}, shift;
60 my $h = tie %hash, TIED_HASH;
61 $self->{h} = $h;
62 $self->{ref} = \%hash;
63 my @pool;
64 for (my $i = 0; $i < 5; $i++) {
65 push(@pool, SIMPLE->make($i));
66 }
67 $self->{obj} = \@pool;
68 my @a = ('string', $h, $self);
69 $self->{a} = \@a;
70 $self->{num} = [1, 0, -3, -3.14159, 456, 4.5];
71 $h->{key1} = 'val1';
72 $h->{key2} = 'val2';
73 return $self;
74};
75
76sub num { $_[0]->{num} }
77sub h { $_[0]->{h} }
78sub ref { $_[0]->{ref} }
79sub obj { $_[0]->{obj} }
80
81package main;
82
83my $r = ROOT->make;
84
85my $data = '';
86while (<DATA>) {
87 next if /^#/;
88 $data .= unpack("u", $_);
89}
90
91ok 1, length $data == 278;
92
93my $y = thaw($data);
94ok 2, 1;
95ok 3, ref $y eq 'ROOT';
96
97$Storable::canonical = 1; # Prevent "used once" warning
98$Storable::canonical = 1;
99ok 4, nfreeze($y) eq nfreeze($r);
100
101ok 5, $y->ref->{key1} eq 'val1';
102ok 6, $y->ref->{key2} eq 'val2';
103ok 7, $hash_fetch == 2;
104
105my $num = $r->num;
106my $ok = 1;
107for (my $i = 0; $i < @$num; $i++) {
108 do { $ok = 0; last } unless $num->[$i] == $y->num->[$i];
109}
110ok 8, $ok;
111
112__END__
113#
114# using Storable-0.6@11, output of: print pack("u", nfreeze(ROOT->make));
115# original size: 278 bytes
116#
117M`P,````%!`(````&"(%8"(!8"'U8"@@M,RXQ-#$U.5@)```!R%@*`S0N-5A8
118M6`````-N=6T$`P````(*!'9A;#%8````!&ME>3$*!'9A;#)8````!&ME>3)B
119M"51)141?2$%32%A8`````6@$`@````,*!G-T<FEN9U@$``````I8!```````
120M6%A8`````6$$`@````4$`@````$(@%AB!E-)35!,15A8!`(````!"(%88@93
121M24U03$586`0"`````0B"6&(&4TE-4$Q%6%@$`@````$(@UAB!E-)35!,15A8
122M!`(````!"(188@9324U03$586%A8`````V]B:@0,!``````*6%A8`````W)E
123(9F($4D]/5%@`