Tie-Subset

 view release on metacpan or  search on metacpan

lib/Tie/Subset/Hash.pm  view on Meta::CPAN

	my ($self) = @_;
	warnings::warnif("clearing of ".ref($self)." not (yet) supported, ignoring");
	return;
}

sub SCALAR {
	my ($self) = @_;
	# I'm not sure why the following counts as two statements in the coverage tool
	# uncoverable branch true
	# uncoverable statement count:2
	return scalar %{$self->{keys}} if $] lt '5.026';
	my %keys = map {$_=>1} grep {exists $self->{hash}{$_}} keys %{$self->{keys}};
	return scalar keys %keys;
}

sub UNTIE {
	my ($self) = @_;
	$self->{hash} = undef;
	$self->{keys} = undef;
	return;
}

lib/Tie/Subset/Hash/Masked.pm  view on Meta::CPAN

	my ($self) = @_;
	warnings::warnif("clearing of ".ref($self)." not (yet) supported, ignoring");
	return;
}

sub SCALAR {
	my ($self) = @_;
	# I'm not sure why the following counts as two statements in the coverage tool
	# uncoverable branch true
	# uncoverable statement count:2
	return scalar %{$self->{hash}} if $] lt '5.026';
	my %keys = map {$_=>1} keys %{$self->{hash}};
	delete @keys{ keys %{$self->{mask}} };
	return scalar keys %keys;
}

sub UNTIE {
	my ($self) = @_;
	$self->{hash} = undef;
	$self->{mask} = undef;
	return;

t/10_hash.t  view on Meta::CPAN

ok !exists $subset{ghi};

# Iterating
# mostly tested above via the is_deeply checks
ok delete $hash{bbb}; # remove from underlying hash
is_deeply [sort keys %subset], [qw/ aaa ccc zzz /];
is_deeply [sort values %subset], [777,789,888];

# Scalar
SKIP: {
	skip "test fails on pre-5.8.9 Perls", 1 if $] lt '5.008009';
	# Since it's mostly here for code coverage, it's ok to skip it
	# scalar(%hash) really only gets useful on Perl 5.26+ anyway (returns the number of keys)
	if ( $] lt '5.026' )
		{ is scalar(%subset), scalar( %{tied(%subset)->{keys}} ) }
	else
		{ is scalar(%subset), 3 }
}

# delete-ing
{
	no warnings FATAL=>'all'; use warnings;  ## no critic (ProhibitNoWarnings)
	my @w = warns {
		ok !defined(delete $subset{jkl});

t/15_hash_masked.t  view on Meta::CPAN

ok !exists $masked{lll};

# Iterating
# mostly tested above via the is_deeply checks
ok delete $hash{jkl}; # remove from underlying hash
is_deeply [sort keys %masked], [qw/ def ghi xxx /];
is_deeply [sort values %masked], [222,777,888];

# Scalar
SKIP: {
	skip "test fails on pre-5.8.9 Perls", 1 if $] lt '5.008009';
	# Since it's mostly here for code coverage, it's ok to skip it
	# scalar(%hash) really only gets useful on Perl 5.26+ anyway (returns the number of keys)
	if ( $] lt '5.026' )
		{ is scalar(%masked), scalar( %{tied(%masked)->{hash}} ) }
	else
		{ is scalar(%masked), 3 }
}

# delete-ing
{
	no warnings FATAL=>'all'; use warnings;  ## no critic (ProhibitNoWarnings)
	my @w = warns {
		ok !defined(delete $masked{ccc});

t/20_array.t  view on Meta::CPAN

is $subset[6], undef;
is $subset[7], undef;
is $subset[8], undef;
is $subset[-1], undef;

# Exists
ok exists $subset[0];
ok !exists $subset[20];
SKIP: {
	skip "work around some kind of apparent regression in 5.14 and 5.16", 1
		if $] ge '5.014' && $] lt '5.018';
	ok !exists $subset[-1];
}

# Storing
ok $subset[1]=42;
{
	# author tests make warnings fatal, disable that here
	no warnings FATAL=>'all'; use warnings;  ## no critic (ProhibitNoWarnings)
	my @w = warns {
		ok !defined($subset[7]=999);

t/20_array.t  view on Meta::CPAN

ok exception { tie my @foo, 'Tie::Subset' };
ok exception { Tie::Subset::TIEARRAY('Tie::Subset::Foobar', []) };

# Not Supported
{
	no warnings FATAL=>'all'; use warnings;  ## no critic (ProhibitNoWarnings)
	ok 1==grep { /\b\Qnot (yet) supported\E\b/ } warns {
		$#subset = 1;
	};
	SKIP: {
		skip "test fails on pre-5.24 Perls", 1 if $] lt '5.024';
		# Since it's only here for code coverage, it's ok to skip it
		ok 1==grep { /\b\Qnot (yet) supported\E\b/ } warns {
			@subset = ();
		};
	}
	ok 1==grep { /\b\Qnot (yet) supported\E\b/ } warns {
		push @subset, 'a';
	};
	ok 1==grep { /\b\Qnot (yet) supported\E\b/ } warns {
		pop @subset;



( run in 1.024 second using v1.01-cache-2.11-cpan-cc502c75498 )