diff options
Diffstat (limited to 'gsl-1.9/statistics/test_float_source.c')
-rw-r--r-- | gsl-1.9/statistics/test_float_source.c | 382 |
1 files changed, 382 insertions, 0 deletions
diff --git a/gsl-1.9/statistics/test_float_source.c b/gsl-1.9/statistics/test_float_source.c new file mode 100644 index 0000000..7b29dfa --- /dev/null +++ b/gsl-1.9/statistics/test_float_source.c @@ -0,0 +1,382 @@ +/* statistics/test_float_source.c + * + * Copyright (C) 1996, 1997, 1998, 1999, 2000 Jim Davies, Brian Gough + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +void FUNCTION (test, func) (const size_t stridea, const size_t strideb); + +void +FUNCTION (test, func) (const size_t stridea, const size_t strideb) +{ + /* sample sets of doubles */ + size_t i; + const size_t na = 14, nb = 14; + + const double rawa[] = + {.0421, .0941, .1064, .0242, .1331, + .0773, .0243, .0815, .1186, .0356, + .0728, .0999, .0614, .0479}; + + const double rawb[] = + {.1081, .0986, .1566, .1961, .1125, + .1942, .1079, .1021, .1583, .1673, + .1675, .1856, .1688, .1512}; + + const double raww[] = + {.0000, .0000, .0000, 3.000, .0000, + 1.000, 1.000, 1.000, 0.000, .5000, + 7.000, 5.000, 4.000, 0.123}; + + BASE * sorted ; + + BASE * groupa = (BASE *) malloc (stridea * na * sizeof(BASE)); + BASE * groupb = (BASE *) malloc (strideb * nb * sizeof(BASE)); + BASE * w = (BASE *) malloc (strideb * na * sizeof(BASE)); + +#ifdef BASE_FLOAT + double rel = 1e-6; +#else + double rel = 1e-10; +#endif + + for (i = 0 ; i < na ; i++) + groupa[i * stridea] = (BASE) rawa[i] ; + + for (i = 0 ; i < na ; i++) + w[i * strideb] = (BASE) raww[i] ; + + for (i = 0 ; i < nb ; i++) + groupb[i * strideb] = (BASE) rawb[i] ; + + + { + double mean = FUNCTION(gsl_stats,mean) (groupa, stridea, na); + double expected = 0.0728; + gsl_test_rel (mean, expected, rel, NAME(gsl_stats) "_mean"); + } + + { + double mean = FUNCTION(gsl_stats,mean) (groupa, stridea, na); + double var = FUNCTION(gsl_stats,variance_with_fixed_mean) (groupa, stridea, na, mean); + double expected = 0.00113837428571429; + gsl_test_rel (var, expected, rel, NAME(gsl_stats) "_variance_with_fixed_mean"); + } + + + { + double mean = FUNCTION(gsl_stats,mean) (groupa, stridea, na); + double var = FUNCTION(gsl_stats,sd_with_fixed_mean) (groupa, stridea, na, mean); + double expected = 0.0337398026922845; + gsl_test_rel (var, expected, rel, NAME(gsl_stats) "_sd_with_fixed_mean"); + } + + + { + double var = FUNCTION(gsl_stats,variance) (groupb, strideb, nb); + double expected = 0.00124956615384615; + gsl_test_rel (var, expected, rel, NAME(gsl_stats) "_variance"); + } + + { + double sd = FUNCTION(gsl_stats,sd) (groupa, stridea, na); + double expected = 0.0350134479659107; + gsl_test_rel (sd, expected, rel, NAME(gsl_stats) "_sd"); + } + + { + double absdev = FUNCTION(gsl_stats,absdev) (groupa, stridea, na); + double expected = 0.0287571428571429; + gsl_test_rel (absdev, expected, rel, NAME(gsl_stats) "_absdev"); + } + + { + double skew = FUNCTION(gsl_stats,skew) (groupa, stridea, na); + double expected = 0.0954642051479004; + gsl_test_rel (skew, expected, rel, NAME(gsl_stats) "_skew"); + } + + { + double kurt = FUNCTION(gsl_stats,kurtosis) (groupa, stridea, na); + double expected = -1.38583851548909 ; + gsl_test_rel (kurt, expected, rel, NAME(gsl_stats) "_kurtosis"); + } + + { + double wmean = FUNCTION(gsl_stats,wmean) (w, strideb, groupa, stridea, na); + double expected = 0.0678111523670601; + gsl_test_rel (wmean, expected, rel, NAME(gsl_stats) "_wmean"); + } + + { + double wmean = FUNCTION(gsl_stats,wmean) (w, strideb, groupa, stridea, na); + double wvar = FUNCTION(gsl_stats,wvariance_with_fixed_mean) (w, strideb, groupa, stridea, na, wmean); + double expected = 0.000615793060878654; + gsl_test_rel (wvar, expected, rel, NAME(gsl_stats) "_wvariance_with_fixed_mean"); + } + + { + double est_wvar = FUNCTION(gsl_stats,wvariance) (w, strideb, groupa, stridea, na); + double expected = 0.000769562962860317; + gsl_test_rel (est_wvar, expected, rel, NAME(gsl_stats) "_wvariance"); + } + + { + double wsd = FUNCTION(gsl_stats,wsd) (w, strideb, groupa, stridea, na); + double expected = 0.0277409978706664; + gsl_test_rel (wsd, expected, rel, NAME(gsl_stats) "_wsd"); + } + + { + double wabsdev = FUNCTION(gsl_stats,wabsdev) (w, strideb, groupa, stridea, na); + double expected = 0.0193205027504008; + gsl_test_rel (wabsdev, expected, rel, NAME(gsl_stats) "_wabsdev"); + } + + { + double wskew = FUNCTION(gsl_stats,wskew) (w, strideb, groupa, stridea, na); + double expected = -0.373631000307076; + gsl_test_rel (wskew, expected, rel, NAME(gsl_stats) "_wskew"); + } + + { + double wkurt = FUNCTION(gsl_stats,wkurtosis) (w, strideb, groupa, stridea, na); + double expected = -1.48114233353963; + gsl_test_rel (wkurt, expected, rel, NAME(gsl_stats) "_wkurtosis"); + } + + { + double c = FUNCTION(gsl_stats,covariance) (groupa, stridea, groupb, strideb, nb); + double expected = -0.000139021538461539; + gsl_test_rel (c, expected, rel, NAME(gsl_stats) "_covariance"); + } + + + { + double pv = FUNCTION(gsl_stats,pvariance) (groupa, stridea, na, groupb, strideb, nb); + double expected = 0.00123775384615385; + gsl_test_rel (pv, expected, rel, NAME(gsl_stats) "_pvariance"); + } + + { + double t = FUNCTION(gsl_stats,ttest) (groupa, stridea, na, groupb, strideb, nb); + double expected = -5.67026326985851; + gsl_test_rel (t, expected, rel, NAME(gsl_stats) "_ttest"); + } + + { + BASE expected = (BASE)0.1331; + gsl_test (FUNCTION(gsl_stats,max) (groupa, stridea, na) != expected, + NAME(gsl_stats) "_max (" OUT_FORMAT " observed vs " OUT_FORMAT " expected)", + FUNCTION(gsl_stats,max) (groupa, stridea, na), expected); + } + + { + BASE min = FUNCTION(gsl_stats,min) (groupa, stridea, na); + BASE expected = (BASE)0.0242; + gsl_test (min != expected, + NAME(gsl_stats) "_min (" OUT_FORMAT " observed vs " OUT_FORMAT " expected)", + min, expected); + } + + { + BASE min, max; + BASE expected_max = (BASE)0.1331; + BASE expected_min = (BASE)0.0242; + + FUNCTION(gsl_stats,minmax) (&min, &max, groupa, stridea, na); + + gsl_test (max != expected_max, + NAME(gsl_stats) "_minmax max (" OUT_FORMAT " observed vs " OUT_FORMAT " expected)", + max, expected_max); + gsl_test (min != expected_min, + NAME(gsl_stats) "_minmax min (" OUT_FORMAT " observed vs " OUT_FORMAT " expected)", + min, expected_min); + } + + { + int max_index = FUNCTION(gsl_stats,max_index) (groupa, stridea, na); + int expected = 4; + gsl_test (max_index != expected, + NAME(gsl_stats) "_max_index (%d observed vs %d expected)", + max_index, expected); + } + + { + int min_index = FUNCTION(gsl_stats,min_index) (groupa, stridea, na); + int expected = 3; + gsl_test (min_index != expected, + NAME(gsl_stats) "_min_index (%d observed vs %d expected)", + min_index, expected); + } + + { + size_t min_index, max_index; + size_t expected_max_index = 4; + size_t expected_min_index = 3; + + FUNCTION(gsl_stats,minmax_index) (&min_index, &max_index, groupa, stridea, na); + + gsl_test (max_index != expected_max_index, + NAME(gsl_stats) "_minmax_index max (%u observed vs %u expected)", + max_index, expected_max_index); + gsl_test (min_index != expected_min_index, + NAME(gsl_stats) "_minmax_index min (%u observed vs %u expected)", + min_index, expected_min_index); + } + + + sorted = (BASE *) malloc(stridea * na * sizeof(BASE)) ; + + for (i = 0 ; i < na ; i++) + sorted[stridea * i] = groupa[stridea * i] ; + + TYPE(gsl_sort)(sorted, stridea, na) ; + + { + double median = FUNCTION(gsl_stats,median_from_sorted_data)(sorted, stridea, na) ; + double expected = 0.07505; + gsl_test_rel (median,expected, rel, + NAME(gsl_stats) "_median_from_sorted_data (even)"); + } + + { + double median = FUNCTION(gsl_stats,median_from_sorted_data)(sorted, stridea, na - 1) ; + double expected = 0.0728; + gsl_test_rel (median,expected, rel, + NAME(gsl_stats) "_median_from_sorted_data"); + } + + + { + double zeroth = FUNCTION(gsl_stats,quantile_from_sorted_data)(sorted, stridea, na, 0.0) ; + double expected = 0.0242; + gsl_test_rel (zeroth,expected, rel, + NAME(gsl_stats) "_quantile_from_sorted_data (0)"); + } + + { + double top = FUNCTION(gsl_stats,quantile_from_sorted_data)(sorted, stridea, na, 1.0) ; + double expected = 0.1331; + gsl_test_rel (top,expected, rel, + NAME(gsl_stats) "_quantile_from_sorted_data (100)"); + } + + { + double median = FUNCTION(gsl_stats,quantile_from_sorted_data)(sorted, stridea, na, 0.5) ; + double expected = 0.07505; + gsl_test_rel (median,expected, rel, + NAME(gsl_stats) "_quantile_from_sorted_data (50even)"); + } + + { + double median = FUNCTION(gsl_stats,quantile_from_sorted_data)(sorted, stridea, na - 1, 0.5); + double expected = 0.0728; + gsl_test_rel (median,expected, rel, + NAME(gsl_stats) "_quantile_from_sorted_data (50odd)"); + + } + + /* Test for IEEE handling - set third element to NaN */ + + groupa [3*stridea] = GSL_NAN; + + { + BASE max = FUNCTION(gsl_stats,max) (groupa, stridea, na); + BASE expected = GSL_NAN; + gsl_test (!isnan(max), + NAME(gsl_stats) "_max NaN (" OUT_FORMAT " observed vs " OUT_FORMAT " expected)", + max, expected); + } + + { + BASE min = FUNCTION(gsl_stats,min) (groupa, stridea, na); + BASE expected = GSL_NAN; + gsl_test (!isnan(min), + NAME(gsl_stats) "_min NaN (" OUT_FORMAT " observed vs " OUT_FORMAT " expected)", + min, expected); + } + + { + BASE min, max; + BASE expected_max = GSL_NAN; + BASE expected_min = GSL_NAN; + + FUNCTION(gsl_stats,minmax) (&min, &max, groupa, stridea, na); + + gsl_test (!isnan(max), + NAME(gsl_stats) "_minmax max NaN (" OUT_FORMAT " observed vs " OUT_FORMAT " expected)", + max, expected_max); + gsl_test (!isnan(min), + NAME(gsl_stats) "_minmax min NaN (" OUT_FORMAT " observed vs " OUT_FORMAT " expected)", + min, expected_min); + } + +#ifdef FAST + { + BASE min, max; + BASE expected_max = GSL_NAN; + BASE expected_min = GSL_NAN; + + FUNCTION(gsl_stats,minmax) (&min, &max, groupa, stridea, na-1); + + gsl_test (!isnan(max), + NAME(gsl_stats) "_minmax(-1) max NaN (" OUT_FORMAT " observed vs " OUT_FORMAT " expected)", + max, expected_max); + gsl_test (!isnan(min), + NAME(gsl_stats) "_minmax(-1) min NaN (" OUT_FORMAT " observed vs " OUT_FORMAT " expected)", + min, expected_min); + } +#endif + + + { + int max_index = FUNCTION(gsl_stats,max_index) (groupa, stridea, na); + int expected = 3; + gsl_test (max_index != expected, + NAME(gsl_stats) "_max_index NaN (%d observed vs %d expected)", + max_index, expected); + } + + { + int min_index = FUNCTION(gsl_stats,min_index) (groupa, stridea, na); + int expected = 3; + gsl_test (min_index != expected, + NAME(gsl_stats) "_min_index NaN (%d observed vs %d expected)", + min_index, expected); + } + + { + size_t min_index, max_index; + size_t expected_max_index = 3; + size_t expected_min_index = 3; + + FUNCTION(gsl_stats,minmax_index) (&min_index, &max_index, groupa, stridea, na); + + gsl_test (max_index != expected_max_index, + NAME(gsl_stats) "_minmax_index max NaN (%u observed vs %u expected)", + max_index, expected_max_index); + gsl_test (min_index != expected_min_index, + NAME(gsl_stats) "_minmax_index min NaN (%u observed vs %u expected)", + min_index, expected_min_index); + } + + free (sorted); + free (groupa); + free (groupb); + free (w); + +} |