Blame statistics/test_float_source.c

Packit 67cb25
/* statistics/test_float_source.c
Packit 67cb25
 * 
Packit 67cb25
 * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Jim Davies, Brian Gough
Packit 67cb25
 * 
Packit 67cb25
 * This program is free software; you can redistribute it and/or modify
Packit 67cb25
 * it under the terms of the GNU General Public License as published by
Packit 67cb25
 * the Free Software Foundation; either version 3 of the License, or (at
Packit 67cb25
 * your option) any later version.
Packit 67cb25
 * 
Packit 67cb25
 * This program is distributed in the hope that it will be useful, but
Packit 67cb25
 * WITHOUT ANY WARRANTY; without even the implied warranty of
Packit 67cb25
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit 67cb25
 * General Public License for more details.
Packit 67cb25
 * 
Packit 67cb25
 * You should have received a copy of the GNU General Public License
Packit 67cb25
 * along with this program; if not, write to the Free Software
Packit 67cb25
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
Packit 67cb25
 */
Packit 67cb25
Packit 67cb25
void FUNCTION (test, func) (const size_t stridea, const size_t strideb);
Packit 67cb25
Packit 67cb25
void
Packit 67cb25
FUNCTION (test, func) (const size_t stridea, const size_t strideb)
Packit 67cb25
{
Packit 67cb25
  /* sample sets of doubles */
Packit 67cb25
  size_t i;
Packit 67cb25
  const size_t na = 14, nb = 14;
Packit 67cb25
Packit 67cb25
  const double rawa[] =
Packit 67cb25
  {.0421, .0941, .1064, .0242, .1331,
Packit 67cb25
   .0773, .0243, .0815, .1186, .0356,
Packit 67cb25
   .0728, .0999, .0614, .0479};
Packit 67cb25
Packit 67cb25
  const double rawb[] =
Packit 67cb25
  {.1081, .0986, .1566, .1961, .1125,
Packit 67cb25
   .1942, .1079, .1021, .1583, .1673,
Packit 67cb25
   .1675, .1856, .1688, .1512};
Packit 67cb25
Packit 67cb25
  const double raww[] = 
Packit 67cb25
  {.0000, .0000, .0000, 3.000, .0000,
Packit 67cb25
   1.000, 1.000, 1.000, 0.000, .5000,
Packit 67cb25
   7.000, 5.000, 4.000, 0.123};
Packit 67cb25
Packit 67cb25
  BASE * sorted ;
Packit 67cb25
Packit 67cb25
  BASE * groupa = (BASE *) malloc (stridea * na * sizeof(BASE));
Packit 67cb25
  BASE * groupb = (BASE *) malloc (strideb * nb * sizeof(BASE));
Packit 67cb25
  BASE * w = (BASE *) malloc (strideb * na * sizeof(BASE));
Packit 67cb25
Packit 67cb25
#ifdef BASE_FLOAT
Packit 67cb25
  double rel = 1e-6;
Packit 67cb25
#else
Packit 67cb25
  double rel = 1e-10;
Packit 67cb25
#endif
Packit 67cb25
Packit 67cb25
  for (i = 0 ; i < na ; i++)
Packit 67cb25
    groupa[i * stridea] = (BASE) rawa[i] ;
Packit 67cb25
Packit 67cb25
  for (i = 0 ; i < na ; i++)
Packit 67cb25
    w[i * strideb] = (BASE) raww[i] ;
Packit 67cb25
Packit 67cb25
  for (i = 0 ; i < nb ; i++)
Packit 67cb25
    groupb[i * strideb] = (BASE) rawb[i] ;
Packit 67cb25
Packit 67cb25
Packit 67cb25
  {
Packit 67cb25
    double mean = FUNCTION(gsl_stats,mean) (groupa, stridea, na);
Packit 67cb25
    double expected = 0.0728;
Packit 67cb25
    gsl_test_rel (mean, expected, rel, NAME(gsl_stats) "_mean");
Packit 67cb25
  }
Packit 67cb25
Packit 67cb25
  {
Packit 67cb25
    double mean = FUNCTION(gsl_stats,mean) (groupa, stridea, na);
Packit 67cb25
    double var = FUNCTION(gsl_stats,variance_with_fixed_mean) (groupa, stridea, na, mean);
Packit 67cb25
    double expected = 0.00113837428571429;
Packit 67cb25
    gsl_test_rel (var, expected, rel, NAME(gsl_stats) "_variance_with_fixed_mean");
Packit 67cb25
  }
Packit 67cb25
Packit 67cb25
Packit 67cb25
  {
Packit 67cb25
    double mean = FUNCTION(gsl_stats,mean) (groupa, stridea, na);
Packit 67cb25
    double var = FUNCTION(gsl_stats,sd_with_fixed_mean) (groupa, stridea, na, mean);
Packit 67cb25
    double expected = 0.0337398026922845;
Packit 67cb25
    gsl_test_rel (var, expected, rel, NAME(gsl_stats) "_sd_with_fixed_mean");
Packit 67cb25
  }
Packit 67cb25
Packit 67cb25
Packit 67cb25
  {
Packit 67cb25
    double var = FUNCTION(gsl_stats,variance) (groupb, strideb, nb);
Packit 67cb25
    double expected = 0.00124956615384615;
Packit 67cb25
    gsl_test_rel (var, expected, rel, NAME(gsl_stats) "_variance");
Packit 67cb25
  }
Packit 67cb25
Packit 67cb25
  {
Packit 67cb25
    double sd = FUNCTION(gsl_stats,sd) (groupa, stridea, na);
Packit 67cb25
    double expected = 0.0350134479659107;
Packit 67cb25
    gsl_test_rel (sd, expected, rel, NAME(gsl_stats) "_sd");
Packit 67cb25
  }
Packit 67cb25
Packit 67cb25
  {
Packit 67cb25
    double ss = FUNCTION(gsl_stats,tss) (groupb, strideb, nb);
Packit 67cb25
    double expected = 0.01624436;
Packit 67cb25
    gsl_test_rel (ss, expected, rel, NAME(gsl_stats) "_ss");
Packit 67cb25
  }
Packit 67cb25
Packit 67cb25
  {
Packit 67cb25
    double mean = FUNCTION(gsl_stats,mean) (groupa, stridea, na);
Packit 67cb25
    double ss = FUNCTION(gsl_stats,tss_m) (groupa, stridea, na, mean);
Packit 67cb25
    double expected = 1.59372400000000e-02;
Packit 67cb25
    gsl_test_rel (ss, expected, rel, NAME(gsl_stats) "_ss_m");
Packit 67cb25
  }
Packit 67cb25
Packit 67cb25
  {
Packit 67cb25
    double absdev = FUNCTION(gsl_stats,absdev) (groupa, stridea, na);
Packit 67cb25
    double expected = 0.0287571428571429;
Packit 67cb25
    gsl_test_rel (absdev, expected, rel, NAME(gsl_stats) "_absdev");
Packit 67cb25
  }
Packit 67cb25
Packit 67cb25
  {
Packit 67cb25
    double skew = FUNCTION(gsl_stats,skew) (groupa, stridea, na);
Packit 67cb25
    double expected = 0.0954642051479004;
Packit 67cb25
    gsl_test_rel (skew, expected, rel, NAME(gsl_stats) "_skew");
Packit 67cb25
  }
Packit 67cb25
Packit 67cb25
  {
Packit 67cb25
    double kurt = FUNCTION(gsl_stats,kurtosis) (groupa, stridea, na);
Packit 67cb25
    double expected = -1.38583851548909 ;
Packit 67cb25
    gsl_test_rel (kurt, expected, rel, NAME(gsl_stats) "_kurtosis");
Packit 67cb25
  }
Packit 67cb25
Packit 67cb25
  {
Packit 67cb25
    double wmean = FUNCTION(gsl_stats,wmean) (w, strideb, groupa, stridea, na);
Packit 67cb25
    double expected = 0.0678111523670601;
Packit 67cb25
    gsl_test_rel (wmean, expected, rel, NAME(gsl_stats) "_wmean");
Packit 67cb25
  }
Packit 67cb25
Packit 67cb25
  {
Packit 67cb25
    double wmean = FUNCTION(gsl_stats,wmean) (w, strideb, groupa, stridea, na);
Packit 67cb25
    double wvar = FUNCTION(gsl_stats,wvariance_with_fixed_mean) (w, strideb, groupa, stridea, na, wmean);
Packit 67cb25
    double expected = 0.000615793060878654;
Packit 67cb25
    gsl_test_rel (wvar, expected, rel, NAME(gsl_stats) "_wvariance_with_fixed_mean");
Packit 67cb25
  }
Packit 67cb25
Packit 67cb25
  {
Packit 67cb25
    double est_wvar = FUNCTION(gsl_stats,wvariance) (w, strideb, groupa, stridea, na);
Packit 67cb25
    double expected = 0.000769562962860317;
Packit 67cb25
    gsl_test_rel (est_wvar, expected, rel, NAME(gsl_stats) "_wvariance");
Packit 67cb25
  }
Packit 67cb25
Packit 67cb25
  {
Packit 67cb25
    double wsd = FUNCTION(gsl_stats,wsd) (w, strideb, groupa, stridea, na);
Packit 67cb25
    double expected = 0.0277409978706664;
Packit 67cb25
    gsl_test_rel (wsd, expected, rel, NAME(gsl_stats) "_wsd");
Packit 67cb25
  }
Packit 67cb25
Packit 67cb25
Packit 67cb25
  {
Packit 67cb25
    double wtss = FUNCTION(gsl_stats,wtss) (w, strideb, groupa, stridea, na);
Packit 67cb25
    double expected =  1.39310864162578e-02;
Packit 67cb25
    gsl_test_rel (wtss, expected, rel, NAME(gsl_stats) "_wtss");
Packit 67cb25
  }
Packit 67cb25
Packit 67cb25
  {
Packit 67cb25
    double wmean = FUNCTION(gsl_stats,wmean) (w, strideb, groupa, stridea, na);
Packit 67cb25
    double wtss = FUNCTION(gsl_stats,wtss_m) (w, strideb, groupa, stridea, na, wmean);
Packit 67cb25
    double expected =  1.39310864162578e-02;
Packit 67cb25
    gsl_test_rel (wtss, expected, rel, NAME(gsl_stats) "_wtss_m");
Packit 67cb25
  }
Packit 67cb25
Packit 67cb25
Packit 67cb25
Packit 67cb25
  {
Packit 67cb25
    double wabsdev = FUNCTION(gsl_stats,wabsdev) (w, strideb, groupa, stridea, na);
Packit 67cb25
    double expected = 0.0193205027504008;
Packit 67cb25
    gsl_test_rel (wabsdev, expected, rel, NAME(gsl_stats) "_wabsdev");
Packit 67cb25
  }
Packit 67cb25
Packit 67cb25
  {
Packit 67cb25
    double wskew = FUNCTION(gsl_stats,wskew) (w, strideb, groupa, stridea, na);
Packit 67cb25
    double expected = -0.373631000307076;
Packit 67cb25
    gsl_test_rel (wskew, expected, rel, NAME(gsl_stats) "_wskew");
Packit 67cb25
  }
Packit 67cb25
Packit 67cb25
  {
Packit 67cb25
    double wkurt = FUNCTION(gsl_stats,wkurtosis) (w, strideb, groupa, stridea, na);
Packit 67cb25
    double expected = -1.48114233353963;
Packit 67cb25
    gsl_test_rel (wkurt, expected, rel, NAME(gsl_stats) "_wkurtosis");
Packit 67cb25
  }
Packit 67cb25
Packit 67cb25
  {
Packit 67cb25
    double c = FUNCTION(gsl_stats,covariance) (groupa, stridea, groupb, strideb, nb);
Packit 67cb25
    double expected = -0.000139021538461539;
Packit 67cb25
    gsl_test_rel (c, expected, rel, NAME(gsl_stats) "_covariance");
Packit 67cb25
  }
Packit 67cb25
Packit 67cb25
  {
Packit 67cb25
    double r = FUNCTION(gsl_stats,correlation) (groupa, stridea, groupb, strideb, nb);
Packit 67cb25
    double expected = -0.112322712666074171;
Packit 67cb25
    gsl_test_rel (r, expected, rel, NAME(gsl_stats) "_correlation");
Packit 67cb25
  }
Packit 67cb25
Packit 67cb25
  {
Packit 67cb25
    double *work = malloc(2 * na * sizeof(double));
Packit 67cb25
    double r = FUNCTION(gsl_stats,spearman) (groupa, stridea, groupb, strideb, nb, work);
Packit 67cb25
    double expected = -0.1604395604395604396;
Packit 67cb25
    gsl_test_rel (r, expected, rel, NAME(gsl_stats) "_spearman");
Packit 67cb25
    free(work);
Packit 67cb25
  }
Packit 67cb25
Packit 67cb25
  {
Packit 67cb25
    double pv = FUNCTION(gsl_stats,pvariance) (groupa, stridea, na, groupb, strideb, nb);
Packit 67cb25
    double expected = 0.00123775384615385;
Packit 67cb25
    gsl_test_rel (pv, expected, rel, NAME(gsl_stats) "_pvariance");
Packit 67cb25
  }
Packit 67cb25
Packit 67cb25
  {
Packit 67cb25
    double t = FUNCTION(gsl_stats,ttest) (groupa, stridea, na, groupb, strideb, nb);
Packit 67cb25
    double expected = -5.67026326985851;
Packit 67cb25
    gsl_test_rel (t, expected, rel, NAME(gsl_stats) "_ttest");
Packit 67cb25
  }
Packit 67cb25
Packit 67cb25
  {
Packit 67cb25
    BASE expected = (BASE)0.1331;
Packit 67cb25
    gsl_test  (FUNCTION(gsl_stats,max) (groupa, stridea, na) != expected,
Packit 67cb25
               NAME(gsl_stats) "_max (" OUT_FORMAT " observed vs " OUT_FORMAT " expected)", 
Packit 67cb25
               FUNCTION(gsl_stats,max) (groupa, stridea, na), expected);
Packit 67cb25
  }
Packit 67cb25
Packit 67cb25
  {
Packit 67cb25
    BASE min = FUNCTION(gsl_stats,min) (groupa, stridea, na);
Packit 67cb25
    BASE expected = (BASE)0.0242;
Packit 67cb25
    gsl_test (min != expected,
Packit 67cb25
              NAME(gsl_stats) "_min (" OUT_FORMAT " observed vs " OUT_FORMAT " expected)", 
Packit 67cb25
              min, expected);
Packit 67cb25
  }
Packit 67cb25
Packit 67cb25
  {
Packit 67cb25
    BASE min, max;
Packit 67cb25
    BASE expected_max = (BASE)0.1331;
Packit 67cb25
    BASE expected_min = (BASE)0.0242;
Packit 67cb25
    
Packit 67cb25
    FUNCTION(gsl_stats,minmax) (&min, &max, groupa, stridea, na);
Packit 67cb25
 
Packit 67cb25
    gsl_test  (max != expected_max,
Packit 67cb25
               NAME(gsl_stats) "_minmax max (" OUT_FORMAT " observed vs " OUT_FORMAT " expected)", 
Packit 67cb25
               max, expected_max);
Packit 67cb25
    gsl_test  (min != expected_min,
Packit 67cb25
               NAME(gsl_stats) "_minmax min (" OUT_FORMAT " observed vs " OUT_FORMAT " expected)", 
Packit 67cb25
               min, expected_min);
Packit 67cb25
  }
Packit 67cb25
Packit 67cb25
  {
Packit 67cb25
    int max_index = FUNCTION(gsl_stats,max_index) (groupa, stridea, na);
Packit 67cb25
    int expected = 4;
Packit 67cb25
    gsl_test (max_index != expected,
Packit 67cb25
              NAME(gsl_stats) "_max_index (%d observed vs %d expected)",
Packit 67cb25
              max_index, expected);
Packit 67cb25
  }
Packit 67cb25
Packit 67cb25
  {
Packit 67cb25
    int min_index = FUNCTION(gsl_stats,min_index) (groupa, stridea, na);
Packit 67cb25
    int expected = 3;
Packit 67cb25
    gsl_test (min_index != expected,
Packit 67cb25
              NAME(gsl_stats) "_min_index (%d observed vs %d expected)",
Packit 67cb25
              min_index, expected);
Packit 67cb25
  }
Packit 67cb25
Packit 67cb25
  {
Packit 67cb25
    size_t min_index, max_index;
Packit 67cb25
    size_t expected_max_index = 4;
Packit 67cb25
    size_t expected_min_index = 3;
Packit 67cb25
Packit 67cb25
    FUNCTION(gsl_stats,minmax_index) (&min_index, &max_index, groupa, stridea, na);
Packit 67cb25
Packit 67cb25
    gsl_test  (max_index != expected_max_index,
Packit 67cb25
               NAME(gsl_stats) "_minmax_index max (%u observed vs %u expected)", 
Packit 67cb25
               max_index, expected_max_index);
Packit 67cb25
    gsl_test  (min_index != expected_min_index,
Packit 67cb25
               NAME(gsl_stats) "_minmax_index min (%u observed vs %u expected)", 
Packit 67cb25
               min_index, expected_min_index);
Packit 67cb25
  }
Packit 67cb25
Packit 67cb25
Packit 67cb25
  sorted = (BASE *) malloc(stridea * na * sizeof(BASE)) ;
Packit 67cb25
  
Packit 67cb25
  for (i = 0 ; i < na ; i++)
Packit 67cb25
    sorted[stridea * i] = groupa[stridea * i] ;
Packit 67cb25
  
Packit 67cb25
  TYPE(gsl_sort)(sorted, stridea, na) ;
Packit 67cb25
Packit 67cb25
  {
Packit 67cb25
    double median = FUNCTION(gsl_stats,median_from_sorted_data)(sorted, stridea, na) ;
Packit 67cb25
    double expected = 0.07505;
Packit 67cb25
    gsl_test_rel  (median,expected, rel,
Packit 67cb25
                   NAME(gsl_stats) "_median_from_sorted_data (even)");
Packit 67cb25
  }
Packit 67cb25
Packit 67cb25
  {
Packit 67cb25
    double median = FUNCTION(gsl_stats,median_from_sorted_data)(sorted, stridea, na - 1) ;
Packit 67cb25
    double expected = 0.0728;
Packit 67cb25
    gsl_test_rel  (median,expected, rel,
Packit 67cb25
                   NAME(gsl_stats) "_median_from_sorted_data (odd)");
Packit 67cb25
  }
Packit 67cb25
Packit 67cb25
  {
Packit 67cb25
    BASE * work = (BASE *) malloc (stridea * na * sizeof(BASE));
Packit 67cb25
    double expected = 0.07505;
Packit 67cb25
    double median;
Packit 67cb25
Packit 67cb25
    for (i = 0; i < na; i++)
Packit 67cb25
      work[i * stridea] = (BASE) rawa[i];
Packit 67cb25
Packit 67cb25
    median = FUNCTION(gsl_stats,median)(work, stridea, na) ;
Packit 67cb25
Packit 67cb25
    gsl_test_rel (median, expected, rel,
Packit 67cb25
                  NAME(gsl_stats) "_median (even)");
Packit 67cb25
Packit 67cb25
    free(work);
Packit 67cb25
  }
Packit 67cb25
Packit 67cb25
  {
Packit 67cb25
    BASE * work = (BASE *) malloc (stridea * (na - 1) * sizeof(BASE));
Packit 67cb25
    double expected = 0.0728;
Packit 67cb25
    double median;
Packit 67cb25
Packit 67cb25
    for (i = 0; i < na - 1; i++)
Packit 67cb25
      work[i * stridea] = (BASE) sorted[i * stridea];
Packit 67cb25
Packit 67cb25
    median = FUNCTION(gsl_stats,median)(work, stridea, na - 1) ;
Packit 67cb25
Packit 67cb25
    gsl_test_rel (median, expected, rel,
Packit 67cb25
                  NAME(gsl_stats) "_median (odd)");
Packit 67cb25
Packit 67cb25
    free(work);
Packit 67cb25
  }
Packit 67cb25
Packit 67cb25
  {
Packit 67cb25
    const double trim = 0.2;
Packit 67cb25
    double trmean = FUNCTION(gsl_stats,trmean_from_sorted_data)(trim, sorted, stridea, na) ;
Packit 67cb25
    double expected = 0.0719;
Packit 67cb25
    gsl_test_rel  (trmean, expected, rel,
Packit 67cb25
                   NAME(gsl_stats) "_trmean_from_sorted_data (even)");
Packit 67cb25
  }
Packit 67cb25
Packit 67cb25
  {
Packit 67cb25
    const double trim = 0.2;
Packit 67cb25
    double trmean = FUNCTION(gsl_stats,trmean_from_sorted_data)(trim, sorted, stridea, na - 1) ;
Packit 67cb25
    double expected = 0.06806666666666666;
Packit 67cb25
    gsl_test_rel  (trmean, expected, rel,
Packit 67cb25
                   NAME(gsl_stats) "_trmean_from_sorted_data (odd)");
Packit 67cb25
  }
Packit 67cb25
Packit 67cb25
  {
Packit 67cb25
    double gastwirth = FUNCTION(gsl_stats,gastwirth_from_sorted_data)(sorted, stridea, na) ;
Packit 67cb25
    double expected = 0.07271;
Packit 67cb25
    gsl_test_rel  (gastwirth, expected, rel,
Packit 67cb25
                   NAME(gsl_stats) "_gastwirth_from_sorted_data (even)");
Packit 67cb25
  }
Packit 67cb25
Packit 67cb25
  {
Packit 67cb25
    double gastwirth = FUNCTION(gsl_stats,gastwirth_from_sorted_data)(sorted, stridea, na - 1) ;
Packit 67cb25
    double expected = 0.06794;
Packit 67cb25
    gsl_test_rel  (gastwirth, expected, rel,
Packit 67cb25
                   NAME(gsl_stats) "_gastwirth_from_sorted_data (odd)");
Packit 67cb25
  }
Packit 67cb25
Packit 67cb25
  {
Packit 67cb25
    double zeroth = FUNCTION(gsl_stats,quantile_from_sorted_data)(sorted, stridea, na, 0.0) ;
Packit 67cb25
    double expected = 0.0242;
Packit 67cb25
    gsl_test_rel  (zeroth,expected, rel,
Packit 67cb25
                   NAME(gsl_stats) "_quantile_from_sorted_data (0)");
Packit 67cb25
  }
Packit 67cb25
Packit 67cb25
  {
Packit 67cb25
    double top = FUNCTION(gsl_stats,quantile_from_sorted_data)(sorted, stridea, na, 1.0) ;
Packit 67cb25
    double expected = 0.1331;
Packit 67cb25
    gsl_test_rel  (top,expected, rel,
Packit 67cb25
                   NAME(gsl_stats) "_quantile_from_sorted_data (100)");
Packit 67cb25
  }
Packit 67cb25
Packit 67cb25
  {
Packit 67cb25
    double median = FUNCTION(gsl_stats,quantile_from_sorted_data)(sorted, stridea, na, 0.5) ;
Packit 67cb25
    double expected = 0.07505;
Packit 67cb25
    gsl_test_rel  (median,expected, rel,
Packit 67cb25
                   NAME(gsl_stats) "_quantile_from_sorted_data (50even)");
Packit 67cb25
  }
Packit 67cb25
Packit 67cb25
  {
Packit 67cb25
    double median = FUNCTION(gsl_stats,quantile_from_sorted_data)(sorted, stridea, na - 1, 0.5);
Packit 67cb25
    double expected = 0.0728;
Packit 67cb25
    gsl_test_rel  (median,expected, rel,
Packit 67cb25
                   NAME(gsl_stats) "_quantile_from_sorted_data (50odd)");
Packit 67cb25
Packit 67cb25
  }
Packit 67cb25
Packit 67cb25
  {
Packit 67cb25
    size_t k;
Packit 67cb25
    BASE * work = (BASE *) malloc (stridea * na * sizeof(BASE));
Packit 67cb25
Packit 67cb25
    for (k = 0; k < na; ++k)
Packit 67cb25
      {
Packit 67cb25
        double expected = sorted[k * stridea];
Packit 67cb25
        double kselect;
Packit 67cb25
Packit 67cb25
        /* copy rawa[] for each k, since gsl_stats_select() changes input array */
Packit 67cb25
        for (i = 0; i < na; i++)
Packit 67cb25
          work[i * stridea] = (BASE) rawa[i];
Packit 67cb25
Packit 67cb25
        kselect = FUNCTION(gsl_stats,select)(work, stridea, na, k);
Packit 67cb25
Packit 67cb25
        gsl_test_rel(kselect, expected, rel, NAME(gsl_stats) "_select");
Packit 67cb25
      }
Packit 67cb25
Packit 67cb25
    free(work);
Packit 67cb25
  }
Packit 67cb25
Packit 67cb25
  /* Test for IEEE handling - set third element to NaN */
Packit 67cb25
Packit 67cb25
  groupa [3*stridea] = GSL_NAN;
Packit 67cb25
Packit 67cb25
  {
Packit 67cb25
    BASE max = FUNCTION(gsl_stats,max) (groupa, stridea, na);
Packit 67cb25
    BASE expected = GSL_NAN;
Packit 67cb25
    gsl_test  (!isnan(max),
Packit 67cb25
               NAME(gsl_stats) "_max NaN (" OUT_FORMAT " observed vs " OUT_FORMAT " expected)", 
Packit 67cb25
               max, expected);
Packit 67cb25
  }
Packit 67cb25
Packit 67cb25
  {
Packit 67cb25
    BASE min = FUNCTION(gsl_stats,min) (groupa, stridea, na);
Packit 67cb25
    BASE expected = GSL_NAN;
Packit 67cb25
    gsl_test (!isnan(min),
Packit 67cb25
              NAME(gsl_stats) "_min NaN (" OUT_FORMAT " observed vs " OUT_FORMAT " expected)", 
Packit 67cb25
              min, expected);
Packit 67cb25
  }
Packit 67cb25
Packit 67cb25
  {
Packit 67cb25
    BASE min, max;
Packit 67cb25
    BASE expected_max = GSL_NAN;
Packit 67cb25
    BASE expected_min = GSL_NAN;
Packit 67cb25
    
Packit 67cb25
    FUNCTION(gsl_stats,minmax) (&min, &max, groupa, stridea, na);
Packit 67cb25
 
Packit 67cb25
    gsl_test  (!isnan(max),
Packit 67cb25
               NAME(gsl_stats) "_minmax max NaN (" OUT_FORMAT " observed vs " OUT_FORMAT " expected)", 
Packit 67cb25
               max, expected_max);
Packit 67cb25
    gsl_test  (!isnan(min),
Packit 67cb25
               NAME(gsl_stats) "_minmax min NaN (" OUT_FORMAT " observed vs " OUT_FORMAT " expected)", 
Packit 67cb25
               min, expected_min);
Packit 67cb25
  }
Packit 67cb25
Packit 67cb25
#ifdef FAST
Packit 67cb25
  {
Packit 67cb25
    BASE min, max;
Packit 67cb25
    BASE expected_max = GSL_NAN;
Packit 67cb25
    BASE expected_min = GSL_NAN;
Packit 67cb25
    
Packit 67cb25
    FUNCTION(gsl_stats,minmax) (&min, &max, groupa, stridea, na-1);
Packit 67cb25
 
Packit 67cb25
    gsl_test  (!isnan(max),
Packit 67cb25
               NAME(gsl_stats) "_minmax(-1) max NaN (" OUT_FORMAT " observed vs " OUT_FORMAT " expected)", 
Packit 67cb25
               max, expected_max);
Packit 67cb25
    gsl_test  (!isnan(min),
Packit 67cb25
               NAME(gsl_stats) "_minmax(-1) min NaN (" OUT_FORMAT " observed vs " OUT_FORMAT " expected)", 
Packit 67cb25
               min, expected_min);
Packit 67cb25
  }
Packit 67cb25
#endif
Packit 67cb25
Packit 67cb25
Packit 67cb25
  {
Packit 67cb25
    int max_index = FUNCTION(gsl_stats,max_index) (groupa, stridea, na);
Packit 67cb25
    int expected = 3;
Packit 67cb25
    gsl_test (max_index != expected,
Packit 67cb25
              NAME(gsl_stats) "_max_index NaN (%d observed vs %d expected)",
Packit 67cb25
              max_index, expected);
Packit 67cb25
  }
Packit 67cb25
Packit 67cb25
  {
Packit 67cb25
    int min_index = FUNCTION(gsl_stats,min_index) (groupa, stridea, na);
Packit 67cb25
    int expected = 3;
Packit 67cb25
    gsl_test (min_index != expected,
Packit 67cb25
              NAME(gsl_stats) "_min_index NaN (%d observed vs %d expected)",
Packit 67cb25
              min_index, expected);
Packit 67cb25
  }
Packit 67cb25
Packit 67cb25
  {
Packit 67cb25
    size_t min_index, max_index;
Packit 67cb25
    size_t expected_max_index = 3;
Packit 67cb25
    size_t expected_min_index = 3;
Packit 67cb25
Packit 67cb25
    FUNCTION(gsl_stats,minmax_index) (&min_index, &max_index, groupa, stridea, na);
Packit 67cb25
Packit 67cb25
    gsl_test  (max_index != expected_max_index,
Packit 67cb25
               NAME(gsl_stats) "_minmax_index max NaN (%u observed vs %u expected)", 
Packit 67cb25
               max_index, expected_max_index);
Packit 67cb25
    gsl_test  (min_index != expected_min_index,
Packit 67cb25
               NAME(gsl_stats) "_minmax_index min NaN (%u observed vs %u expected)", 
Packit 67cb25
               min_index, expected_min_index);
Packit 67cb25
  }
Packit 67cb25
Packit 67cb25
  /* restore */
Packit 67cb25
  groupa [3*stridea] = (BASE) rawa[3];
Packit 67cb25
Packit 67cb25
  {
Packit 67cb25
    double * work = (double *) malloc (na * sizeof(double));
Packit 67cb25
    double expected = 0.02925;
Packit 67cb25
    double mad0 = FUNCTION(gsl_stats,mad0)(groupa, stridea, na, work);
Packit 67cb25
    gsl_test_rel (mad0, expected, rel, NAME(gsl_stats) "_mad0 (even)");
Packit 67cb25
    free(work);
Packit 67cb25
  }
Packit 67cb25
Packit 67cb25
  {
Packit 67cb25
    double * work = (double *) malloc ((na - 1) * sizeof(double));
Packit 67cb25
    double expected = 0.02910;
Packit 67cb25
    double mad0 = FUNCTION(gsl_stats,mad0)(groupa, stridea, na - 1, work);
Packit 67cb25
    gsl_test_rel (mad0, expected, rel, NAME(gsl_stats) "_mad0 (odd)");
Packit 67cb25
    free(work);
Packit 67cb25
  }
Packit 67cb25
Packit 67cb25
  {
Packit 67cb25
    BASE *work = malloc(na * sizeof(BASE));
Packit 67cb25
    double r = FUNCTION(gsl_stats,Sn_from_sorted_data) (sorted, stridea, na, work);
Packit 67cb25
    double expected = 0.04007136;
Packit 67cb25
    gsl_test_rel (r, expected, rel, NAME(gsl_stats) "_Sn_from_sorted_data (even)");
Packit 67cb25
    free(work);
Packit 67cb25
  }
Packit 67cb25
Packit 67cb25
  {
Packit 67cb25
    BASE *work = malloc((na - 1) * sizeof(BASE));
Packit 67cb25
    double r = FUNCTION(gsl_stats,Sn_from_sorted_data) (sorted, stridea, na - 1, work);
Packit 67cb25
    double expected = 0.03728599834710744;
Packit 67cb25
    gsl_test_rel (r, expected, rel, NAME(gsl_stats) "_Sn_from_sorted_data (odd)");
Packit 67cb25
    free(work);
Packit 67cb25
  }
Packit 67cb25
Packit 67cb25
  {
Packit 67cb25
    BASE *work = malloc(3 * na * sizeof(BASE));
Packit 67cb25
    int *work_int = malloc(5 * na * sizeof(int));
Packit 67cb25
    double r = FUNCTION(gsl_stats,Qn_from_sorted_data) (sorted, stridea, na, work, work_int);
Packit 67cb25
    double expected = 0.04113672759664409;
Packit 67cb25
    gsl_test_rel (r, expected, rel, NAME(gsl_stats) "_Qn_from_sorted_data (even)");
Packit 67cb25
    free(work);
Packit 67cb25
    free(work_int);
Packit 67cb25
  }
Packit 67cb25
Packit 67cb25
  {
Packit 67cb25
    BASE *work = malloc(3 * (na - 1) * sizeof(BASE));
Packit 67cb25
    int *work_int = malloc(5 * (na - 1) * sizeof(int));
Packit 67cb25
    double r = FUNCTION(gsl_stats,Qn_from_sorted_data) (sorted, stridea, na - 1, work, work_int);
Packit 67cb25
    double expected = 0.03684305546303433;
Packit 67cb25
    gsl_test_rel (r, expected, rel, NAME(gsl_stats) "_Qn_from_sorted_data (odd)");
Packit 67cb25
    free(work);
Packit 67cb25
    free(work_int);
Packit 67cb25
  }
Packit 67cb25
Packit 67cb25
  free (sorted);
Packit 67cb25
  free (groupa);
Packit 67cb25
  free (groupb);
Packit 67cb25
  free (w);
Packit 67cb25
Packit 67cb25
}