package Ġorg . jetbrains . bio . genome . containers Ċ Ċ import Ġcom . google . common . collect . Iter ables Ċ import Ġorg . jetbrains . bio . genome . Range Ċ import Ġorg . junit . Test Ċ import Ġkotlin . test . assertEquals Ċ import Ġkotlin . test . assertFalse Ċ import Ġkotlin . test . assertTrue Ċ Ċ class ĠRange s Mer ging List Test Ġ{ ĊĠĠĠ Ġ@ Test Ġfun Ġtest Empty () Ġ{ ĊĠĠĠĠĠĠĠ ĠassertFalse ( Range ( 0 , Ġ 1 2 ) Ġin Ġrange List ()) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 0 , Ġrange List (). intersection Length ( Range ( 0 , Ġ 1 2 ))) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġtest Single () Ġ{ ĊĠĠĠĠĠĠĠ ĠassertTrue ( Range ( 0 , Ġ 1 2 ) Ġin Ġrange List ( Range ( 0 , Ġ 1 2 ))) ĊĠĠĠĠĠĠĠ ĠassertFalse ( Range ( 0 , Ġ 2 0 ) Ġin Ġrange List ( Range ( 0 , Ġ 1 2 ))) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 2 , Ġrange List ( Range ( 0 , Ġ 1 2 )). intersection Length ( Range ( 0 , Ġ 1 2 ))) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġtest Single Big Segment () Ġ{ ĊĠĠĠĠĠĠĠ ĠassertTrue ( Range ( 1 0 , Ġ 2 0 ) Ġin Ġrange List ( Range ( 0 , Ġ 1 0 0 ))) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġtest Single Ex ceeding Range () Ġ{ ĊĠĠĠĠĠĠĠ ĠassertFalse ( Range (- 1 0 0 , Ġ 1 0 0 ) Ġin Ġrange List ( Range ( 0 , Ġ 1 0 ))) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġtest Intersection Length () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrl Ġ= Ġrange List ( Range ( 0 , Ġ 1 0 )) ĊĠĠĠĠĠĠĠ ĠassertFalse ( Range ( 5 , Ġ 1 5 ) Ġin Ġrl ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 5 , Ġrl . intersection Length ( Range ( 5 , Ġ 1 5 ))) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 0 , Ġrl . intersection Length ( Range ( 0 , Ġ 1 5 ))) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 5 , Ġrl . intersection Length ( Range ( 5 , Ġ 1 0 ))) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 5 , Ġrl . intersection Length ( Range (- 1 0 , Ġ 5 ))) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 0 , Ġrl . intersection Length ( Range (- 1 0 , Ġ 1 0 ))) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 0 , Ġrl . intersection Length ( Range ( 2 0 , Ġ 3 0 ))) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 0 , Ġrl . intersection Length ( Range ( 1 0 , Ġ 1 5 ))) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġtest Double Intersection Length () Ġ{ ĊĠĠĠĠĠĠĠ ĠassertTrue ( Range ( 5 , Ġ 1 5 ) Ġin Ġrange List ( Range ( 0 , Ġ 1 0 ), ĠRange ( 1 0 , Ġ 2 0 ))) ĊĠĠĠĠĠĠĠ ĠassertFalse ( Range ( 5 , Ġ 1 5 ) Ġin Ġrange List ( Range ( 0 , Ġ 1 0 ), ĠRange ( 1 1 , Ġ 2 0 ))) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 0 , Ġrange List ( Range ( 0 , Ġ 1 0 ), ĠRange ( 1 0 , Ġ 2 0 )). intersection Length ( Range ( 5 , Ġ 1 5 ))) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 5 , Ġrange List ( Range ( 0 , Ġ 1 0 ), ĠRange ( 2 0 , Ġ 3 0 )). intersection Length ( Range ( 1 5 , Ġ 2 5 ))) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 0 , Ġrange List ( Range ( 0 , Ġ 1 0 ), ĠRange ( 1 0 , Ġ 2 0 )). intersection Length ( Range (- 1 0 , Ġ- 5 ))) ĊĊĠĠĠĠĠĠĠ Ġval Ġrl Ġ= Ġrange List ( Range ( 0 , Ġ 1 0 ), ĠRange ( 2 0 , Ġ 3 0 ), ĠRange ( 4 0 , Ġ 5 0 )) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġrl . intersection Length ( Range ( 3 5 , Ġ 4 1 ))) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 0 , Ġrl . intersection Length ( Range ( 3 0 , Ġ 4 0 ))) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġrl . intersection Length ( Range ( 2 9 , Ġ 4 0 ))) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġrl . intersection Length ( Range ( 3 0 , Ġ 4 1 ))) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 2 , Ġrl . intersection Length ( Range ( 2 9 , Ġ 4 1 ))) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 2 0 , Ġrl . intersection Length ( Range ( 5 , Ġ 4 5 ))) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġtest Non Sorted () Ġ{ ĊĠĠĠĠĠĠĠ ĠassertTrue ( Range ( 1 1 , Ġ 1 2 ) Ġin Ġrange List ( Range ( 1 0 , Ġ 2 0 ), ĠRange ( 0 , Ġ 5 ))) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġtest Intersect ing Ranges () Ġ{ ĊĠĠĠĠĠĠĠ ĠassertEquals ( 3 0 , Ġrange List ( Range ( 0 , Ġ 2 0 ), ĠRange ( 1 0 , Ġ 3 0 )). intersection Length ( Range ( 0 , Ġ 3 0 ))) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġtest Iteration () Ġ{ ĊĠĠĠĠĠĠĠ ĠassertEquals ( 0 , ĠIter ables . size ( range List ())) ĊĊĠĠĠĠĠĠĠ Ġval Ġranges Ġ= ĠarrayOf ( Range ( 0 , Ġ 2 0 ), ĠRange ( 2 5 , Ġ 3 0 )) ĊĠĠĠĠĠĠĠ ĠassertEquals ( ranges . toList (), Ġrange List (* ranges ). toList ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġtest Or With Empty Or Self () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrl Ġ= Ġrange List ( Range ( 0 , Ġ 1 0 ), ĠRange ( 2 0 , Ġ 3 0 )) ĊĠĠĠĠĠĠĠ ĠassertEquals ( rl . toList (), Ġ( rl Ġor Ġrange List ()). toList ()) ĊĠĠĠĠĠĠĠ ĠassertEquals ( rl . toList (), Ġ( rl Ġor Ġrl ). toList ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġtest Or Without Inter sections () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrl 1 Ġ= Ġrange List ( Range ( 0 , Ġ 1 0 )) ĊĠĠĠĠĠĠĠ Ġval Ġrl 2 Ġ= Ġrange List ( Range ( 2 0 , Ġ 3 0 )) ĊĠĠĠĠĠĠĠ ĠassertEquals ( range List ( Range ( 0 , Ġ 1 0 ), ĠRange ( 2 0 , Ġ 3 0 )). toList (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( rl 1 Ġor Ġrl 2 ). toList ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġtest Or With Inter sections () Ġ{ ĊĠĠĠĠĠĠĠ ĠassertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrange List ( Range ( 0 , Ġ 3 0 )). toList (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( range List ( Range ( 0 , Ġ 1 0 )) Ġor Ġrange List ( Range ( 5 , Ġ 3 0 ))). toList ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġtest And With Empty () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrl Ġ= Ġrange List ( Range ( 0 , Ġ 1 0 ), ĠRange ( 2 0 , Ġ 3 0 )) ĊĠĠĠĠĠĠĠ ĠassertEquals ( emptyList < Range >(), Ġ( rl Ġand Ġrange List ()). toList ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġtest And With Self () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrl Ġ= Ġrange List ( Range ( 0 , Ġ 1 0 ), ĠRange ( 2 0 , Ġ 3 0 )) ĊĠĠĠĠĠĠĠ ĠassertEquals ( rl . toList (), Ġ( rl Ġand Ġrl ). toList ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġtest And () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrl 1 Ġ= Ġrange List ( Range ( 0 , Ġ 1 0 )) ĊĠĠĠĠĠĠĠ Ġval Ġrl 2 Ġ= Ġrange List ( Range ( 5 , Ġ 3 0 )) ĊĠĠĠĠĠĠĠ ĠassertEquals ( range List ( Range ( 5 , Ġ 1 0 )). toList (), Ġ( rl 1 Ġand Ġrl 2 ). toList ()) ĊĠĠĠĠĠĠĠ ĠassertEquals ( range List ( Range ( 5 , Ġ 1 0 ), ĠRange ( 2 5 , Ġ 3 0 )). toList (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ(( rl 1 Ġor Ġrange List ( Range ( 2 5 , Ġ 3 0 ))) Ġand Ġrl 2 ). toList ()) ĊĠĠĠĠĠĠĠ ĠassertEquals ( range List ( Range ( 5 , Ġ 1 0 ), ĠRange ( 2 5 , Ġ 3 0 )). toList (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( rl 2 Ġand Ġ( rl 1 Ġor Ġrange List ( Range ( 2 5 , Ġ 3 0 )) )). toList ()) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( range List ( Range ( 6 , Ġ 8 )). toList (), Ġ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrange List ( Range ( 0 , Ġ 2 ), ĠRange ( 6 , Ġ 8 )) Ġand Ġrl 2 ). toList ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġtest Overlap () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrl 1 Ġ= Ġrange List ( Range ( 1 0 , Ġ 3 0 )) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( rl 1 . toList (), Ġ( rl 1 Ġoverlap Ġrange List ( Range ( 7 , Ġ 1 2 ))). toList ()) ĊĠĠĠĠĠĠĠ ĠassertEquals ( rl 1 . toList (), Ġ( rl 1 Ġoverlap Ġrange List ( Range ( 2 , Ġ 7 ), ĠRange ( 2 0 , Ġ 4 0 ))). toList ()) ĊĠĠĠĠĠĠĠ ĠassertEquals ( listOf (), Ġ( rl 1 Ġoverlap Ġrange List ( Range ( 2 , Ġ 7 ))). toList ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġtest Range Minus () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġuniverse Ġ= ĠRange ( 0 , Ġ 1 0 0 ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( listOf ( universe ), Ġuniverse Ġ- Ġempty List ()) ĊĠĠĠĠĠĠĠ ĠassertEquals ( listOf ( Range ( 0 , Ġ 2 0 ), ĠRange ( 4 0 , Ġ 1 0 0 )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuniverse Ġ- ĠlistOf ( Range ( 2 0 , Ġ 4 0 ))) ĊĠĠĠĠĠĠĠ ĠassertEquals ( listOf ( Range ( 4 0 , Ġ 1 0 0 )), Ġuniverse Ġ- ĠlistOf ( Range ( 0 , Ġ 4 0 ))) ĊĠĠĠĠĠĠĠ ĠassertEquals ( listOf ( Range ( 0 , Ġ 4 0 )), Ġuniverse Ġ- ĠlistOf ( Range ( 4 0 , Ġ 1 0 0 ))) ĊĠĠĠĠĠĠĠ ĠassertEquals ( emptyList < Range >(), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuniverse Ġ- ĠlistOf ( Range ( 0 , Ġ 4 0 ), ĠRange ( 4 0 , Ġ 1 0 0 ))) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġtest Intersect () Ġ{ ĊĠĠĠĠĠĠĠ ĠassertEquals ( listOf ( Range ( 0 , Ġ 1 0 0 )), Ġrange List ( Range ( 0 , Ġ 1 0 0 )). intersect ( Range ( 0 , Ġ 1 0 0 ))) ĊĠĠĠĠĠĠĠ ĠassertEquals ( listOf ( Range ( 1 0 , Ġ 9 0 )), Ġrange List ( Range ( 0 , Ġ 1 0 0 )). intersect ( Range ( 1 0 , Ġ 9 0 ))) ĊĠĠĠĠĠĠĠ ĠassertEquals ( listOf ( Range ( 1 0 , Ġ 9 0 )), Ġrange List ( Range ( 1 0 , Ġ 9 0 )). intersect ( Range ( 0 , Ġ 1 0 0 ))) ĊĠĠĠĠĠĠĠ ĠassertEquals ( listOf ( Range ( 2 0 , Ġ 4 0 ), ĠRange ( 5 0 , Ġ 7 0 )), Ġrange List ( Range ( 0 , Ġ 4 0 ), ĠRange ( 5 0 , Ġ 1 0 0 )). intersect ( Range ( 2 0 , Ġ 7 0 ))) ĊĠĠĠ Ġ} Ċ Ċ }