📄 03_operations.t
字号:
#!perl -wuse 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__
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -