diff options
Diffstat (limited to 't/op/pack.t')
-rwxr-xr-x | t/op/pack.t | 39 |
1 files changed, 37 insertions, 2 deletions
diff --git a/t/op/pack.t b/t/op/pack.t index 1cfcd60b08..223b9d169b 100755 --- a/t/op/pack.t +++ b/t/op/pack.t @@ -2,9 +2,9 @@ # $RCSfile: pack.t,v $$Revision: 4.1 $$Date: 92/08/07 18:28:11 $ -print "1..8\n"; +print "1..25\n"; -$format = "c2x5CCxsdila6"; +$format = "c2 x5 C C x s d i l a6"; # Need the expression in here to force ary[5] to be numeric. This avoids # test2 failing because ary2 goes str->numeric->str and ary doesn't. @ary = (1,-100,127,128,32767,987.654321098 / 100.0,12345,123456,"abcdef"); @@ -41,3 +41,38 @@ close BIN; $sum = unpack("%32b*", $foo); $longway = unpack("b*", $foo); print $sum == $longway =~ tr/1/1/ ? "ok 8\n" : "not ok 8\n"; + +print +($x = unpack("I",pack("I", 0xFFFFFFFF))) == 0xFFFFFFFF + ? "ok 9\n" : "not ok 9 $x\n"; + +# check 'w' +my $test=10; +my @x = (5,130,256,560,32000,3097152,268435455,1073741844, + '4503599627365785','23728385234614992549757750638446'); +my $x = pack('w*', @x); +my $y = pack 'H*', '0581028200843081fa0081bd8440ffffff7f848080801487ffffffffffdb19caefe8e1eeeea0c2e1e3e8ede1ee6e'; + +print $x eq $y ? "ok $test\n" : "not ok $test\n"; $test++; + +@y = unpack('w*', $y); +my $a; +while ($a = pop @x) { + my $b = pop @y; + print $a eq $b ? "ok $test\n" : "not ok $test\n$a\n$b\n"; $test++; +} + +@y = unpack('w2', $x); + +print scalar(@y) == 2 ? "ok $test\n" : "not ok $test\n"; $test++; +print $y[1] == 130 ? "ok $test\n" : "not ok $test\n"; $test++; + +# test exeptions +eval { $x = unpack 'w', pack 'C*', 0xff, 0xff}; +print $@ ne '' ? "ok $test\n" : "not ok $test\n"; $test++; + +eval { $x = unpack 'w', pack 'C*', 0xff, 0xff, 0xff, 0xff}; +print $@ ne '' ? "ok $test\n" : "not ok $test\n"; $test++; + +eval { $x = unpack 'w', pack 'C*', 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; +print $@ ne '' ? "ok $test\n" : "not ok $test\n"; $test++; + |