@@ -255,8 +255,8 @@ fn get_coordinate_by_read_id(spec: &Assay, modality: &String, read_id: &str) ->
255255 }
256256}
257257fn filter_index_no_overlap ( mut indices : Vec < Coordinate > ) -> Vec < Coordinate > {
258+ let mut seen: HashSet < String > = HashSet :: new ( ) ;
258259 for idx in & mut indices {
259- let mut seen: HashSet < String > = HashSet :: new ( ) ;
260260 let mut new_rcv: Vec < RegionCoordinate > = Vec :: new ( ) ;
261261 for rgn in idx. rcv . iter ( ) {
262262 let rid = rgn. region . region_id . clone ( ) ;
@@ -984,9 +984,33 @@ mod tests {
984984 let indices = get_index_by_reads ( & spec, & modality) ;
985985 let orig_count: usize = indices. iter ( ) . map ( |i| i. rcv . len ( ) ) . sum ( ) ;
986986 let filtered = filter_index_no_overlap ( indices) ;
987- // Filtered should have same or fewer total region coordinates
987+ // Non-overlapping DOGMA RNA reads should be unchanged.
988988 let filt_count: usize = filtered. iter ( ) . map ( |i| i. rcv . len ( ) ) . sum ( ) ;
989- assert ! ( filt_count <= orig_count) ;
989+ assert_eq ! ( filt_count, orig_count) ;
990+ }
991+
992+ #[ test]
993+ fn test_filter_index_no_overlap_removes_regions_seen_in_earlier_reads ( ) {
994+ let spec = load_spec ( & PathBuf :: from (
995+ "tests/fixtures/check_overlap_warning/spec.yaml" ,
996+ ) ) ;
997+ let modality = "rna" . to_string ( ) ;
998+ let indices = get_index_by_reads ( & spec, & modality) ;
999+ let filtered = filter_index_no_overlap ( indices) ;
1000+
1001+ assert_eq ! ( filtered. len( ) , 2 ) ;
1002+ assert_eq ! ( filtered[ 0 ] . query_id, "rna_R1" ) ;
1003+ assert_eq ! ( filtered[ 0 ] . rcv. len( ) , 2 ) ;
1004+ assert_eq ! (
1005+ filtered[ 0 ]
1006+ . rcv
1007+ . iter( )
1008+ . map( |region| region. region. region_id. clone( ) )
1009+ . collect:: <Vec <_>>( ) ,
1010+ vec![ "barcode" . to_string( ) , "umi" . to_string( ) ]
1011+ ) ;
1012+ assert_eq ! ( filtered[ 1 ] . query_id, "rna_R2" ) ;
1013+ assert_eq ! ( filtered[ 1 ] . rcv. len( ) , 0 ) ;
9901014 }
9911015
9921016 #[ test]
0 commit comments