Blame statistics/test_int_source.c

Packit 67cb25
/* statistics/test_int_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 integers */
Packit 67cb25
  size_t i;
Packit 67cb25
  const size_t ina = 20, inb = 20;
Packit 67cb25
Packit 67cb25
  const BASE raw1[] = {1, 2, 3, 4, 5, 6} ;
Packit 67cb25
  
Packit 67cb25
  const BASE irawa[] =
Packit 67cb25
  {17, 18, 16, 18, 12,
Packit 67cb25
   20, 18, 20, 20, 22,
Packit 67cb25
   20, 10, 8, 12, 16,
Packit 67cb25
   16, 18, 20, 18, 21};
Packit 67cb25
Packit 67cb25
  const BASE irawb[] =
Packit 67cb25
  {19, 20, 22, 24, 10,
Packit 67cb25
   25, 20, 22, 21, 23,
Packit 67cb25
   20, 10, 12, 14, 12,
Packit 67cb25
   20, 22, 24, 23, 17};
Packit 67cb25
Packit 67cb25
  BASE * sorted ;
Packit 67cb25
Packit 67cb25
  BASE * test1 = (BASE *) malloc (stridea * 6 * sizeof(BASE));
Packit 67cb25
  BASE * igroupa = (BASE *) malloc (stridea * ina * sizeof(BASE));
Packit 67cb25
  BASE * igroupb = (BASE *) malloc (strideb * inb * sizeof(BASE));
Packit 67cb25
Packit 67cb25
  double rel = 1e-10 ;
Packit 67cb25
Packit 67cb25
  for (i = 0 ; i < ina ; i++)
Packit 67cb25
    igroupa[i * stridea] = irawa[i] ;
Packit 67cb25
Packit 67cb25
  for (i = 0 ; i < inb ; i++)
Packit 67cb25
    igroupb[i * strideb] = irawb[i] ;
Packit 67cb25
Packit 67cb25
  for (i = 0 ; i < 6 ; i++)
Packit 67cb25
    test1[i * stridea] = raw1[i] ;
Packit 67cb25
Packit 67cb25
Packit 67cb25
Packit 67cb25
  {
Packit 67cb25
    double mean = FUNCTION(gsl_stats,mean) (igroupa, stridea, ina);
Packit 67cb25
    double expected = 17.0;
Packit 67cb25
    gsl_test_rel (mean,expected, rel, NAME(gsl_stats) "_mean (integer)");
Packit 67cb25
  }
Packit 67cb25
Packit 67cb25
  {
Packit 67cb25
    double mean = FUNCTION(gsl_stats,mean) (test1, stridea, 6);
Packit 67cb25
    double expected = 3.5;
Packit 67cb25
    gsl_test_rel (mean,expected, rel, NAME(gsl_stats) "_mean (fractional)");
Packit 67cb25
  }
Packit 67cb25
Packit 67cb25
  {
Packit 67cb25
    double mean = FUNCTION(gsl_stats,mean) (igroupa, stridea, ina);
Packit 67cb25
    double var = FUNCTION(gsl_stats,variance_with_fixed_mean) (igroupa, stridea, ina, mean);
Packit 67cb25
    double expected = 13.7;
Packit 67cb25
    gsl_test_rel (var, expected, rel, NAME(gsl_stats) "_variance_with_fixed_mean");
Packit 67cb25
  }
Packit 67cb25
Packit 67cb25
  {
Packit 67cb25
    double mean = FUNCTION(gsl_stats,mean) (igroupa, stridea, ina);
Packit 67cb25
    double sd = FUNCTION(gsl_stats,sd_with_fixed_mean) (igroupa, stridea, ina, mean);
Packit 67cb25
    double expected = 3.70135110466435;
Packit 67cb25
    gsl_test_rel (sd, expected, rel, NAME(gsl_stats) "_sd_with_fixed_mean");
Packit 67cb25
  }
Packit 67cb25
Packit 67cb25
  {
Packit 67cb25
    double var = FUNCTION(gsl_stats,variance) (igroupa, stridea, ina);
Packit 67cb25
    double expected = 14.4210526315789;
Packit 67cb25
    gsl_test_rel (var, expected, rel, NAME(gsl_stats) "_variance");
Packit 67cb25
  }
Packit 67cb25
Packit 67cb25
  {
Packit 67cb25
    double sd_est = FUNCTION(gsl_stats,sd) (igroupa, stridea, ina);
Packit 67cb25
    double expected = 3.79750610685209;
Packit 67cb25
    gsl_test_rel (sd_est, expected, rel, NAME(gsl_stats) "_sd");
Packit 67cb25
  }
Packit 67cb25
Packit 67cb25
  {
Packit 67cb25
    double absdev = FUNCTION(gsl_stats,absdev) (igroupa, stridea, ina);
Packit 67cb25
    double expected = 2.9;
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) (igroupa, stridea, ina);
Packit 67cb25
    double expected = -0.909355923168064;
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) (igroupa, stridea, ina);
Packit 67cb25
    double expected = -0.233692524908094 ;
Packit 67cb25
    gsl_test_rel (kurt, expected, rel, NAME(gsl_stats) "_kurtosis");
Packit 67cb25
  }
Packit 67cb25
Packit 67cb25
  {
Packit 67cb25
    double c = FUNCTION(gsl_stats,covariance) (igroupa, stridea, igroupb, strideb, inb);
Packit 67cb25
    double expected = 14.5263157894737;
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) (igroupa, stridea, igroupb, strideb, inb);
Packit 67cb25
    double expected = 0.793090350710101;
Packit 67cb25
    gsl_test_rel (r, expected, rel, NAME(gsl_stats) "_correlation");
Packit 67cb25
  }
Packit 67cb25
Packit 67cb25
  {
Packit 67cb25
    double *work = malloc(2 * ina * sizeof(double));
Packit 67cb25
    double r = FUNCTION(gsl_stats,spearman) (igroupa, stridea, igroupb, strideb, inb, work);
Packit 67cb25
    double expected = 0.644239670474577;
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) (igroupa, stridea, ina, igroupb, strideb, inb);
Packit 67cb25
    double expected = 18.8421052631579;
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) (igroupa, stridea, ina, igroupb, strideb, inb);
Packit 67cb25
    double expected = -1.45701922702927;
Packit 67cb25
    gsl_test_rel (t, expected, rel, NAME(gsl_stats) "_ttest");
Packit 67cb25
  }
Packit 67cb25
Packit 67cb25
  {
Packit 67cb25
    int max = FUNCTION(gsl_stats,max) (igroupa, stridea, ina);
Packit 67cb25
    int expected = 22;
Packit 67cb25
    gsl_test (max != expected,
Packit 67cb25
              NAME(gsl_stats) "_max (%d observed vs %d expected)", max, expected);
Packit 67cb25
  }
Packit 67cb25
Packit 67cb25
  {
Packit 67cb25
    int min = FUNCTION(gsl_stats,min) (igroupa, stridea, ina);
Packit 67cb25
    int expected = 8;
Packit 67cb25
    gsl_test (min != expected,
Packit 67cb25
              NAME(gsl_stats) "_min (%d observed vs %d expected)", min, expected);
Packit 67cb25
  }
Packit 67cb25
Packit 67cb25
  {
Packit 67cb25
    BASE min, max;
Packit 67cb25
    BASE expected_max = 22;
Packit 67cb25
    BASE expected_min = 8;
Packit 67cb25
    
Packit 67cb25
    FUNCTION(gsl_stats,minmax) (&min, &max, igroupa, stridea, ina);
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) (igroupa, stridea, ina);
Packit 67cb25
    int expected = 9 ;
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) (igroupa, stridea, ina);
Packit 67cb25
    int expected = 12 ;
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 = 9;
Packit 67cb25
    size_t expected_min_index = 12;
Packit 67cb25
Packit 67cb25
    FUNCTION(gsl_stats,minmax_index) (&min_index, &max_index, igroupa, stridea, ina);
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 * ina * sizeof(BASE)) ;
Packit 67cb25
Packit 67cb25
  for (i = 0 ; i < ina ; i++)
Packit 67cb25
    sorted[stridea * i] = igroupa[stridea * i] ;
Packit 67cb25
Packit 67cb25
Packit 67cb25
  TYPE(gsl_sort)(sorted, stridea, ina) ;
Packit 67cb25
Packit 67cb25
  {
Packit 67cb25
    double median = FUNCTION(gsl_stats,median_from_sorted_data)(sorted, stridea, ina) ;
Packit 67cb25
    double expected = 18;
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, ina - 1) ;
Packit 67cb25
    double expected = 18;
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 * ina * sizeof(BASE));
Packit 67cb25
    double expected = 18;
Packit 67cb25
    double median;
Packit 67cb25
Packit 67cb25
    for (i = 0; i < ina; i++)
Packit 67cb25
      work[i * stridea] = (BASE) irawa[i];
Packit 67cb25
Packit 67cb25
    median = FUNCTION(gsl_stats,median)(work, stridea, ina) ;
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 * (ina - 1) * sizeof(BASE));
Packit 67cb25
    double expected = 18;
Packit 67cb25
    double median;
Packit 67cb25
Packit 67cb25
    for (i = 0; i < ina - 1; i++)
Packit 67cb25
      work[i * stridea] = sorted[i * stridea];
Packit 67cb25
Packit 67cb25
    median = FUNCTION(gsl_stats,median)(work, stridea, ina - 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.31;
Packit 67cb25
    double trmean = FUNCTION(gsl_stats,trmean_from_sorted_data)(trim, sorted, stridea, ina) ;
Packit 67cb25
    double expected = 17.875;
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.3;
Packit 67cb25
    double trmean = FUNCTION(gsl_stats,trmean_from_sorted_data)(trim, sorted, stridea, ina - 1) ;
Packit 67cb25
    double expected = 17.66666666666666;
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, ina) ;
Packit 67cb25
    double expected = 17.9;
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, ina - 1) ;
Packit 67cb25
    double expected = 17.4;
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, ina, 0.0) ;
Packit 67cb25
    double expected = 8;
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, ina, 1.0) ;
Packit 67cb25
    double expected = 22;
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, ina, 0.5) ;
Packit 67cb25
    double expected = 18;
Packit 67cb25
    gsl_test_rel (median,expected, rel,
Packit 67cb25
                  NAME(gsl_stats) "_quantile_from_sorted_data (50, even)");
Packit 67cb25
  }
Packit 67cb25
Packit 67cb25
  {
Packit 67cb25
    double median = FUNCTION(gsl_stats,quantile_from_sorted_data)(sorted, stridea, ina - 1, 0.5);
Packit 67cb25
    double expected = 18;
Packit 67cb25
    gsl_test_rel (median,expected, rel,
Packit 67cb25
                  NAME(gsl_stats) "_quantile_from_sorted_data (50, odd)");
Packit 67cb25
  }
Packit 67cb25
Packit 67cb25
  {
Packit 67cb25
    size_t k;
Packit 67cb25
    BASE * work = (BASE *) malloc (stridea * ina * sizeof(BASE));
Packit 67cb25
Packit 67cb25
    for (k = 0; k < ina; ++k)
Packit 67cb25
      {
Packit 67cb25
        int expected = sorted[k * stridea];
Packit 67cb25
        int kselect;
Packit 67cb25
Packit 67cb25
        /* copy irawa[] for each k, since gsl_stats_select() changes input array */
Packit 67cb25
        for (i = 0; i < ina; i++)
Packit 67cb25
          work[i * stridea] = (BASE) irawa[i];
Packit 67cb25
Packit 67cb25
        kselect = FUNCTION(gsl_stats,select)(work, stridea, ina, k);
Packit 67cb25
Packit 67cb25
        gsl_test (kselect != expected,
Packit 67cb25
                  NAME(gsl_stats) "_select (%d observed vs %d expected)",
Packit 67cb25
                  kselect, expected);
Packit 67cb25
      }
Packit 67cb25
Packit 67cb25
    free(work);
Packit 67cb25
  }
Packit 67cb25
Packit 67cb25
  {
Packit 67cb25
    double * work = (double *) malloc (ina * sizeof(double));
Packit 67cb25
    double expected = 2.0;
Packit 67cb25
    double mad0 = FUNCTION(gsl_stats,mad0)(igroupa, stridea, ina, 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 ((ina - 1) * sizeof(double));
Packit 67cb25
    double expected = 2.0;
Packit 67cb25
    double mad0 = FUNCTION(gsl_stats,mad0)(igroupa, stridea, ina - 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(ina * sizeof(BASE));
Packit 67cb25
    double sn = FUNCTION(gsl_stats,Sn_from_sorted_data)(sorted, stridea, ina, work) ;
Packit 67cb25
    double expected = 2.3852;
Packit 67cb25
    gsl_test_rel (sn, expected, rel,
Packit 67cb25
                  NAME(gsl_stats) "_Sn_from_sorted_data (even)");
Packit 67cb25
    free(work);
Packit 67cb25
  }
Packit 67cb25
Packit 67cb25
  {
Packit 67cb25
    BASE * work = malloc((ina - 1) * sizeof(BASE));
Packit 67cb25
    double sn = FUNCTION(gsl_stats,Sn_from_sorted_data)(sorted, stridea, ina - 1, work) ;
Packit 67cb25
    double expected = 2.503801104972376;
Packit 67cb25
    gsl_test_rel (sn, expected, rel,
Packit 67cb25
                  NAME(gsl_stats) "_Sn_from_sorted_data (odd)");
Packit 67cb25
    free(work);
Packit 67cb25
  }
Packit 67cb25
Packit 67cb25
  {
Packit 67cb25
    BASE * work = malloc(3 * ina * sizeof(BASE));
Packit 67cb25
    int * work_int = malloc(5 * ina * sizeof(int));
Packit 67cb25
    double qn = FUNCTION(gsl_stats,Qn_from_sorted_data)(sorted, stridea, ina, work, work_int) ;
Packit 67cb25
    double expected = 3.732513488036874;
Packit 67cb25
    gsl_test_rel (qn, expected, rel,
Packit 67cb25
                  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 * (ina - 1) * sizeof(BASE));
Packit 67cb25
    int * work_int = malloc(5 * (ina - 1) * sizeof(int));
Packit 67cb25
    double qn = FUNCTION(gsl_stats,Qn_from_sorted_data)(sorted, stridea, ina - 1, work, work_int) ;
Packit 67cb25
    double expected = 4.118443402621429;
Packit 67cb25
    gsl_test_rel (qn, expected, rel,
Packit 67cb25
                  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 (igroupa);
Packit 67cb25
  free (igroupb);
Packit 67cb25
  free (test1);
Packit 67cb25
}