5 use Test::More 'no_plan';
7 use Maasha::AlignTwoSeq;
10 test_new_space_left();
11 test_new_space_right();
13 test_matches_select();
15 test_word_size_calc();
20 test_match_expand_forward_end_space();
21 test_match_expand_forward_end_match();
22 test_match_expand_backward_end_space();
23 test_match_expand_backward_end_match();
24 test_match_expand_end_space();
25 test_match_expand_end_match();
27 test_match_redundant_add();
28 test_match_redundant();
30 test_matches_filter();
32 test_match_score_narrow();
33 test_match_score_diag();
34 test_match_score_len();
42 my $space = { Q_SEQ => \"ATCG", S_SEQ => \"atcg" };
44 Maasha::AlignTwoSeq::new_space( $space );
46 is( ${ $space->{ 'Q_SEQ' } }, "ATCG" );
47 is( ${ $space->{ 'S_SEQ' } }, "atcg" );
48 ok( $space->{ 'Q_MIN' } == 0 );
49 ok( $space->{ 'S_MIN' } == 0 );
50 ok( $space->{ 'Q_MAX' } == 3 );
51 ok( $space->{ 'S_MAX' } == 3 );
55 sub test_new_space_left
57 my ( $best_match, $space, $new_space );
77 $new_space = Maasha::AlignTwoSeq::new_space_left( $best_match, $space );
79 ok( defined $new_space );
80 is( ${ $new_space->{ 'Q_SEQ' } }, "ATCG" );
81 is( ${ $new_space->{ 'S_SEQ' } }, "atcg" );
82 ok( $new_space->{ 'Q_MIN' } == 0 );
83 ok( $new_space->{ 'S_MIN' } == 0 );
84 ok( $new_space->{ 'Q_MAX' } == 1 );
85 ok( $new_space->{ 'S_MAX' } == 1 );
89 sub test_new_space_right
91 my ( $best_match, $space, $new_space );
111 $new_space = Maasha::AlignTwoSeq::new_space_right( $best_match, $space );
113 ok( defined $new_space );
114 is( ${ $new_space->{ 'Q_SEQ' } }, "ATCG" );
115 is( ${ $new_space->{ 'S_SEQ' } }, "atcg" );
116 ok( $new_space->{ 'Q_MIN' } == 2 );
117 ok( $new_space->{ 'S_MIN' } == 2 );
118 ok( $new_space->{ 'Q_MAX' } == 3 );
119 ok( $new_space->{ 'S_MAX' } == 3 );
123 sub test_matches_select
125 my ( $matches, $space );
128 { Q_BEG => 9, S_BEG => 9, Q_END => 10, S_END => 10 },
129 { Q_BEG => 10, S_BEG => 10, Q_END => 20, S_END => 20 },
130 { Q_BEG => 20, S_BEG => 20, Q_END => 21, S_END => 21 },
142 Maasha::AlignTwoSeq::matches_select( $matches, $space );
144 ok( scalar @{ $matches } == 1 );
148 sub test_word_size_calc
150 ok( Maasha::AlignTwoSeq::word_size_calc( { Q_MIN => 0, S_MIN => 0, Q_MAX => 1, S_MAX => 1 } ) == 1 );
151 ok( Maasha::AlignTwoSeq::word_size_calc( { Q_MIN => 0, S_MIN => 0, Q_MAX => 200, S_MAX => 200 } ) == 10 + 1 );
157 my ( $space, $word_size, $index );
170 $index = Maasha::AlignTwoSeq::seq_index( $space, $word_size );
172 ok( scalar keys %{ $index } == 3 );
173 ok( exists $index->{ 'AT' } );
174 ok( exists $index->{ 'TC' } );
175 ok( exists $index->{ 'CG' } );
176 ok( $index->{ 'AT' }->[ 0 ] == 0 );
177 ok( $index->{ 'TC' }->[ 0 ] == 1 );
178 ok( $index->{ 'CG' }->[ 0 ] == 2 );
184 my ( $space, $word_size, $index, $matches );
197 $index = Maasha::AlignTwoSeq::seq_index( $space, $word_size );
198 $matches = Maasha::AlignTwoSeq::seq_scan( $index, $space, $word_size );
200 ok( scalar @{ $matches } == 1 );
201 ok( $matches->[ 0 ]->{ 'Q_BEG' } == 0 );
202 ok( $matches->[ 0 ]->{ 'S_BEG' } == 0 );
203 ok( $matches->[ 0 ]->{ 'Q_END' } == 3 );
204 ok( $matches->[ 0 ]->{ 'S_END' } == 3 );
205 ok( $matches->[ 0 ]->{ 'LEN' } == 4 );
206 ok( $matches->[ 0 ]->{ 'SCORE' } == 0 );
210 sub test_matches_find
212 my ( $space, $matches );
214 $space = { Q_SEQ => \"ATCG", S_SEQ => \"ATCG", Q_MIN => 0, S_MIN => 0, Q_MAX => 3, S_MAX => 3 };
216 $matches = Maasha::AlignTwoSeq::matches_find( $space );
218 ok( scalar @{ $matches } == 1 );
219 ok( $matches->[ 0 ]->{ 'Q_BEG' } == 0 );
220 ok( $matches->[ 0 ]->{ 'S_BEG' } == 0 );
221 ok( $matches->[ 0 ]->{ 'Q_END' } == 3 );
222 ok( $matches->[ 0 ]->{ 'S_END' } == 3 );
223 ok( $matches->[ 0 ]->{ 'LEN' } == 4 );
225 $space = { Q_SEQ => \"ATXXGAT", S_SEQ => \"ATCGAT", Q_MIN => 0, S_MIN => 0, Q_MAX => 6, S_MAX => 5 };
227 $matches = Maasha::AlignTwoSeq::matches_find( $space );
229 ok( scalar @{ $matches } == 4 );
230 ok( $matches->[ 0 ]->{ 'Q_BEG' } == 0 );
231 ok( $matches->[ 0 ]->{ 'S_BEG' } == 0 );
232 ok( $matches->[ 0 ]->{ 'Q_END' } == 1 );
233 ok( $matches->[ 0 ]->{ 'S_END' } == 1 );
234 ok( $matches->[ 0 ]->{ 'LEN' } == 2 );
235 ok( $matches->[ 1 ]->{ 'Q_BEG' } == 5 );
236 ok( $matches->[ 1 ]->{ 'S_BEG' } == 0 );
237 ok( $matches->[ 1 ]->{ 'Q_END' } == 6 );
238 ok( $matches->[ 1 ]->{ 'S_END' } == 1 );
239 ok( $matches->[ 1 ]->{ 'LEN' } == 2 );
240 ok( $matches->[ 2 ]->{ 'Q_BEG' } == 4 );
241 ok( $matches->[ 2 ]->{ 'S_BEG' } == 3 );
242 ok( $matches->[ 2 ]->{ 'Q_END' } == 6 );
243 ok( $matches->[ 2 ]->{ 'S_END' } == 5 );
244 ok( $matches->[ 2 ]->{ 'LEN' } == 3 );
245 ok( $matches->[ 3 ]->{ 'Q_BEG' } == 0 );
246 ok( $matches->[ 3 ]->{ 'S_BEG' } == 4 );
247 ok( $matches->[ 3 ]->{ 'Q_END' } == 1 );
248 ok( $matches->[ 3 ]->{ 'S_END' } == 5 );
249 ok( $matches->[ 3 ]->{ 'LEN' } == 2 );
252 sub test_match_expand_forward_end_space
254 my ( $match, $space );
274 Maasha::AlignTwoSeq::match_expand_forward( $match, $space );
276 ok( $match->{ 'Q_BEG' } == 1 );
277 ok( $match->{ 'S_BEG' } == 1 );
278 ok( $match->{ 'Q_END' } == 3 );
279 ok( $match->{ 'S_END' } == 3 );
280 ok( $match->{ 'LEN' } == 3 );
284 sub test_match_expand_forward_end_match
286 my ( $match, $space );
306 Maasha::AlignTwoSeq::match_expand_forward( $match, $space );
308 ok( $match->{ 'Q_BEG' } == 1 );
309 ok( $match->{ 'S_BEG' } == 1 );
310 ok( $match->{ 'Q_END' } == 3 );
311 ok( $match->{ 'S_END' } == 3 );
312 ok( $match->{ 'LEN' } == 3 );
316 sub test_match_expand_backward_end_space
318 my ( $match, $space );
338 Maasha::AlignTwoSeq::match_expand_backward( $match, $space );
340 ok( $match->{ 'Q_BEG' } == 0 );
341 ok( $match->{ 'S_BEG' } == 0 );
342 ok( $match->{ 'Q_END' } == 2 );
343 ok( $match->{ 'S_END' } == 2 );
344 ok( $match->{ 'LEN' } == 3 );
348 sub test_match_expand_backward_end_match
350 my ( $match, $space );
370 Maasha::AlignTwoSeq::match_expand_backward( $match, $space );
372 ok( $match->{ 'Q_BEG' } == 1 );
373 ok( $match->{ 'S_BEG' } == 1 );
374 ok( $match->{ 'Q_END' } == 3 );
375 ok( $match->{ 'S_END' } == 3 );
376 ok( $match->{ 'LEN' } == 3 );
380 sub test_match_expand_end_space
382 my ( $match, $space );
402 Maasha::AlignTwoSeq::match_expand( $match, $space );
404 ok( $match->{ 'Q_BEG' } == 0 );
405 ok( $match->{ 'S_BEG' } == 0 );
406 ok( $match->{ 'Q_END' } == 3 );
407 ok( $match->{ 'S_END' } == 3 );
408 ok( $match->{ 'LEN' } == 4 );
412 sub test_match_expand_end_match
414 my ( $match, $space );
434 Maasha::AlignTwoSeq::match_expand( $match, $space );
436 ok( $match->{ 'Q_BEG' } == 1 );
437 ok( $match->{ 'S_BEG' } == 1 );
438 ok( $match->{ 'Q_END' } == 4 );
439 ok( $match->{ 'S_END' } == 4 );
440 ok( $match->{ 'LEN' } == 4 );
444 sub test_match_redundant_add
450 Maasha::AlignTwoSeq::match_redundant_add( { Q_BEG => 10, Q_END => 20, S_BEG => 110, S_END => 120 }, $redundant );
451 Maasha::AlignTwoSeq::match_redundant_add( { Q_BEG => 15, Q_END => 25, S_BEG => 210, S_END => 220 }, $redundant );
453 ok( scalar keys %{ $redundant } == 16 );
457 sub test_match_redundant
463 Maasha::AlignTwoSeq::match_redundant_add( { Q_BEG => 10, Q_END => 20, S_BEG => 110, S_END => 120 }, $redundant );
464 Maasha::AlignTwoSeq::match_redundant_add( { Q_BEG => 15, Q_END => 25, S_BEG => 210, S_END => 220 }, $redundant );
466 ok( Maasha::AlignTwoSeq::match_redundant( { Q_BEG => 10, Q_END => 20, S_BEG => 110, S_END => 120 }, $redundant ) );
467 ok( not Maasha::AlignTwoSeq::match_redundant( { Q_BEG => 1, Q_END => 2, S_BEG => 110, S_END => 120 }, $redundant ) );
471 sub test_matches_filter
477 sub test_match_score_narrow
483 sub test_match_score_diag
489 sub test_match_score_len
501 sub test_align_two_seq
503 my ( $space, $matches );
510 $matches = Maasha::AlignTwoSeq::align_two_seq( $space, [] );
512 print Dumper( $matches );