#!perl -w
use strict;
no strict "vars";
use Bit::Vector;
# ======================================================================
# $set->Flip();
# $set->Fill();
# $set->Empty();
# $set->is_empty();
# $set->is_full();
# $set1->equal($set2);
# $set1->subset($set2);
# $set1->Union($set2,$set3);
# $set1->Intersection($set2,$set3);
# $set1->Difference($set2,$set3);
# $set1->ExclusiveOr($set2,$set3);
# $set1->Complement($set2);
# $set1->Copy($set2);
# ======================================================================
print "1..232\n";
$n = 1;
$limit = 999; # must be odd!
$set0 = new Bit::Vector($limit+1);
$set1 = new Bit::Vector($limit+1);
$set2 = new Bit::Vector($limit+1);
$set3 = new Bit::Vector($limit+1);
$set4 = new Bit::Vector($limit+1);
$set3->Fill();
for ( $i = 0; $i <= $limit; $i += 2 ) { $set1->Bit_On($i); }
$set2->Copy($set1);
$set2->Flip();
&test;
$set1->Fill();
$set1->Bit_Off(0);
$set1->Bit_Off(1);
for ( $j = 4; $j <= $limit; $j += 2 ) { $set1->Bit_Off($j); }
for ( $i = 3; ($j = $i * $i) <= $limit; $i += 2 )
{
for ( ; $j <= $limit; $j += $i ) { $set1->Bit_Off($j); }
}
$set2->Copy($set1);
$set2->Flip();
&test;
exit;
sub test
{
# equal
if ($set0->equal($set0))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
if (! $set0->equal($set1))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
if (! $set0->equal($set2))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
if (! $set0->equal($set3))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
if (! $set1->equal($set0))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
if ($set1->equal($set1))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
if (! $set1->equal($set2))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
if (! $set1->equal($set3))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
if (! $set2->equal($set0))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
if (! $set2->equal($set1))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
if ($set2->equal($set2))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
if (! $set2->equal($set3))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
if (! $set3->equal($set0))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
if (! $set3->equal($set1))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
if (! $set3->equal($set2))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
if ($set3->equal($set3))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
# subset
if ($set0->subset($set0))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
if ($set0->subset($set1))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
if ($set0->subset($set2))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
if ($set0->subset($set3))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
if (! $set1->subset($set0))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
if ($set1->subset($set1))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
if (! $set1->subset($set2))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
if ($set1->subset($set3))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
if (! $set2->subset($set0))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
if (! $set2->subset($set1))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
if ($set2->subset($set2))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
if ($set2->subset($set3))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
if (! $set3->subset($set0))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
if (! $set3->subset($set1))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
if (! $set3->subset($set2))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
if ($set3->subset($set3))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
# Union
$set4->Union($set0,$set0);
if ($set4->equal($set0))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
$set4->Union($set0,$set1);
if ($set4->equal($set1))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
$set4->Union($set0,$set2);
if ($set4->equal($set2))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
$set4->Union($set0,$set3);
if ($set4->equal($set3))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
$set4->Union($set1,$set0);
if ($set4->equal($set1))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
$set4->Union($set1,$set1);
if ($set4->equal($set1))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
$set4->Union($set1,$set2);
if ($set4->equal($set3))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
$set4->Union($set1,$set3);
if ($set4->equal($set3))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
$set4->Union($set2,$set0);
if ($set4->equal($set2))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
$set4->Union($set2,$set1);
if ($set4->equal($set3))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
$set4->Union($set2,$set2);
if ($set4->equal($set2))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
$set4->Union($set2,$set3);
if ($set4->equal($set3))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
$set4->Union($set3,$set0);
if ($set4->equal($set3))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
$set4->Union($set3,$set1);
if ($set4->equal($set3))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
$set4->Union($set3,$set2);
if ($set4->equal($set3))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
$set4->Union($set3,$set3);
if ($set4->equal($set3))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
# Intersection
$set4->Intersection($set0,$set0);
if ($set4->equal($set0))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
$set4->Intersection($set0,$set1);
if ($set4->equal($set0))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
$set4->Intersection($set0,$set2);
if ($set4->equal($set0))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
$set4->Intersection($set0,$set3);
if ($set4->equal($set0))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
$set4->Intersection($set1,$set0);
if ($set4->equal($set0))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
$set4->Intersection($set1,$set1);
if ($set4->equal($set1))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
$set4->Intersection($set1,$set2);
if ($set4->equal($set0))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
$set4->Intersection($set1,$set3);
if ($set4->equal($set1))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
$set4->Intersection($set2,$set0);
if ($set4->equal($set0))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
$set4->Intersection($set2,$set1);
if ($set4->equal($set0))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
$set4->Intersection($set2,$set2);
if ($set4->equal($set2))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
$set4->Intersection($set2,$set3);
if ($set4->equal($set2))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
$set4->Intersection($set3,$set0);
if ($set4->equal($set0))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
$set4->Intersection($set3,$set1);
if ($set4->equal($set1))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
$set4->Intersection($set3,$set2);
if ($set4->equal($set2))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
$set4->Intersection($set3,$set3);
if ($set4->equal($set3))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
# Difference
$set4->Difference($set0,$set0);
if ($set4->equal($set0))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
$set4->Difference($set0,$set1);
if ($set4->equal($set0))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
$set4->Difference($set0,$set2);
if ($set4->equal($set0))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
$set4->Difference($set0,$set3);
if ($set4->equal($set0))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
$set4->Difference($set1,$set0);
if ($set4->equal($set1))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
$set4->Difference($set1,$set1);
if ($set4->equal($set0))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
$set4->Difference($set1,$set2);
if ($set4->equal($set1))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
$set4->Difference($set1,$set3);
if ($set4->equal($set0))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
$set4->Difference($set2,$set0);
if ($set4->equal($set2))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
$set4->Difference($set2,$set1);
if ($set4->equal($set2))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
$set4->Difference($set2,$set2);
if ($set4->equal($set0))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
$set4->Difference($set2,$set3);
if ($set4->equal($set0))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
$set4->Difference($set3,$set0);
if ($set4->equal($set3))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
$set4->Difference($set3,$set1);
if ($set4->equal($set2))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
$set4->Difference($set3,$set2);
if ($set4->equal($set1))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
$set4->Difference($set3,$set3);
if ($set4->equal($set0))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
# ExclusiveOr
$set4->ExclusiveOr($set0,$set0);
if ($set4->equal($set0))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
$set4->ExclusiveOr($set0,$set1);
if ($set4->equal($set1))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
$set4->ExclusiveOr($set0,$set2);
if ($set4->equal($set2))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
$set4->ExclusiveOr($set0,$set3);
if ($set4->equal($set3))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
$set4->ExclusiveOr($set1,$set0);
if ($set4->equal($set1))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
$set4->ExclusiveOr($set1,$set1);
if ($set4->equal($set0))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
$set4->ExclusiveOr($set1,$set2);
if ($set4->equal($set3))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
$set4->ExclusiveOr($set1,$set3);
if ($set4->equal($set2))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
$set4->ExclusiveOr($set2,$set0);
if ($set4->equal($set2))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
$set4->ExclusiveOr($set2,$set1);
if ($set4->equal($set3))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
$set4->ExclusiveOr($set2,$set2);
if ($set4->equal($set0))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
$set4->ExclusiveOr($set2,$set3);
if ($set4->equal($set1))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
$set4->ExclusiveOr($set3,$set0);
if ($set4->equal($set3))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
$set4->ExclusiveOr($set3,$set1);
if ($set4->equal($set2))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
$set4->ExclusiveOr($set3,$set2);
if ($set4->equal($set1))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
$set4->ExclusiveOr($set3,$set3);
if ($set4->equal($set0))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
# Complement
$set4->Complement($set0);
if ($set4->equal($set3))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
$set4->Complement($set1);
if ($set4->equal($set2))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
$set4->Complement($set2);
if ($set4->equal($set1))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
$set4->Complement($set3);
if ($set4->equal($set0))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
# Copy
$set4->Copy($set0);
if ($set4->equal($set0))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
$set4->Copy($set1);
if ($set4->equal($set1))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
$set4->Copy($set2);
if ($set4->equal($set2))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
$set4->Copy($set3);
if ($set4->equal($set3))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
# in-place:
$set4->Copy($set1);
$set4->Union($set2,$set4);
if ($set4->equal($set3))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
$set4->Copy($set2);
$set4->Union($set4,$set1);
if ($set4->equal($set3))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
$set4->Copy($set3);
$set4->Intersection($set1,$set4);
if ($set4->equal($set1))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
$set4->Copy($set3);
$set4->Intersection($set4,$set2);
if ($set4->equal($set2))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
$set4->Copy($set3);
$set4->Difference($set4,$set2);
if ($set4->equal($set1))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
$set4->Copy($set3);
$set4->Difference($set2,$set4);
if ($set4->equal($set0))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
$set4->Copy($set1);
$set4->ExclusiveOr($set4,$set3);
if ($set4->equal($set2))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
$set4->Copy($set2);
$set4->ExclusiveOr($set1,$set4);
if ($set4->equal($set3))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
$set4->Copy($set1);
$set4->Complement($set4);
if ($set4->equal($set2))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
$set4->Copy($set3);
$set4->Complement($set4);
if ($set4->equal($set0))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
$set4->Copy($set1);
$set4->Copy($set4);
if ($set4->equal($set1))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
$set4->Copy($set2);
$set4->Copy($set4);
if ($set4->equal($set2))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
}
__END__