@@ -331,7 +331,7 @@ verify_trees(tsk_treeseq_t *ts, tsk_size_t num_trees, tsk_id_t *parents)
331
331
uint32_t mutation_index , site_index ;
332
332
tsk_size_t k , l , tree_sites_length ;
333
333
const tsk_site_t * sites = NULL ;
334
- tsk_tree_t tree ;
334
+ tsk_tree_t tree , skip_tree ;
335
335
tsk_size_t num_edges ;
336
336
tsk_size_t num_nodes = tsk_treeseq_get_num_nodes (ts );
337
337
tsk_size_t num_sites = tsk_treeseq_get_num_sites (ts );
@@ -340,6 +340,7 @@ verify_trees(tsk_treeseq_t *ts, tsk_size_t num_trees, tsk_id_t *parents)
340
340
341
341
ret = tsk_tree_init (& tree , ts , 0 );
342
342
CU_ASSERT_EQUAL (ret , 0 );
343
+ ret = tsk_tree_init (& skip_tree , ts , 0 );
343
344
CU_ASSERT_EQUAL (tsk_treeseq_get_num_trees (ts ), num_trees );
344
345
345
346
CU_ASSERT_EQUAL (tree .index , -1 );
@@ -372,6 +373,22 @@ verify_trees(tsk_treeseq_t *ts, tsk_size_t num_trees, tsk_id_t *parents)
372
373
}
373
374
site_index ++ ;
374
375
}
376
+ /* Check the skip tree */
377
+ /* printf("Call first %p\n", (void *) &skip_tree); */
378
+ ret = tsk_tree_first (& skip_tree );
379
+ /* tsk_tree_print_state(&skip_tree, stdout); */
380
+ CU_ASSERT_EQUAL (ret , TSK_TREE_OK );
381
+ /* printf("Call seek %p\n", (void *) &skip_tree); */
382
+ ret = tsk_tree_seek (& skip_tree , breakpoints [j ], TSK_SEEK_SKIP );
383
+ CU_ASSERT_EQUAL (ret , 0 );
384
+ /* tsk_tree_print_state(&skip_tree, _devnull); */
385
+ check_trees_equal (& tree , & skip_tree );
386
+ ret = tsk_tree_last (& skip_tree );
387
+ CU_ASSERT_EQUAL (ret , TSK_TREE_OK );
388
+ ret = tsk_tree_seek (& skip_tree , breakpoints [j ], TSK_SEEK_SKIP );
389
+ CU_ASSERT_EQUAL (ret , 0 );
390
+ /* tsk_tree_print_state(&skip_tree, _devnull); */
391
+ check_trees_equal (& tree , & skip_tree );
375
392
j ++ ;
376
393
}
377
394
CU_ASSERT_EQUAL (ret , 0 );
@@ -381,6 +398,7 @@ verify_trees(tsk_treeseq_t *ts, tsk_size_t num_trees, tsk_id_t *parents)
381
398
CU_ASSERT_EQUAL (tsk_treeseq_get_sequence_length (ts ), breakpoints [j ]);
382
399
383
400
tsk_tree_free (& tree );
401
+ tsk_tree_free (& skip_tree );
384
402
385
403
verify_tree_pos (ts , num_trees , parents );
386
404
}
@@ -811,7 +829,8 @@ typedef struct {
811
829
} sample_count_test_t ;
812
830
813
831
static void
814
- verify_sample_counts (tsk_treeseq_t * ts , tsk_size_t num_tests , sample_count_test_t * tests )
832
+ verify_sample_counts (tsk_treeseq_t * ts , tsk_size_t num_tests , sample_count_test_t * tests ,
833
+ tsk_flags_t seek_options )
815
834
{
816
835
int ret ;
817
836
tsk_size_t j , num_samples , n , k ;
@@ -826,13 +845,9 @@ verify_sample_counts(tsk_treeseq_t *ts, tsk_size_t num_tests, sample_count_test_
826
845
827
846
ret = tsk_tree_init (& tree , ts , TSK_NO_SAMPLE_COUNTS );
828
847
CU_ASSERT_EQUAL (ret , 0 );
829
- ret = tsk_tree_first (& tree );
830
- CU_ASSERT_EQUAL_FATAL (ret , TSK_TREE_OK );
831
848
for (j = 0 ; j < num_tests ; j ++ ) {
832
- while (tree .index < tests [j ].tree_index ) {
833
- ret = tsk_tree_next (& tree );
834
- CU_ASSERT_EQUAL_FATAL (ret , TSK_TREE_OK );
835
- }
849
+ ret = tsk_tree_seek_index (& tree , tests [j ].tree_index , seek_options );
850
+ CU_ASSERT_EQUAL_FATAL (ret , 0 );
836
851
ret = tsk_tree_get_num_samples (& tree , tests [j ].node , & num_samples );
837
852
CU_ASSERT_EQUAL_FATAL (ret , 0 );
838
853
CU_ASSERT_EQUAL (tests [j ].count , num_samples );
@@ -850,10 +865,8 @@ verify_sample_counts(tsk_treeseq_t *ts, tsk_size_t num_tests, sample_count_test_
850
865
ret = tsk_tree_first (& tree );
851
866
CU_ASSERT_EQUAL_FATAL (ret , TSK_TREE_OK );
852
867
for (j = 0 ; j < num_tests ; j ++ ) {
853
- while (tree .index < tests [j ].tree_index ) {
854
- ret = tsk_tree_next (& tree );
855
- CU_ASSERT_EQUAL_FATAL (ret , TSK_TREE_OK );
856
- }
868
+ ret = tsk_tree_seek_index (& tree , tests [j ].tree_index , seek_options );
869
+ CU_ASSERT_EQUAL_FATAL (ret , 0 );
857
870
ret = tsk_tree_get_num_samples (& tree , tests [j ].node , & num_samples );
858
871
CU_ASSERT_EQUAL_FATAL (ret , 0 );
859
872
CU_ASSERT_EQUAL (tests [j ].count , num_samples );
@@ -872,10 +885,8 @@ verify_sample_counts(tsk_treeseq_t *ts, tsk_size_t num_tests, sample_count_test_
872
885
ret = tsk_tree_first (& tree );
873
886
CU_ASSERT_EQUAL_FATAL (ret , TSK_TREE_OK );
874
887
for (j = 0 ; j < num_tests ; j ++ ) {
875
- while (tree .index < tests [j ].tree_index ) {
876
- ret = tsk_tree_next (& tree );
877
- CU_ASSERT_EQUAL_FATAL (ret , TSK_TREE_OK );
878
- }
888
+ ret = tsk_tree_seek_index (& tree , tests [j ].tree_index , seek_options );
889
+ CU_ASSERT_EQUAL_FATAL (ret , 0 );
879
890
ret = tsk_tree_get_num_samples (& tree , tests [j ].node , & num_samples );
880
891
CU_ASSERT_EQUAL_FATAL (ret , 0 );
881
892
CU_ASSERT_EQUAL (tests [j ].count , num_samples );
@@ -908,10 +919,8 @@ verify_sample_counts(tsk_treeseq_t *ts, tsk_size_t num_tests, sample_count_test_
908
919
ret = tsk_tree_first (& tree );
909
920
CU_ASSERT_EQUAL_FATAL (ret , TSK_TREE_OK );
910
921
for (j = 0 ; j < num_tests ; j ++ ) {
911
- while (tree .index < tests [j ].tree_index ) {
912
- ret = tsk_tree_next (& tree );
913
- CU_ASSERT_EQUAL_FATAL (ret , TSK_TREE_OK );
914
- }
922
+ ret = tsk_tree_seek_index (& tree , tests [j ].tree_index , seek_options );
923
+ CU_ASSERT_EQUAL_FATAL (ret , 0 );
915
924
ret = tsk_tree_get_num_samples (& tree , tests [j ].node , & num_samples );
916
925
CU_ASSERT_EQUAL_FATAL (ret , 0 );
917
926
CU_ASSERT_EQUAL (tests [j ].count , num_samples );
@@ -1008,6 +1017,7 @@ verify_sample_sets(tsk_treeseq_t *ts)
1008
1017
{
1009
1018
int ret ;
1010
1019
tsk_tree_t t ;
1020
+ tsk_id_t j ;
1011
1021
1012
1022
ret = tsk_tree_init (& t , ts , TSK_SAMPLE_LISTS );
1013
1023
CU_ASSERT_EQUAL (ret , 0 );
@@ -1021,6 +1031,20 @@ verify_sample_sets(tsk_treeseq_t *ts)
1021
1031
}
1022
1032
CU_ASSERT_EQUAL_FATAL (ret , 0 );
1023
1033
1034
+ for (j = 0 ; j < (tsk_id_t ) tsk_treeseq_get_num_trees (ts ); j ++ ) {
1035
+ ret = tsk_tree_first (& t );
1036
+ CU_ASSERT_EQUAL_FATAL (ret , TSK_TREE_OK );
1037
+ ret = tsk_tree_seek_index (& t , j , TSK_SEEK_SKIP );
1038
+ CU_ASSERT_EQUAL_FATAL (ret , 0 );
1039
+ verify_sample_sets_for_tree (& t );
1040
+
1041
+ ret = tsk_tree_last (& t );
1042
+ CU_ASSERT_EQUAL_FATAL (ret , TSK_TREE_OK );
1043
+ ret = tsk_tree_seek_index (& t , j , TSK_SEEK_SKIP );
1044
+ CU_ASSERT_EQUAL_FATAL (ret , 0 );
1045
+ verify_sample_sets_for_tree (& t );
1046
+ }
1047
+
1024
1048
tsk_tree_free (& t );
1025
1049
}
1026
1050
@@ -5870,7 +5894,8 @@ test_simple_sample_sets(void)
5870
5894
5871
5895
tsk_treeseq_from_text (& ts , 10 , paper_ex_nodes , paper_ex_edges , NULL , NULL , NULL ,
5872
5896
paper_ex_individuals , NULL , 0 );
5873
- verify_sample_counts (& ts , num_tests , tests );
5897
+ verify_sample_counts (& ts , num_tests , tests , 0 );
5898
+ verify_sample_counts (& ts , num_tests , tests , TSK_SEEK_SKIP );
5874
5899
verify_sample_sets (& ts );
5875
5900
5876
5901
tsk_treeseq_free (& ts );
@@ -5889,7 +5914,8 @@ test_nonbinary_sample_sets(void)
5889
5914
5890
5915
tsk_treeseq_from_text (& ts , 100 , nonbinary_ex_nodes , nonbinary_ex_edges , NULL , NULL ,
5891
5916
NULL , NULL , NULL , 0 );
5892
- verify_sample_counts (& ts , num_tests , tests );
5917
+ verify_sample_counts (& ts , num_tests , tests , 0 );
5918
+ verify_sample_counts (& ts , num_tests , tests , TSK_SEEK_SKIP );
5893
5919
verify_sample_sets (& ts );
5894
5920
5895
5921
tsk_treeseq_free (& ts );
@@ -5909,7 +5935,8 @@ test_internal_sample_sample_sets(void)
5909
5935
5910
5936
tsk_treeseq_from_text (& ts , 10 , internal_sample_ex_nodes , internal_sample_ex_edges ,
5911
5937
NULL , NULL , NULL , NULL , NULL , 0 );
5912
- verify_sample_counts (& ts , num_tests , tests );
5938
+ verify_sample_counts (& ts , num_tests , tests , 0 );
5939
+ verify_sample_counts (& ts , num_tests , tests , TSK_SEEK_SKIP );
5913
5940
verify_sample_sets (& ts );
5914
5941
5915
5942
tsk_treeseq_free (& ts );
@@ -6283,7 +6310,7 @@ test_multiroot_tree_traversal(void)
6283
6310
}
6284
6311
6285
6312
static void
6286
- test_seek_multi_tree ( void )
6313
+ verify_seek_multi_tree ( tsk_flags_t seek_options )
6287
6314
{
6288
6315
int ret ;
6289
6316
tsk_treeseq_t ts ;
@@ -6299,29 +6326,29 @@ test_seek_multi_tree(void)
6299
6326
CU_ASSERT_EQUAL_FATAL (ret , 0 );
6300
6327
6301
6328
for (j = 0 ; j < num_trees ; j ++ ) {
6302
- ret = tsk_tree_seek (& t , breakpoints [j ], 0 );
6329
+ ret = tsk_tree_seek (& t , breakpoints [j ], seek_options );
6303
6330
CU_ASSERT_EQUAL_FATAL (ret , 0 );
6304
6331
CU_ASSERT_EQUAL_FATAL (t .index , j );
6305
- ret = tsk_tree_seek_index (& t , j , 0 );
6332
+ ret = tsk_tree_seek_index (& t , j , seek_options );
6306
6333
CU_ASSERT_EQUAL_FATAL (ret , 0 );
6307
6334
CU_ASSERT_EQUAL_FATAL (t .index , j );
6308
6335
for (k = 0 ; k < num_trees ; k ++ ) {
6309
- ret = tsk_tree_seek (& t , breakpoints [k ], 0 );
6336
+ ret = tsk_tree_seek (& t , breakpoints [k ], seek_options );
6310
6337
CU_ASSERT_EQUAL_FATAL (ret , 0 );
6311
6338
CU_ASSERT_EQUAL_FATAL (t .index , k );
6312
- ret = tsk_tree_seek_index (& t , k , 0 );
6339
+ ret = tsk_tree_seek_index (& t , k , seek_options );
6313
6340
CU_ASSERT_EQUAL_FATAL (ret , 0 );
6314
6341
CU_ASSERT_EQUAL_FATAL (t .index , k );
6315
6342
}
6316
6343
}
6317
6344
6318
- ret = tsk_tree_seek (& t , 1.99999 , 0 );
6345
+ ret = tsk_tree_seek (& t , 1.99999 , seek_options );
6319
6346
CU_ASSERT_EQUAL_FATAL (ret , 0 );
6320
6347
CU_ASSERT_EQUAL_FATAL (t .index , 0 );
6321
- ret = tsk_tree_seek (& t , 6.99999 , 0 );
6348
+ ret = tsk_tree_seek (& t , 6.99999 , seek_options );
6322
6349
CU_ASSERT_EQUAL_FATAL (ret , 0 );
6323
6350
CU_ASSERT_EQUAL_FATAL (t .index , 1 );
6324
- ret = tsk_tree_seek (& t , 9.99999 , 0 );
6351
+ ret = tsk_tree_seek (& t , 9.99999 , seek_options );
6325
6352
CU_ASSERT_EQUAL_FATAL (ret , 0 );
6326
6353
CU_ASSERT_EQUAL_FATAL (t .index , 2 );
6327
6354
@@ -6331,7 +6358,7 @@ test_seek_multi_tree(void)
6331
6358
for (j = 0 ; j < num_trees ; j ++ ) {
6332
6359
ret = tsk_tree_init (& t , & ts , 0 );
6333
6360
CU_ASSERT_EQUAL_FATAL (ret , 0 );
6334
- ret = tsk_tree_seek (& t , breakpoints [j ], 0 );
6361
+ ret = tsk_tree_seek (& t , breakpoints [j ], seek_options );
6335
6362
CU_ASSERT_EQUAL_FATAL (ret , 0 );
6336
6363
CU_ASSERT_EQUAL_FATAL (t .index , j );
6337
6364
tsk_tree_free (& t );
@@ -6341,12 +6368,12 @@ test_seek_multi_tree(void)
6341
6368
ret = tsk_tree_init (& t , & ts , 0 );
6342
6369
CU_ASSERT_EQUAL_FATAL (ret , 0 );
6343
6370
for (j = 0 ; j < num_trees ; j ++ ) {
6344
- ret = tsk_tree_seek (& t , 0 , 0 );
6371
+ ret = tsk_tree_seek (& t , 0 , seek_options );
6345
6372
CU_ASSERT_EQUAL_FATAL (ret , 0 );
6346
6373
ret = tsk_tree_prev (& t );
6347
6374
CU_ASSERT_EQUAL_FATAL (ret , 0 );
6348
6375
CU_ASSERT_EQUAL_FATAL (t .index , -1 );
6349
- ret = tsk_tree_seek (& t , breakpoints [j ], 0 );
6376
+ ret = tsk_tree_seek (& t , breakpoints [j ], seek_options );
6350
6377
CU_ASSERT_EQUAL_FATAL (ret , 0 );
6351
6378
CU_ASSERT_EQUAL_FATAL (t .index , j );
6352
6379
}
@@ -6355,6 +6382,13 @@ test_seek_multi_tree(void)
6355
6382
tsk_treeseq_free (& ts );
6356
6383
}
6357
6384
6385
+ static void
6386
+ test_seek_multi_tree (void )
6387
+ {
6388
+ verify_seek_multi_tree (0 );
6389
+ verify_seek_multi_tree (TSK_SEEK_SKIP );
6390
+ }
6391
+
6358
6392
static void
6359
6393
test_seek_errors (void )
6360
6394
{
0 commit comments