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

use strict;

print "1..49\n";

my $s = Set::Scalar->new;

print "not " unless $s->size == 0;
print "ok 1\n";

print "not " unless $s->is_null;
print "ok 2\n";

print "not " unless $s->is_universal;
print "ok 3\n";

print "not " unless $s eq "()";
print "ok 4\n";

print "not " unless $s->universe eq "[]";
print "ok 5\n";

$s->insert("a");

print "not " unless $s->size == 1;
print "ok 6\n";

print "not " if $s->is_null;
print "ok 7\n";

print "not " unless $s->is_universal;
print "ok 8\n";

print "not " unless $s eq "(a)";
print "ok 9\n";

print "not " unless $s->universe eq "[a]";
print "ok 10\n";

$s->insert("a");

print "not " unless $s->size == 1;
print "ok 11\n";

print "not " if $s->is_null;
print "ok 12\n";

print "not " unless $s->is_universal;
print "ok 13\n";

print "not " unless $s eq "(a)";
print "ok 14\n";

print "not " unless $s->universe eq "[a]";
print "ok 15\n";

$s->insert("b", "c", "d", "e");

print "not " unless $s->size == 5;
print "ok 16\n";

print "not " if $s->is_null;
print "ok 17\n";

print "not " unless $s->is_universal;
print "ok 18\n";

print "not " unless $s eq "(a b c d e)";
print "ok 19\n";

print "not " unless $s->universe eq "[a b c d e]";
print "ok 20\n";

$s->delete("b", "d");

print "not " unless $s->size == 3;
print "ok 21\n";

print "not " if $s->is_null;
print "ok 22\n";

print "not " if $s->is_universal;
print "ok 23\n";

print "not " unless $s eq "(a c e)";
print "ok 24\n";

print "not " unless $s->universe eq "[a b c d e]";
print "ok 25\n";

$s->invert("b", "c", "d");

print "not " unless $s->size == 4;
print "ok 26\n";

print "not " if $s->is_null;
print "ok 27\n";

print "not " if $s->is_universal;
print "ok 28\n";

print "not " unless $s eq "(a b d e)";
print "ok 29\n";

print "not " unless $s->universe eq "[a b c d e]";
print "ok 30\n";

$s->fill();

print "not " unless $s->size == 5;
print "ok 31\n";

print "not " if $s->is_null;
print "ok 32\n";

print "not " unless $s->is_universal;
print "ok 33\n";

print "not " unless $s eq "(a b c d e)";
print "ok 34\n";

print "not " unless $s->universe eq "[a b c d e]";
print "ok 35\n";

$s->clear();

print "not " unless $s->size == 0;
print "ok 36\n";

print "not " unless $s->is_null;
print "ok 37\n";

print "not " if $s->is_universal;
print "ok 38\n";

print "not " unless $s eq "()";
print "ok 39\n";

print "not " unless $s->universe eq "[a b c d e]";
print "ok 40\n";

eval { $s->clear("x") };

print "not " unless $@ =~ /\Q::clear(): need no arguments/;
print "ok 41\n";

eval { $s->fill("y") };

print "not " unless $@ =~ /\Q::fill(): need no arguments/;
print "ok 42\n";

$s->insert("a".."e");

print "not " unless "@{ [ sort $s->members ] }" eq "a b c d e";
print "ok 43\n";

print "not " unless "@{ [ sort @$s ] }" eq "a b c d e";
print "ok 44\n";

my $t = Set::Scalar->new(@$s);

print "not " unless "@{ [ sort @$t ] }" eq "a b c d e";
print "ok 45\n";

$t += "f";

print "not " unless "@{ [ sort @$t ] }" eq "a b c d e f";
print "ok 46\n";

my $u = $t;

print "not " unless "@{ [ sort @$u ] }" eq "a b c d e f";
print "ok 47\n";

$t += "g";

print "not " unless "@{ [ sort @$t ] }" eq "a b c d e f g";
print "ok 48\n";

print "not " unless "@{ [ sort @$u ] }" eq "a b c d e f";
print "ok 49\n";

# End Of File.