//{{{ unsigned int test_intersections_bsearch_seq(struct interval *A, void test_intersections_bsearch_seq(struct interval *A, unsigned int size_A, struct interval *B, unsigned int size_B, unsigned int n, unsigned int max_offset, unsigned int *O, double *mean, double *sd, double *p) { unsigned int i,j; int R = 0; struct timeval t_start; unsigned int bits = (int)( ceil(log(max_offset)/log(2) ) ); unsigned int mask = (2 << (bits-1)) - 1; //{{{ i_sort sort intervals by start qsort(B, size_B, sizeof(struct interval), compare_interval_by_start); //}}} //{{{ i_mem split intervals into start, end, lenght, intervals unsigned int *A_starts = (unsigned int *) malloc(size_A * sizeof(unsigned int)); unsigned int *B_starts = (unsigned int *) malloc(size_B * sizeof(unsigned int)); unsigned int *B_ends = (unsigned int *) malloc(size_B * sizeof(unsigned int)); unsigned int *B_lens = (unsigned int *) malloc(size_B * sizeof(unsigned int)); for (i = 0; i < size_B; i++) { B_starts[i] = B[i].start; B_ends[i] = B[i].end; B_lens[i] = B[i].end - B[i].start; } //}}} i_mem //{{{ i_sort ends qsort(B_ends, size_B, sizeof(unsigned int), compare_unsigned_int); //}}} i_sort //{{{ i_do find observed intersections *O = count_seq(A, size_A, B_starts, B_ends, size_B); //}}} i_do init_genrand((unsigned) time(NULL)); unsigned int *sims = (unsigned int *) malloc(n * sizeof(unsigned int)); for (j = 0; j < n; j++) { for (i = 0; i < size_A; i++) A_starts[i] = get_rand(max_offset, mask); qsort(A_starts, size_A, sizeof(unsigned int), compare_unsigned_int); int len; for (i = 0; i < size_A; i++) { len = A[i].end - A[i].start; A[i].start = A_starts[i]; A[i].end = A[i].start + len; } for (i = 0; i < size_B; i++) B_starts[i] = get_rand(max_offset, mask); qsort(B_starts, size_B, sizeof(unsigned int), compare_unsigned_int); for (i = 0; i < size_B; i++) B_ends[i] = B_starts[i] + B_lens[i]; qsort(B_ends, size_B, sizeof(unsigned int), compare_unsigned_int); unsigned int T = count_seq(A, size_A, B_starts, B_ends, size_B); sims[j] = T; if (T >= *O) R = R + 1; } *mean = gsl_stats_int_mean((const int*)sims, 1, n); *sd = gsl_stats_int_sd_m((const int*)sims, 1, n, *mean); *p = ( (double) R + 1) / ( (double) n + 1); //{{{ i_mem free B_starts B_ends B_lens free(B_starts); free(B_ends); free(B_lens); free(sims); //}}} }
int main (void) { /* sample sets of integers */ const unsigned int ina = 20, inb = 20; const int test1[] = {1, 2, 3, 4, 5, 6} ; const int igroupa[] = {17, 18, 16, 18, 12, 20, 18, 20, 20, 22, 20, 10, 8, 12, 16, 16, 18, 20, 18, 21}; const int igroupb[] = {19, 20, 22, 24, 10, 25, 20, 22, 21, 23, 20, 10, 12, 14, 12, 20, 22, 24, 23, 17}; int * sorted ; { double mean = gsl_stats_int_mean (igroupa, ina); double expected = 17.0; gsl_test (!within_fuzz(mean,expected), "gsl_stats_int_mean (integer) (%g observed vs %g expected)", mean, expected); } { double mean = gsl_stats_int_mean (test1, 6); double expected = 3.5; gsl_test (!within_fuzz(mean,expected), "gsl_stats_int_mean (fractional) (%g observed vs %g expected)", mean, expected); } { double var = gsl_stats_int_variance (igroupa, ina); double expected = 13.7; gsl_test (!within_fuzz (var, expected), "gsl_stats_int_variance (%g observed vs %g expected)", var, expected); } { double var = gsl_stats_int_est_variance (igroupa, ina); double expected = 14.4210526315789; gsl_test (!within_fuzz (var, expected), "gsl_stats_int_est_variance (%g observed vs %g expected)", var, expected); } { double sd = gsl_stats_int_sd (igroupa, ina); double expected = 3.70135110466435; gsl_test (!within_fuzz (sd, expected), "gsl_stats_int_sd (%g observed vs %g expected)", sd, expected); } { double sd_est = gsl_stats_int_est_sd (igroupa, ina); double expected = 3.79750610685209; gsl_test (!within_fuzz (sd_est, expected), "gsl_stats_int_est_sd (%g observed vs %g expected)", sd_est, expected); } { double absdev = gsl_stats_int_absdev (igroupa, ina); double expected = 2.9; gsl_test (!within_fuzz (absdev, expected), "gsl_stats_int_absdev (%g observed vs %g expected)", absdev, expected); } { double skew = gsl_stats_int_skew (igroupa, ina); double expected = -0.909355923168064; gsl_test (!within_fuzz (skew, expected), "gsl_stats_int_skew (%g observed vs %g expected)", skew, expected); } { double kurt = gsl_stats_int_kurtosis (igroupa, ina); double expected = -0.233692524908094 ; gsl_test (!within_fuzz (kurt, expected), "gsl_stats_int_kurtosis (%g observed vs %g expected)", kurt, expected); } { double pv = gsl_stats_int_pvariance (igroupa, igroupb, ina, inb); double expected = 18.8421052631579; gsl_test (!within_fuzz (pv, expected), "gsl_stats_int_pvariance (%g observed vs %g expected)", pv, expected); } { double t = gsl_stats_int_ttest (igroupa, igroupb, ina, inb); double expected = -1.45701922702927; gsl_test (!within_fuzz (t, expected), "gsl_stats_int_ttest (%g observed vs %g expected)", t, expected); } { int max = gsl_stats_int_max (igroupa, ina); int expected = 22; gsl_test (max != expected, "gsl_stats_int_max (%d observed vs %d expected)", max, expected); } { int min = gsl_stats_int_min (igroupa, inb); int expected = 8; gsl_test (min != expected, "gsl_stats_int_min (%d observed vs %d expected)", min, expected); } { int max_index = gsl_stats_int_max_index (igroupa, ina); int expected = 9 ; gsl_test (max_index != expected, "gsl_stats_int_max_index (%d observed vs %d expected)", max_index, expected); } { int min_index = gsl_stats_int_min_index (igroupa, inb); int expected = 12 ; gsl_test (min_index != expected, "gsl_stats_int_min_index (%d observed vs %d expected)", min_index, expected); } sorted = (int *) malloc(ina * sizeof(int)) ; memcpy(sorted, igroupa, ina * sizeof(int)) ; gsl_stats_int_sort_data(sorted, ina) ; { double median = gsl_stats_int_median_from_sorted_data(sorted, ina) ; double expected = 18; gsl_test (!within_fuzz(median,expected), "gsl_stats_int_median_from_sorted_data (even) (%g observed vs %g expected)", median, expected); } { double median = gsl_stats_int_median_from_sorted_data(sorted, ina - 1) ; double expected = 18; gsl_test (!within_fuzz(median,expected), "gsl_stats_int_median_from_sorted_data (odd) (%g observed vs %g expected)", median, expected); } { double zeroth = gsl_stats_int_quantile_from_sorted_data(sorted, ina, 0.0) ; double expected = 8; gsl_test (!within_fuzz(zeroth,expected), "gsl_stats_quantile_from_sorted_data (0) (%g observed vs %g expected)", zeroth, expected); } { double top = gsl_stats_int_quantile_from_sorted_data(sorted, ina, 1.0) ; double expected = 22; gsl_test (!within_fuzz(top,expected), "gsl_stats_int_quantile_from_sorted_data (100) (%g obs vs %g exp)", top, expected); } { double median = gsl_stats_int_quantile_from_sorted_data(sorted, ina, 0.5) ; double expected = 18; gsl_test (!within_fuzz(median,expected), "gsl_stats_int_quantile_from_sorted_data (50, even) (%g obs vs %g exp)", median, expected); } { double median = gsl_stats_int_quantile_from_sorted_data(sorted, ina - 1, 0.5); double expected = 18; gsl_test (!within_fuzz(median,expected), "gsl_stats_int_quantile_from_sorted_data (50, odd) (%g obs vs %g exp)", median, expected); } exit (gsl_test_summary ()); }