X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FHash%2FUtil.t;h=8ed557f1a3cd9cf94cd32cbaaccc636052801001;hb=f1c8c9362c4d1029d2c52ffe1e972f0f0b3d5771;hp=48cbc7c00708851c2acdf9210bd1bc0e1d61afe4;hpb=9a7034eb2c2d4f0ed795b3c479d700ded086d7e8;p=p5sagit%2Fp5-mst-13.2.git diff --git a/lib/Hash/Util.t b/lib/Hash/Util.t index 48cbc7c..8ed557f 100644 --- a/lib/Hash/Util.t +++ b/lib/Hash/Util.t @@ -6,7 +6,7 @@ BEGIN { chdir 't'; } } -use Test::More tests => 157; +use Test::More tests => 173; use strict; my @Exported_Funcs; @@ -274,5 +274,52 @@ like( $@, qr/^Attempt to access disallowed key 'I_DONT_EXIST' in a restricted ha } } +# Check clear works on locked empty hashes - SEGVs on 5.8.2. +{ + my %hash; + lock_hash(%hash); + %hash = (); + ok(keys(%hash) == 0, 'clear empty lock_hash() hash'); +} +{ + my %hash; + lock_keys(%hash); + %hash = (); + ok(keys(%hash) == 0, 'clear empty lock_keys() hash'); +} + my $hash_seed = hash_seed(); ok($hash_seed >= 0, "hash_seed $hash_seed"); + +{ + package Minder; + my $counter; + sub DESTROY { + --$counter; + } + sub new { + ++$counter; + bless [], __PACKAGE__; + } + package main; + + for my $state ('', 'locked') { + my $a = Minder->new(); + is ($counter, 1, "There is 1 object $state"); + my %hash; + $hash{a} = $a; + is ($counter, 1, "There is still 1 object $state"); + + lock_keys(%hash) if $state; + + is ($counter, 1, "There is still 1 object $state"); + undef $a; + is ($counter, 1, "Still 1 object $state"); + delete $hash{a}; + is ($counter, 0, "0 objects when hash key is deleted $state"); + $hash{a} = undef; + is ($counter, 0, "Still 0 objects $state"); + %hash = (); + is ($counter, 0, "0 objects after clear $state"); + } +}