################################################################################ # # $Project: /Tie-Hash-Indexed $ # $Author: mhx $ # $Date: 2007/08/24 15:12:22 +0200 $ # $Revision: 7 $ # $Source: /t/101_basic.t $ # ################################################################################ # # Copyright (c) 2002-2003 Marcus Holland-Moritz. All rights reserved. # This program is free software; you can redistribute it and/or modify # it under the same terms as Perl itself. # ################################################################################ use Test; BEGIN { plan tests => 32 }; use Tie::Hash::Indexed; ok(1); $scalar = $] < 5.008003 || $] == 5.009 ? 'skip: no scalar context for tied hashes' : ''; $broken_untie = $] == 5.009003 ? 'skip: broken untie' : ''; tie %h, 'Tie::Hash::Indexed'; ok(1); sub scalar_h { $scalar ? 0 : scalar %h } $s = &scalar_h; skip($scalar, $s, 0); %h = (foo => 1, bar => 2, zoo => 3, baz => 4); ok(join(',', keys %h), 'foo,bar,zoo,baz'); ok(exists $h{foo}); ok(exists $h{bar}); ok(!exists $h{xxx}); $s = &scalar_h; skip($scalar, $s =~ /^(\d+)\/\d+$/ && $1 == scalar keys %h); $h{xxx} = 5; ok(join(',', keys %h), 'foo,bar,zoo,baz,xxx'); ok(exists $h{xxx}); $s = &scalar_h; skip($scalar, $s =~ /^(\d+)\/\d+$/ && $1 == scalar keys %h); $h{foo} = 6; ok(join(',', keys %h), 'foo,bar,zoo,baz,xxx'); ok(exists $h{foo}); $s = &scalar_h; skip($scalar, $s =~ /^(\d+)\/\d+$/ && $1 == scalar keys %h); while (my($k,$v) = each %h) { $key .= $k; push @val, $v; } ok($key, 'foobarzoobazxxx'); ok(join('|', @val), '6|2|3|4|5'); $val = delete $h{bar}; ok($val, 2); ok(join(',', keys %h), 'foo,zoo,baz,xxx'); ok(join(',', values %h), '6,3,4,5'); ok(scalar keys %h, 4); ok(!exists $h{bar}); $val = delete $h{bar}; ok(not defined $val); $val = delete $h{nokey}; ok(not defined $val); %h = (); ok(scalar keys %h, 0); ok(!exists $h{zoo}); $s = &scalar_h; skip($scalar, $s, 0); %h = (foo => 1, bar => 2, zoo => 3, baz => 4); ok(join(',', %h), "foo,1,bar,2,zoo,3,baz,4"); ok(scalar keys %h, 4); for ($h{foo}) { $_ = 42 } ok($h{foo}, 42); untie %h; # TODO: these tests fail with recent versions of blead skip($broken_untie, scalar keys %h, 0); skip($broken_untie, join(',', %h), ''); # test Tie::InsertOrderHash-like initializer tie my %hash => 'Tie::Hash::Indexed', foo => 1, bar => 2, zoo => 3, baz => 4; ok(join(',', keys %hash), 'foo,bar,zoo,baz');