Btrees
view release on metacpan or search on metacpan
t/testBtrees.t view on Meta::CPAN
$isize = int( rand($tsize/2) ) + 1;
$isize = $tsize if ( $isize >= $tsize );
push( @bytes, $isize );
$tsize -= $isize;
print "bytes: ", $bytes[$#bytes], " tsize: $tsize isize: $isize\n"
if ($debug);
}
$tree = _uniqueAddrs( undef, 0xFFFFFFFF, $size*2, @bytes );
traverse( $tree, $func ) if ($debug);
### If it doesn't hang, its working.
} elsif ( $test_num == 6 ) { ### Check for a balanced tree
print "Check for a balanced tree\n" if ($debug);
my $size = 0xFFFF;
my $mask = 0xFFFF;
my $tsize = $size;
my $isize = $size/2;
while ( $tsize ) {
$isize = int( rand($tsize/2) ) + 1;
$isize = $tsize if ( $isize >= $tsize );
push( @bytes, $isize );
$tsize -= $isize;
print "bytes: ", $bytes[$#bytes], " tsize: $tsize isize: $isize\n"
if ($debug);
}
$tree = _uniqueAddrs( undef, 0xFFFFFFFF, $size*2, @bytes );
traverse( $tree, $ckht );
print "height: $found\n" if ($debug);
$ret = 0 if $found > 8;
}
$ret;
}
#########################################
#
# Method: _addrRangeCompare
#
# _addrRangeCompare( $tree, $val );
#
# Compare relation used in btree call for the _uniqueAddrs method.
# Refer to Btrees.pm for further reference.
#
sub _addrRangeCompare {
my $val1 = shift || "0:0";
my $val2 = shift || "0:0";
my( $min1, $max1 ) = split( ':', $val1 );
my( $min2, $max2 ) = split( ':', $val2 );
return $max1 < $min2 ? -1 : $min1 > $max2 ? 1 : 0;
}
#########################################
#
# Method: _uniqueAddrs
#
# _uniqueAddrs( $tree, $mask, $maxSdramSize, @bytes );
#
# Insures no address fragment overlaps with any others address.
# Mask is used for alinged address requests of any alignment.
#
sub _uniqueAddrs {
my ( $tree, $mask, $maxSdramSize, @bytes ) = @_;
my ( $loc, $val, $add, $node );
while ( @bytes ) {
do {
$loc = ( int(rand($maxSdramSize)) & $mask );
$add = $loc + $bytes[0];
$val = $loc.":".$add;
} until( ($add < $maxSdramSize) &&
!defined(bal_tree_find($tree, $val, \&_addrRangeCompare)) );
($tree, $node) = bal_tree_add( $tree, $val, \&_addrRangeCompare );
shift(@bytes);
}
return $tree;
}
# Change this to your # of ok() calls + 1
BEGIN { $Total_tests = 7 }
::ok( _testBtrees(1) );
::ok( _testBtrees(2) );
::ok( _testBtrees(3) );
::ok( _testBtrees(4) );
::ok( _testBtrees(5) );
::ok( _testBtrees(6) );
( run in 0.652 second using v1.01-cache-2.11-cpan-364913b4093 )