The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.
#!perl -w

use strict;

use constant HAS_THREADS   => eval q{ use threads; 1 };
use constant HAS_LEAKTRACE => eval q{use Test::LeakTrace 0.06; 1};
use Test::More;

BEGIN{
	if(HAS_THREADS && HAS_LEAKTRACE){
		plan tests => 2;
	}
	else{
		plan skip_all => 'require both threads and Test::LeakTrace';
	}
}
use Hash::FieldHash qw(:all);


{
	package A;

	sub new{
		bless [], shift;
	}
}


fieldhash my %hash;

leaks_cmp_ok{
	# NOTE: weaken({}) leaks an AV in 5.10.0, so I use [] in here.
	my $x = A->new();
	my $y = A->new();

	$hash{$x} = 'Hello';
	$hash{$y} = 42;
	$hash{$y}++ for 1 .. 10;

	async{
		my $z = ['thx'];
		$hash{$z}++;
	}->join();

	
} '<=', 1;

is_deeply \%hash, {};