📄 01________new.t
字号:
#!perl -wuse strict;no strict "vars";use integer;use Bit::Vector;@ISA = qw(Bit::Vector);# ======================================================================# $set = Bit::Vector::new('Bit::Vector',$elements);# ======================================================================print "1..131\n";$n = 1;# test if the constructor works at all:$set = Bit::Vector::new('Bit::Vector',1);if (defined $set){print "ok $n\n";} else {print "not ok $n\n";}$n++;if (ref($set) eq 'Bit::Vector'){print "ok $n\n";} else {print "not ok $n\n";}$n++;if (${$set} != 0){print "ok $n\n";} else {print "not ok $n\n";}$n++;# test if the constructor handles NULL pointers as expected:eval { $ref = Bit::Vector::new('Bit::Vector',0); };unless ($@){print "ok $n\n";} else {print "not ok $n\n";}$n++;# test if the copy of an object reference works as expected:$ref = $set;if (defined $ref){print "ok $n\n";} else {print "not ok $n\n";}$n++;if (ref($ref) eq 'Bit::Vector'){print "ok $n\n";} else {print "not ok $n\n";}$n++;if (${$ref} != 0){print "ok $n\n";} else {print "not ok $n\n";}$n++;if (${$ref} == ${$set}){print "ok $n\n";} else {print "not ok $n\n";}$n++;# test the constructor with a large set (13,983,816 elements):$set = Bit::Vector::new('Bit::Vector',&binomial(49,6));if (defined $set){print "ok $n\n";} else {print "not ok $n\n";}$n++;if (ref($set) eq 'Bit::Vector'){print "ok $n\n";} else {print "not ok $n\n";}$n++;if (${$set} != 0){print "ok $n\n";} else {print "not ok $n\n";}$n++;# are the two sets really distinct and set objects behaving as expected?if (${$ref} != ${$set}){print "ok $n\n";} else {print "not ok $n\n";}$n++;# are set objects behaving as expected, i.e. are they write-protected?eval { ${$set} = 0x00088850; };if ($@ =~ /Modification of a read-only value attempted/){print "ok $n\n";} else {print "not ok $n\n";}$n++;$set = 0x00088850;if ($set == 559184){print "ok $n\n";} else {print "not ok $n\n";}$n++;eval { ${$ref} = 0x000E9CE0; };if ($@ =~ /Modification of a read-only value attempted/){print "ok $n\n";} else {print "not ok $n\n";}$n++;$ref = 0x000E9CE0;if ($ref == 957664){print "ok $n\n";} else {print "not ok $n\n";}$n++;# test various ways of calling the constructor:# 1: $set = Bit::Vector::new('Bit::Vector',1);# 2: $class = 'Bit::Vector'; $set = Bit::Vector::new($class,2);# 3: $set = new Bit::Vector(3);# 4: $set = Bit::Vector->new(4);# 5: $ref = $set->new(5);# 6: $set = $set->new(6);# (test case #1 has been handled above)# test case #2:$class = 'Bit::Vector';$set = Bit::Vector::new($class,2);if (defined $set){print "ok $n\n";} else {print "not ok $n\n";}$n++;if (ref($set) eq 'Bit::Vector'){print "ok $n\n";} else {print "not ok $n\n";}$n++;if (${$set} != 0){print "ok $n\n";} else {print "not ok $n\n";}$n++;# test case #3:$ref = new Bit::Vector(3);if (defined $ref){print "ok $n\n";} else {print "not ok $n\n";}$n++;if (ref($ref) eq 'Bit::Vector'){print "ok $n\n";} else {print "not ok $n\n";}$n++;if (${$ref} != 0){print "ok $n\n";} else {print "not ok $n\n";}$n++;# coherence test:if (${$ref} != ${$set}){print "ok $n\n";} else {print "not ok $n\n";}$n++;# test case #4:$set = Bit::Vector->new(4);if (defined $set){print "ok $n\n";} else {print "not ok $n\n";}$n++;if (ref($set) eq 'Bit::Vector'){print "ok $n\n";} else {print "not ok $n\n";}$n++;if (${$set} != 0){print "ok $n\n";} else {print "not ok $n\n";}$n++;# coherence test:if (${$ref} != ${$set}){print "ok $n\n";} else {print "not ok $n\n";}$n++;# prepare possibility for id check:$old = ${$set};if (${$set} == $old){print "ok $n\n";} else {print "not ok $n\n";}$n++;# test case #5:$ref = $set->new(5);if (defined $ref){print "ok $n\n";} else {print "not ok $n\n";}$n++;if (ref($ref) eq 'Bit::Vector'){print "ok $n\n";} else {print "not ok $n\n";}$n++;if (${$ref} != 0){print "ok $n\n";} else {print "not ok $n\n";}$n++;# coherence tests:if (defined $set){print "ok $n\n";} else {print "not ok $n\n";}$n++;if (ref($set) eq 'Bit::Vector'){print "ok $n\n";} else {print "not ok $n\n";}$n++;if (${$set} != 0){print "ok $n\n";} else {print "not ok $n\n";}$n++;if (${$set} == $old){print "ok $n\n";} else {print "not ok $n\n";}$n++;if (${$ref} != ${$set}){print "ok $n\n";} else {print "not ok $n\n";}$n++;# prepare exact copy of object reference:$ref = $set;if (defined $ref){print "ok $n\n";} else {print "not ok $n\n";}$n++;if (ref($ref) eq 'Bit::Vector'){print "ok $n\n";} else {print "not ok $n\n";}$n++;if (${$ref} != 0){print "ok $n\n";} else {print "not ok $n\n";}$n++;if (${$ref} == ${$set}){print "ok $n\n";} else {print "not ok $n\n";}$n++;if (${$ref} == $old){print "ok $n\n";} else {print "not ok $n\n";}$n++;# test case #6 (pseudo auto-destruction test):$set = $set->new(6);if (defined $set){print "ok $n\n";} else {print "not ok $n\n";}$n++;if (ref($set) eq 'Bit::Vector'){print "ok $n\n";} else {print "not ok $n\n";}$n++;if (${$set} != 0){print "ok $n\n";} else {print "not ok $n\n";}$n++;# coherence tests:if (defined $ref){print "ok $n\n";} else {print "not ok $n\n";}$n++;if (ref($ref) eq 'Bit::Vector'){print "ok $n\n";} else {print "not ok $n\n";}$n++;if (${$ref} != 0){print "ok $n\n";} else {print "not ok $n\n";}$n++;if (${$ref} == $old){print "ok $n\n";} else {print "not ok $n\n";}$n++;if (${$ref} != ${$set}){print "ok $n\n";} else {print "not ok $n\n";}$n++;# auto-destruction test:$set = $set->new(7);if (defined $set){print "ok $n\n";} else {print "not ok $n\n";}$n++;if (ref($set) eq 'Bit::Vector'){print "ok $n\n";} else {print "not ok $n\n";}$n++;if (${$set} != 0){print "ok $n\n";} else {print "not ok $n\n";}$n++;# coherence test:if (${$ref} != ${$set}){print "ok $n\n";} else {print "not ok $n\n";}$n++;# test weird ways of calling the constructor:eval { $set = Bit::Vector::new("",8); };if (ref($set) eq 'Bit::Vector'){print "ok $n\n";} else {print "not ok $n\n";}$n++;eval { $set = Bit::Vector::new('',9); };if (ref($set) eq 'Bit::Vector'){print "ok $n\n";} else {print "not ok $n\n";}$n++;eval { $set = Bit::Vector::new(undef,10); };if (ref($set) eq 'Bit::Vector'){print "ok $n\n";} else {print "not ok $n\n";}$n++;eval { $set = Bit::Vector::new(6502,11); };if (ref($set) eq 'Bit::Vector'){print "ok $n\n";} else {print "not ok $n\n";}$n++;eval { $set = Bit::Vector::new('main',12); };unless ($@){print "ok $n\n";} else {print "not ok $n\n";}$n++;if (defined $set){print "ok $n\n";} else {print "not ok $n\n";}$n++;if ( (ref($set) eq 'main') || (ref($set) eq 'Bit::Vector') ){print "ok $n\n";} else {print "not ok $n\n";}$n++;if (${$set} != 0){print "ok $n\n";} else {print "not ok $n\n";}$n++;eval { $set = 0; };unless ($@){print "ok $n\n";} else {print "not ok $n\n";}$n++;eval { $set = Bit::Vector::new('nonsense',13); };unless ($@){print "ok $n\n";} else {print "not ok $n\n";}$n++;if (defined $set){print "ok $n\n";} else {print "not ok $n\n";}$n++;if ( (ref($set) eq 'nonsense') || (ref($set) eq 'Bit::Vector') ){print "ok $n\n";} else {print "not ok $n\n";}$n++;if (${$set} != 0){print "ok $n\n";} else {print "not ok $n\n";}$n++;eval { $set = 0; };unless ($@){print "ok $n\n";} else {print "not ok $n\n";}$n++;eval { $set = new main(14); };unless ($@){print "ok $n\n";} else {print "not ok $n\n";}$n++;if (defined $set){print "ok $n\n";} else {print "not ok $n\n";}$n++;if ( (ref($set) eq 'main') || (ref($set) eq 'Bit::Vector') ){print "ok $n\n";} else {print "not ok $n\n";}$n++;if (${$set} != 0){print "ok $n\n";} else {print "not ok $n\n";}$n++;eval { $set = 0; };unless ($@){print "ok $n\n";} else {print "not ok $n\n";}$n++;@parameters = ( 'main', 15 );eval { $set = Bit::Vector::new(@parameters); };unless ($@){print "ok $n\n";} else {print "not ok $n\n";}$n++;if (defined $set){print "ok $n\n";} else {print "not ok $n\n";}$n++;if ( (ref($set) eq 'main') || (ref($set) eq 'Bit::Vector') ){print "ok $n\n";} else {print "not ok $n\n";}$n++;if (${$set} != 0){print "ok $n\n";} else {print "not ok $n\n";}$n++;eval { $set = 0; };unless ($@){print "ok $n\n";} else {print "not ok $n\n";}$n++;# test syntactically incorrect constructor calls:eval { $set = Bit::Vector::new(16); };if ($@ =~ /Usage: new\(class,bits\[,count\]\)/){print "ok $n\n";} else {print "not ok $n\n";}$n++;eval { $set = Bit::Vector::new('main'); };if ($@ =~ /Usage: new\(class,bits\[,count\]\)/){print "ok $n\n";} else {print "not ok $n\n";}$n++;eval { $set = Bit::Vector::new($set); };if ($@ =~ /Usage: new\(class,bits\[,count\]\)/){print "ok $n\n";} else {print "not ok $n\n";}$n++;eval { $set = Bit::Vector::new('main',17,1,0); };if ($@ =~ /Usage: new\(class,bits\[,count\]\)/){print "ok $n\n";} else {print "not ok $n\n";}$n++;eval { $set = Bit::Vector::Create($set,'main',18,0); };if ($@ =~ /Usage: Create\(class,bits\[,count\]\)/){print "ok $n\n";} else {print "not ok $n\n";}$n++;eval { $set = Bit::Vector::new($set,19,'main',0); };if ($@ =~ /Usage: new\(class,bits\[,count\]\)/){print "ok $n\n";} else {print "not ok $n\n";}$n++;# test if size is correct:for ( $i = 1; $i <= 16; $i++ ){ $k = int(2 ** $i + 0.5); for ( $j = $k-1; $j <= $k+1; $j++ ) { $set = Bit::Vector->new($j); if ($set->Size() == $j) {print "ok $n\n";} else {print "not ok $n\n";} $n++; }}exit;sub binomial{ my($n,$k) = @_; my($prod) = 1; my($j) = 0; if (($n <= 0) || ($k <= 0) || ($n <= $k)) { return(1); } if ($k > $n - $k) { $k = $n - $k; } while ($j < $k) { $prod *= $n--; $prod /= ++$j; } return(int($prod + 0.5));}__END__
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -