The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/env perl
use strict;
use warnings;

=head1 DESCRIPTION

Test the Data::SExpression::Symbol class

=cut

use Test::More q(no_plan);

use Data::SExpression::Symbol;
use Scalar::Util qw(refaddr);


my $symbol = Data::SExpression::Symbol->new('foo');

isa_ok($symbol, 'Data::SExpression::Symbol');

is("$symbol", "foo", "stringifies properly");
ok($symbol eq "foo", "compares properly");

is($symbol->name, 'foo', 'Name is correct');

my $other_symbol = Data::SExpression::Symbol->new('foo');

ok(refaddr($symbol) == refaddr($other_symbol), "Symbols are interned appropriately");

ok($symbol eq $other_symbol, "Symbols compare correctly");

my $uninterned = Data::SExpression::Symbol->uninterned('foo');

is($uninterned->name, 'foo');
is("$uninterned", "#:foo", "Uninterned symbols stringify correctly");

ok($uninterned ne $symbol, "Uninterned symbols are not eq to interned ones");
ok($uninterned ne "foo",   "Uninterned symbols are not eq to strings");
ok($uninterned ne "$uninterned", "Uninterned symbols are not equal to their stringification");
ok($uninterned eq $uninterned, "Uninterned symbols are eq to themself");

my $unint2 = Data::SExpression::Symbol->uninterned('foo');

ok($uninterned ne $unint2, "Two uninterned symbols are not eq");