#!perl -w use strict; no strict "vars"; use Bit::Vector::String; my @l = (31,32,33,127,128,129,1023,1024,1025); my($b,$i,$n,$r,$s,$t,$u,$v,$w,$x); print "1..", @l * 81, "\n"; $n = 1; # ------------------------------------------------------- foreach $b (@l) { $v = Bit::Vector->new($b); $w = Bit::Vector->new($b); for ( $i = 0; $i < 3; $i++ ) { if ($i == 0) { $v->Primes(); } elsif ($i == 1) { $v->Fill(); } else { $v->Empty(); for ( $x = 0; $x < $b; $x += 12 ) { $v->Bit_On($x); } if ($v->to_Oct() =~ /^[01]+$/) {print "ok $n\n";} else {print "not ok $n\n";} $n++; if ($v->to_Hex() =~ /^[01]+$/) {print "ok $n\n";} else {print "not ok $n\n";} $n++; } # ======================================================= $x = '$w->from_Oct( $s = $v->to_Oct() );'; $t = 2; $r = 'OCT'; $w->from_Oct( $s = $v->to_Oct() ); if ($v->equal($w)) {print "ok $n\n";} else {print "not ok $n\n";trace($b,$r,$s,$t,$v,$w,$x);} $n++; $x = '$t = $w->String_Import( $s = $v->String_Export( $r ) );'; $t = $w->String_Import( $s = $v->String_Export( $r = 'bin' ) ); if ($v->equal($w)) {print "ok $n\n";} else {print "not ok $n\n";trace($b,$r,$s,$t,$v,$w,$x);} $n++; $t = $w->String_Import( $s = $v->String_Export( $r = 'oct' ) ); if ($v->equal($w)) {print "ok $n\n";} else {print "not ok $n\n";trace($b,$r,$s,$t,$v,$w,$x);} $n++; $t = $w->String_Import( $s = $v->String_Export( $r = 'hex' ) ); if ($v->equal($w)) {print "ok $n\n";} else {print "not ok $n\n";trace($b,$r,$s,$t,$v,$w,$x);} $n++; $t = $w->String_Import( $s = $v->String_Export( $r = 'dec' ) ); if ($v->equal($w)) {print "ok $n\n";} else {print "not ok $n\n";trace($b,$r,$s,$t,$v,$w,$x);} $n++; $t = $w->String_Import( $s = $v->String_Export( $r = 'enum' ) ); if ($v->equal($w)) {print "ok $n\n";} else {print "not ok $n\n";trace($b,$r,$s,$t,$v,$w,$x);} $n++; $t = $w->String_Import( $s = $v->String_Export( $r = 'pack' ) ); if ($v->equal($w)) {print "ok $n\n";} else {print "not ok $n\n";trace($b,$r,$s,$t,$v,$w,$x);} $n++; # ======================================================= $x = '$t = $w->String_Import( $s = $v->to_Type() );'; $r = 'bin'; $t = $w->String_Import( $s = $v->to_Bin() ); if ($v->equal($w)) {print "ok $n\n";} else {print "not ok $n\n";trace($b,$r,$s,$t,$v,$w,$x);} $n++; if ($i < 2) { $r = 'oct'; $t = $w->String_Import( $s = $v->to_Oct() ); if ($v->equal($w)) {print "ok $n\n";} else {print "not ok $n\n";trace($b,$r,$s,$t,$v,$w,$x);} $n++; $r = 'hex'; $t = $w->String_Import( $s = $v->to_Hex() ); if ($v->equal($w)) {print "ok $n\n";} else {print "not ok $n\n";trace($b,$r,$s,$t,$v,$w,$x);} $n++; } $r = 'dec'; $t = $w->String_Import( $s = $v->to_Dec() ); if ($v->equal($w)) {print "ok $n\n";} else {print "not ok $n\n";trace($b,$r,$s,$t,$v,$w,$x);} $n++; $r = 'enum'; $t = $w->String_Import( $s = $v->to_Enum() ); if ($v->equal($w)) {print "ok $n\n";} else {print "not ok $n\n";trace($b,$r,$s,$t,$v,$w,$x);} $n++; $r = 'pack'; $t = $w->String_Import( $s = ':' . $v->Size(). ':' . $v->Block_Read() ); if ($v->equal($w)) {print "ok $n\n";} else {print "not ok $n\n";trace($b,$r,$s,$t,$v,$w,$x);} $n++; # ======================================================= $x = '$w = Bit::Vector->new_Oct( $b, $s = $v->to_Oct() );'; $t = 2; $r = 'OCT'; $w = Bit::Vector->new_Oct( $b, $s = $v->to_Oct() ); if ($v->equal($w)) {print "ok $n\n";} else {print "not ok $n\n";trace($b,$r,$s,$t,$v,$w,$x);} $n++; $x = '($w,$t) = Bit::Vector->new_String( $b, $s = $v->String_Export( $r ) );'; ($w,$t) = Bit::Vector->new_String( $b, $s = $v->String_Export( $r = 'bin' ) ); if ($v->equal($w)) {print "ok $n\n";} else {print "not ok $n\n";trace($b,$r,$s,$t,$v,$w,$x);} $n++; ($w,$t) = Bit::Vector->new_String( $b, $s = $v->String_Export( $r = 'oct' ) ); if ($v->equal($w)) {print "ok $n\n";} else {print "not ok $n\n";trace($b,$r,$s,$t,$v,$w,$x);} $n++; ($w,$t) = Bit::Vector->new_String( $b, $s = $v->String_Export( $r = 'hex' ) ); if ($v->equal($w)) {print "ok $n\n";} else {print "not ok $n\n";trace($b,$r,$s,$t,$v,$w,$x);} $n++; ($w,$t) = Bit::Vector->new_String( $b, $s = $v->String_Export( $r = 'dec' ) ); if ($v->equal($w)) {print "ok $n\n";} else {print "not ok $n\n";trace($b,$r,$s,$t,$v,$w,$x);} $n++; ($w,$t) = Bit::Vector->new_String( $b, $s = $v->String_Export( $r = 'enum' ) ); if ($v->equal($w)) {print "ok $n\n";} else {print "not ok $n\n";trace($b,$r,$s,$t,$v,$w,$x);} $n++; ($w,$t) = Bit::Vector->new_String( $b, $s = $v->String_Export( $r = 'pack' ) ); if ($v->equal($w)) {print "ok $n\n";} else {print "not ok $n\n";trace($b,$r,$s,$t,$v,$w,$x);} $n++; # ======================================================= $x = '$w = Bit::Vector->new_Oct( undef, $s = $v->to_Oct() );'; $t = 2; $r = 'OCT'; $w = Bit::Vector->new_Oct( undef, $s = $v->to_Oct() ); $w->Resize($b) if ($w->Size() != $b); if ($v->equal($w)) {print "ok $n\n";} else {print "not ok $n\n";trace($b,$r,$s,$t,$v,$w,$x);} $n++; $x = '($w,$t) = Bit::Vector->new_String( undef, $s = $v->String_Export( $r ) );'; ($w,$t) = Bit::Vector->new_String( undef, $s = $v->String_Export( $r = 'bin' ) ); $w->Resize($b) if ($w->Size() != $b); if ($v->equal($w)) {print "ok $n\n";} else {print "not ok $n\n";trace($b,$r,$s,$t,$v,$w,$x);} $n++; ($w,$t) = Bit::Vector->new_String( undef, $s = $v->String_Export( $r = 'oct' ) ); $w->Resize($b) if ($w->Size() != $b); if ($v->equal($w)) {print "ok $n\n";} else {print "not ok $n\n";trace($b,$r,$s,$t,$v,$w,$x);} $n++; ($w,$t) = Bit::Vector->new_String( undef, $s = $v->String_Export( $r = 'hex' ) ); $w->Resize($b) if ($w->Size() != $b); if ($v->equal($w)) {print "ok $n\n";} else {print "not ok $n\n";trace($b,$r,$s,$t,$v,$w,$x);} $n++; ($w,$t) = Bit::Vector->new_String( undef, $s = $v->String_Export( $r = 'dec' ) ); if ($w->Size() != $b) { if ($v->msb and $w->Size() < $b) # needs sign extension when increasing size { $u = $w; $w = Bit::Vector->new($b); $w->Copy($u); } else { $w->Resize($b); } } if ($v->equal($w)) {print "ok $n\n";} else {print "not ok $n\n";trace($b,$r,$s,$t,$v,$w,$x);} $n++; ($w,$t) = Bit::Vector->new_String( undef, $s = $v->String_Export( $r = 'enum' ) ); $w->Resize($b) if ($w->Size() != $b); if ($v->equal($w)) {print "ok $n\n";} else {print "not ok $n\n";trace($b,$r,$s,$t,$v,$w,$x);} $n++; ($w,$t) = Bit::Vector->new_String( undef, $s = $v->String_Export( $r = 'pack' ) ); $w->Resize($b) if ($w->Size() != $b); if ($v->equal($w)) {print "ok $n\n";} else {print "not ok $n\n";trace($b,$r,$s,$t,$v,$w,$x);} $n++; # ======================================================= } # for ( $i = 0; $i < 3; $i++ ) } # foreach $b (@l) # ------------------------------------------------------- sub type { return 'bin' if ($_[0] == 1); return 'oct' if ($_[0] == 2); return 'dec' if ($_[0] == 3); return 'hex' if ($_[0] == 4); return 'enum' if ($_[0] == 5); return 'pack' if ($_[0] == 6); return undef; } sub trace { my($b,$r,$s,$t,$v,$w,$x) = @_; warn( "$x\n" ); warn( "$r, $b bits\n" ); warn( type($t) . ": <$s>\n" ); warn( "v = <" . $v->to_Hex() . ">\n" ); warn( "w = <" . $w->to_Hex() . ">\n" ); } __END__