The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl -w

use strict;
use warnings;

use Test::More tests => 5657;
use Plucene::Store::InputStream;
use Plucene::Store::OutputStream;
use_ok("Plucene::Bitvector");
use File::Temp qw(tmpnam);

my $vector = tmpnam();

test_count(8);
test_count(20);
test_count(100);
test_count(1000);

sub test_count {
	my $size = shift;
	my $bv = new Plucene::Bitvector(size => $size);
	for (0 .. $bv->{size}) {
		ok(!$bv->get($_), "Not set prior to work");
		is($bv->count, $_, "Precisely $_ bits set");
		$bv->set($_);
		ok($bv->get($_), "Now it's set");
		is($bv->count, $_ + 1, "And count is updated");
	}
}

test_write_read(8);
test_write_read(20);
test_write_read(100);
test_write_read(1000);

sub test_write_read {
	my $bv = new Plucene::Bitvector(size => shift);
	for (0 .. $bv->{size} - 1) {
		$bv->set($_);
		$bv->write(Plucene::Store::OutputStream->new($vector));
		my $compare =
			Plucene::Bitvector->read(Plucene::Store::InputStream->new($vector));
		is_deeply($bv->display, $compare->display,
			"Compared vectors were equivalent: $_");
	}

}