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 )