@ -129,3 +129,132 @@ func Test_FingerprintBounds_Unless(t *testing.T) {
} , NewBounds ( 5 , 25 ) . Unless ( target ) )
assert . Nil ( t , NewBounds ( 14 , 15 ) . Unless ( target ) )
}
func Test_MultiFingerprintBounds ( t * testing . T ) {
for _ , tc := range [ ] struct {
desc string
mb MultiFingerprintBounds
target FingerprintBounds
exp MultiFingerprintBounds
} {
{
desc : "no elements" ,
mb : MultiFingerprintBounds { } ,
target : NewBounds ( 0 , 9 ) ,
exp : MultiFingerprintBounds {
NewBounds ( 0 , 9 ) ,
} ,
} ,
{
desc : "single element before" ,
mb : MultiFingerprintBounds {
NewBounds ( 5 , 9 ) ,
} ,
target : NewBounds ( 15 , 19 ) ,
exp : MultiFingerprintBounds {
NewBounds ( 5 , 9 ) ,
NewBounds ( 15 , 19 ) ,
} ,
} ,
{
desc : "single element after" ,
mb : MultiFingerprintBounds {
NewBounds ( 5 , 9 ) ,
} ,
target : NewBounds ( 0 , 3 ) ,
exp : MultiFingerprintBounds {
NewBounds ( 0 , 3 ) ,
NewBounds ( 5 , 9 ) ,
} ,
} ,
{
desc : "single element overlapping" ,
mb : MultiFingerprintBounds {
NewBounds ( 5 , 9 ) ,
} ,
target : NewBounds ( 0 , 14 ) ,
exp : MultiFingerprintBounds {
NewBounds ( 0 , 14 ) ,
} ,
} ,
{
desc : "multiple elements single overlapping" ,
mb : MultiFingerprintBounds {
NewBounds ( 5 , 9 ) ,
NewBounds ( 15 , 19 ) ,
} ,
target : NewBounds ( 0 , 6 ) ,
exp : MultiFingerprintBounds {
NewBounds ( 0 , 9 ) ,
NewBounds ( 15 , 19 ) ,
} ,
} ,
{
desc : "multiple elements single overlapping" ,
mb : MultiFingerprintBounds {
NewBounds ( 5 , 9 ) ,
NewBounds ( 15 , 19 ) ,
} ,
target : NewBounds ( 11 , 25 ) ,
exp : MultiFingerprintBounds {
NewBounds ( 5 , 9 ) ,
NewBounds ( 11 , 25 ) ,
} ,
} ,
{
desc : "multiple elements combining overlapping" ,
mb : MultiFingerprintBounds {
NewBounds ( 5 , 9 ) ,
NewBounds ( 15 , 19 ) ,
} ,
target : NewBounds ( 9 , 15 ) ,
exp : MultiFingerprintBounds {
NewBounds ( 5 , 19 ) ,
} ,
} ,
{
desc : "combination" ,
mb : MultiFingerprintBounds {
NewBounds ( 0 , 2 ) ,
NewBounds ( 5 , 9 ) ,
NewBounds ( 15 , 19 ) ,
NewBounds ( 25 , 29 ) ,
} ,
target : NewBounds ( 9 , 15 ) ,
exp : MultiFingerprintBounds {
NewBounds ( 0 , 2 ) ,
NewBounds ( 5 , 19 ) ,
NewBounds ( 25 , 29 ) ,
} ,
} ,
{
desc : "overlapping ranges" ,
mb : MultiFingerprintBounds {
NewBounds ( 0 , 6 ) ,
NewBounds ( 5 , 15 ) ,
} ,
target : NewBounds ( 8 , 10 ) ,
exp : MultiFingerprintBounds {
NewBounds ( 0 , 15 ) ,
} ,
} ,
{
desc : "disjoint ranges and target is between" ,
mb : MultiFingerprintBounds {
NewBounds ( 0 , 9 ) ,
NewBounds ( 30 , 39 ) ,
} ,
target : NewBounds ( 15 , 19 ) ,
exp : MultiFingerprintBounds {
NewBounds ( 0 , 9 ) ,
NewBounds ( 15 , 19 ) ,
NewBounds ( 30 , 39 ) ,
} ,
} ,
} {
t . Run ( tc . desc , func ( t * testing . T ) {
res := tc . mb . Union ( tc . target )
assert . Equal ( t , tc . exp , res )
} )
}
}