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

use Set::Object;
print "1..28\n";

sub check {
    my ($test, $ok) = @_;
    if ($ok) {
        print "ok $test\n";
    } else {
        print "not ok $test\n";
    }
}

my $a = Set::Object->new("a".."e");
my $b = Set::Object->new("c".."g");

my $d = $a->difference($b);

check(  1, $d eq "Set::Object(a b)" );
check(  2, $a eq "Set::Object(a b c d e)" );
check(  3, $b eq "Set::Object(c d e f g)" );

my $e = $a - $b;

check(  4, $e eq "Set::Object(a b)" );
check(  5, $a eq "Set::Object(a b c d e)" );
check(  6, $b eq "Set::Object(c d e f g)" );

my $f = $b->difference($a);

check(  7, $f eq "Set::Object(f g)" );
check(  8, $a eq "Set::Object(a b c d e)" );
check(  9, $b eq "Set::Object(c d e f g)" );

my $g = $b - $a;

check( 10, $g eq "Set::Object(f g)" );
check( 11, $a eq "Set::Object(a b c d e)" );
check( 12, $b eq "Set::Object(c d e f g)" );

my $h = $a - "x";

check( 13, $h eq "Set::Object(a b c d e)" );
check( 14, $a eq "Set::Object(a b c d e)" );

my $i = "y" - $a;

check( 15, $i eq "Set::Object(y)" );
check( 16, $a eq "Set::Object(a b c d e)" );

my $j = $a - "c";

check( 17, $j eq "Set::Object(a b d e)" );
check( 18, $a eq "Set::Object(a b c d e)" );

my $k = "e" - $a;

check( 19, $k eq "Set::Object()" );
check( 20, $a eq "Set::Object(a b c d e)" );

my $m = Set::Object->new();
my $n = Set::Object->new();
my $o = $m - $n;

check( 21, defined($m) && ref($m) && $m->isa("Set::Object") );
check( 22, defined($n) && ref($n) && $n->isa("Set::Object") );

check( 23, $m eq $n );
check( 24, $n eq $o );
check( 25, $o eq $m );
check( 26, $m == $n );
check( 27, $n == $o );
check( 28, $o == $m );


sub show {
    my $z = shift;

    print "# set: ".sprintf("SV = %x, addr = %x", Set::Object::refaddr($z), $$z)."\b";
    print "# size is: ",($z->size),"\n";
    print "# stringified: $z\n";
    print "# universe is: ",($z->universe),"\n";
}