The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
# set -*-perl-*-
use Test;
BEGIN { plan tests => 7 }

use strict;
use ObjStore;
use lib './t';
use test;
require ObjStore::Set;  # not quite dead yet!

#ObjStore::_debug qw(bridge);
#ObjStore::disable_auto_class_loading();

&open_db;
for my $rep (10, 100) {
    begin 'update', sub {
	my $john = $db->root('John');
	die "No database" if !$john;
    
	my $set = $john->{c} = new ObjStore::Set($db, $rep);
	$set->add({ joe => 1 }, { bob => 2 }, { ed => 3 });

	my (@k,@v,@set);
	for (my $o = $set->first; $o; $o = $set->next) {
	    $o->HOLD;
	    push(@set, $o);
	    push(@k, keys %$o);
	    for (values %$o) { push(@v, $_); }
	}
	@k = sort @k;
	@v = sort @v;
	ok(@k==3 and $k[0] eq 'bob' and $k[1] eq 'ed' and $k[2] eq 'joe' and
	    @v==3 and $v[0] == 1 and $v[1] == 2 and $v[2] == 3) or do {
	    warn join(' ', @k);
	    warn join(' ', @v);
	};

	my $yuk = pop @set;
	$set->rm($yuk);
	ok(! $set->contains($yuk));
	$set->add($yuk);
	ok($set->contains($yuk));

	delete $john->{c};
    };
    die if $@;
};