@@ -1297,6 +1297,35 @@ test_alignments_partial_isolation(void)
12971297 tsk_treeseq_free (& ts );
12981298}
12991299
1300+ static void
1301+ test_alignments_return_code_truncated_interval (void )
1302+ {
1303+ int ret = 0 ;
1304+ const char * nodes = "1 0 0 -1\n"
1305+ "1 0 0 -1\n"
1306+ "0 1 0 -1\n" ;
1307+ /* Tree over [0,5): samples 0 and 1 under root 2.
1308+ * Tree over [5,10): only sample 1 under root 2 (sample 0 isolated). */
1309+ const char * edges = "0 5 2 0\n"
1310+ "0 10 2 1\n" ;
1311+ tsk_treeseq_t ts ;
1312+ const tsk_id_t * samples ;
1313+ tsk_size_t n ;
1314+ char buf [10 ];
1315+ const char * ref = "NNNNNNNNNN" ;
1316+
1317+ tsk_treeseq_from_text (& ts , 10 , nodes , edges , NULL , NULL , NULL , NULL , NULL , 0 );
1318+ samples = tsk_treeseq_get_samples (& ts );
1319+ n = tsk_treeseq_get_num_samples (& ts );
1320+
1321+ ret = tsk_treeseq_decode_alignments (& ts , ref , 10 , samples , n , 0 , 5 , 'N' , buf , 0 );
1322+ CU_ASSERT_EQUAL_FATAL (ret , 0 );
1323+ CU_ASSERT_NSTRING_EQUAL (buf + 0 * 5 , "NNNNN" , 5 );
1324+ CU_ASSERT_NSTRING_EQUAL (buf + 1 * 5 , "NNNNN" , 5 );
1325+
1326+ tsk_treeseq_free (& ts );
1327+ }
1328+
13001329static void
13011330test_alignments_invalid_allele_length (void )
13021331{
@@ -1367,6 +1396,64 @@ test_alignments_discrete_genome_required(void)
13671396 tsk_treeseq_free (& ts );
13681397}
13691398
1399+ static void
1400+ test_alignments_null_reference (void )
1401+ {
1402+ int ret = 0 ;
1403+ tsk_treeseq_t ts ;
1404+ const tsk_id_t * samples ;
1405+ tsk_size_t n ;
1406+ char buf [10 ];
1407+
1408+ build_balanced_three_example_align (& ts );
1409+ samples = tsk_treeseq_get_samples (& ts );
1410+ n = tsk_treeseq_get_num_samples (& ts );
1411+
1412+ ret = tsk_treeseq_decode_alignments (& ts , NULL , 10 , samples , n , 0 , 10 , 'N' , buf , 0 );
1413+ CU_ASSERT_EQUAL_FATAL (ret , TSK_ERR_BAD_PARAM_VALUE );
1414+ tsk_treeseq_free (& ts );
1415+ }
1416+
1417+ static void
1418+ test_alignments_null_nodes_or_buf (void )
1419+ {
1420+ int ret = 0 ;
1421+ tsk_treeseq_t ts ;
1422+ const char * ref = "NNNNNNNNNN" ;
1423+ const tsk_id_t * samples ;
1424+ tsk_size_t n ;
1425+ char buf [30 ];
1426+
1427+ build_balanced_three_example_align (& ts );
1428+ samples = tsk_treeseq_get_samples (& ts );
1429+ n = tsk_treeseq_get_num_samples (& ts );
1430+
1431+ ret = tsk_treeseq_decode_alignments (& ts , ref , 10 , NULL , n , 0 , 10 , 'N' , buf , 0 );
1432+ CU_ASSERT_EQUAL_FATAL (ret , TSK_ERR_BAD_PARAM_VALUE );
1433+
1434+ ret = tsk_treeseq_decode_alignments (& ts , ref , 10 , samples , n , 0 , 10 , 'N' , NULL , 0 );
1435+ CU_ASSERT_EQUAL_FATAL (ret , TSK_ERR_BAD_PARAM_VALUE );
1436+
1437+ tsk_treeseq_free (& ts );
1438+ }
1439+
1440+ static void
1441+ test_alignments_node_out_of_bounds (void )
1442+ {
1443+ int ret = 0 ;
1444+ tsk_treeseq_t ts ;
1445+ const char * ref = "NNNNNNNNNN" ;
1446+ tsk_id_t bad_node ;
1447+ char buf [10 ];
1448+
1449+ build_balanced_three_example_align (& ts );
1450+ bad_node = (tsk_id_t ) tsk_treeseq_get_num_nodes (& ts );
1451+
1452+ ret = tsk_treeseq_decode_alignments (& ts , ref , 10 , & bad_node , 1 , 0 , 10 , 'N' , buf , 0 );
1453+ CU_ASSERT_EQUAL_FATAL (ret , TSK_ERR_NODE_OUT_OF_BOUNDS );
1454+ tsk_treeseq_free (& ts );
1455+ }
1456+
13701457static void
13711458test_alignments_isolated_as_not_missing (void )
13721459{
@@ -1600,6 +1687,8 @@ main(int argc, char **argv)
16001687 { "test_alignments_basic_default" , test_alignments_basic_default },
16011688 { "test_alignments_reference_sequence" , test_alignments_reference_sequence },
16021689 { "test_alignments_partial_isolation" , test_alignments_partial_isolation },
1690+ { "test_alignments_return_code_truncated_interval" ,
1691+ test_alignments_return_code_truncated_interval },
16031692 { "test_alignments_isolated_as_not_missing" ,
16041693 test_alignments_isolated_as_not_missing },
16051694 { "test_alignments_internal_node_non_sample" ,
@@ -1610,6 +1699,9 @@ main(int argc, char **argv)
16101699 { "test_alignments_non_integer_bounds" , test_alignments_non_integer_bounds },
16111700 { "test_alignments_discrete_genome_required" ,
16121701 test_alignments_discrete_genome_required },
1702+ { "test_alignments_null_reference" , test_alignments_null_reference },
1703+ { "test_alignments_null_nodes_or_buf" , test_alignments_null_nodes_or_buf },
1704+ { "test_alignments_node_out_of_bounds" , test_alignments_node_out_of_bounds },
16131705 { "test_alignments_missing_char_collision" ,
16141706 test_alignments_missing_char_collision },
16151707 { "test_alignments_zero_nodes_ok" , test_alignments_zero_nodes_ok },
0 commit comments