The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
# Before `make install' is performed this script should be runnable with
# `make test'. After `make install' it should work as `perl APO_ID_Set.t'

#########################

BEGIN {
    eval { require Test; };
    use Test;    
    plan tests => 24;
}

#########################

use OBO::APO::APO_ID_Set;
use OBO::APO::APO_ID;
use strict;

my $my_set = OBO::APO::APO_ID_Set->new();
ok(1);

my $id1 = OBO::APO::APO_ID->new();
$id1->id_as_string("APO:P0000001");
$my_set->add($id1);
ok($my_set->contains($id1));

my $id2 = OBO::APO::APO_ID->new();
$id2->id_as_string("APO:P0000002");
my $id3 = OBO::APO::APO_ID->new();
$id3->id_as_string("APO:P0000003");
my $id4 = OBO::APO::APO_ID->new();
ok(!$my_set->contains($id4));

$id4->id_as_string("APO:P0000004");

ok ($id1->id() eq "APO:P0000001");
ok ($id2->id() eq "APO:P0000002");
ok ($id3->id() eq "APO:P0000003");
ok ($id4->id() eq "APO:P0000004");

$my_set->add_all($id1, $id2, $id3, $id4);
ok($my_set->contains($id2) && $my_set->contains($id3) && $my_set->contains($id4));

my $id5_string = "APO:P0000005";
my $id5 = $my_set->add_as_string($id5_string);
ok($my_set->contains($id5)); 

$my_set->add_as_string($id5_string);
$my_set->add_as_string($id5_string);
$my_set->add_as_string($id5_string);
$my_set->add_as_string($id5_string);
ok($my_set->size() == 5);

my $my_set2 = OBO::APO::APO_ID_Set->new();
ok(1);

$my_set2->add_all_as_string("APO:P0000001", "APO:P0000002", "APO:P0000003", "APO:P0000004");
ok(!$my_set->equals($my_set2));
ok($my_set2->size() == 4);

my $id5_2 = $my_set2->add_as_string($id5_string);
ok($my_set2->size() == 5);
ok($my_set->contains($id5_2));
ok($my_set->equals($my_set2));
$my_set->remove($id3);

ok($my_set->contains($id2) && $my_set->contains($id1) && $my_set->contains($id4) && $my_set->contains($id5));
ok($my_set->size() == 4);
$my_set->remove($id5);

ok($my_set->contains($id2) && $my_set->contains($id1) && $my_set->contains($id4));
ok($my_set->size() == 3);
$my_set->clear();
ok(!$my_set->contains($id2) || !$my_set->contains($id1) || !$my_set->contains($id4));

ok($my_set->size() == 0);
ok($my_set->is_empty());

ok(1);