Blame interpolation/test.c

Packit 67cb25
/* interpolation/test.c
Packit 67cb25
 * 
Packit 67cb25
 * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2014 Gerard Jungman
Packit 67cb25
 * Copyright (C) 2014 Jean-François Caron
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
Packit 67cb25
/* Author:  G. Jungman
Packit 67cb25
 */
Packit 67cb25
#include <config.h>
Packit 67cb25
#include <stddef.h>
Packit 67cb25
#include <stdlib.h>
Packit 67cb25
#include <stdio.h>
Packit 67cb25
#include <math.h>
Packit 67cb25
#include <gsl/gsl_test.h>
Packit 67cb25
#include <gsl/gsl_errno.h>
Packit 67cb25
#include <gsl/gsl_interp.h>
Packit 67cb25
#include <gsl/gsl_ieee_utils.h>
Packit 67cb25
Packit 67cb25
#include "test2d.c"
Packit 67cb25
Packit 67cb25
int
Packit 67cb25
test_bsearch(void)
Packit 67cb25
{
Packit 67cb25
  double x_array[5] = { 0.0, 1.0, 2.0, 3.0, 4.0 };
Packit 67cb25
  size_t index_result;
Packit 67cb25
  int status = 0;
Packit 67cb25
  int s;
Packit 67cb25
Packit 67cb25
  /* check an interior point */
Packit 67cb25
  index_result = gsl_interp_bsearch(x_array, 1.5, 0, 4);
Packit 67cb25
  s = (index_result != 1);
Packit 67cb25
  status += s;
Packit 67cb25
  gsl_test (s, "simple bsearch");
Packit 67cb25
Packit 67cb25
  /* check that we get the last interval if x == last value */
Packit 67cb25
  index_result = gsl_interp_bsearch(x_array, 4.0, 0, 4);
Packit 67cb25
  s = (index_result != 3);
Packit 67cb25
  status += s;
Packit 67cb25
  gsl_test (s, "upper endpoint bsearch");
Packit 67cb25
Packit 67cb25
  /* check that we get the first interval if x == first value */
Packit 67cb25
  index_result = gsl_interp_bsearch(x_array, 0.0, 0, 4);
Packit 67cb25
  s = (index_result != 0);
Packit 67cb25
  status += s;
Packit 67cb25
  gsl_test (s, "lower endpoint bsearch");
Packit 67cb25
Packit 67cb25
  /* check that we get correct interior boundary behaviour */
Packit 67cb25
  index_result = gsl_interp_bsearch(x_array, 2.0, 0, 4);
Packit 67cb25
  s = (index_result != 2);
Packit 67cb25
  status += s;
Packit 67cb25
  gsl_test (s, "degenerate bsearch");
Packit 67cb25
Packit 67cb25
  /* check out of bounds above */
Packit 67cb25
  index_result = gsl_interp_bsearch(x_array, 10.0, 0, 4);
Packit 67cb25
  s = (index_result != 3);
Packit 67cb25
  status += s;
Packit 67cb25
  gsl_test (s, "out of bounds bsearch +");
Packit 67cb25
Packit 67cb25
  /* check out of bounds below */
Packit 67cb25
  index_result = gsl_interp_bsearch(x_array, -10.0, 0, 4);
Packit 67cb25
  s = (index_result != 0);
Packit 67cb25
  status += s;
Packit 67cb25
  gsl_test (s, "out of bounds bsearch -");
Packit 67cb25
Packit 67cb25
  /* Test the accelerator */
Packit 67cb25
Packit 67cb25
  {
Packit 67cb25
    size_t i, j, k1 = 0, k2 = 0;
Packit 67cb25
    int t = 0;
Packit 67cb25
    double x = 0;
Packit 67cb25
    double r[16] = { -0.2, 0.0, 0.1, 0.7, 
Packit 67cb25
                     1.0, 1.3, 1.9, 
Packit 67cb25
                     2.0, 2.2, 2.7,
Packit 67cb25
                     3.0, 3.1, 3.6,
Packit 67cb25
                     4.0, 4.1, 4.9 };
Packit 67cb25
Packit 67cb25
    gsl_interp_accel *a = gsl_interp_accel_alloc ();
Packit 67cb25
    
Packit 67cb25
    /* Run through all the pairs of points */
Packit 67cb25
Packit 67cb25
    while (k1 < 16 && k2 < 16) {
Packit 67cb25
      
Packit 67cb25
      x = r[t ? k1 : k2];
Packit 67cb25
      t = !t;
Packit 67cb25
      
Packit 67cb25
      if (t == 0) { 
Packit 67cb25
        k1 = (k1 + 1) % 16; 
Packit 67cb25
        if (k1 == 0) k2++;
Packit 67cb25
      };
Packit 67cb25
Packit 67cb25
      i = gsl_interp_accel_find(a, x_array, 5, x);
Packit 67cb25
      j = gsl_interp_bsearch(x_array, x, 0, 4);
Packit 67cb25
      gsl_test(i != j, "(%u,%u) accelerated lookup vs bsearch (x = %g)", i, j, x);
Packit 67cb25
    }
Packit 67cb25
Packit 67cb25
    gsl_interp_accel_free(a);
Packit 67cb25
  }
Packit 67cb25
Packit 67cb25
  return status;
Packit 67cb25
}
Packit 67cb25
Packit 67cb25
Packit 67cb25
Packit 67cb25
typedef double TEST_FUNC (double);
Packit 67cb25
typedef struct _xy_table xy_table;
Packit 67cb25
Packit 67cb25
struct _xy_table
Packit 67cb25
  {
Packit 67cb25
    double * x;
Packit 67cb25
    double * y;
Packit 67cb25
    size_t n;
Packit 67cb25
  };
Packit 67cb25
Packit 67cb25
xy_table make_xy_table (double x[], double y[], size_t n);
Packit 67cb25
Packit 67cb25
xy_table
Packit 67cb25
make_xy_table (double x[], double y[], size_t n)
Packit 67cb25
{
Packit 67cb25
  xy_table t;
Packit 67cb25
  t.x = x;
Packit 67cb25
  t.y = y;
Packit 67cb25
  t.n = n;
Packit 67cb25
  return t;
Packit 67cb25
}
Packit 67cb25
Packit 67cb25
static int
Packit 67cb25
test_interp (
Packit 67cb25
  const xy_table * data_table,
Packit 67cb25
  const gsl_interp_type * T,
Packit 67cb25
  xy_table * test_table,
Packit 67cb25
  xy_table * test_d_table,
Packit 67cb25
  xy_table * test_i_table
Packit 67cb25
  )
Packit 67cb25
{
Packit 67cb25
  int status = 0, s1, s2, s3;
Packit 67cb25
  size_t i;
Packit 67cb25
Packit 67cb25
  gsl_interp_accel *a = gsl_interp_accel_alloc ();
Packit 67cb25
  gsl_interp *interp = gsl_interp_alloc (T, data_table->n);
Packit 67cb25
Packit 67cb25
  unsigned int min_size = gsl_interp_type_min_size(T);
Packit 67cb25
Packit 67cb25
  gsl_test_int (min_size, T->min_size, "gsl_interp_type_min_size on %s", gsl_interp_name(interp));
Packit 67cb25
Packit 67cb25
  gsl_interp_init (interp, data_table->x, data_table->y, data_table->n);
Packit 67cb25
Packit 67cb25
  for (i = 0; i < test_table->n; i++)
Packit 67cb25
    {
Packit 67cb25
      double x = test_table->x[i];
Packit 67cb25
      double y;
Packit 67cb25
      double deriv;
Packit 67cb25
      double integ;
Packit 67cb25
      double diff_y, diff_deriv, diff_integ;
Packit 67cb25
      s1 = gsl_interp_eval_e (interp, data_table->x, data_table->y, x, a, &y);
Packit 67cb25
      s2 = gsl_interp_eval_deriv_e (interp, data_table->x, data_table->y, x, a, &deriv);
Packit 67cb25
      s3 = gsl_interp_eval_integ_e (interp, data_table->x, data_table->y, test_table->x[0], x, a, &integ);
Packit 67cb25
Packit 67cb25
      gsl_test (s1, "gsl_interp_eval_e %s", gsl_interp_name(interp));
Packit 67cb25
      gsl_test (s2, "gsl_interp_eval_deriv_e %s", gsl_interp_name(interp));
Packit 67cb25
      gsl_test (s3, "gsl_interp_eval_integ_e %s", gsl_interp_name(interp));
Packit 67cb25
Packit 67cb25
      gsl_test_abs (y, test_table->y[i], 1e-10, "%s %d", gsl_interp_name(interp), i);
Packit 67cb25
      gsl_test_abs (deriv, test_d_table->y[i], 1e-10, "%s deriv %d", gsl_interp_name(interp), i);
Packit 67cb25
      gsl_test_abs (integ, test_i_table->y[i], 1e-10, "%s integ %d", gsl_interp_name(interp), i);
Packit 67cb25
Packit 67cb25
      diff_y = y - test_table->y[i];
Packit 67cb25
      diff_deriv = deriv - test_d_table->y[i];
Packit 67cb25
      diff_integ = integ - test_i_table->y[i];
Packit 67cb25
      if (fabs (diff_y) > 1.e-10 || fabs(diff_deriv) > 1.0e-10 || fabs(diff_integ) > 1.0e-10) {
Packit 67cb25
        status++;
Packit 67cb25
      }
Packit 67cb25
    }
Packit 67cb25
Packit 67cb25
  gsl_interp_accel_free (a);
Packit 67cb25
  gsl_interp_free (interp);
Packit 67cb25
Packit 67cb25
  return status;
Packit 67cb25
}
Packit 67cb25
Packit 67cb25
static int
Packit 67cb25
test_linear (void)
Packit 67cb25
{
Packit 67cb25
  int s;
Packit 67cb25
Packit 67cb25
  double data_x[4] = { 0.0, 1.0, 2.0, 3.0 };
Packit 67cb25
  double data_y[4] = { 0.0, 1.0, 2.0, 3.0 };
Packit 67cb25
  double test_x[6] = { 0.0, 0.5, 1.0, 1.5, 2.5, 3.0 };
Packit 67cb25
  double test_y[6] = { 0.0, 0.5, 1.0, 1.5, 2.5, 3.0 };
Packit 67cb25
  double test_dy[6] = { 1.0, 1.0, 1.0, 1.0, 1.0, 1.0 };
Packit 67cb25
  double test_iy[6] = { 0.0, 0.125, 0.5, 9.0/8.0, 25.0/8.0, 9.0/2.0 };
Packit 67cb25
Packit 67cb25
  xy_table data_table = make_xy_table(data_x, data_y, 4);
Packit 67cb25
  xy_table test_table = make_xy_table(test_x, test_y, 6);
Packit 67cb25
  xy_table test_d_table = make_xy_table(test_x, test_dy, 6);
Packit 67cb25
  xy_table test_i_table = make_xy_table(test_x, test_iy, 6);
Packit 67cb25
Packit 67cb25
  s = test_interp (&data_table, gsl_interp_linear, &test_table, &test_d_table, &test_i_table);
Packit 67cb25
  gsl_test (s, "linear interpolation");
Packit 67cb25
  return s;
Packit 67cb25
}
Packit 67cb25
Packit 67cb25
static int
Packit 67cb25
test_polynomial (void)
Packit 67cb25
{
Packit 67cb25
  int s;
Packit 67cb25
Packit 67cb25
  double data_x[4] = { 0.0, 1.0, 2.0, 3.0 };
Packit 67cb25
  double data_y[4] = { 0.0, 1.0, 2.0, 3.0 };
Packit 67cb25
  double test_x[6] = { 0.0, 0.5, 1.0, 1.5, 2.5, 3.0 };
Packit 67cb25
  double test_y[6] = { 0.0, 0.5, 1.0, 1.5, 2.5, 3.0 };
Packit 67cb25
  double test_dy[6] = { 1.0, 1.0, 1.0, 1.0, 1.0, 1.0 };
Packit 67cb25
  double test_iy[6] = { 0.0, 0.125, 0.5, 9.0/8.0, 25.0/8.0, 9.0/2.0 };
Packit 67cb25
Packit 67cb25
  xy_table data_table = make_xy_table(data_x, data_y, 4);
Packit 67cb25
  xy_table test_table = make_xy_table(test_x, test_y, 6);
Packit 67cb25
  xy_table test_d_table = make_xy_table(test_x, test_dy, 6);
Packit 67cb25
  xy_table test_i_table = make_xy_table(test_x, test_iy, 6);
Packit 67cb25
Packit 67cb25
  s = test_interp (&data_table, gsl_interp_polynomial, &test_table, &test_d_table, &test_i_table);
Packit 67cb25
  gsl_test (s, "polynomial interpolation");
Packit 67cb25
  return s;
Packit 67cb25
}
Packit 67cb25
Packit 67cb25
Packit 67cb25
static int
Packit 67cb25
test_cspline (void)
Packit 67cb25
{
Packit 67cb25
  int s;
Packit 67cb25
Packit 67cb25
  double data_x[3] = { 0.0, 1.0, 2.0 };
Packit 67cb25
  double data_y[3] = { 0.0, 1.0, 2.0 };
Packit 67cb25
  double test_x[4] = { 0.0, 0.5, 1.0, 2.0 };
Packit 67cb25
  double test_y[4] = { 0.0, 0.5, 1.0, 2.0 };
Packit 67cb25
  double test_dy[4] = { 1.0, 1.0, 1.0, 1.0 };
Packit 67cb25
  double test_iy[4] = { 0.0, 0.125, 0.5, 2.0 };
Packit 67cb25
Packit 67cb25
  xy_table data_table = make_xy_table(data_x, data_y, 3);
Packit 67cb25
  xy_table test_table = make_xy_table(test_x, test_y, 4);
Packit 67cb25
  xy_table test_d_table = make_xy_table(test_x, test_dy, 4);
Packit 67cb25
  xy_table test_i_table = make_xy_table(test_x, test_iy, 4);
Packit 67cb25
Packit 67cb25
  s = test_interp (&data_table, gsl_interp_cspline, &test_table, &test_d_table, &test_i_table);
Packit 67cb25
  gsl_test (s, "cspline interpolation");
Packit 67cb25
  return s;
Packit 67cb25
}
Packit 67cb25
Packit 67cb25
static int
Packit 67cb25
test_cspline2 (void)
Packit 67cb25
{
Packit 67cb25
  /* Test taken from Young & Gregory, A Survey of Numerical
Packit 67cb25
     Mathematics, Vol 1 Chapter 6.8 */
Packit 67cb25
  
Packit 67cb25
  int s;
Packit 67cb25
Packit 67cb25
  double data_x[6] = { 0.0, 0.2, 0.4, 0.6, 0.8, 1.0 };
Packit 67cb25
Packit 67cb25
  double data_y[6] = { 1.0, 
Packit 67cb25
                       0.961538461538461, 0.862068965517241, 
Packit 67cb25
                       0.735294117647059, 0.609756097560976, 
Packit 67cb25
                       0.500000000000000 } ;
Packit 67cb25
Packit 67cb25
  double test_x[50] = {  
Packit 67cb25
    0.00, 0.02, 0.04, 0.06, 0.08, 0.10, 0.12, 0.14, 0.16, 0.18, 
Packit 67cb25
    0.20, 0.22, 0.24, 0.26, 0.28, 0.30, 0.32, 0.34, 0.36, 0.38, 
Packit 67cb25
    0.40, 0.42, 0.44, 0.46, 0.48, 0.50, 0.52, 0.54, 0.56, 0.58, 
Packit 67cb25
    0.60, 0.62, 0.64, 0.66, 0.68, 0.70, 0.72, 0.74, 0.76, 0.78,
Packit 67cb25
    0.80, 0.82, 0.84, 0.86, 0.88, 0.90, 0.92, 0.94, 0.96, 0.98 };
Packit 67cb25
Packit 67cb25
  double test_y[50] = { 
Packit 67cb25
    1.000000000000000, 0.997583282975581, 0.995079933416512, 
Packit 67cb25
    0.992403318788142, 0.989466806555819, 0.986183764184894, 
Packit 67cb25
    0.982467559140716, 0.978231558888635, 0.973389130893999, 
Packit 67cb25
    0.967853642622158, 0.961538461538461, 0.954382579685350, 
Packit 67cb25
    0.946427487413627, 0.937740299651188, 0.928388131325928, 
Packit 67cb25
    0.918438097365742, 0.907957312698524, 0.897012892252170, 
Packit 67cb25
    0.885671950954575, 0.874001603733634, 0.862068965517241, 
Packit 67cb25
    0.849933363488199, 0.837622973848936, 0.825158185056786, 
Packit 67cb25
    0.812559385569085, 0.799846963843167, 0.787041308336369, 
Packit 67cb25
    0.774162807506023, 0.761231849809467, 0.748268823704033, 
Packit 67cb25
    0.735294117647059, 0.722328486073082, 0.709394147325463, 
Packit 67cb25
    0.696513685724764, 0.683709685591549, 0.671004731246381, 
Packit 67cb25
    0.658421407009825, 0.645982297202442, 0.633709986144797, 
Packit 67cb25
    0.621627058157454, 0.609756097560976, 0.598112015427308, 
Packit 67cb25
    0.586679029833925, 0.575433685609685, 0.564352527583445, 
Packit 67cb25
    0.553412100584061, 0.542588949440392, 0.531859618981294, 
Packit 67cb25
    0.521200654035625, 0.510588599432241};
Packit 67cb25
Packit 67cb25
  double test_dy[50] = { 
Packit 67cb25
    -0.120113913432180, -0.122279726798445, -0.128777166897241,
Packit 67cb25
    -0.139606233728568, -0.154766927292426, -0.174259247588814,
Packit 67cb25
    -0.198083194617734, -0.226238768379184, -0.258725968873165,
Packit 67cb25
    -0.295544796099676, -0.336695250058719, -0.378333644186652,
Packit 67cb25
    -0.416616291919835, -0.451543193258270, -0.483114348201955,
Packit 67cb25
    -0.511329756750890, -0.536189418905076, -0.557693334664512,
Packit 67cb25
    -0.575841504029200, -0.590633926999137, -0.602070603574326,
Packit 67cb25
    -0.611319695518765, -0.619549364596455, -0.626759610807396,
Packit 67cb25
    -0.632950434151589, -0.638121834629033, -0.642273812239728,
Packit 67cb25
    -0.645406366983674, -0.647519498860871, -0.648613207871319,
Packit 67cb25
    -0.648687494015019, -0.647687460711257, -0.645558211379322,
Packit 67cb25
    -0.642299746019212, -0.637912064630930, -0.632395167214473,
Packit 67cb25
    -0.625749053769843, -0.617973724297039, -0.609069178796061,
Packit 67cb25
    -0.599035417266910, -0.587872439709585, -0.576731233416743,
Packit 67cb25
    -0.566762785681043, -0.557967096502484, -0.550344165881066,
Packit 67cb25
    -0.543893993816790, -0.538616580309654, -0.534511925359660,
Packit 67cb25
    -0.531580028966807, -0.529820891131095};
Packit 67cb25
Packit 67cb25
  double test_iy[50] = {
Packit 67cb25
    0.000000000000000, 0.019975905023535, 0.039902753768792, 
Packit 67cb25
    0.059777947259733, 0.079597153869625, 0.099354309321042, 
Packit 67cb25
    0.119041616685866, 0.138649546385285, 0.158166836189794, 
Packit 67cb25
    0.177580491219196, 0.196875783942601, 0.216036382301310,
Packit 67cb25
    0.235045759060558, 0.253888601161251, 0.272550937842853,
Packit 67cb25
    0.291020140643388, 0.309284923399436, 0.327335342246135,
Packit 67cb25
    0.345162795617181, 0.362760024244829, 0.380121111159890,
Packit 67cb25
    0.397241442753010, 0.414117280448683, 0.430745332379281,
Packit 67cb25
    0.447122714446318, 0.463246950320456, 0.479115971441505,
Packit 67cb25
    0.494728117018421, 0.510082134029305, 0.525177177221407,
Packit 67cb25
    0.540012809111123, 0.554589001813881, 0.568906157172889,
Packit 67cb25
    0.582965126887879, 0.596767214344995, 0.610314174616794,
Packit 67cb25
    0.623608214462242, 0.636651992326715, 0.649448618342004,
Packit 67cb25
    0.662001654326309, 0.674315113784241, 0.686393423540581,
Packit 67cb25
    0.698241001711602, 0.709861835676399, 0.721259443710643,
Packit 67cb25
    0.732436874986582, 0.743396709573044, 0.754141058435429,
Packit 67cb25
    0.764671563435718, 0.774989397332469 };
Packit 67cb25
Packit 67cb25
  xy_table data_table = make_xy_table(data_x, data_y, 6);
Packit 67cb25
  xy_table test_table = make_xy_table(test_x, test_y, 50);
Packit 67cb25
  xy_table test_d_table = make_xy_table(test_x, test_dy, 50);
Packit 67cb25
  xy_table test_i_table = make_xy_table(test_x, test_iy, 50);
Packit 67cb25
Packit 67cb25
  s = test_interp (&data_table, gsl_interp_cspline, &test_table, &test_d_table, &test_i_table);
Packit 67cb25
  gsl_test (s, "cspline 1/(1+x^2) interpolation");
Packit 67cb25
  return s;
Packit 67cb25
}
Packit 67cb25
Packit 67cb25
static int
Packit 67cb25
test_cspline3 (void)
Packit 67cb25
{
Packit 67cb25
  /* This data has been chosen to be random (uneven spacing in x and y)
Packit 67cb25
     and the exact cubic spine solution computed using Octave */
Packit 67cb25
  
Packit 67cb25
  int s;
Packit 67cb25
  
Packit 67cb25
  double data_x[7] = {   
Packit 67cb25
    -1.2139767065644265,
Packit 67cb25
    -0.792590494453907,
Packit 67cb25
    -0.250954683125019,
Packit 67cb25
    0.665867809951305,
Packit 67cb25
    0.735655088722706,
Packit 67cb25
    0.827622053027153,
Packit 67cb25
    1.426592227816582  
Packit 67cb25
  };
Packit 67cb25
Packit 67cb25
  double data_y[7] = {   
Packit 67cb25
    -0.00453877449035645,
Packit 67cb25
    0.49763182550668716,
Packit 67cb25
    0.17805472016334534,
Packit 67cb25
    0.40514493733644485,
Packit 67cb25
    -0.21595209836959839,
Packit 67cb25
    0.47405586764216423,
Packit 67cb25
    0.46561462432146072
Packit 67cb25
  } ;
Packit 67cb25
Packit 67cb25
  double test_x[19] = {
Packit 67cb25
    -1.2139767065644265,
Packit 67cb25
    -1.0735146358609200,
Packit 67cb25
    -0.9330525651574135,
Packit 67cb25
    -0.7925904944539071,
Packit 67cb25
    -0.6120452240109444,
Packit 67cb25
    -0.4314999535679818,
Packit 67cb25
    -0.2509546831250191,
Packit 67cb25
    0.0546528145670890,
Packit 67cb25
    0.3602603122591972,
Packit 67cb25
    0.6658678099513053,
Packit 67cb25
    0.6891302362084388,
Packit 67cb25
    0.7123926624655723,
Packit 67cb25
    0.7356550887227058,
Packit 67cb25
    0.7663107434908548,
Packit 67cb25
    0.7969663982590039,
Packit 67cb25
    0.8276220530271530,
Packit 67cb25
    1.0272787779569625,
Packit 67cb25
    1.2269355028867721,
Packit 67cb25
    1.4265922278165817,
Packit 67cb25
  };
Packit 67cb25
Packit 67cb25
  double test_y[19] = { 
Packit 67cb25
    -0.00453877449035645,
Packit 67cb25
    0.25816917628390590,
Packit 67cb25
    0.44938881397673230,
Packit 67cb25
    0.49763182550668716,
Packit 67cb25
    0.31389980410075147,
Packit 67cb25
    0.09948951681196887,
Packit 67cb25
    0.17805472016334534,
Packit 67cb25
    1.27633142487980233,
Packit 67cb25
    2.04936553432792001,
Packit 67cb25
    0.40514493733644485,
Packit 67cb25
    0.13322324792901385,
Packit 67cb25
    -0.09656315924697809,
Packit 67cb25
    -0.21595209836959839,
Packit 67cb25
    -0.13551147728045118,
Packit 67cb25
    0.13466779030061801,
Packit 67cb25
    0.47405586764216423,
Packit 67cb25
    1.68064089899304370,
Packit 67cb25
    1.43594739539458649,
Packit 67cb25
    0.46561462432146072
Packit 67cb25
  };
Packit 67cb25
Packit 67cb25
  double test_dy[19] = { 
Packit 67cb25
    1.955137555965937,
Packit 67cb25
    1.700662049790549,
Packit 67cb25
    0.937235531264386,
Packit 67cb25
    -0.335141999612553,
Packit 67cb25
    -1.401385073563169,
Packit 67cb25
    -0.674982149482761,
Packit 67cb25
    1.844066772628670,
Packit 67cb25
    4.202528085784793,
Packit 67cb25
    -0.284432022227558,
Packit 67cb25
    -11.616813551408383,
Packit 67cb25
    -11.272731243226174,
Packit 67cb25
    -7.994209291156876,
Packit 67cb25
    -1.781247695200491,
Packit 67cb25
    6.373970868827501,
Packit 67cb25
    10.597456848997197,
Packit 67cb25
    10.889210245308570,
Packit 67cb25
    1.803124267866902,
Packit 67cb25
    -3.648527318598099,
Packit 67cb25
    -5.465744514086432,
Packit 67cb25
  };
Packit 67cb25
Packit 67cb25
  double test_iy[19] = {
Packit 67cb25
    0.000000000000000,
Packit 67cb25
    0.018231117234914,
Packit 67cb25
    0.069178822023139,
Packit 67cb25
    0.137781019634897,
Packit 67cb25
    0.213936442847744,
Packit 67cb25
    0.249280997744777,
Packit 67cb25
    0.267492946016120,
Packit 67cb25
    0.471372708120518,
Packit 67cb25
    1.014473660088477,
Packit 67cb25
    1.477731933018837,
Packit 67cb25
    1.483978291717981,
Packit 67cb25
    1.484256847945450,
Packit 67cb25
    1.480341742628893,
Packit 67cb25
    1.474315901028282,
Packit 67cb25
    1.473972210647307,
Packit 67cb25
    1.483279773396950,
Packit 67cb25
    1.728562698140330,
Packit 67cb25
    2.057796448999396,
Packit 67cb25
    2.253662886537457,
Packit 67cb25
  };
Packit 67cb25
Packit 67cb25
  xy_table data_table = make_xy_table(data_x, data_y, 7);
Packit 67cb25
  xy_table test_table = make_xy_table(test_x, test_y, 19);
Packit 67cb25
  xy_table test_d_table = make_xy_table(test_x, test_dy, 19);
Packit 67cb25
  xy_table test_i_table = make_xy_table(test_x, test_iy, 19);
Packit 67cb25
Packit 67cb25
  s = test_interp (&data_table, gsl_interp_cspline, &test_table, &test_d_table, &test_i_table);
Packit 67cb25
  gsl_test (s, "cspline arbitrary data interpolation");
Packit 67cb25
  return s;
Packit 67cb25
}
Packit 67cb25
Packit 67cb25
static int
Packit 67cb25
test_csplinep (void)
Packit 67cb25
{
Packit 67cb25
  /* This data has been chosen to be random (uneven spacing in x and y)
Packit 67cb25
     and the exact cubic spine solution computed using Octave */
Packit 67cb25
  
Packit 67cb25
  int s;
Packit 67cb25
  
Packit 67cb25
  double data_x[11] = {   
Packit 67cb25
    0.000000000000000,
Packit 67cb25
    0.130153674349869,
Packit 67cb25
    0.164545962312740,
Packit 67cb25
    0.227375461261537,
Packit 67cb25
    0.256465324353657,
Packit 67cb25
    0.372545206874658,
Packit 67cb25
    0.520820016781720,
Packit 67cb25
    0.647654717733075,
Packit 67cb25
    0.753429306654340,
Packit 67cb25
    0.900873984827658,
Packit 67cb25
    1.000000000000000,
Packit 67cb25
  };
Packit 67cb25
Packit 67cb25
  double data_y[11] = {   
Packit 67cb25
    0.000000000000000,
Packit 67cb25
    0.729629261832041,
Packit 67cb25
    0.859286331568207,
Packit 67cb25
    0.989913099419008,
Packit 67cb25
    0.999175006262120,
Packit 67cb25
    0.717928599519215,
Packit 67cb25
    -0.130443237213363,
Packit 67cb25
    -0.800267961158980,
Packit 67cb25
    -0.999767873040527,
Packit 67cb25
    -0.583333769240853,
Packit 67cb25
    -0.000000000000000,
Packit 67cb25
  } ;
Packit 67cb25
Packit 67cb25
  double test_x[31] = {
Packit 67cb25
    0.000000000000000,
Packit 67cb25
    0.043384558116623,
Packit 67cb25
    0.086769116233246,
Packit 67cb25
    0.130153674349869,
Packit 67cb25
    0.141617770337492,
Packit 67cb25
    0.153081866325116,
Packit 67cb25
    0.164545962312740,
Packit 67cb25
    0.185489128629005,
Packit 67cb25
    0.206432294945271,
Packit 67cb25
    0.227375461261537,
Packit 67cb25
    0.237072082292243,
Packit 67cb25
    0.246768703322951,
Packit 67cb25
    0.256465324353657,
Packit 67cb25
    0.295158618527324,
Packit 67cb25
    0.333851912700991,
Packit 67cb25
    0.372545206874658,
Packit 67cb25
    0.421970143510346,
Packit 67cb25
    0.471395080146033,
Packit 67cb25
    0.520820016781720,
Packit 67cb25
    0.563098250432172,
Packit 67cb25
    0.605376484082623,
Packit 67cb25
    0.647654717733075,
Packit 67cb25
    0.682912914040164,
Packit 67cb25
    0.718171110347252,
Packit 67cb25
    0.753429306654340,
Packit 67cb25
    0.802577532712113,
Packit 67cb25
    0.851725758769885,
Packit 67cb25
    0.900873984827658,
Packit 67cb25
    0.933915989885105,
Packit 67cb25
    0.966957994942553,
Packit 67cb25
    1.000000000000000
Packit 67cb25
  };
Packit 67cb25
Packit 67cb25
  double test_y[31] = { 
Packit 67cb25
    0.000000000000000,
Packit 67cb25
    0.268657574670719,
Packit 67cb25
    0.517940878523929,
Packit 67cb25
    0.729629261832041,
Packit 67cb25
    0.777012551497867,
Packit 67cb25
    0.820298314554859,
Packit 67cb25
    0.859286331568207,
Packit 67cb25
    0.918833991960315,
Packit 67cb25
    0.962624749226346,
Packit 67cb25
    0.989913099419008,
Packit 67cb25
    0.996756196601349,
Packit 67cb25
    0.999858105635752,
Packit 67cb25
    0.999175006262120,
Packit 67cb25
    0.959248551766306,
Packit 67cb25
    0.863713527741856,
Packit 67cb25
    0.717928599519215,
Packit 67cb25
    0.470065187871106,
Packit 67cb25
    0.177694938589523,
Packit 67cb25
    -0.130443237213363,
Packit 67cb25
    -0.385093922365765,
Packit 67cb25
    -0.613840011545983,
Packit 67cb25
    -0.800267961158980,
Packit 67cb25
    -0.912498361131651,
Packit 67cb25
    -0.980219217412290,
Packit 67cb25
    -0.999767873040528,
Packit 67cb25
    -0.943635958253643,
Packit 67cb25
    -0.800314354800596,
Packit 67cb25
    -0.583333769240853,
Packit 67cb25
    -0.403689914131666,
Packit 67cb25
    -0.206151346799382,
Packit 67cb25
    -0.000000000000000
Packit 67cb25
  };
Packit 67cb25
Packit 67cb25
  double test_dy[31] = { 
Packit 67cb25
    6.275761975917336,
Packit 67cb25
    6.039181349093287,
Packit 67cb25
    5.382620652895025,
Packit 67cb25
    4.306079887322550,
Packit 67cb25
    3.957389777282752,
Packit 67cb25
    3.591234754612763,
Packit 67cb25
    3.207614819312586,
Packit 67cb25
    2.473048186927024,
Packit 67cb25
    1.702885029353488,
Packit 67cb25
    0.897125346591982,
Packit 67cb25
    0.513561009477969,
Packit 67cb25
    0.125477545550710,
Packit 67cb25
    -0.267125045189792,
Packit 67cb25
    -1.773533414873785,
Packit 67cb25
    -3.141450982859891,
Packit 67cb25
    -4.370877749148106,
Packit 67cb25
    -5.562104227060234,
Packit 67cb25
    -6.171864888961167,
Packit 67cb25
    -6.200159734850907,
Packit 67cb25
    -5.781556055213110,
Packit 67cb25
    -4.974725570010514,
Packit 67cb25
    -3.779668279243120,
Packit 67cb25
    -2.569220222282655,
Packit 67cb25
    -1.254891157670244,
Packit 67cb25
    0.163318914594122,
Packit 67cb25
    2.074985916277011,
Packit 67cb25
    3.711348850147548,
Packit 67cb25
    5.072407716205733,
Packit 67cb25
    5.754438923510391,
Packit 67cb25
    6.155557010080926,
Packit 67cb25
    6.275761975917336
Packit 67cb25
  };
Packit 67cb25
Packit 67cb25
  double test_iy[31] = {
Packit 67cb25
    0.000000000000000,
Packit 67cb25
    0.005864903144198,
Packit 67cb25
    0.023030998930796,
Packit 67cb25
    0.050262495763030,
Packit 67cb25
    0.058902457844100,
Packit 67cb25
    0.068062330564832,
Packit 67cb25
    0.077693991819461,
Packit 67cb25
    0.096340576055474,
Packit 67cb25
    0.116070578226521,
Packit 67cb25
    0.136546192283223,
Packit 67cb25
    0.146181187290769,
Packit 67cb25
    0.155864434185569,
Packit 67cb25
    0.165559443629720,
Packit 67cb25
    0.203636318965633,
Packit 67cb25
    0.239075190181586,
Packit 67cb25
    0.269828050745236,
Packit 67cb25
    0.299428805999600,
Packit 67cb25
    0.315560685785616,
Packit 67cb25
    0.316734151903742,
Packit 67cb25
    0.305773798930857,
Packit 67cb25
    0.284537037103156,
Packit 67cb25
    0.254466034797342,
Packit 67cb25
    0.224146112780097,
Packit 67cb25
    0.190643050847000,
Packit 67cb25
    0.155590744566140,
Packit 67cb25
    0.107448508851745,
Packit 67cb25
    0.064263083957312,
Packit 67cb25
    0.029987183298960,
Packit 67cb25
    0.013618510529526,
Packit 67cb25
    0.003506827320794,
Packit 67cb25
    0.000090064010007,
Packit 67cb25
  };
Packit 67cb25
Packit 67cb25
  xy_table data_table = make_xy_table(data_x, data_y, 11);
Packit 67cb25
  xy_table test_table = make_xy_table(test_x, test_y, 31);
Packit 67cb25
  xy_table test_d_table = make_xy_table(test_x, test_dy, 31);
Packit 67cb25
  xy_table test_i_table = make_xy_table(test_x, test_iy, 31);
Packit 67cb25
Packit 67cb25
  s = test_interp (&data_table, gsl_interp_cspline_periodic, &test_table, &test_d_table, &test_i_table);
Packit 67cb25
  gsl_test (s, "cspline periodic sine interpolation");
Packit 67cb25
  return s;
Packit 67cb25
}
Packit 67cb25
Packit 67cb25
static int
Packit 67cb25
test_csplinep2 (void)
Packit 67cb25
{
Packit 67cb25
  /* This data tests the periodic case n=3 */
Packit 67cb25
  
Packit 67cb25
  int s;
Packit 67cb25
  
Packit 67cb25
  double data_x[3] = {   
Packit 67cb25
    0.123,
Packit 67cb25
    0.423,
Packit 67cb25
    1.123
Packit 67cb25
  };
Packit 67cb25
Packit 67cb25
  double data_y[3] = {   
Packit 67cb25
    0.456000000000000,
Packit 67cb25
    1.407056516295154,
Packit 67cb25
    0.456000000000000
Packit 67cb25
  } ;
Packit 67cb25
Packit 67cb25
  double test_x[61] = {
Packit 67cb25
    0.123000000000000,
Packit 67cb25
    0.133000000000000,
Packit 67cb25
    0.143000000000000,
Packit 67cb25
    0.153000000000000,
Packit 67cb25
    0.163000000000000,
Packit 67cb25
    0.173000000000000,
Packit 67cb25
    0.183000000000000,
Packit 67cb25
    0.193000000000000,
Packit 67cb25
    0.203000000000000,
Packit 67cb25
    0.213000000000000,
Packit 67cb25
    0.223000000000000,
Packit 67cb25
    0.233000000000000,
Packit 67cb25
    0.243000000000000,
Packit 67cb25
    0.253000000000000,
Packit 67cb25
    0.263000000000000,
Packit 67cb25
    0.273000000000000,
Packit 67cb25
    0.283000000000000,
Packit 67cb25
    0.293000000000000,
Packit 67cb25
    0.303000000000000,
Packit 67cb25
    0.313000000000000,
Packit 67cb25
    0.323000000000000,
Packit 67cb25
    0.333000000000000,
Packit 67cb25
    0.343000000000000,
Packit 67cb25
    0.353000000000000,
Packit 67cb25
    0.363000000000000,
Packit 67cb25
    0.373000000000000,
Packit 67cb25
    0.383000000000000,
Packit 67cb25
    0.393000000000000,
Packit 67cb25
    0.403000000000000,
Packit 67cb25
    0.413000000000000,
Packit 67cb25
    0.423000000000000,
Packit 67cb25
    0.446333333333333,
Packit 67cb25
    0.469666666666667,
Packit 67cb25
    0.493000000000000,
Packit 67cb25
    0.516333333333333,
Packit 67cb25
    0.539666666666667,
Packit 67cb25
    0.563000000000000,
Packit 67cb25
    0.586333333333333,
Packit 67cb25
    0.609666666666667,
Packit 67cb25
    0.633000000000000,
Packit 67cb25
    0.656333333333333,
Packit 67cb25
    0.679666666666667,
Packit 67cb25
    0.703000000000000,
Packit 67cb25
    0.726333333333333,
Packit 67cb25
    0.749666666666667,
Packit 67cb25
    0.773000000000000,
Packit 67cb25
    0.796333333333333,
Packit 67cb25
    0.819666666666667,
Packit 67cb25
    0.843000000000000,
Packit 67cb25
    0.866333333333333,
Packit 67cb25
    0.889666666666667,
Packit 67cb25
    0.913000000000000,
Packit 67cb25
    0.936333333333333,
Packit 67cb25
    0.959666666666667,
Packit 67cb25
    0.983000000000000,
Packit 67cb25
    1.006333333333333,
Packit 67cb25
    1.029666666666667,
Packit 67cb25
    1.053000000000000,
Packit 67cb25
    1.076333333333333,
Packit 67cb25
    1.099666666666667,
Packit 67cb25
    1.123000000000000
Packit 67cb25
  };
Packit 67cb25
Packit 67cb25
  double test_y[61] = { 
Packit 67cb25
    0.456000000000000,
Packit 67cb25
    0.475443822110923,
Packit 67cb25
    0.497423794931967,
Packit 67cb25
    0.521758764840979,
Packit 67cb25
    0.548267578215809,
Packit 67cb25
    0.576769081434305,
Packit 67cb25
    0.607082120874316,
Packit 67cb25
    0.639025542913690,
Packit 67cb25
    0.672418193930275,
Packit 67cb25
    0.707078920301921,
Packit 67cb25
    0.742826568406475,
Packit 67cb25
    0.779479984621787,
Packit 67cb25
    0.816858015325704,
Packit 67cb25
    0.854779506896076,
Packit 67cb25
    0.893063305710751,
Packit 67cb25
    0.931528258147577,
Packit 67cb25
    0.969993210584403,
Packit 67cb25
    1.008277009399078,
Packit 67cb25
    1.046198500969450,
Packit 67cb25
    1.083576531673367,
Packit 67cb25
    1.120229947888679,
Packit 67cb25
    1.155977595993233,
Packit 67cb25
    1.190638322364879,
Packit 67cb25
    1.224030973381464,
Packit 67cb25
    1.255974395420838,
Packit 67cb25
    1.286287434860848,
Packit 67cb25
    1.314788938079344,
Packit 67cb25
    1.341297751454174,
Packit 67cb25
    1.365632721363187,
Packit 67cb25
    1.387612694184230,
Packit 67cb25
    1.407056516295154,
Packit 67cb25
    1.442092968697928,
Packit 67cb25
    1.463321489456714,
Packit 67cb25
    1.471728359403224,
Packit 67cb25
    1.468299859369172,
Packit 67cb25
    1.454022270186272,
Packit 67cb25
    1.429881872686237,
Packit 67cb25
    1.396864947700781,
Packit 67cb25
    1.355957776061616,
Packit 67cb25
    1.308146638600458,
Packit 67cb25
    1.254417816149018,
Packit 67cb25
    1.195757589539010,
Packit 67cb25
    1.133152239602149,
Packit 67cb25
    1.067588047170148,
Packit 67cb25
    1.000051293074719,
Packit 67cb25
    0.931528258147577,
Packit 67cb25
    0.863005223220435,
Packit 67cb25
    0.795468469125006,
Packit 67cb25
    0.729904276693004,
Packit 67cb25
    0.667298926756143,
Packit 67cb25
    0.608638700146136,
Packit 67cb25
    0.554909877694696,
Packit 67cb25
    0.507098740233537,
Packit 67cb25
    0.466191568594372,
Packit 67cb25
    0.433174643608916,
Packit 67cb25
    0.409034246108881,
Packit 67cb25
    0.394756656925981,
Packit 67cb25
    0.391328156891929,
Packit 67cb25
    0.399735026838439,
Packit 67cb25
    0.420963547597225,
Packit 67cb25
    0.456000000000000
Packit 67cb25
  };
Packit 67cb25
Packit 67cb25
  double test_dy[61] = { 
Packit 67cb25
    1.8115362215145774,
Packit 67cb25
    2.0742089736341924,
Packit 67cb25
    2.3187663635386602,
Packit 67cb25
    2.5452083912279826,
Packit 67cb25
    2.7535350567021584,
Packit 67cb25
    2.9437463599611897,
Packit 67cb25
    3.1158423010050744,
Packit 67cb25
    3.2698228798338147,
Packit 67cb25
    3.4056880964474079,
Packit 67cb25
    3.5234379508458549,
Packit 67cb25
    3.6230724430291570,
Packit 67cb25
    3.7045915729973125,
Packit 67cb25
    3.7679953407503231,
Packit 67cb25
    3.8132837462881874,
Packit 67cb25
    3.8404567896109061,
Packit 67cb25
    3.8495144707184790,
Packit 67cb25
    3.8404567896109061,
Packit 67cb25
    3.8132837462881874,
Packit 67cb25
    3.7679953407503231,
Packit 67cb25
    3.7045915729973125,
Packit 67cb25
    3.6230724430291565,
Packit 67cb25
    3.5234379508458549,
Packit 67cb25
    3.4056880964474074,
Packit 67cb25
    3.2698228798338147,
Packit 67cb25
    3.1158423010050749,
Packit 67cb25
    2.9437463599611897,
Packit 67cb25
    2.7535350567021584,
Packit 67cb25
    2.5452083912279830,
Packit 67cb25
    2.3187663635386597,
Packit 67cb25
    2.0742089736341924,
Packit 67cb25
    1.8115362215145772,
Packit 67cb25
    1.1986331332354823,
Packit 67cb25
    0.6279992234583869,
Packit 67cb25
    0.0996344921833026,
Packit 67cb25
    -0.3864610605897765,
Packit 67cb25
    -0.8302874348608467,
Packit 67cb25
    -1.2318446306299125,
Packit 67cb25
    -1.5911326478969707,
Packit 67cb25
    -1.9081514866620208,
Packit 67cb25
    -2.1829011469250670,
Packit 67cb25
    -2.4153816286861041,
Packit 67cb25
    -2.6055929319451341,
Packit 67cb25
    -2.7535350567021584,
Packit 67cb25
    -2.8592080029571765,
Packit 67cb25
    -2.9226117707101862,
Packit 67cb25
    -2.9437463599611893,
Packit 67cb25
    -2.9226117707101862,
Packit 67cb25
    -2.8592080029571760,
Packit 67cb25
    -2.7535350567021593,
Packit 67cb25
    -2.6055929319451354,
Packit 67cb25
    -2.4153816286861045,
Packit 67cb25
    -2.1829011469250656,
Packit 67cb25
    -1.9081514866620242,
Packit 67cb25
    -1.5911326478969716,
Packit 67cb25
    -1.2318446306299160,
Packit 67cb25
    -0.8302874348608498,
Packit 67cb25
    -0.3864610605897769,
Packit 67cb25
    0.0996344921832995,
Packit 67cb25
    0.6279992234583824,
Packit 67cb25
    1.1986331332354769,
Packit 67cb25
    1.8115362215145772
Packit 67cb25
  };
Packit 67cb25
Packit 67cb25
  double test_iy[61] = {
Packit 67cb25
    0.000000000000000,
Packit 67cb25
    0.004655030170954,
Packit 67cb25
    0.009517330277919,
Packit 67cb25
    0.014611356059886,
Packit 67cb25
    0.019959751719625,
Packit 67cb25
    0.025583349923681,
Packit 67cb25
    0.031501171802382,
Packit 67cb25
    0.037730426949832,
Packit 67cb25
    0.044286513423914,
Packit 67cb25
    0.051183017746288,
Packit 67cb25
    0.058431714902395,
Packit 67cb25
    0.066042568341453,
Packit 67cb25
    0.074023729976459,
Packit 67cb25
    0.082381540184189,
Packit 67cb25
    0.091120527805195,
Packit 67cb25
    0.100243410143811,
Packit 67cb25
    0.109751092968147,
Packit 67cb25
    0.119642670510092,
Packit 67cb25
    0.129915425465314,
Packit 67cb25
    0.140564828993259,
Packit 67cb25
    0.151584540717153,
Packit 67cb25
    0.162966408723997,
Packit 67cb25
    0.174700469564574,
Packit 67cb25
    0.186774948253444,
Packit 67cb25
    0.199176258268946,
Packit 67cb25
    0.211889001553197,
Packit 67cb25
    0.224895968512091,
Packit 67cb25
    0.238178138015305,
Packit 67cb25
    0.251714677396289,
Packit 67cb25
    0.265482942452275,
Packit 67cb25
    0.279458477444273,
Packit 67cb25
    0.312726362409309,
Packit 67cb25
    0.346648754292945,
Packit 67cb25
    0.380914974633193,
Packit 67cb25
    0.415237358187469,
Packit 67cb25
    0.449351252932597,
Packit 67cb25
    0.483015020064806,
Packit 67cb25
    0.516010033999735,
Packit 67cb25
    0.548140682372425,
Packit 67cb25
    0.579234366037328,
Packit 67cb25
    0.609141499068300,
Packit 67cb25
    0.637735508758604,
Packit 67cb25
    0.664912835620912,
Packit 67cb25
    0.690592933387298,
Packit 67cb25
    0.714718269009247,
Packit 67cb25
    0.737254322657649,
Packit 67cb25
    0.758189587722801,
Packit 67cb25
    0.777535570814405,
Packit 67cb25
    0.795326791761572,
Packit 67cb25
    0.811620783612819,
Packit 67cb25
    0.826498092636068,
Packit 67cb25
    0.840062278318649,
Packit 67cb25
    0.852439913367300,
Packit 67cb25
    0.863780583708163,
Packit 67cb25
    0.874256888486789,
Packit 67cb25
    0.884064440068133,
Packit 67cb25
    0.893421864036559,
Packit 67cb25
    0.902570799195836,
Packit 67cb25
    0.911775897569142,
Packit 67cb25
    0.921324824399059,
Packit 67cb25
    0.931528258147577
Packit 67cb25
  };
Packit 67cb25
Packit 67cb25
  xy_table data_table = make_xy_table(data_x, data_y, 3);
Packit 67cb25
  xy_table test_table = make_xy_table(test_x, test_y, 61);
Packit 67cb25
  xy_table test_d_table = make_xy_table(test_x, test_dy, 61);
Packit 67cb25
  xy_table test_i_table = make_xy_table(test_x, test_iy, 61);
Packit 67cb25
Packit 67cb25
  s = test_interp (&data_table, gsl_interp_cspline_periodic, &test_table, &test_d_table, &test_i_table);
Packit 67cb25
  gsl_test (s, "cspline periodic 3pt interpolation");
Packit 67cb25
  return s;
Packit 67cb25
}
Packit 67cb25
Packit 67cb25
static int
Packit 67cb25
test_akima (void)
Packit 67cb25
{
Packit 67cb25
  int s;
Packit 67cb25
Packit 67cb25
  double data_x[5] = { 0.0, 1.0, 2.0, 3.0, 4.0 };
Packit 67cb25
  double data_y[5] = { 0.0, 1.0, 2.0, 3.0, 4.0 };
Packit 67cb25
  double test_x[4] = { 0.0, 0.5, 1.0, 2.0 };
Packit 67cb25
  double test_y[4] = { 0.0, 0.5, 1.0, 2.0 };
Packit 67cb25
  double test_dy[4] = { 1.0, 1.0, 1.0, 1.0 };
Packit 67cb25
  double test_iy[4] = { 0.0, 0.125, 0.5, 2.0 };
Packit 67cb25
Packit 67cb25
  xy_table data_table = make_xy_table(data_x, data_y, 5);
Packit 67cb25
  xy_table test_table = make_xy_table(test_x, test_y, 4);
Packit 67cb25
  xy_table test_d_table = make_xy_table(test_x, test_dy, 4);
Packit 67cb25
  xy_table test_i_table = make_xy_table(test_x, test_iy, 4);
Packit 67cb25
Packit 67cb25
  s = test_interp (&data_table, gsl_interp_akima, &test_table, &test_d_table, &test_i_table);
Packit 67cb25
  gsl_test (s, "akima interpolation");
Packit 67cb25
  return s;
Packit 67cb25
}
Packit 67cb25
Packit 67cb25
static int
Packit 67cb25
test_steffen1 (void)
Packit 67cb25
{
Packit 67cb25
  int s;
Packit 67cb25
Packit 67cb25
  double data_x[5] = { 0.0, 1.0, 2.0, 3.0, 4.0 };
Packit 67cb25
  double data_y[5] = { 0.0, 1.0, 2.0, 3.0, 4.0 };
Packit 67cb25
Packit 67cb25
  double test_x[6] = { 0.0, 0.5, 1.0, 2.0, 2.5, 3.95 };
Packit 67cb25
  double test_y[6] = { 0.0, 0.5, 1.0, 2.0, 2.5, 3.95 };
Packit 67cb25
  double test_dy[6] = { 1.0, 1.0, 1.0, 1.0, 1.0, 1.0 };
Packit 67cb25
  double test_iy[6] = { 0.0, 0.125, 0.5, 2.0, 3.125, 7.80125 };
Packit 67cb25
Packit 67cb25
  xy_table data_table = make_xy_table(data_x, data_y, 5);
Packit 67cb25
  xy_table test_table = make_xy_table(test_x, test_y, 4);
Packit 67cb25
  xy_table test_d_table = make_xy_table(test_x, test_dy, 4);
Packit 67cb25
  xy_table test_i_table = make_xy_table(test_x, test_iy, 4);
Packit 67cb25
Packit 67cb25
  s = test_interp (&data_table, gsl_interp_steffen, &test_table, &test_d_table, &test_i_table);
Packit 67cb25
  gsl_test (s, "steffen interpolation test 1");
Packit 67cb25
  return s;
Packit 67cb25
}
Packit 67cb25
Packit 67cb25
static int
Packit 67cb25
test_steffen2 (void)
Packit 67cb25
{
Packit 67cb25
  int s;
Packit 67cb25
Packit 67cb25
  double data_x[30] = { 
Packit 67cb25
    4.673405471947611, 4.851675778029557, 6.185473620119991,
Packit 67cb25
    7.066003430727031, 7.236222118389267, 7.82067161881444,
Packit 67cb25
    8.054504031621493, 8.615033792800752, 9.16666529764867,
Packit 67cb25
    9.442092828126395, 10.719577968900381, 11.741967577609238,
Packit 67cb25
    12.564881194673035, 12.938424721515084, 12.985892202096888,
Packit 67cb25
    13.995771653255744, 14.459157783380315, 15.834857667614848,
Packit 67cb25
    15.887779086499942, 18.64645279534696, 19.256361741244287,
Packit 67cb25
    19.85100457105047, 19.943627313550987, 20.5033910115468,
Packit 67cb25
    20.895380493234843, 21.759942483053962, 21.948984866760803,
Packit 67cb25
    22.2504057728461, 22.741860290952104, 23.088720630939164 };
Packit 67cb25
Packit 67cb25
  double data_y[30] = {
Packit 67cb25
    -6.131584089652438, 4.997132870704837, 9.50359639889188,
Packit 67cb25
    -3.788474042493764, 1.98825324341826, -6.553460294945401,
Packit 67cb25
    8.44565760012345, -3.643687601520438, -4.720262269613782,
Packit 67cb25
    -5.31956608504474, 4.7484698519996655, 1.8191111043001218,
Packit 67cb25
    2.7234424260251124, -7.282776099988966, -6.966038807035955,
Packit 67cb25
    2.6047260012112545, -3.6363485275348033, -4.124714595822157,
Packit 67cb25
    -4.820986899771757, -2.8550035950284602, 6.017204757558943,
Packit 67cb25
    6.7275899382734075, -9.423359755713639, -0.3645325139870703,
Packit 67cb25
    6.925739188986089, -0.07843256857855074, 1.6744315603866244,
Packit 67cb25
    -8.332083151442944, 6.059246349756446, -7.360159198725659 };
Packit 67cb25
Packit 67cb25
  double test_x[129] = {
Packit 67cb25
    4.6734054719476106,4.8516757780295574,4.8575586235375265,
Packit 67cb25
    5.0417117751274407,5.2258649267173567,5.4100180783072727,
Packit 67cb25
    5.5941712298971886,5.7783243814871028,5.9624775330770188,
Packit 67cb25
    6.1466306846669347,6.1854736201199909,6.3307838362568507,
Packit 67cb25
    6.5149369878467667,6.6990901394366809,6.8832432910265968,
Packit 67cb25
    7.0660034307270312,7.0673964426165128,7.236222118389267,
Packit 67cb25
    7.2515495942064288,7.4357027457963438,7.6198558973862589,
Packit 67cb25
    7.8040090489761749,7.8206716188144396,7.9881622005660908,
Packit 67cb25
    8.0545040316214926,8.172315352156005,8.356468503745921,
Packit 67cb25
    8.5406216553358369,8.6150337928007517,8.7247748069257529,
Packit 67cb25
    8.9089279585156689,9.0930811101055831,9.1666652976486702,
Packit 67cb25
    9.277234261695499,9.4420928281263947,9.461387413285415,
Packit 67cb25
    9.645540564875331,9.8296937164652469,10.013846868055161,
Packit 67cb25
    10.198000019645077,10.382153171234993,10.566306322824907,
Packit 67cb25
    10.719577968900381,10.750459474414823,10.934612626004739,
Packit 67cb25
    11.118765777594655,11.302918929184571,11.487072080774485,
Packit 67cb25
    11.671225232364399,11.741967577609238,11.855378383954315,
Packit 67cb25
    12.039531535544231,12.223684687134147,12.407837838724063,
Packit 67cb25
    12.564881194673035,12.591990990313979,12.776144141903895,
Packit 67cb25
    12.938424721515084,12.960297293493811,12.985892202096888,
Packit 67cb25
    13.144450445083727,13.328603596673641,13.512756748263556,
Packit 67cb25
    13.696909899853472,13.881063051443387,13.995771653255744,
Packit 67cb25
    14.065216203033303,14.249369354623219,14.433522506213134,
Packit 67cb25
    14.459157783380315,14.617675657803051,14.801828809392966,
Packit 67cb25
    14.985981960982881,15.170135112572796,15.354288264162712,
Packit 67cb25
    15.538441415752628,15.722594567342544,15.834857667614848,
Packit 67cb25
    15.90674771893246,15.887779086499942,16.090900870522375,
Packit 67cb25
    16.27505402211229,16.459207173702204,16.643360325292122,
Packit 67cb25
    16.827513476882036,17.01166662847195,17.195819780061868,
Packit 67cb25
    17.379972931651782,17.5641260832417,17.748279234831614,
Packit 67cb25
    17.932432386421532,18.116585538011446,18.300738689601364,
Packit 67cb25
    18.484891841191278,18.64645279534696,18.669044992781188,
Packit 67cb25
    18.853198144371106,19.03735129596102,19.221504447550938,
Packit 67cb25
    19.256361741244287,19.405657599140852,19.58981075073077,
Packit 67cb25
    19.773963902320684,19.851004571050471,19.958117053910598,
Packit 67cb25
    19.943627313550987,20.142270205500516,20.32642335709043,
Packit 67cb25
    20.5033910115468,20.510576508680348,20.694729660270262,
Packit 67cb25
    20.87888281186018,20.895380493234843,21.063035963450094,
Packit 67cb25
    21.247189115040012,21.431342266629926,21.61549541821984,
Packit 67cb25
    21.759942483053962,21.799648569809754,21.948984866760803,
Packit 67cb25
    21.983801721399669,22.167954872989586,22.250405772846101,
Packit 67cb25
    22.352108024579501,22.536261176169418,22.720414327759332,
Packit 67cb25
    22.741860290952104,22.90456747934925,23.088720630939164 };
Packit 67cb25
Packit 67cb25
  double test_y[129] = {
Packit 67cb25
    -6.1315840896524376, 4.9971328707048368, 5.0367975988827167,
Packit 67cb25
    6.1897906340782765, 7.170975366812117, 7.9803517970842286,
Packit 67cb25
    8.6179199248946077, 9.083679750243256, 9.3776312731301772,
Packit 67cb25
    9.4997744935553676, 9.5035963988918795, 8.5371013292095554,
Packit 67cb25
    5.3135045284256019, 1.2120062346303317, -2.3083133782071208,
Packit 67cb25
    -3.788474042493764, -3.7873197326712797, 1.98825324341826,
Packit 67cb25
    1.9709370138809248, -0.31768851396215103, -4.2211558425051745,
Packit 67cb25
    -6.5330277558649303, -6.5534602949454008, 5.5087083141507147,
Packit 67cb25
    8.4456576001234502, 7.1443430435268214, 1.9932653799771245,
Packit 67cb25
    -2.8426372908118083, -3.6436876015204378, -3.9926784426485034,
Packit 67cb25
    -4.3315242293057175, -4.5849882013553547, -4.7202622696137819,
Packit 67cb25
    -5.0157009305506106, -5.3195660850447402, -5.3127453670702938,
Packit 67cb25
    -4.6348437675141847, -3.1014810884327102, -1.0745634258401102,
Packit 67cb25
    1.0840031242494419, 3.0123124658217071, 4.3484585028624627,
Packit 67cb25
    4.7484698519996655, 4.740613456600772, 4.4142234654988952,
Packit 67cb25
    3.7574719541934956, 2.9757785771330334, 2.274562988765974,
Packit 67cb25
    1.8592448435407634, 1.8191111043001218, 1.8659054809992697,
Packit 67cb25
    2.0883298868527498, 2.3859686670095699, 2.6372078307738107,
Packit 67cb25
    2.7234424260251124, 2.5729816013335247, -3.258105131647655,
Packit 67cb25
    -7.2827760999889657, -7.179945071809863, -6.9660388070359547,
Packit 67cb25
    -5.5662805880783406, -3.3905902235190721, -1.0497645733987406,
Packit 67cb25
    1.0095869363327665, 2.3408548797255095, 2.6047260012112545,
Packit 67cb25
    2.2325150500282476, -0.91241316251151927, -3.5649171021138555,
Packit 67cb25
    -3.6363485275348033, -3.7309363021244821, -3.8038342533632736,
Packit 67cb25
    -3.8503835649797429, -3.8846412514674595, -3.920664327319995,
Packit 67cb25
    -3.9725098070309213, -4.0542347050938083, -4.1247145958221569,
Packit 67cb25
    -4.8208939493861829, -4.8209868997717571, -4.8103284962540727,
Packit 67cb25
    -4.7822416973267625, -4.7366335526042516, -4.6735040620865389,
Packit 67cb25
    -4.5928532257736272, -4.4946810436655156, -4.3789875157622005,
Packit 67cb25
    -4.2457726420636881, -4.0950364225699714, -3.9267788572810582,
Packit 67cb25
    -3.7409999461969403, -3.537699689317626, -3.3168780866431069,
Packit 67cb25
    -3.0785351381733914, -2.8550035950284602, -2.7914506045621672,
Packit 67cb25
    -0.46968123806956008, 3.263658433044764, 5.8622198554846658,
Packit 67cb25
    6.0172047575589431, 6.3291356295622618, 6.5905310151592165,
Packit 67cb25
    6.7156659481449141, 6.7275899382734075, -9.4118959280855066,
Packit 67cb25
    -9.4233597557136388, -7.6111870705157543, -3.9651685725226056,
Packit 67cb25
    -0.36453251398707032, -0.23537781181431175, 4.0332797539781309,
Packit 67cb25
    6.899794364641159, 6.9257391889860891, 6.2377210430025594,
Packit 67cb25
    4.3902665602806792, 2.1878722453596344, 0.44278317319805183,
Packit 67cb25
    -0.078432568578550743, 0.12107113682074738, 1.6744315603866244,
Packit 67cb25
    1.3047436323966959, -6.4955024539509765, -8.3320831514429443,
Packit 67cb25
    -6.7382472104931805, 0.61052993339902706, 5.9794239504090552,
Packit 67cb25
    6.0592463497564459, 1.5387265272596853, -7.3601591987256612 };
Packit 67cb25
Packit 67cb25
  double test_dy[129] = {
Packit 67cb25
    62.426083204466224, 6.757341159173202, 6.727537246743899,
Packit 67cb25
    5.7945730211610407, 4.8616087955781726, 3.9286445699953054,
Packit 67cb25
    2.9956803444124378, 2.0627161188295791, 1.1297518932467119,
Packit 67cb25
    0.1967876676638447, 0, -12.480296842307126,
Packit 67cb25
    -21.209126982426163, -22.014768399615317, -14.897221093874615,
Packit 67cb25
    0, 1.65274069980919, 0,
Packit 67cb25
    -2.2393981239975669, -19.714311699236049, -19.77742868994725,
Packit 67cb25
    -2.4287490961310456, 0, 78.213312807624717,
Packit 67cb25
    0, -20.358420305108574, -31.350476855816961,
Packit 67cb25
    -16.93545425712459, -3.9032385156832157, -2.5401833171916435,
Packit 67cb25
    -1.3740294011308083, -1.6128919418291603, -2.1012124848241789,
Packit 67cb25
    -2.8800570317456784, 0, 0.70341285683675259,
Packit 67cb25
    6.3314138906742139, 9.9941697310971538, 11.69168037810557,
Packit 67cb25
    11.42394583169949, 9.1909660918788916, 4.992741158643824,
Packit 67cb25
    0, -0.50358091648162351, -2.8552721239834269,
Packit 67cb25
    -4.0914806331173992, -4.2122064438835425, -3.2174495562818706,
Packit 67cb25
    -1.1072099703123885, 0, 0.78347408424733667,
Packit 67cb25
    1.5221058615312819, 1.6003417148468082, 1.018181644193916,
Packit 67cb25
    0, -10.817925943273289, -39.490030870551372,
Packit 67cb25
    0, 8.0126635338650072, 6.7986203849007927,
Packit 67cb25
    10.557804177353285, 12.667135433334296, 12.351260158262027,
Packit 67cb25
    9.6101783521364421, 4.44389001495753, 0,
Packit 67cb25
    -10.1306309231183, -19.882866043398995, -4.7826445467139278,
Packit 67cb25
    -0.70998925548225966, -0.49283947499262398, -0.31159279753453034,
Packit 67cb25
    -0.20667940230488324, -0.17809928930368468, -0.22585245853093405,
Packit 67cb25
    -0.3499389099866323, -0.55035864367077902, -0.70998925548225966,
Packit 67cb25
    0.0098004308855327432, 0, 0.10494594234665755,
Packit 67cb25
    0.20009145380778143, 0.2952369652689053, 0.39038247673003107,
Packit 67cb25
    0.48552798819115495, 0.58067349965227877, 0.67581901111340459,
Packit 67cb25
    0.77096452257452841, 0.86611003403565412, 0.96125554549677805,
Packit 67cb25
    1.0564010569579039, 1.1515465684190276, 1.2466920798801533,
Packit 67cb25
    1.3418375913412772, 1.4253105022449177, 4.1661049863071913,
Packit 67cb25
    18.74497348837053, 19.496500284294363, 6.4206853740787171,
Packit 67cb25
    2.3892836005304425, 1.7894106566060179, 1.0494805960296585,
Packit 67cb25
    0.30955053545331346, 0, 1.5724451183167569,
Packit 67cb25
    0, 16.386389851530527, 21.613477536080744,
Packit 67cb25
    17.603560096681914, 18.338573561497682, 23.697110333020628,
Packit 67cb25
    3.1105642331329868, 0, -7.5982202651552164,
Packit 67cb25
    -11.73098890423519, -11.453053366134201, -6.7644136508523696,
Packit 67cb25
    0, 9.2309078320594402, 0,
Packit 67cb25
    -20.350273706124355, -39.581660196515507, 0,
Packit 67cb25
    28.835095151183879, 42.753317235684989, 7.3325239511975031,
Packit 67cb25
    0, -47.053315974301256, -38.688209637869583 };
Packit 67cb25
Packit 67cb25
  double test_iy[129] = { 
Packit 67cb25
    0, 0.046311303303274043, 0.07582542065258166,
Packit 67cb25
    1.1121678097008914, 2.345017979757877, 3.7427368904558875,
Packit 67cb25
    5.2736855014272832, 6.9062247723044061, 8.6087156627196464,
Packit 67cb25
    10.349519132305348, 10.718617229125304, 12.051326255780914,
Packit 67cb25
    13.351310568583624, 13.954434023333466, 13.833375399536308,
Packit 67cb25
    13.23478503216295, 13.229508179502936, 13.081569421202504,
Packit 67cb25
    13.111955459764134, 13.313565584429645, 12.895822708651364,
Packit 67cb25
    11.856586384851303, 11.747502930901248, 11.477166081331394,
Packit 67cb25
    11.968731461589641, 12.910617813249443, 13.783041410703255,
Packit 67cb25
    13.664096839344904, 13.416752727534579, 12.996373500853053,
Packit 67cb25
    12.226613834386363, 11.406286934906419, 11.064147626707395,
Packit 67cb25
    10.526693424249395, 9.6682418398824055, 9.5656469982362644,
Packit 67cb25
    8.633802142647145, 7.911116775692733, 7.5218036771498298,
Packit 67cb25
    7.5234294786346014, 7.9069146636026106, 8.5965335673487839,
Packit 67cb25
    9.3034583640488648, 9.4500169740341917, 10.299608964240058,
Packit 67cb25
    11.055524261651918, 11.675840089542856, 12.156462347951148,
Packit 67cb25
    12.53112561368027, 12.660771626086403, 12.868892222896084,
Packit 67cb25
    13.230897278463143, 13.642654271367054, 14.106816365848598,
Packit 67cb25
    14.529836204259333, 14.602291235557717, 14.620235691106975,
Packit 67cb25
    13.678281413948246, 13.51979351456291, 13.338827208895861,
Packit 67cb25
    12.337400222501822, 11.506721190837634, 11.098761199438101,
Packit 67cb25
    11.102808164918775, 11.425905470576772, 11.714428553431798,
Packit 67cb25
    11.886459852625201, 12.035570442032403, 11.580639494361572,
Packit 67cb25
    11.488113239473538, 10.903735363611753, 10.209447282562856,
Packit 67cb25
    9.5043766268555689, 8.7920812597559994, 8.0735304010092825,
Packit 67cb25
    7.347104626839644, 6.6085958699503662, 6.1496664193039994,
Packit 67cb25
    5.821344166329677, 5.9127911070795323, 4.9342652985615576,
Packit 67cb25
    4.050745397809842, 3.1740110751228041, 2.3072889415487108,
Packit 67cb25
    1.4538056081358768, 0.61678768593257072, -0.20053821401294236,
Packit 67cb25
    -0.99494548065234767, -1.7632075029373926, -2.5020976698197641,
Packit 67cb25
    -3.2083893702512087, -3.8788559931834152, -4.5102709275681283,
Packit 67cb25
    -5.0994075623570394, -5.5789032190742072, -5.6428026999265457,
Packit 67cb25
    -5.9842769011998804, -5.729140886963938, -4.8519085924998322,
Packit 67cb25
    -4.6444581063590329, -3.7217151397093993, -2.5300254086689806,
Packit 67cb25
    -1.3027452894525609, -0.78475347239267057, -1.0460847630211827,
Packit 67cb25
    -0.90959826921338605, -2.6553766359304607, -3.7360597404585745,
Packit 67cb25
    -4.1087031972797643, -4.1108616867222691, -3.776307276733156,
Packit 67cb25
    -2.7114490122334045, -2.5973338374383879, -1.4760729895576692,
Packit 67cb25
    -0.48580494729501034, 0.11910209432525942, 0.34807359178739627,
Packit 67cb25
    0.36262668088219696, 0.3622604193055981, 0.51348240778475363,
Packit 67cb25
    0.56740090208414018, 0.14380211642697149, -0.48989527970345625,
Packit 67cb25
    -1.2810928311228711, -1.8846453955503084, -1.1777647142370817,
Packit 67cb25
    -1.0483932372566702, -0.32646483194908105, -0.88612247621927298 };
Packit 67cb25
Packit 67cb25
  xy_table data_table = make_xy_table(data_x, data_y, 30);
Packit 67cb25
  xy_table test_table = make_xy_table(test_x, test_y, 129);
Packit 67cb25
  xy_table test_d_table = make_xy_table(test_x, test_dy, 129);
Packit 67cb25
  xy_table test_i_table = make_xy_table(test_x, test_iy, 129);
Packit 67cb25
Packit 67cb25
  s = test_interp (&data_table, gsl_interp_steffen, &test_table, &test_d_table, &test_i_table);
Packit 67cb25
  gsl_test (s, "steffen interpolation test 2");
Packit 67cb25
  return s;
Packit 67cb25
}
Packit 67cb25
Packit 67cb25
int 
Packit 67cb25
main (int argc, char **argv)
Packit 67cb25
{
Packit 67cb25
  int status = 0;
Packit 67cb25
Packit 67cb25
  gsl_ieee_env_setup ();
Packit 67cb25
Packit 67cb25
  argc = 0;    /* prevent warnings about unused parameters */
Packit 67cb25
  argv = 0;
Packit 67cb25
Packit 67cb25
  status += test_bsearch();
Packit 67cb25
  status += test_linear();
Packit 67cb25
  status += test_polynomial();
Packit 67cb25
  status += test_cspline();
Packit 67cb25
  status += test_cspline2();
Packit 67cb25
  status += test_cspline3();
Packit 67cb25
  status += test_csplinep();
Packit 67cb25
  status += test_csplinep2();
Packit 67cb25
  status += test_akima();
Packit 67cb25
  status += test_steffen1();
Packit 67cb25
  status += test_steffen2();
Packit 67cb25
Packit 67cb25
  status += test_interp2d_main();
Packit 67cb25
Packit 67cb25
  exit (gsl_test_summary());
Packit 67cb25
}