23
23
*/
24
24
25
25
#include "testlib.h"
26
+ #include <math.h>
26
27
#include <tskit/stats.h>
27
28
28
29
#include <unistd.h>
@@ -602,7 +603,7 @@ verify_pair_coalescence_rates(tsk_treeseq_t *ts)
602
603
epochs [B ] = DBL_MAX ;
603
604
ret = tsk_treeseq_pair_coalescence_rates (ts , P , sample_set_sizes , sample_sets , I ,
604
605
index_tuples , T , breakpoints , B , node_bin_map , epochs , 0 , C );
605
- CU_ASSERT_EQUAL_FATAL (ret , TSK_ERR_BAD_TIME_WINDOWS );
606
+ CU_ASSERT_EQUAL_FATAL (ret , TSK_ERR_BAD_TIME_WINDOWS_END );
606
607
epochs [B ] = INFINITY ;
607
608
608
609
node_bin_map [0 ] = (tsk_id_t ) B ;
@@ -868,6 +869,84 @@ verify_one_way_stat_func_errors(tsk_treeseq_t *ts, one_way_sample_stat_method *m
868
869
CU_ASSERT_EQUAL_FATAL (ret , TSK_ERR_BAD_WINDOWS );
869
870
}
870
871
872
+ // Temporary definition for time_windows in tsk_treeseq_allele_frequency_spectrum
873
+ typedef int one_way_sample_stat_method_tw (const tsk_treeseq_t * self ,
874
+ tsk_size_t num_sample_sets , const tsk_size_t * sample_set_sizes ,
875
+ const tsk_id_t * sample_sets , tsk_size_t num_windows , const double * windows ,
876
+ tsk_size_t num_time_windows , const double * time_windows , tsk_flags_t options ,
877
+ double * result );
878
+
879
+ // Temporary duplicate for time-windows-having methods
880
+ static void
881
+ verify_one_way_stat_func_errors_tw (
882
+ tsk_treeseq_t * ts , one_way_sample_stat_method_tw * method )
883
+ {
884
+ int ret ;
885
+ tsk_id_t num_nodes = (tsk_id_t ) tsk_treeseq_get_num_nodes (ts );
886
+ tsk_id_t samples [] = { 0 , 1 , 2 , 3 };
887
+ tsk_size_t sample_set_sizes = 4 ;
888
+ double windows [] = { 0 , 0 , 0 };
889
+ double time_windows [] = { -1 , 0.5 , INFINITY };
890
+ double result ;
891
+
892
+ ret = method (ts , 0 , & sample_set_sizes , samples , 0 , NULL , 0 , NULL , 0 , & result );
893
+ CU_ASSERT_EQUAL_FATAL (ret , TSK_ERR_INSUFFICIENT_SAMPLE_SETS );
894
+
895
+ samples [0 ] = TSK_NULL ;
896
+ ret = method (ts , 1 , & sample_set_sizes , samples , 0 , NULL , 0 , NULL , 0 , & result );
897
+ CU_ASSERT_EQUAL_FATAL (ret , TSK_ERR_NODE_OUT_OF_BOUNDS );
898
+ samples [0 ] = -10 ;
899
+ ret = method (ts , 1 , & sample_set_sizes , samples , 0 , NULL , 0 , NULL , 0 , & result );
900
+ CU_ASSERT_EQUAL_FATAL (ret , TSK_ERR_NODE_OUT_OF_BOUNDS );
901
+ samples [0 ] = num_nodes ;
902
+ ret = method (ts , 1 , & sample_set_sizes , samples , 0 , NULL , 0 , NULL , 0 , & result );
903
+ CU_ASSERT_EQUAL_FATAL (ret , TSK_ERR_NODE_OUT_OF_BOUNDS );
904
+ samples [0 ] = num_nodes + 1 ;
905
+ ret = method (ts , 1 , & sample_set_sizes , samples , 0 , NULL , 0 , NULL , 0 , & result );
906
+ CU_ASSERT_EQUAL_FATAL (ret , TSK_ERR_NODE_OUT_OF_BOUNDS );
907
+
908
+ samples [0 ] = num_nodes - 1 ;
909
+ ret = method (ts , 1 , & sample_set_sizes , samples , 0 , NULL , 0 , NULL , 0 , & result );
910
+ CU_ASSERT_EQUAL_FATAL (ret , TSK_ERR_BAD_SAMPLES );
911
+
912
+ samples [0 ] = 1 ;
913
+ ret = method (ts , 1 , & sample_set_sizes , samples , 0 , NULL , 0 , NULL , 0 , & result );
914
+ CU_ASSERT_EQUAL_FATAL (ret , TSK_ERR_DUPLICATE_SAMPLE );
915
+
916
+ samples [0 ] = 0 ;
917
+ sample_set_sizes = 0 ;
918
+ ret = method (ts , 1 , & sample_set_sizes , samples , 0 , NULL , 0 , NULL , 0 , & result );
919
+ CU_ASSERT_EQUAL_FATAL (ret , TSK_ERR_EMPTY_SAMPLE_SET );
920
+
921
+ sample_set_sizes = 4 ;
922
+ /* Window errors */
923
+ ret = method (ts , 1 , & sample_set_sizes , samples , 0 , windows , 0 , NULL , 0 , & result );
924
+ CU_ASSERT_EQUAL_FATAL (ret , TSK_ERR_BAD_NUM_WINDOWS );
925
+
926
+ ret = method (ts , 1 , & sample_set_sizes , samples , 2 , windows , 0 , NULL , 0 , & result );
927
+ CU_ASSERT_EQUAL_FATAL (ret , TSK_ERR_BAD_WINDOWS );
928
+
929
+ /* Time window errors */
930
+ ret = method (
931
+ ts , 1 , & sample_set_sizes , samples , 0 , NULL , 0 , time_windows , 0 , & result );
932
+ CU_ASSERT_EQUAL_FATAL (ret , TSK_ERR_BAD_TIME_WINDOWS_DIM );
933
+
934
+ ret = method (
935
+ ts , 1 , & sample_set_sizes , samples , 0 , NULL , 2 , time_windows , 0 , & result );
936
+ CU_ASSERT_EQUAL_FATAL (ret , TSK_ERR_BAD_TIME_WINDOWS );
937
+
938
+ time_windows [0 ] = 0.1 ;
939
+ ret = method (
940
+ ts , 1 , & sample_set_sizes , samples , 0 , NULL , 2 , time_windows , 0 , & result );
941
+ CU_ASSERT_EQUAL_FATAL (ret , TSK_ERR_BAD_TIME_WINDOWS );
942
+
943
+ time_windows [0 ] = 0 ;
944
+ time_windows [1 ] = 0 ;
945
+ ret = method (
946
+ ts , 1 , & sample_set_sizes , samples , 0 , NULL , 2 , time_windows , 0 , & result );
947
+ CU_ASSERT_EQUAL_FATAL (ret , TSK_ERR_BAD_TIME_WINDOWS );
948
+ }
949
+
871
950
static void
872
951
verify_two_way_stat_func_errors (
873
952
tsk_treeseq_t * ts , general_sample_stat_method * method , tsk_flags_t options )
@@ -1206,23 +1285,24 @@ verify_afs(tsk_treeseq_t *ts)
1206
1285
sample_set_sizes [0 ] = n - 2 ;
1207
1286
sample_set_sizes [1 ] = 2 ;
1208
1287
ret = tsk_treeseq_allele_frequency_spectrum (
1209
- ts , 2 , sample_set_sizes , samples , 0 , NULL , 0 , result );
1288
+ ts , 2 , sample_set_sizes , samples , 0 , NULL , 0 , NULL , 0 , result );
1210
1289
CU_ASSERT_EQUAL_FATAL (ret , 0 );
1211
1290
1212
1291
ret = tsk_treeseq_allele_frequency_spectrum (
1213
- ts , 2 , sample_set_sizes , samples , 0 , NULL , TSK_STAT_POLARISED , result );
1292
+ ts , 2 , sample_set_sizes , samples , 0 , NULL , 0 , NULL , TSK_STAT_POLARISED , result );
1214
1293
CU_ASSERT_EQUAL_FATAL (ret , 0 );
1215
1294
1216
1295
ret = tsk_treeseq_allele_frequency_spectrum (ts , 2 , sample_set_sizes , samples , 0 ,
1217
- NULL , TSK_STAT_POLARISED | TSK_STAT_SPAN_NORMALISE , result );
1296
+ NULL , 0 , NULL , TSK_STAT_POLARISED | TSK_STAT_SPAN_NORMALISE , result );
1218
1297
CU_ASSERT_EQUAL_FATAL (ret , 0 );
1219
1298
1220
1299
ret = tsk_treeseq_allele_frequency_spectrum (ts , 2 , sample_set_sizes , samples , 0 ,
1221
- NULL , TSK_STAT_BRANCH | TSK_STAT_POLARISED | TSK_STAT_SPAN_NORMALISE , result );
1300
+ NULL , 0 , NULL , TSK_STAT_BRANCH | TSK_STAT_POLARISED | TSK_STAT_SPAN_NORMALISE ,
1301
+ result );
1222
1302
CU_ASSERT_EQUAL_FATAL (ret , 0 );
1223
1303
1224
1304
ret = tsk_treeseq_allele_frequency_spectrum (ts , 2 , sample_set_sizes , samples , 0 ,
1225
- NULL , TSK_STAT_BRANCH | TSK_STAT_SPAN_NORMALISE , result );
1305
+ NULL , 0 , NULL , TSK_STAT_BRANCH | TSK_STAT_SPAN_NORMALISE , result );
1226
1306
CU_ASSERT_EQUAL_FATAL (ret , 0 );
1227
1307
1228
1308
free (result );
@@ -2416,21 +2496,26 @@ test_paper_ex_afs_errors(void)
2416
2496
tsk_size_t sample_set_sizes [] = { 2 , 2 };
2417
2497
tsk_id_t samples [] = { 0 , 1 , 2 , 3 };
2418
2498
double result [10 ]; /* not thinking too hard about the actual value needed */
2499
+ double time_windows [] = { 0 , 1 };
2419
2500
int ret ;
2420
2501
2421
2502
tsk_treeseq_from_text (& ts , 10 , paper_ex_nodes , paper_ex_edges , NULL , paper_ex_sites ,
2422
2503
paper_ex_mutations , paper_ex_individuals , NULL , 0 );
2423
2504
2424
- verify_one_way_stat_func_errors (& ts , tsk_treeseq_allele_frequency_spectrum );
2505
+ verify_one_way_stat_func_errors_tw (& ts , tsk_treeseq_allele_frequency_spectrum );
2425
2506
2426
2507
ret = tsk_treeseq_allele_frequency_spectrum (
2427
- & ts , 2 , sample_set_sizes , samples , 0 , NULL , TSK_STAT_NODE , result );
2508
+ & ts , 2 , sample_set_sizes , samples , 0 , NULL , 0 , NULL , TSK_STAT_NODE , result );
2428
2509
CU_ASSERT_EQUAL_FATAL (ret , TSK_ERR_UNSUPPORTED_STAT_MODE );
2429
2510
2430
2511
ret = tsk_treeseq_allele_frequency_spectrum (& ts , 2 , sample_set_sizes , samples , 0 ,
2431
- NULL , TSK_STAT_BRANCH | TSK_STAT_SITE , result );
2512
+ NULL , 0 , NULL , TSK_STAT_BRANCH | TSK_STAT_SITE , result );
2432
2513
CU_ASSERT_EQUAL_FATAL (ret , TSK_ERR_MULTIPLE_STAT_MODES );
2433
2514
2515
+ ret = tsk_treeseq_allele_frequency_spectrum (& ts , 2 , sample_set_sizes , samples , 0 ,
2516
+ NULL , 1 , time_windows , TSK_STAT_SITE , result );
2517
+ CU_ASSERT_EQUAL_FATAL (ret , TSK_ERR_UNSUPPORTED_STAT_MODE );
2518
+
2434
2519
tsk_treeseq_free (& ts );
2435
2520
}
2436
2521
@@ -2448,14 +2533,14 @@ test_paper_ex_afs(void)
2448
2533
/* we have two singletons and one tripleton */
2449
2534
2450
2535
ret = tsk_treeseq_allele_frequency_spectrum (
2451
- & ts , 1 , sample_set_sizes , samples , 0 , NULL , 0 , result );
2536
+ & ts , 1 , sample_set_sizes , samples , 0 , NULL , 0 , NULL , 0 , result );
2452
2537
CU_ASSERT_EQUAL_FATAL (ret , 0 );
2453
2538
CU_ASSERT_EQUAL_FATAL (result [0 ], 0 );
2454
2539
CU_ASSERT_EQUAL_FATAL (result [1 ], 3.0 );
2455
2540
CU_ASSERT_EQUAL_FATAL (result [2 ], 0 );
2456
2541
2457
2542
ret = tsk_treeseq_allele_frequency_spectrum (
2458
- & ts , 1 , sample_set_sizes , samples , 0 , NULL , TSK_STAT_POLARISED , result );
2543
+ & ts , 1 , sample_set_sizes , samples , 0 , NULL , 0 , NULL , TSK_STAT_POLARISED , result );
2459
2544
CU_ASSERT_EQUAL_FATAL (ret , 0 );
2460
2545
CU_ASSERT_EQUAL_FATAL (result [0 ], 0 );
2461
2546
CU_ASSERT_EQUAL_FATAL (result [1 ], 2.0 );
0 commit comments