aboutsummaryrefslogtreecommitdiff
path: root/src/GeneralizedPolynomial-Uniform/test_molecule_posn.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/GeneralizedPolynomial-Uniform/test_molecule_posn.c')
-rw-r--r--src/GeneralizedPolynomial-Uniform/test_molecule_posn.c368
1 files changed, 0 insertions, 368 deletions
diff --git a/src/GeneralizedPolynomial-Uniform/test_molecule_posn.c b/src/GeneralizedPolynomial-Uniform/test_molecule_posn.c
deleted file mode 100644
index 4f6a5f5..0000000
--- a/src/GeneralizedPolynomial-Uniform/test_molecule_posn.c
+++ /dev/null
@@ -1,368 +0,0 @@
-/* test_molecule_posn -- test driver for LocalInterp_molecule_posn() */
-/* $Header$ */
-
-/*
- * This program is a test driver for LocalInterp_molecule_posn() .
- *
- * Usage:
- * test_molecule_posn # run a preset set of tests
- * test_molecule_posn molecule_size \
- * boundary_off_centering_tolerance_min \
- * boundary_off_centering_tolerance_max \
- * boundary_extrapolation_tolerance_min \
- * boundary_extrapolation_tolerance_max \
- * boundary_off_centering_tolerance_max \
- * x # do a single test as specified
- */
-
-const char* help_msg =
-"usage:\n"
-"# run a preset series of tests:\n"
-" test_molecule_posn\n"
-"# run a single test as specified:\n"
-" test_molecule_posn molecule_size \\\n"
-" boundary_off_centering_tolerance_min \\\n"
-" boundary_off_centering_tolerance_max \\\n"
-" boundary_extrapolation_tolerance_min \\\n"
-" boundary_extrapolation_tolerance_max \\\n"
-" x\n"
-;
-
-#include <math.h>
-#include <string.h>
-#include <limits.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-#ifndef LOCALINTERP_STANDALONE_BUILD
- #include "cctk.h"
-#endif
-
-#include "InterpLocalUniform.h"
-
-#define fuzzy_EQ(x,y) (fabs(x-y) <= 1.0e-10)
-
-/* hard-wired arguments for LocalInterp_molecule_posn() */
-const fp grid_x0 = 3.1;
-const fp grid_dx = 0.1;
-const int grid_i_min = 42; /* x_min = 7.3 */
-const int grid_i_max = 105; /* x_max = 13.6 */
-
-/******************************************************************************/
-
-/*
- * prototypes for functions local to this file
-*/
-static
- void run_interactive_test(int molecule_size,
- fp boundary_off_centering_tolerance_min,
- fp boundary_off_centering_tolerance_max,
- fp boundary_extrapolation_tolerance_min,
- fp boundary_extrapolation_tolerance_max,
- fp x);
-static
- int run_batch_tests(void);
-
-/******************************************************************************/
-
-/*
- * test data for batch tests
- */
-
-/* arguments/results structure for LocalInterp_molecule_posn() calls */
-struct args_results
- {
- /* args */
- int molecule_size;
- fp boundary_off_centering_tolerance_min;
- fp boundary_off_centering_tolerance_max;
- fp boundary_extrapolation_tolerance_min;
- fp boundary_extrapolation_tolerance_max;
- fp x;
- /* results */
- int status;
- int i_center;
- fp x_rel;
- };
-
-/* test data */
-#define OK 0
-#define X_LT_MIN MOLECULE_POSN_ERROR_X_LT_MIN
-#define X_GT_MAX MOLECULE_POSN_ERROR_X_GT_MAX
-static const struct args_results test_data[] =
- {
- /*** molecule size 2 ***/
- /* status */
- /* off_centering extrapolation i_center */
- /* min max min max x x_rel */
- { 2, 999.0, 999.0, 1.0, 999.0, 7.19, X_LT_MIN, 0, 0.0 },
- { 2, 999.0, 999.0, 1.0, 999.0, 7.21, OK, 42, -0.9 },
- { 2, 999.0, 999.0, 1.0, 999.0, 7.24, OK, 42, -0.6 },
- { 2, 999.0, 999.0, 1.0, 999.0, 7.26, OK, 42, -0.4 },
- { 2, 0.0, 0.0, 1.0, 999.0, 7.26, X_LT_MIN, 0, 0.0 },
- { 2, 1.0e-6, 999.0, 0.2, 999.0, 7.29, X_LT_MIN, 0, 0.0 },
- { 2, 0.2, 999.0, 1.0e-6, 999.0, 7.29, X_LT_MIN, 0, 0.0 },
- { 2, 0.2, 999.0, 0.2, 999.0, 7.29, OK, 42, -0.1 },
- { 2, 0.0, 0.0, 1.0e-6, 999.0, 7.31, OK, 42, +0.1 },
- { 2, 0.0, 0.0, 1.0e-6, 999.0, 7.34, OK, 42, +0.4 },
- { 2, 0.0, 0.0, 1.0e-6, 999.0, 7.36, OK, 42, +0.6 },
- { 2, 0.0, 0.0, 1.0e-6, 999.0, 7.39, OK, 42, +0.9 },
- { 2, 0.0, 0.0, 1.0e-6, 999.0, 7.41, OK, 43, +0.1 },
- { 2, 0.0, 0.0, 1.0e-6, 1.0e-6, 9.81, OK, 67, +0.1 },
- { 2, 0.0, 0.0, 1.0e-6, 1.0e-6, 9.84, OK, 67, +0.4 },
- { 2, 0.0, 0.0, 1.0e-6, 1.0e-6, 9.85, OK, 67, +0.5 },
- { 2, 0.0, 0.0, 1.0e-6, 1.0e-6, 9.86, OK, 67, +0.6 },
- { 2, 0.0, 0.0, 1.0e-6, 1.0e-6, 9.89, OK, 67, +0.9 },
- { 2, 0.0, 0.0, 1.0e-6, 1.0e-6, 13.45, OK, 103, +0.5 },
- { 2, 0.0, 0.0, 1.0e-6, 1.0e-6, 13.51, OK, 104, +0.1 },
- { 2, 0.0, 0.0, 1.0e-6, 1.0e-6, 13.59, OK, 104, +0.9 },
- { 2, 0.0, 0.2, 1.0e-6, 1.0e-6, 13.61, X_GT_MAX, 0, 0.0 },
- { 2, 0.0, 1.0e-6, 1.0e-6, 1.0e-6, 13.61, X_GT_MAX, 0, 0.0 },
- { 2, 0.0, 0.2, 0.0, 0.2, 13.61, OK, 104, +1.1 },
-
- /*** molecule size 3 ***/
- /* status */
- /* off_centering extrapolation i_center */
- /* min max min max x x_rel */
- { 3, 0.5, 999.0, 999.0, 999.0, 7.29, X_LT_MIN, 0, 0.0 },
- { 3, 999.0, 999.0, 0.0, 999.0, 7.29, X_LT_MIN, 0, 0.0 },
- { 3, 0.7, 999.0, 0.2, 999.0, 7.29, OK, 43, -1.1 },
- { 3, 0.3, 999.0, 0.0, 999.0, 7.31, X_LT_MIN, 0, 0.0 },
- { 3, 0.5, 999.0, 0.0, 999.0, 7.31, OK, 43, -0.9 },
- { 3, 0.0, 0.0, 0.0, 0.0, 7.36, OK, 43, -0.4 },
- { 3, 0.0, 0.0, 0.0, 0.0, 7.44, OK, 43, +0.4 },
- { 3, 0.0, 0.0, 0.0, 0.0, 7.46, OK, 44, -0.4 },
- { 3, 0.0, 0.0, 0.0, 0.0, 9.81, OK, 67, +0.1 },
- { 3, 0.0, 0.0, 0.0, 0.0, 9.84, OK, 67, +0.4 },
- { 3, 0.0, 0.0, 0.0, 0.0, 9.86, OK, 68, -0.4 },
- { 3, 0.0, 0.0, 0.0, 0.0, 9.89, OK, 68, -0.1 },
- { 3, 0.0, 0.0, 0.0, 0.0, 13.44, OK, 103, +0.4 },
- { 3, 0.0, 0.0, 0.0, 0.0, 13.46, OK, 104, -0.4 },
- { 3, 0.0, 0.0, 0.0, 0.0, 13.54, OK, 104, +0.4 },
- { 3, 0.0, 0.2, 0.0, 0.0, 13.56, OK, 104, +0.6 },
- { 3, 999.0, 0.0, 999.0, 999.0, 13.56, X_GT_MAX, 0, 0.0 },
- { 3, 0.0, 0.5, 0.0, 0.0, 13.59, OK, 104, +0.9 },
- { 3, 999.0, 0.3, 999.0, 999.0, 13.59, X_GT_MAX, 0, 0.0 },
- { 3, 999.0, 0.5, 999.0, 999.0, 13.61, X_GT_MAX, 0, 0.0 },
- { 3, 999.0, 999.0, 999.0, 0.0, 13.61, X_GT_MAX, 0, 0.0 },
- { 3, 999.0, 0.7, 999.0, 0.2, 13.61, OK, 104, +1.1 },
- { 3, 999.0, 999.0, 999.0, 0.2, 13.63, X_GT_MAX, 0, 0.0 },
- { 3, 999.0, 0.7, 999.0, 999.0, 13.63, X_GT_MAX, 0, 0.0 },
- { 3, 999.0, 0.9, 999.0, 0.4, 13.63, OK, 104, +1.3 },
-
- /*** molecule size 4 ***/
- /* status */
- /* off_centering extrapolation i_center */
- /* min max min max x x_rel */
- { 4, 1.0, 999.0, 999.0, 999.0, 7.29, X_LT_MIN, 0, 0.0 },
- { 4, 999.0, 999.0, 0.0, 999.0, 7.29, X_LT_MIN, 0, 0.0 },
- { 4, 1.2, 999.0, 0.2, 999.0, 7.29, OK, 43, -1.1 },
- { 4, 0.5, 999.0, 0.0, 999.0, 7.31, X_LT_MIN, 0, 0.0 },
- { 4, 1.0, 999.0, 0.0, 999.0, 7.31, OK, 43, -0.9 },
- { 4, 0.0, 999.0, 0.0, 999.0, 7.39, X_LT_MIN, 0, 0.0 },
- { 4, 0.2, 999.0, 0.0, 999.0, 7.39, OK, 43, -0.1 },
- { 4, 0.0, 0.0, 0.0, 999.0, 7.41, OK, 43, +0.1 },
- { 4, 0.0, 0.0, 0.0, 999.0, 7.49, OK, 43, +0.9 },
- { 4, 0.0, 0.0, 0.0, 999.0, 7.51, OK, 44, +0.1 },
- { 4, 0.0, 0.0, 0.0, 0.0, 9.81, OK, 67, +0.1 },
- { 4, 0.0, 0.0, 0.0, 0.0, 9.84, OK, 67, +0.4 },
- { 4, 0.0, 0.0, 0.0, 0.0, 9.85, OK, 67, +0.5 },
- { 4, 0.0, 0.0, 0.0, 0.0, 9.86, OK, 67, +0.6 },
- { 4, 0.0, 0.0, 0.0, 0.0, 9.89, OK, 67, +0.9 },
- { 4, 0.0, 0.0, 0.0, 0.0, 13.44, OK, 103, +0.4 },
- { 4, 0.0, 0.0, 0.0, 0.0, 13.49, OK, 103, +0.9 },
- { 4, 0.0, 0.2, 0.0, 0.0, 13.51, OK, 103, +1.1 },
- { 4, 999.0, 0.0, 999.0, 999.0, 13.51, X_GT_MAX, 0, 0.0 },
- { 4, 999.0, 0.8, 999.0, 0.0, 13.59, X_GT_MAX, 0, 0.0 },
- { 4, 0.0, 1.0, 0.0, 0.0, 13.59, OK, 103, +1.9 },
- { 4, 999.0, 999.0, 999.0, 0.0, 13.61, X_GT_MAX, 0, 0.0 },
- { 4, 0.0, 1.0, 999.0, 999.0, 13.61, X_GT_MAX, 0, 0.0 },
- { 4, 0.0, 1.2, 0.0, 0.2, 13.61, OK, 103, +2.1 },
-
- /*** molecule size 5 ***/
- /* status */
- /* off_centering extrapolation i_center */
- /* min max min max x x_rel */
- { 5, 1.5, 999.0, 999.0, 999.0, 7.29, X_LT_MIN, 0, 0.0 },
- { 5, 999.0, 999.0, 0.0, 999.0, 7.29, X_LT_MIN, 0, 0.0 },
- { 5, 1.7, 999.0, 0.2, 999.0, 7.29, OK, 44, -2.1 },
- { 5, 0.9, 999.0, 0.0, 999.0, 7.35, X_LT_MIN, 0, 0.0 },
- { 5, 1.1, 999.0, 0.0, 999.0, 7.35, OK, 44, -1.5 },
- { 5, 0.0, 999.0, 999.0, 999.0, 7.44, X_LT_MIN, 0, 0.0 },
- { 5, 0.2, 999.0, 0.0, 999.0, 7.44, OK, 44, -0.6 },
- { 5, 0.0, 0.0, 0.0, 0.0, 7.46, OK, 44, -0.4 },
- { 5, 0.0, 0.0, 0.0, 0.0, 9.81, OK, 67, +0.1 },
- { 5, 0.0, 0.0, 0.0, 0.0, 9.84, OK, 67, +0.4 },
- { 5, 0.0, 0.0, 0.0, 0.0, 9.86, OK, 68, -0.4 },
- { 5, 0.0, 0.0, 0.0, 0.0, 9.89, OK, 68, -0.1 },
- { 5, 0.0, 0.0, 0.0, 0.0, 13.44, OK, 103, +0.4 },
- { 5, 999.0, 0.0, 999.0, 999.0, 13.46, X_GT_MAX, 0, 0.0 },
- { 5, 0.0, 0.2, 0.0, 0.0, 13.46, OK, 103, +0.6 },
- { 5, 0.0, 1.1, 0.0, 0.0, 13.55, OK, 103, +1.5 },
- { 5, 999.0, 0.9, 999.0, 999.0, 13.55, X_GT_MAX, 0, 0.0 },
- { 5, 999.0, 999.0, 999.0, 0.0, 13.61, X_GT_MAX, 0, 0.0 },
- { 5, 999.0, 1.5, 999.0, 999.0, 13.61, X_GT_MAX, 0, 0.0 },
- { 5, 999.0, 1.7, 999.0, 0.2, 13.61, OK, 103, +2.1 },
- };
-#define N_TESTS ((int) (sizeof(test_data)/sizeof(test_data[0])))
-
-
-/******************************************************************************/
-
-int main(int argc, const char *const argv[])
-{
-bool N_fail;
-int molecule_size;
-fp boundary_off_centering_tolerance_min;
-fp boundary_off_centering_tolerance_max;
-fp boundary_extrapolation_tolerance_min;
-fp boundary_extrapolation_tolerance_max;
-double x;
-
-switch (argc)
- {
-case 1:
- /* run batch tests */
- N_fail = run_batch_tests();
- if (N_fail == 0)
- then {
- printf("*** all %d tests successful ***\n", N_TESTS);
- return 0;
- }
- else {
- printf("*** %d/%d test(s) failed ***\n", N_fail, N_TESTS);
- return 1;
- }
-
-case 7:
- if ( (sscanf(argv[1], "%d", &molecule_size) == 1)
- && (sscanf(argv[2], "%lf", &boundary_off_centering_tolerance_min) == 1)
- && (sscanf(argv[3], "%lf", &boundary_off_centering_tolerance_max) == 1)
- && (sscanf(argv[4], "%lf", &boundary_extrapolation_tolerance_min) == 1)
- && (sscanf(argv[5], "%lf", &boundary_extrapolation_tolerance_max) == 1)
- && (sscanf(argv[6], "%lf", &x) == 1) )
- then {
- run_interactive_test(molecule_size,
- boundary_off_centering_tolerance_min,
- boundary_off_centering_tolerance_max,
- boundary_extrapolation_tolerance_min,
- boundary_extrapolation_tolerance_max,
- x);
- return 0; /*** NORMAL EXIT ***/
- }
- /* error ==> fall through */
-
-default:
- fprintf(stderr, help_msg);
- return 1;
- }
-}
-
-/******************************************************************************/
-
-/*
- * This function runs a single test as specified.
- */
-static
- void run_interactive_test(int molecule_size,
- fp boundary_off_centering_tolerance_min,
- fp boundary_off_centering_tolerance_max,
- fp boundary_extrapolation_tolerance_min,
- fp boundary_extrapolation_tolerance_max,
- fp x)
-{
-int i_center;
-fp x_rel;
-
-printf("testing with molecule_size=%d\n", molecule_size);
-printf(" boundary_off_centering_tolerance_[min,max]=[%g,%g]\n",
- (double) boundary_off_centering_tolerance_min,
- (double) boundary_off_centering_tolerance_max);
-printf(" boundary_extrapolation_tolerance_[min,max]=[%g,%g]\n",
- (double) boundary_extrapolation_tolerance_min,
- (double) boundary_extrapolation_tolerance_max);
-printf(" x=%g\n", (double) x);
-
- {
-const int status
- = LocalInterp_molecule_posn(grid_x0, grid_dx,
- grid_i_min, grid_i_max,
- molecule_size,
- boundary_off_centering_tolerance_min,
- boundary_off_centering_tolerance_max,
- boundary_extrapolation_tolerance_min,
- boundary_extrapolation_tolerance_max,
- x,
- &i_center, &x_rel);
-
-if (status < 0)
- then printf("status=%d\n", status);
- else printf("i_center=%d x_rel=%g\n", i_center, x_rel);
- }
-}
-
-/******************************************************************************/
-
-/*
- * This function run the preset set of tests specified by the
- * test_data array
- *
- * Results:
- * This function returns the number of test failures.
- */
-static
- int run_batch_tests(void)
-{
-int i;
-int failure_count = 0;
-
- for (i = 0 ; i < N_TESTS ; ++i)
- {
- const struct args_results *p = & test_data[i];
- int i_center = 999;
- fp x_rel = 999.999;
- const int status = LocalInterp_molecule_posn
- (grid_x0, grid_dx,
- grid_i_min, grid_i_max,
- p->molecule_size,
- p->boundary_off_centering_tolerance_min,
- p->boundary_off_centering_tolerance_max,
- p->boundary_extrapolation_tolerance_min,
- p->boundary_extrapolation_tolerance_max,
- p->x,
- &i_center, &x_rel);
- bool ok = (status == 0)
- ? ( (status == p->status) && (i_center == p->i_center)
- && fuzzy_EQ(x_rel, p->x_rel) )
- : (status == p->status);
-
- printf("size=%d off_centering_tol=[%g,%g] extrapolation_tol=[%g,%g] x=%g",
- p->molecule_size,
- (double) p->boundary_off_centering_tolerance_min,
- (double) p->boundary_off_centering_tolerance_max,
- (double) p->boundary_extrapolation_tolerance_min,
- (double) p->boundary_extrapolation_tolerance_max,
- (double) p->x);
- printf(": status=%d", status);
- if (status == 0)
- then printf(" i_center=%d x_rel=%g: ",
- i_center, (double) x_rel);
-
- if (ok)
- then printf(": ok\n");
- else {
- ++failure_count;
- printf(": FAIL\n");
- if (p->status == 0)
- then printf("*** expected status=%d i_center=%d x_rel=%g\n",
- p->status, p->i_center, (double) p->x_rel);
- else printf("*** expected status=%d\n", p->status);
- if (status == 0)
- then printf("*** got status=%d i_center=%d x_rel=%g\n",
- status, i_center, (double) x_rel);
- else printf("*** got status=%d\n", status);
- }
- }
-
-return failure_count;
-}