@@ -61,6 +61,7 @@ fn save_graph_to_fasta(graph: &UnitigGraph, out_fasta: &Path) {
6161 for unitig in & graph. unitigs {
6262 let unitig = unitig. borrow ( ) ;
6363 let seq = String :: from_utf8_lossy ( & unitig. forward_seq ) ;
64+ if seq. is_empty ( ) { continue ; }
6465 let circ = if unitig. is_isolated_and_circular ( ) {
6566 circ_count += 1 ;
6667 " circular=true" . to_string ( )
@@ -76,3 +77,70 @@ fn save_graph_to_fasta(graph: &UnitigGraph, out_fasta: &Path) {
7677 if non_circ_count == 1 { "" } else { "s" } ) ;
7778 eprintln ! ( ) ;
7879}
80+
81+
82+ #[ cfg( test) ]
83+ mod tests {
84+ use tempfile:: tempdir;
85+ use crate :: test_gfa:: * ;
86+ use super :: * ;
87+
88+ #[ test]
89+ fn test_gfa2fasta_1 ( ) {
90+ let temp_dir = tempdir ( ) . unwrap ( ) ;
91+ let fasta_file = temp_dir. path ( ) . join ( "temp.fasta" ) ;
92+ let ( graph, _) = UnitigGraph :: from_gfa_lines ( & get_test_gfa_1 ( ) ) ;
93+ save_graph_to_fasta ( & graph, & fasta_file) ;
94+ let contents = std:: fs:: read_to_string ( & fasta_file) . unwrap ( ) ;
95+ assert_eq ! ( contents, ">1 length=22\n TTCGCTGCGCTCGCTTCGCTTT\n \
96+ >2 length=18\n TGCCGTCGTCGCTGTGCA\n \
97+ >3 length=15\n TGCCTGAATCGCCTA\n \
98+ >4 length=10\n GCTCGGCTCG\n \
99+ >5 length=8\n CGAACCAT\n \
100+ >6 length=7\n TACTTGT\n \
101+ >7 length=5\n GCCTT\n \
102+ >8 length=4\n ATCT\n \
103+ >9 length=2\n GC\n \
104+ >10 length=1\n T\n ") ;
105+ }
106+
107+
108+ #[ test]
109+ fn test_gfa2fasta_2 ( ) {
110+ let temp_dir = tempdir ( ) . unwrap ( ) ;
111+ let fasta_file = temp_dir. path ( ) . join ( "temp.fasta" ) ;
112+ let ( graph, _) = UnitigGraph :: from_gfa_lines ( & get_test_gfa_2 ( ) ) ;
113+ save_graph_to_fasta ( & graph, & fasta_file) ;
114+ let contents = std:: fs:: read_to_string ( & fasta_file) . unwrap ( ) ;
115+ assert_eq ! ( contents, ">1 length=22\n ACCGCTGCGCTCGCTTCGCTCT\n \
116+ >2 length=5\n ATGAT\n \
117+ >3 length=4\n GCGC\n ") ;
118+ }
119+
120+
121+ #[ test]
122+ fn test_gfa2fasta_5 ( ) {
123+ let temp_dir = tempdir ( ) . unwrap ( ) ;
124+ let fasta_file = temp_dir. path ( ) . join ( "temp.fasta" ) ;
125+ let ( graph, _) = UnitigGraph :: from_gfa_lines ( & get_test_gfa_5 ( ) ) ;
126+ save_graph_to_fasta ( & graph, & fasta_file) ;
127+ let contents = std:: fs:: read_to_string ( & fasta_file) . unwrap ( ) ;
128+ assert_eq ! ( contents, ">1 length=19\n AGCATCGACATCGACTACG\n \
129+ >2 length=15\n AGCATCAGCATCAGC\n \
130+ >3 length=9\n GTCGCATTT\n \
131+ >4 length=7 circular=true\n TCGCGAA\n \
132+ >5 length=6\n TTAAAC\n \
133+ >6 length=4\n CACA\n ") ;
134+ }
135+
136+
137+ #[ test]
138+ fn test_gfa2fasta_8 ( ) {
139+ let temp_dir = tempdir ( ) . unwrap ( ) ;
140+ let fasta_file = temp_dir. path ( ) . join ( "temp.fasta" ) ;
141+ let ( graph, _) = UnitigGraph :: from_gfa_lines ( & get_test_gfa_8 ( ) ) ;
142+ save_graph_to_fasta ( & graph, & fasta_file) ;
143+ let contents = std:: fs:: read_to_string ( & fasta_file) . unwrap ( ) ;
144+ assert_eq ! ( contents, ">1 length=19 circular=true\n AGCATCGACATCGACTACG\n " ) ;
145+ }
146+ }
0 commit comments