1 /* statistics/test_float_source.c
3 * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Jim Davies, Brian Gough
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 3 of the License, or (at
8 * your option) any later version.
10 * This program is distributed in the hope that it will be useful, but
11 * WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * General Public License for more details.
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
20 void FUNCTION (test, func) (const size_t stridea, const size_t strideb);
23 FUNCTION (test, func) (const size_t stridea, const size_t strideb)
25 /* sample sets of doubles */
27 const size_t na = 14, nb = 14;
30 {.0421, .0941, .1064, .0242, .1331,
31 .0773, .0243, .0815, .1186, .0356,
32 .0728, .0999, .0614, .0479};
35 {.1081, .0986, .1566, .1961, .1125,
36 .1942, .1079, .1021, .1583, .1673,
37 .1675, .1856, .1688, .1512};
40 {.0000, .0000, .0000, 3.000, .0000,
41 1.000, 1.000, 1.000, 0.000, .5000,
42 7.000, 5.000, 4.000, 0.123};
46 BASE * groupa = (BASE *) malloc (stridea * na * sizeof(BASE));
47 BASE * groupb = (BASE *) malloc (strideb * nb * sizeof(BASE));
48 BASE * w = (BASE *) malloc (strideb * na * sizeof(BASE));
56 for (i = 0 ; i < na ; i++)
57 groupa[i * stridea] = (BASE) rawa[i] ;
59 for (i = 0 ; i < na ; i++)
60 w[i * strideb] = (BASE) raww[i] ;
62 for (i = 0 ; i < nb ; i++)
63 groupb[i * strideb] = (BASE) rawb[i] ;
67 double mean = FUNCTION(gsl_stats,mean) (groupa, stridea, na);
68 double expected = 0.0728;
69 gsl_test_rel (mean, expected, rel, NAME(gsl_stats) "_mean");
73 double mean = FUNCTION(gsl_stats,mean) (groupa, stridea, na);
74 double var = FUNCTION(gsl_stats,variance_with_fixed_mean) (groupa, stridea, na, mean);
75 double expected = 0.00113837428571429;
76 gsl_test_rel (var, expected, rel, NAME(gsl_stats) "_variance_with_fixed_mean");
81 double mean = FUNCTION(gsl_stats,mean) (groupa, stridea, na);
82 double var = FUNCTION(gsl_stats,sd_with_fixed_mean) (groupa, stridea, na, mean);
83 double expected = 0.0337398026922845;
84 gsl_test_rel (var, expected, rel, NAME(gsl_stats) "_sd_with_fixed_mean");
89 double var = FUNCTION(gsl_stats,variance) (groupb, strideb, nb);
90 double expected = 0.00124956615384615;
91 gsl_test_rel (var, expected, rel, NAME(gsl_stats) "_variance");
95 double sd = FUNCTION(gsl_stats,sd) (groupa, stridea, na);
96 double expected = 0.0350134479659107;
97 gsl_test_rel (sd, expected, rel, NAME(gsl_stats) "_sd");
101 double ss = FUNCTION(gsl_stats,tss) (groupb, strideb, nb);
102 double expected = 0.01624436;
103 gsl_test_rel (ss, expected, rel, NAME(gsl_stats) "_ss");
107 double mean = FUNCTION(gsl_stats,mean) (groupa, stridea, na);
108 double ss = FUNCTION(gsl_stats,tss_m) (groupa, stridea, na, mean);
109 double expected = 1.59372400000000e-02;
110 gsl_test_rel (ss, expected, rel, NAME(gsl_stats) "_ss_m");
114 double absdev = FUNCTION(gsl_stats,absdev) (groupa, stridea, na);
115 double expected = 0.0287571428571429;
116 gsl_test_rel (absdev, expected, rel, NAME(gsl_stats) "_absdev");
120 double skew = FUNCTION(gsl_stats,skew) (groupa, stridea, na);
121 double expected = 0.0954642051479004;
122 gsl_test_rel (skew, expected, rel, NAME(gsl_stats) "_skew");
126 double kurt = FUNCTION(gsl_stats,kurtosis) (groupa, stridea, na);
127 double expected = -1.38583851548909 ;
128 gsl_test_rel (kurt, expected, rel, NAME(gsl_stats) "_kurtosis");
132 double wmean = FUNCTION(gsl_stats,wmean) (w, strideb, groupa, stridea, na);
133 double expected = 0.0678111523670601;
134 gsl_test_rel (wmean, expected, rel, NAME(gsl_stats) "_wmean");
138 double wmean = FUNCTION(gsl_stats,wmean) (w, strideb, groupa, stridea, na);
139 double wvar = FUNCTION(gsl_stats,wvariance_with_fixed_mean) (w, strideb, groupa, stridea, na, wmean);
140 double expected = 0.000615793060878654;
141 gsl_test_rel (wvar, expected, rel, NAME(gsl_stats) "_wvariance_with_fixed_mean");
145 double est_wvar = FUNCTION(gsl_stats,wvariance) (w, strideb, groupa, stridea, na);
146 double expected = 0.000769562962860317;
147 gsl_test_rel (est_wvar, expected, rel, NAME(gsl_stats) "_wvariance");
151 double wsd = FUNCTION(gsl_stats,wsd) (w, strideb, groupa, stridea, na);
152 double expected = 0.0277409978706664;
153 gsl_test_rel (wsd, expected, rel, NAME(gsl_stats) "_wsd");
158 double wtss = FUNCTION(gsl_stats,wtss) (w, strideb, groupa, stridea, na);
159 double expected = 1.39310864162578e-02;
160 gsl_test_rel (wtss, expected, rel, NAME(gsl_stats) "_wtss");
164 double wmean = FUNCTION(gsl_stats,wmean) (w, strideb, groupa, stridea, na);
165 double wtss = FUNCTION(gsl_stats,wtss_m) (w, strideb, groupa, stridea, na, wmean);
166 double expected = 1.39310864162578e-02;
167 gsl_test_rel (wtss, expected, rel, NAME(gsl_stats) "_wtss_m");
173 double wabsdev = FUNCTION(gsl_stats,wabsdev) (w, strideb, groupa, stridea, na);
174 double expected = 0.0193205027504008;
175 gsl_test_rel (wabsdev, expected, rel, NAME(gsl_stats) "_wabsdev");
179 double wskew = FUNCTION(gsl_stats,wskew) (w, strideb, groupa, stridea, na);
180 double expected = -0.373631000307076;
181 gsl_test_rel (wskew, expected, rel, NAME(gsl_stats) "_wskew");
185 double wkurt = FUNCTION(gsl_stats,wkurtosis) (w, strideb, groupa, stridea, na);
186 double expected = -1.48114233353963;
187 gsl_test_rel (wkurt, expected, rel, NAME(gsl_stats) "_wkurtosis");
191 double c = FUNCTION(gsl_stats,covariance) (groupa, stridea, groupb, strideb, nb);
192 double expected = -0.000139021538461539;
193 gsl_test_rel (c, expected, rel, NAME(gsl_stats) "_covariance");
197 double r = FUNCTION(gsl_stats,correlation) (groupa, stridea, groupb, strideb, nb);
198 double expected = -0.112322712666074171;
199 gsl_test_rel (r, expected, rel, NAME(gsl_stats) "_correlation");
203 double pv = FUNCTION(gsl_stats,pvariance) (groupa, stridea, na, groupb, strideb, nb);
204 double expected = 0.00123775384615385;
205 gsl_test_rel (pv, expected, rel, NAME(gsl_stats) "_pvariance");
209 double t = FUNCTION(gsl_stats,ttest) (groupa, stridea, na, groupb, strideb, nb);
210 double expected = -5.67026326985851;
211 gsl_test_rel (t, expected, rel, NAME(gsl_stats) "_ttest");
215 BASE expected = (BASE)0.1331;
216 gsl_test (FUNCTION(gsl_stats,max) (groupa, stridea, na) != expected,
217 NAME(gsl_stats) "_max (" OUT_FORMAT " observed vs " OUT_FORMAT " expected)",
218 FUNCTION(gsl_stats,max) (groupa, stridea, na), expected);
222 BASE min = FUNCTION(gsl_stats,min) (groupa, stridea, na);
223 BASE expected = (BASE)0.0242;
224 gsl_test (min != expected,
225 NAME(gsl_stats) "_min (" OUT_FORMAT " observed vs " OUT_FORMAT " expected)",
231 BASE expected_max = (BASE)0.1331;
232 BASE expected_min = (BASE)0.0242;
234 FUNCTION(gsl_stats,minmax) (&min, &max, groupa, stridea, na);
236 gsl_test (max != expected_max,
237 NAME(gsl_stats) "_minmax max (" OUT_FORMAT " observed vs " OUT_FORMAT " expected)",
239 gsl_test (min != expected_min,
240 NAME(gsl_stats) "_minmax min (" OUT_FORMAT " observed vs " OUT_FORMAT " expected)",
245 int max_index = FUNCTION(gsl_stats,max_index) (groupa, stridea, na);
247 gsl_test (max_index != expected,
248 NAME(gsl_stats) "_max_index (%d observed vs %d expected)",
249 max_index, expected);
253 int min_index = FUNCTION(gsl_stats,min_index) (groupa, stridea, na);
255 gsl_test (min_index != expected,
256 NAME(gsl_stats) "_min_index (%d observed vs %d expected)",
257 min_index, expected);
261 size_t min_index, max_index;
262 size_t expected_max_index = 4;
263 size_t expected_min_index = 3;
265 FUNCTION(gsl_stats,minmax_index) (&min_index, &max_index, groupa, stridea, na);
267 gsl_test (max_index != expected_max_index,
268 NAME(gsl_stats) "_minmax_index max (%u observed vs %u expected)",
269 max_index, expected_max_index);
270 gsl_test (min_index != expected_min_index,
271 NAME(gsl_stats) "_minmax_index min (%u observed vs %u expected)",
272 min_index, expected_min_index);
276 sorted = (BASE *) malloc(stridea * na * sizeof(BASE)) ;
278 for (i = 0 ; i < na ; i++)
279 sorted[stridea * i] = groupa[stridea * i] ;
281 TYPE(gsl_sort)(sorted, stridea, na) ;
284 double median = FUNCTION(gsl_stats,median_from_sorted_data)(sorted, stridea, na) ;
285 double expected = 0.07505;
286 gsl_test_rel (median,expected, rel,
287 NAME(gsl_stats) "_median_from_sorted_data (even)");
291 double median = FUNCTION(gsl_stats,median_from_sorted_data)(sorted, stridea, na - 1) ;
292 double expected = 0.0728;
293 gsl_test_rel (median,expected, rel,
294 NAME(gsl_stats) "_median_from_sorted_data");
299 double zeroth = FUNCTION(gsl_stats,quantile_from_sorted_data)(sorted, stridea, na, 0.0) ;
300 double expected = 0.0242;
301 gsl_test_rel (zeroth,expected, rel,
302 NAME(gsl_stats) "_quantile_from_sorted_data (0)");
306 double top = FUNCTION(gsl_stats,quantile_from_sorted_data)(sorted, stridea, na, 1.0) ;
307 double expected = 0.1331;
308 gsl_test_rel (top,expected, rel,
309 NAME(gsl_stats) "_quantile_from_sorted_data (100)");
313 double median = FUNCTION(gsl_stats,quantile_from_sorted_data)(sorted, stridea, na, 0.5) ;
314 double expected = 0.07505;
315 gsl_test_rel (median,expected, rel,
316 NAME(gsl_stats) "_quantile_from_sorted_data (50even)");
320 double median = FUNCTION(gsl_stats,quantile_from_sorted_data)(sorted, stridea, na - 1, 0.5);
321 double expected = 0.0728;
322 gsl_test_rel (median,expected, rel,
323 NAME(gsl_stats) "_quantile_from_sorted_data (50odd)");
327 /* Test for IEEE handling - set third element to NaN */
329 groupa [3*stridea] = GSL_NAN;
332 BASE max = FUNCTION(gsl_stats,max) (groupa, stridea, na);
333 BASE expected = GSL_NAN;
334 gsl_test (!isnan(max),
335 NAME(gsl_stats) "_max NaN (" OUT_FORMAT " observed vs " OUT_FORMAT " expected)",
340 BASE min = FUNCTION(gsl_stats,min) (groupa, stridea, na);
341 BASE expected = GSL_NAN;
342 gsl_test (!isnan(min),
343 NAME(gsl_stats) "_min NaN (" OUT_FORMAT " observed vs " OUT_FORMAT " expected)",
349 BASE expected_max = GSL_NAN;
350 BASE expected_min = GSL_NAN;
352 FUNCTION(gsl_stats,minmax) (&min, &max, groupa, stridea, na);
354 gsl_test (!isnan(max),
355 NAME(gsl_stats) "_minmax max NaN (" OUT_FORMAT " observed vs " OUT_FORMAT " expected)",
357 gsl_test (!isnan(min),
358 NAME(gsl_stats) "_minmax min NaN (" OUT_FORMAT " observed vs " OUT_FORMAT " expected)",
365 BASE expected_max = GSL_NAN;
366 BASE expected_min = GSL_NAN;
368 FUNCTION(gsl_stats,minmax) (&min, &max, groupa, stridea, na-1);
370 gsl_test (!isnan(max),
371 NAME(gsl_stats) "_minmax(-1) max NaN (" OUT_FORMAT " observed vs " OUT_FORMAT " expected)",
373 gsl_test (!isnan(min),
374 NAME(gsl_stats) "_minmax(-1) min NaN (" OUT_FORMAT " observed vs " OUT_FORMAT " expected)",
381 int max_index = FUNCTION(gsl_stats,max_index) (groupa, stridea, na);
383 gsl_test (max_index != expected,
384 NAME(gsl_stats) "_max_index NaN (%d observed vs %d expected)",
385 max_index, expected);
389 int min_index = FUNCTION(gsl_stats,min_index) (groupa, stridea, na);
391 gsl_test (min_index != expected,
392 NAME(gsl_stats) "_min_index NaN (%d observed vs %d expected)",
393 min_index, expected);
397 size_t min_index, max_index;
398 size_t expected_max_index = 3;
399 size_t expected_min_index = 3;
401 FUNCTION(gsl_stats,minmax_index) (&min_index, &max_index, groupa, stridea, na);
403 gsl_test (max_index != expected_max_index,
404 NAME(gsl_stats) "_minmax_index max NaN (%u observed vs %u expected)",
405 max_index, expected_max_index);
406 gsl_test (min_index != expected_min_index,
407 NAME(gsl_stats) "_minmax_index min NaN (%u observed vs %u expected)",
408 min_index, expected_min_index);