The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!perl

use strict;
use warnings;
use Test::More tests => 7;
use Data::PowerSet::Hash 'hash_powerset';
use Test::Deep::NoTest 'eq_deeply';

my @hash = hash_powerset;
is_deeply( [ hash_powerset ], [ {} ], 'Empty powerset' );

{
    my @pset = hash_powerset(
        ack => 'back',
    );

    my $data = [
        { ack => 'back' },
        {},
    ];

    is_deeply( \@pset, $data, 'Simple powerset' );
}

{
    my @pset = hash_powerset(
        husband => 'Homer Simpson',
        wife    => 'Marge Simpson',
    );

    my %data = (
        all => {
            husband => 'Homer Simpson',
            wife    => 'Marge Simpson',
        },
        homer => { husband => 'Homer Simpson' },
        marge => { wife    => 'Marge Simpson' },
        none  => {},
    );

    my %eq = ();
    while ( my $set = shift @pset ) {
        foreach my $name ( keys %data ) {
            my $data = $data{$name};
            eq_deeply( $data, $set ) and $eq{$name}++;
        }
    }

    foreach my $name ( keys %data ) {
        ok( $eq{$name}, "$name exists in power set" );
    }

    cmp_ok( scalar(@pset), '==', 0, 'All sets successfully matched' );
}