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

print "1..8\n";

my $s = Set::Scalar->new("a");
my $t = Set::Scalar->new("b");

$s->insert($t);

print "not " unless $s == "(a (b))";
print "ok 1\n";

$t->insert($s);

print "not " unless $s == "(a (b (a ...)))";
print "ok 2\n";

print "not " unless $t == "(b (a (b ...)))";
print "ok 3\n";

my $u = Set::Scalar->new("c");

$u->insert($u);

print "not " unless $u == "(c (c ...))";
print "ok 4\n";

$s->insert($u);

# There is some nondeterminism that needs to be resolved.
print "not " unless $s == "(a (b (a ...)) (c ...))" or
                    $s == "(a (b (a (c ...) ...)) (c ...))";
print "ok 5\n";

print "not " unless $t == "(b (a (b ...) (c ...)))" or
                    $t == "(b (a (b (c ...) ...) (c ...)))";
print "ok 6\n";

$t->delete($s);

print "not " unless $s == "(a (b) (c ...))";
print "ok 7\n";

print "not " unless $t == "(b)";
print "ok 8\n";