@@ -755,6 +755,7 @@ def test_gap_around_small_insertion(exact_aligner, visualizer):
755755
756756 results = list (stitch_consensus (contigs ))
757757 assert len (results ) == 1
758+ assert results [0 ].seq == "P" * 5 + "A" * 10 + "B" * 20 + "C" * 10 + "Z" * 5
758759 assert len (visualizer ().elements ) > len (contigs )
759760
760761
@@ -782,6 +783,50 @@ def test_gap_around_big_insertion(exact_aligner, visualizer):
782783
783784 results = list (stitch_consensus (contigs ))
784785 assert len (results ) == 1
786+ assert results [0 ].seq == "P" * 5 + "A" * 10 + "B" * 20 + "C" * 10 + "Z" * 5
787+ assert len (visualizer ().elements ) > len (contigs )
788+
789+
790+ def test_stitch_with_insertion (exact_aligner , visualizer ):
791+ # Scenario: Contig is aligned with multiple hits, and the borders are correctly handled.
792+
793+ ref_seq = 'X' * 5 + 'A' * 10 + 'B' * 20 + 'C' * 10 + 'M' * 5
794+
795+ contigs = [
796+ GenotypedContig (name = 'a' ,
797+ seq = 'P' * 5 + 'A' * 10 + 'D' * 6 + 'C' * 10 + 'Z' * 5 ,
798+ ref_name = 'testref' ,
799+ group_ref = 'testref' ,
800+ ref_seq = ref_seq ,
801+ match_fraction = 0.3 ,
802+ ),
803+ ]
804+
805+ results = list (stitch_consensus (contigs ))
806+ assert len (results ) == 1
807+ assert results [0 ].seq == "PPPPPAAAAAAAAAADDDDDDCCCCCCCCCCZZZZZ"
808+ assert len (visualizer ().elements ) > len (contigs )
809+
810+
811+
812+ def test_stitch_cross_alignment (exact_aligner , visualizer ):
813+ # Scenario: Single contig is cross-aligned.
814+
815+ ref_seq = 'X' * 5 + 'A' * 10 + 'B' * 20 + 'C' * 10 + 'M' * 5
816+
817+ contigs = [
818+ GenotypedContig (name = 'a' ,
819+ seq = 'P' * 5 + 'C' * 10 + 'D' * 6 + 'A' * 10 + 'Z' * 5 ,
820+ ref_name = 'testref' ,
821+ group_ref = 'testref' ,
822+ ref_seq = ref_seq ,
823+ match_fraction = 0.3 ,
824+ ),
825+ ]
826+
827+ results = list (stitch_consensus (contigs ))
828+ assert len (results ) == 1
829+ assert results [0 ].seq == "AAAAAAAAAACCCCCCCCCC"
785830 assert len (visualizer ().elements ) > len (contigs )
786831
787832
0 commit comments