|
Packit |
67cb25 |
/* histogram/test2d.c
|
|
Packit |
67cb25 |
*
|
|
Packit |
67cb25 |
* Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 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 |
#include <config.h>
|
|
Packit |
67cb25 |
#include <stdlib.h>
|
|
Packit |
67cb25 |
#include <stdio.h>
|
|
Packit |
67cb25 |
#include <gsl/gsl_errno.h>
|
|
Packit |
67cb25 |
#include <gsl/gsl_math.h>
|
|
Packit |
67cb25 |
#include <gsl/gsl_machine.h>
|
|
Packit |
67cb25 |
#include <gsl/gsl_histogram2d.h>
|
|
Packit |
67cb25 |
#include <gsl/gsl_test.h>
|
|
Packit |
67cb25 |
#include <gsl/gsl_ieee_utils.h>
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
#define M 107
|
|
Packit |
67cb25 |
#define N 239
|
|
Packit |
67cb25 |
#define M1 17
|
|
Packit |
67cb25 |
#define N1 23
|
|
Packit |
67cb25 |
#define MR 10
|
|
Packit |
67cb25 |
#define NR 5
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
void
|
|
Packit |
67cb25 |
test2d (void)
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
double xr[MR + 1] =
|
|
Packit |
67cb25 |
{ 0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0 };
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
double yr[NR + 1] = { 90.0, 91.0, 92.0, 93.0, 94.0, 95.0 };
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
gsl_histogram2d *h, *h1, *g, *hr;
|
|
Packit |
67cb25 |
size_t i, j, k;
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
gsl_ieee_env_setup ();
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
h = gsl_histogram2d_calloc (M, N);
|
|
Packit |
67cb25 |
h1 = gsl_histogram2d_calloc (M, N);
|
|
Packit |
67cb25 |
g = gsl_histogram2d_calloc (M, N);
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
gsl_test (h->xrange == 0,
|
|
Packit |
67cb25 |
"gsl_histogram2d_calloc returns valid xrange pointer");
|
|
Packit |
67cb25 |
gsl_test (h->yrange == 0,
|
|
Packit |
67cb25 |
"gsl_histogram2d_calloc returns valid yrange pointer");
|
|
Packit |
67cb25 |
gsl_test (h->bin == 0, "gsl_histogram2d_calloc returns valid bin pointer");
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
gsl_test (h->nx != M, "gsl_histogram2d_calloc returns valid nx");
|
|
Packit |
67cb25 |
gsl_test (h->ny != N, "gsl_histogram2d_calloc returns valid ny");
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
hr = gsl_histogram2d_calloc_range (MR, NR, xr, yr);
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
gsl_test (hr->xrange == 0,
|
|
Packit |
67cb25 |
"gsl_histogram2d_calloc_range returns valid xrange pointer");
|
|
Packit |
67cb25 |
gsl_test (hr->yrange == 0,
|
|
Packit |
67cb25 |
"gsl_histogram2d_calloc_range returns valid yrange pointer");
|
|
Packit |
67cb25 |
gsl_test (hr->bin == 0,
|
|
Packit |
67cb25 |
"gsl_histogram2d_calloc_range returns valid bin pointer");
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
gsl_test (hr->nx != MR, "gsl_histogram2d_calloc_range returns valid nx");
|
|
Packit |
67cb25 |
gsl_test (hr->ny != NR, "gsl_histogram2d_calloc_range returns valid ny");
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
int status = 0;
|
|
Packit |
67cb25 |
for (i = 0; i <= MR; i++)
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
if (hr->xrange[i] != xr[i])
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
status = 1;
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
};
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
gsl_test (status,
|
|
Packit |
67cb25 |
"gsl_histogram2d_calloc_range creates xrange");
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
int status = 0;
|
|
Packit |
67cb25 |
for (i = 0; i <= NR; i++)
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
if (hr->yrange[i] != yr[i])
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
status = 1;
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
};
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
gsl_test (status,
|
|
Packit |
67cb25 |
"gsl_histogram2d_calloc_range creates yrange");
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
for (i = 0; i <= MR; i++)
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
hr->xrange[i] = 0.0;
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
for (i = 0; i <= NR; i++)
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
hr->yrange[i] = 0.0;
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
int status = gsl_histogram2d_set_ranges (hr, xr, MR + 1, yr, NR + 1);
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
for (i = 0; i <= MR; i++)
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
if (hr->xrange[i] != xr[i])
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
status = 1;
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
};
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
gsl_test (status, "gsl_histogram2d_set_ranges sets xrange");
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
int status = 0;
|
|
Packit |
67cb25 |
for (i = 0; i <= NR; i++)
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
if (hr->yrange[i] != yr[i])
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
status = 1;
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
};
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
gsl_test (status, "gsl_histogram2d_set_ranges sets yrange");
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
k = 0;
|
|
Packit |
67cb25 |
for (i = 0; i < M; i++)
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
for (j = 0; j < N; j++)
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
k++;
|
|
Packit |
67cb25 |
gsl_histogram2d_accumulate (h, (double) i, (double) j, (double) k);
|
|
Packit |
67cb25 |
};
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
int status = 0;
|
|
Packit |
67cb25 |
k = 0;
|
|
Packit |
67cb25 |
for (i = 0; i < M; i++)
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
for (j = 0; j < N; j++)
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
k++;
|
|
Packit |
67cb25 |
if (h->bin[i * N + j] != (double) k)
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
status = 1;
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
gsl_test (status,
|
|
Packit |
67cb25 |
"gsl_histogram2d_accumulate writes into array");
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
int status = 0;
|
|
Packit |
67cb25 |
k = 0;
|
|
Packit |
67cb25 |
for (i = 0; i < M; i++)
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
for (j = 0; j < N; j++)
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
k++;
|
|
Packit |
67cb25 |
if (gsl_histogram2d_get (h, i, j) != (double) k)
|
|
Packit |
67cb25 |
status = 1;
|
|
Packit |
67cb25 |
};
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
gsl_test (status, "gsl_histogram2d_get reads from array");
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
for (i = 0; i <= M; i++)
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
h1->xrange[i] = 100.0 + i;
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
for (i = 0; i <= N; i++)
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
h1->yrange[i] = 900.0 + i * i;
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
gsl_histogram2d_memcpy (h1, h);
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
int status = 0;
|
|
Packit |
67cb25 |
for (i = 0; i <= M; i++)
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
if (h1->xrange[i] != h->xrange[i])
|
|
Packit |
67cb25 |
status = 1;
|
|
Packit |
67cb25 |
};
|
|
Packit |
67cb25 |
gsl_test (status, "gsl_histogram2d_memcpy copies bin xranges");
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
int status = 0;
|
|
Packit |
67cb25 |
for (i = 0; i <= N; i++)
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
if (h1->yrange[i] != h->yrange[i])
|
|
Packit |
67cb25 |
status = 1;
|
|
Packit |
67cb25 |
};
|
|
Packit |
67cb25 |
gsl_test (status, "gsl_histogram2d_memcpy copies bin yranges");
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
int status = 0;
|
|
Packit |
67cb25 |
for (i = 0; i < M; i++)
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
for (j = 0; j < N; j++)
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
if (gsl_histogram2d_get (h1, i, j) !=
|
|
Packit |
67cb25 |
gsl_histogram2d_get (h, i, j))
|
|
Packit |
67cb25 |
status = 1;
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
gsl_test (status, "gsl_histogram2d_memcpy copies bin values");
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
gsl_histogram2d_free (h1);
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
h1 = gsl_histogram2d_clone (h);
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
int status = 0;
|
|
Packit |
67cb25 |
for (i = 0; i <= M; i++)
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
if (h1->xrange[i] != h->xrange[i])
|
|
Packit |
67cb25 |
status = 1;
|
|
Packit |
67cb25 |
};
|
|
Packit |
67cb25 |
gsl_test (status, "gsl_histogram2d_clone copies bin xranges");
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
int status = 0;
|
|
Packit |
67cb25 |
for (i = 0; i <= N; i++)
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
if (h1->yrange[i] != h->yrange[i])
|
|
Packit |
67cb25 |
status = 1;
|
|
Packit |
67cb25 |
};
|
|
Packit |
67cb25 |
gsl_test (status, "gsl_histogram2d_clone copies bin yranges");
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
int status = 0;
|
|
Packit |
67cb25 |
for (i = 0; i < M; i++)
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
for (j = 0; j < N; j++)
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
if (gsl_histogram2d_get (h1, i, j) !=
|
|
Packit |
67cb25 |
gsl_histogram2d_get (h, i, j))
|
|
Packit |
67cb25 |
status = 1;
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
gsl_test (status, "gsl_histogram2d_clone copies bin values");
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
gsl_histogram2d_reset (h);
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
int status = 0;
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
for (i = 0; i < M * N; i++)
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
if (h->bin[i] != 0)
|
|
Packit |
67cb25 |
status = 1;
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
gsl_test (status, "gsl_histogram2d_reset zeros array");
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
gsl_histogram2d_free (h);
|
|
Packit |
67cb25 |
h = gsl_histogram2d_calloc (M1, N1);
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
int status = 0;
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
for (i = 0; i < M1; i++)
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
for (j = 0; j < N1; j++)
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
gsl_histogram2d_increment (h, (double) i, (double) j);
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
for (k = 0; k <= i * N1 + j; k++)
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
if (h->bin[k] != 1)
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
status = 1;
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
for (k = i * N1 + j + 1; k < M1 * N1; k++)
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
if (h->bin[k] != 0)
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
status = 1;
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
gsl_test (status, "gsl_histogram2d_increment increases bin value");
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
gsl_histogram2d_free (h);
|
|
Packit |
67cb25 |
h = gsl_histogram2d_calloc (M, N);
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
int status = 0;
|
|
Packit |
67cb25 |
for (i = 0; i < M; i++)
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
double x0 = 0, x1 = 0;
|
|
Packit |
67cb25 |
gsl_histogram2d_get_xrange (h, i, &x0, &x1;;
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
if (x0 != i || x1 != i + 1)
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
status = 1;
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
gsl_test (status,
|
|
Packit |
67cb25 |
"gsl_histogram2d_get_xlowerlimit and xupperlimit");
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
int status = 0;
|
|
Packit |
67cb25 |
for (i = 0; i < N; i++)
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
double y0 = 0, y1 = 0;
|
|
Packit |
67cb25 |
gsl_histogram2d_get_yrange (h, i, &y0, &y1;;
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
if (y0 != i || y1 != i + 1)
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
status = 1;
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
gsl_test (status,
|
|
Packit |
67cb25 |
"gsl_histogram2d_get_ylowerlimit and yupperlimit");
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
int status = 0;
|
|
Packit |
67cb25 |
if (gsl_histogram2d_xmax (h) != M)
|
|
Packit |
67cb25 |
status = 1;
|
|
Packit |
67cb25 |
gsl_test (status, "gsl_histogram2d_xmax");
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
int status = 0;
|
|
Packit |
67cb25 |
if (gsl_histogram2d_xmin (h) != 0)
|
|
Packit |
67cb25 |
status = 1;
|
|
Packit |
67cb25 |
gsl_test (status, "gsl_histogram2d_xmin");
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
int status = 0;
|
|
Packit |
67cb25 |
if (gsl_histogram2d_nx (h) != M)
|
|
Packit |
67cb25 |
status = 1;
|
|
Packit |
67cb25 |
gsl_test (status, "gsl_histogram2d_nx");
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
int status = 0;
|
|
Packit |
67cb25 |
if (gsl_histogram2d_ymax (h) != N)
|
|
Packit |
67cb25 |
status = 1;
|
|
Packit |
67cb25 |
gsl_test (status, "gsl_histogram2d_ymax");
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
int status = 0;
|
|
Packit |
67cb25 |
if (gsl_histogram2d_ymin (h) != 0)
|
|
Packit |
67cb25 |
status = 1;
|
|
Packit |
67cb25 |
gsl_test (status, "gsl_histogram2d_ymin");
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
int status = 0;
|
|
Packit |
67cb25 |
if (gsl_histogram2d_ny (h) != N)
|
|
Packit |
67cb25 |
status = 1;
|
|
Packit |
67cb25 |
gsl_test (status, "gsl_histogram2d_ny");
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
h->bin[3 * N + 2] = 123456.0;
|
|
Packit |
67cb25 |
h->bin[4 * N + 3] = -654321;
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
double max = gsl_histogram2d_max_val (h);
|
|
Packit |
67cb25 |
gsl_test (max != 123456.0, "gsl_histogram2d_max_val finds maximum value");
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
double min = gsl_histogram2d_min_val (h);
|
|
Packit |
67cb25 |
gsl_test (min != -654321.0,
|
|
Packit |
67cb25 |
"gsl_histogram2d_min_val finds minimum value");
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
size_t imax, jmax;
|
|
Packit |
67cb25 |
gsl_histogram2d_max_bin (h, &imax, &jmax;;
|
|
Packit |
67cb25 |
gsl_test (imax != 3
|
|
Packit |
67cb25 |
|| jmax != 2,
|
|
Packit |
67cb25 |
"gsl_histogram2d_max_bin finds maximum value bin");
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
size_t imin, jmin;
|
|
Packit |
67cb25 |
gsl_histogram2d_min_bin (h, &imin, &jmin);
|
|
Packit |
67cb25 |
gsl_test (imin != 4
|
|
Packit |
67cb25 |
|| jmin != 3, "gsl_histogram2d_min_bin find minimum value bin");
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
for (i = 0; i < M * N; i++)
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
h->bin[i] = i + 27;
|
|
Packit |
67cb25 |
g->bin[i] = (i + 27) * (i + 1);
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
double sum = gsl_histogram2d_sum (h);
|
|
Packit |
67cb25 |
gsl_test (sum != N * M * 27 + ((N * M - 1) * N * M) / 2,
|
|
Packit |
67cb25 |
"gsl_histogram2d_sum sums all bin values");
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
/* first test... */
|
|
Packit |
67cb25 |
const double xpos = 0.6;
|
|
Packit |
67cb25 |
const double ypos = 0.85;
|
|
Packit |
67cb25 |
double xmean;
|
|
Packit |
67cb25 |
double ymean;
|
|
Packit |
67cb25 |
size_t xbin;
|
|
Packit |
67cb25 |
size_t ybin;
|
|
Packit |
67cb25 |
gsl_histogram2d *h3 = gsl_histogram2d_alloc (M, N);
|
|
Packit |
67cb25 |
gsl_histogram2d_set_ranges_uniform (h3, 0, 1, 0, 1);
|
|
Packit |
67cb25 |
gsl_histogram2d_increment (h3, xpos, ypos);
|
|
Packit |
67cb25 |
gsl_histogram2d_find (h3, xpos, ypos, &xbin, &ybin);
|
|
Packit |
67cb25 |
xmean = gsl_histogram2d_xmean (h3);
|
|
Packit |
67cb25 |
ymean = gsl_histogram2d_ymean (h3);
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
double expected_xmean = (h3->xrange[xbin] + h3->xrange[xbin + 1]) / 2.0;
|
|
Packit |
67cb25 |
double expected_ymean = (h3->yrange[ybin] + h3->yrange[ybin + 1]) / 2.0;
|
|
Packit |
67cb25 |
gsl_test_abs (xmean, expected_xmean, 100.0 * GSL_DBL_EPSILON,
|
|
Packit |
67cb25 |
"gsl_histogram2d_xmean");
|
|
Packit |
67cb25 |
gsl_test_abs (ymean, expected_ymean, 100.0 * GSL_DBL_EPSILON,
|
|
Packit |
67cb25 |
"gsl_histogram2d_ymean");
|
|
Packit |
67cb25 |
};
|
|
Packit |
67cb25 |
gsl_histogram2d_free (h3);
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
/* test it with bivariate normal distribution */
|
|
Packit |
67cb25 |
const double xmean = 0.7;
|
|
Packit |
67cb25 |
const double ymean = 0.7;
|
|
Packit |
67cb25 |
const double xsigma = 0.1;
|
|
Packit |
67cb25 |
const double ysigma = 0.1;
|
|
Packit |
67cb25 |
const double correl = 0.5;
|
|
Packit |
67cb25 |
const double norm =
|
|
Packit |
67cb25 |
10.0 / M_PI / xsigma / ysigma / sqrt (1.0 - correl * correl);
|
|
Packit |
67cb25 |
size_t xbin;
|
|
Packit |
67cb25 |
size_t ybin;
|
|
Packit |
67cb25 |
gsl_histogram2d *h3 = gsl_histogram2d_alloc (M, N);
|
|
Packit |
67cb25 |
gsl_histogram2d_set_ranges_uniform (h3, 0, 1, 0, 1);
|
|
Packit |
67cb25 |
/* initialize with 2d gauss pdf in two directions */
|
|
Packit |
67cb25 |
for (xbin = 0; xbin < M; xbin++)
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
double xi =
|
|
Packit |
67cb25 |
((h3->xrange[xbin] + h3->xrange[xbin + 1]) / 2.0 - xmean) / xsigma;
|
|
Packit |
67cb25 |
for (ybin = 0; ybin < N; ybin++)
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
double yi =
|
|
Packit |
67cb25 |
((h3->yrange[ybin] + h3->yrange[ybin + 1]) / 2.0 -
|
|
Packit |
67cb25 |
ymean) / ysigma;
|
|
Packit |
67cb25 |
double prob =
|
|
Packit |
67cb25 |
norm * exp (-(xi * xi - 2.0 * correl * xi * yi + yi * yi) /
|
|
Packit |
67cb25 |
2.0 / (1 - correl * correl));
|
|
Packit |
67cb25 |
h3->bin[xbin * N + ybin] = prob;
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
double xs = gsl_histogram2d_xsigma (h3);
|
|
Packit |
67cb25 |
double ys = gsl_histogram2d_ysigma (h3);
|
|
Packit |
67cb25 |
/* evaluate results and compare with parameters */
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
gsl_test_abs (gsl_histogram2d_xmean (h3), xmean, 2.0/M,
|
|
Packit |
67cb25 |
"gsl_histogram2d_xmean histogram mean(x)");
|
|
Packit |
67cb25 |
gsl_test_abs (gsl_histogram2d_ymean (h3), ymean, 2.0/N,
|
|
Packit |
67cb25 |
"gsl_histogram2d_ymean histogram mean(y)");
|
|
Packit |
67cb25 |
gsl_test_abs (xs, xsigma, 2.0/M,
|
|
Packit |
67cb25 |
"gsl_histogram2d_xsigma histogram stdev(x)");
|
|
Packit |
67cb25 |
gsl_test_abs (ys, ysigma, 2.0/N,
|
|
Packit |
67cb25 |
"gsl_histogram2d_ysigma histogram stdev(y)");
|
|
Packit |
67cb25 |
gsl_test_abs (gsl_histogram2d_cov (h3) / xs / ys, correl,
|
|
Packit |
67cb25 |
2.0/((M < N) ? M : N),
|
|
Packit |
67cb25 |
"gsl_histogram2d_cov histogram covariance");
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
gsl_histogram2d_free (h3);
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
gsl_histogram2d_memcpy (h1, g);
|
|
Packit |
67cb25 |
gsl_histogram2d_add (h1, h);
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
int status = 0;
|
|
Packit |
67cb25 |
for (i = 0; i < M * N; i++)
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
if (h1->bin[i] != g->bin[i] + h->bin[i])
|
|
Packit |
67cb25 |
status = 1;
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
gsl_test (status, "gsl_histogram2d_add histogram addition");
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
gsl_histogram2d_memcpy (h1, g);
|
|
Packit |
67cb25 |
gsl_histogram2d_sub (h1, h);
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
int status = 0;
|
|
Packit |
67cb25 |
for (i = 0; i < M * N; i++)
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
if (h1->bin[i] != g->bin[i] - h->bin[i])
|
|
Packit |
67cb25 |
status = 1;
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
gsl_test (status, "gsl_histogram2d_sub histogram subtraction");
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
gsl_histogram2d_memcpy (h1, g);
|
|
Packit |
67cb25 |
gsl_histogram2d_mul (h1, h);
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
int status = 0;
|
|
Packit |
67cb25 |
for (i = 0; i < M * N; i++)
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
if (h1->bin[i] != g->bin[i] * h->bin[i])
|
|
Packit |
67cb25 |
status = 1;
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
gsl_test (status, "gsl_histogram2d_mul histogram multiplication");
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
gsl_histogram2d_memcpy (h1, g);
|
|
Packit |
67cb25 |
gsl_histogram2d_div (h1, h);
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
int status = 0;
|
|
Packit |
67cb25 |
for (i = 0; i < M * N; i++)
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
if (h1->bin[i] != g->bin[i] / h->bin[i])
|
|
Packit |
67cb25 |
status = 1;
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
gsl_test (status, "gsl_histogram2d_div histogram division");
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
gsl_histogram2d_memcpy (h1, g);
|
|
Packit |
67cb25 |
gsl_histogram2d_scale (h1, 0.5);
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
int status = 0;
|
|
Packit |
67cb25 |
for (i = 0; i < M * N; i++)
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
if (h1->bin[i] != 0.5 * g->bin[i])
|
|
Packit |
67cb25 |
status = 1;
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
gsl_test (status, "gsl_histogram2d_scale histogram scaling");
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
gsl_histogram2d_memcpy (h1, g);
|
|
Packit |
67cb25 |
gsl_histogram2d_shift (h1, 0.25);
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
int status = 0;
|
|
Packit |
67cb25 |
for (i = 0; i < M * N; i++)
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
if (h1->bin[i] != 0.25 + g->bin[i])
|
|
Packit |
67cb25 |
status = 1;
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
gsl_test (status, "gsl_histogram2d_shift histogram shift");
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
gsl_histogram2d_free (h); /* free whatever is in h */
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
h = gsl_histogram2d_calloc_uniform (M1, N1, 0.0, 5.0, 0.0, 5.0);
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
gsl_test (h->xrange == 0,
|
|
Packit |
67cb25 |
"gsl_histogram2d_calloc_uniform returns valid range pointer");
|
|
Packit |
67cb25 |
gsl_test (h->yrange == 0,
|
|
Packit |
67cb25 |
"gsl_histogram2d_calloc_uniform returns valid range pointer");
|
|
Packit |
67cb25 |
gsl_test (h->bin == 0,
|
|
Packit |
67cb25 |
"gsl_histogram2d_calloc_uniform returns valid bin pointer");
|
|
Packit |
67cb25 |
gsl_test (h->nx != M1, "gsl_histogram2d_calloc_uniform returns valid nx");
|
|
Packit |
67cb25 |
gsl_test (h->ny != N1, "gsl_histogram2d_calloc_uniform returns valid ny");
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
gsl_histogram2d_accumulate (h, 0.0, 3.01, 1.0);
|
|
Packit |
67cb25 |
gsl_histogram2d_accumulate (h, 0.1, 2.01, 2.0);
|
|
Packit |
67cb25 |
gsl_histogram2d_accumulate (h, 0.2, 1.01, 3.0);
|
|
Packit |
67cb25 |
gsl_histogram2d_accumulate (h, 0.3, 0.01, 4.0);
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
size_t i1, i2, i3, i4;
|
|
Packit |
67cb25 |
size_t j1, j2, j3, j4;
|
|
Packit |
67cb25 |
double expected;
|
|
Packit |
67cb25 |
int status;
|
|
Packit |
67cb25 |
status = gsl_histogram2d_find (h, 0.0, 3.01, &i1, &j1;;
|
|
Packit |
67cb25 |
status = gsl_histogram2d_find (h, 0.1, 2.01, &i2, &j2;;
|
|
Packit |
67cb25 |
status = gsl_histogram2d_find (h, 0.2, 1.01, &i3, &j3;;
|
|
Packit |
67cb25 |
status = gsl_histogram2d_find (h, 0.3, 0.01, &i4, &j4;;
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
for (i = 0; i < M1; i++)
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
for (j = 0; j < N1; j++)
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
if (i == i1 && j == j1)
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
expected = 1.0;
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
else if (i == i2 && j == j2)
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
expected = 2.0;
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
else if (i == i3 && j == j3)
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
expected = 3.0;
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
else if (i == i4 && j == j4)
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
expected = 4.0;
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
else
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
expected = 0.0;
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
if (h->bin[i * N1 + j] != expected)
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
status = 1;
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
gsl_test (status, "gsl_histogram2d_find returns index");
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
FILE *f = fopen ("test.txt", "w");
|
|
Packit |
67cb25 |
gsl_histogram2d_fprintf (f, h, "%.19e", "%.19e");
|
|
Packit |
67cb25 |
fclose (f);
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
FILE *f = fopen ("test.txt", "r");
|
|
Packit |
67cb25 |
gsl_histogram2d *hh = gsl_histogram2d_calloc (M1, N1);
|
|
Packit |
67cb25 |
int status = 0;
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
gsl_histogram2d_fscanf (f, hh);
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
for (i = 0; i <= M1; i++)
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
if (h->xrange[i] != hh->xrange[i])
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
printf ("xrange[%d] : %g orig vs %g\n",
|
|
Packit |
67cb25 |
(int) i, h->xrange[i], hh->xrange[i]);
|
|
Packit |
67cb25 |
status = 1;
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
for (j = 0; j <= N1; j++)
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
if (h->yrange[j] != hh->yrange[j])
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
printf ("yrange[%d] : %g orig vs %g\n",
|
|
Packit |
67cb25 |
(int) j, h->yrange[j], hh->yrange[j]);
|
|
Packit |
67cb25 |
status = 1;
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
for (i = 0; i < M1 * N1; i++)
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
if (h->bin[i] != hh->bin[i])
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
printf ("bin[%d] : %g orig vs %g\n",
|
|
Packit |
67cb25 |
(int) i, h->bin[i], hh->bin[i]);
|
|
Packit |
67cb25 |
status = 1;
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
gsl_test (status, "gsl_histogram2d_fprintf and fscanf");
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
gsl_histogram2d_free (hh);
|
|
Packit |
67cb25 |
fclose (f);
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
FILE *f = fopen ("test.dat", "wb");
|
|
Packit |
67cb25 |
gsl_histogram2d_fwrite (f, h);
|
|
Packit |
67cb25 |
fclose (f);
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
FILE *f = fopen ("test.dat", "rb");
|
|
Packit |
67cb25 |
gsl_histogram2d *hh = gsl_histogram2d_calloc (M1, N1);
|
|
Packit |
67cb25 |
int status = 0;
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
gsl_histogram2d_fread (f, hh);
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
for (i = 0; i <= M1; i++)
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
if (h->xrange[i] != hh->xrange[i])
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
printf ("xrange[%d] : %g orig vs %g\n",
|
|
Packit |
67cb25 |
(int) i, h->xrange[i], hh->xrange[i]);
|
|
Packit |
67cb25 |
status = 1;
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
for (j = 0; j <= N1; j++)
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
if (h->yrange[j] != hh->yrange[j])
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
printf ("yrange[%d] : %g orig vs %g\n",
|
|
Packit |
67cb25 |
(int) j, h->yrange[j], hh->yrange[j]);
|
|
Packit |
67cb25 |
status = 1;
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
for (i = 0; i < M1 * N1; i++)
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
if (h->bin[i] != hh->bin[i])
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
printf ("bin[%d] : %g orig vs %g\n",
|
|
Packit |
67cb25 |
(int) i, h->bin[i], hh->bin[i]);
|
|
Packit |
67cb25 |
status = 1;
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
gsl_test (status, "gsl_histogram2d_fwrite and fread");
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
gsl_histogram2d_free (hh);
|
|
Packit |
67cb25 |
fclose (f);
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
gsl_histogram2d_free (h);
|
|
Packit |
67cb25 |
gsl_histogram2d_free (h1);
|
|
Packit |
67cb25 |
gsl_histogram2d_free (g);
|
|
Packit |
67cb25 |
gsl_histogram2d_free (hr);
|
|
Packit |
67cb25 |
}
|