rnsf

Define and load a phase function data format
git clone git://git.meso-star.fr/rnsf.git
Log | Files | Refs | README | LICENSE

commit bebc45e8175e3498c840d877b57abdb2f3d6b9e6
parent 09d151c4f0ad685300f406442f1873685f187ce4
Author: Vincent Forest <vincent.forest@meso-star.com>
Date:   Wed, 22 Jun 2022 11:57:52 +0200

Test the function rnsf_fetch_phase_fn

Diffstat:
Msrc/test_rnsf_bands.c | 75+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Msrc/test_rnsf_wlens.c | 73+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 148 insertions(+), 0 deletions(-)

diff --git a/src/test_rnsf_bands.c b/src/test_rnsf_bands.c @@ -77,6 +77,13 @@ test_load2(struct rnsf* rnsf) const struct rnsf_phase_fn* phase = NULL; CHK(fp = tmpfile()); + fprintf(fp, "bands 0\n"); + rewind(fp); + CHK(rnsf_load_stream(rnsf, fp, NULL) == RES_OK); + CHK(rnsf_get_phase_fn_count(rnsf) == 0); + CHK(fclose(fp) == 0); + + CHK(fp = tmpfile()); fprintf(fp, "bands 5\n"); fprintf(fp, "100 200 hg -0.3\n"); fprintf(fp, "200 300 hg 0.4\n"); @@ -142,6 +149,73 @@ test_load2(struct rnsf* rnsf) } static void +test_fetch(struct rnsf* rnsf) +{ + FILE* fp = NULL; + size_t iphase_fn = 0; + + CHK(fp = tmpfile()); + fprintf(fp, "bands 0\n"); + rewind(fp); + CHK(rnsf_load_stream(rnsf, fp, NULL) == RES_OK); + CHK(fclose(fp) == 0); + + CHK(rnsf_fetch_phase_fn(NULL, 400, 0.5, &iphase_fn) == RES_BAD_ARG); + CHK(rnsf_fetch_phase_fn(rnsf, -1, 0.5, &iphase_fn) == RES_BAD_ARG); + CHK(rnsf_fetch_phase_fn(rnsf, 400, -0.1, &iphase_fn) == RES_BAD_ARG); + CHK(rnsf_fetch_phase_fn(rnsf, 400, 1, &iphase_fn) == RES_BAD_ARG); + CHK(rnsf_fetch_phase_fn(rnsf, 400, 0.5, NULL) == RES_BAD_ARG); + CHK(rnsf_fetch_phase_fn(rnsf, 400, 0.5, &iphase_fn) == RES_OK); + CHK(iphase_fn >= rnsf_get_phase_fn_count(rnsf)); + + CHK(fp = tmpfile()); + fprintf(fp, "bands 2\n"); + fprintf(fp, "200 300 hg 0.0\n"); + fprintf(fp, "300 400 hg 0.1\n"); + rewind(fp); + CHK(rnsf_load_stream(rnsf, fp, NULL) == RES_OK); + CHK(fclose(fp) == 0); + + CHK(rnsf_fetch_phase_fn(rnsf, 100, 0, &iphase_fn) == RES_OK); + CHK(iphase_fn == 0); + CHK(rnsf_fetch_phase_fn(rnsf, 450, 0, &iphase_fn) == RES_OK); + CHK(iphase_fn == 1); + CHK(rnsf_fetch_phase_fn(rnsf, 300, 0, &iphase_fn) == RES_OK); + CHK(iphase_fn == 0); + CHK(rnsf_fetch_phase_fn(rnsf, 300.1, 0, &iphase_fn) == RES_OK); + CHK(iphase_fn == 1); + + CHK(fp = tmpfile()); + fprintf(fp, "bands 4\n"); + fprintf(fp, "100 150 hg 0\n"); + fprintf(fp, "200 200 hg 1\n"); + fprintf(fp, "300 400 hg -1\n"); + fprintf(fp, "400 401 discrete 4\n"); + fprintf(fp, " 0 1\n"); + fprintf(fp, " 0.5 1\n"); + fprintf(fp, " 1.57 1\n"); + fprintf(fp, " PI 1\n"); + rewind(fp); + CHK(rnsf_load_stream(rnsf, fp, NULL) == RES_OK); + CHK(fclose(fp) == 0); + + CHK(rnsf_fetch_phase_fn(rnsf, 160, 0, &iphase_fn) == RES_OK); + CHK(iphase_fn == 0); + CHK(rnsf_fetch_phase_fn(rnsf, 160, 0.5, &iphase_fn) == RES_OK); + CHK(iphase_fn == 0); + CHK(rnsf_fetch_phase_fn(rnsf, 160, 0.8, &iphase_fn) == RES_OK); + CHK(iphase_fn == 1); + CHK(rnsf_fetch_phase_fn(rnsf, 200, 0, &iphase_fn) == RES_OK); + CHK(iphase_fn == 1); + CHK(rnsf_fetch_phase_fn(rnsf, 250, 0.49, &iphase_fn) == RES_OK); + CHK(iphase_fn == 1); + CHK(rnsf_fetch_phase_fn(rnsf, 250, 0.5, &iphase_fn) == RES_OK); + CHK(iphase_fn == 2); + CHK(rnsf_fetch_phase_fn(rnsf, 400.1, 0, &iphase_fn) == RES_OK); + CHK(iphase_fn == 3); +} + +static void test_load_fail(struct rnsf* rnsf) { FILE* fp = NULL; @@ -315,6 +389,7 @@ main(int argc, char** argv) test_load1(rnsf); test_load2(rnsf); + test_fetch(rnsf); test_load_fail(rnsf); CHK(rnsf_ref_put(rnsf) == RES_OK); diff --git a/src/test_rnsf_wlens.c b/src/test_rnsf_wlens.c @@ -37,6 +37,13 @@ test_load(struct rnsf* rnsf) FILE* fp = NULL; CHK(fp = tmpfile()); + fprintf(fp, "wavelengths 0\n"); + rewind(fp); + CHK(rnsf_load_stream(rnsf, fp, NULL) == RES_OK); + CHK(rnsf_get_phase_fn_count(rnsf) == 0); + CHK(fclose(fp) == 0); + + CHK(fp = tmpfile()); fprintf(fp, "# Comment\n"); fprintf(fp, "wavelengths 1\n"); fprintf(fp, "\n"); @@ -185,6 +192,71 @@ test_load(struct rnsf* rnsf) } static void +test_fetch(struct rnsf* rnsf) +{ + FILE* fp = NULL; + size_t iphase_fn = 0; + + CHK(fp = tmpfile()); + fprintf(fp, "wavelengths 0\n"); + rewind(fp); + CHK(rnsf_load_stream(rnsf, fp, NULL) == RES_OK); + CHK(fclose(fp) == 0); + CHK(rnsf_fetch_phase_fn(rnsf, 400, 0.5, &iphase_fn) == RES_OK); + CHK(iphase_fn >= rnsf_get_phase_fn_count(rnsf)); + + CHK(fp = tmpfile()); + fprintf(fp, "wavelengths 2\n"); + fprintf(fp, "200 hg 0\n"); + fprintf(fp, "300 hg 0\n"); + rewind(fp); + CHK(rnsf_load_stream(rnsf, fp, NULL) == RES_OK); + CHK(fclose(fp) == 0); + + CHK(rnsf_fetch_phase_fn(rnsf, 299, 0, &iphase_fn) == RES_OK); + CHK(iphase_fn == 0); + CHK(rnsf_fetch_phase_fn(rnsf, 301, 0, &iphase_fn) == RES_OK); + CHK(iphase_fn == 1); + CHK(rnsf_fetch_phase_fn(rnsf, 200, 0, &iphase_fn) == RES_OK); + CHK(iphase_fn == 0); + CHK(rnsf_fetch_phase_fn(rnsf, 300, 0, &iphase_fn) == RES_OK); + CHK(iphase_fn == 1); + CHK(rnsf_fetch_phase_fn(rnsf, 280, 0, &iphase_fn) == RES_OK); + CHK(iphase_fn == 0); + CHK(rnsf_fetch_phase_fn(rnsf, 280, 0.19, &iphase_fn) == RES_OK); + CHK(iphase_fn == 0); + CHK(rnsf_fetch_phase_fn(rnsf, 280, 0.20, &iphase_fn) == RES_OK); + CHK(iphase_fn == 1); + + CHK(fp = tmpfile()); + fprintf(fp, "wavelengths 4\n"); + fprintf(fp, "100 hg 0\n"); + fprintf(fp, "200 hg 1\n"); + fprintf(fp, "300 hg -1\n"); + fprintf(fp, "400 discrete 4\n"); + fprintf(fp, " 0 1\n"); + fprintf(fp, " 0.5 1\n"); + fprintf(fp, " 1.57 1\n"); + fprintf(fp, " PI 1\n"); + rewind(fp); + CHK(rnsf_load_stream(rnsf, fp, NULL) == RES_OK); + CHK(fclose(fp) == 0); + + CHK(rnsf_fetch_phase_fn(rnsf, 50, 0, &iphase_fn) == RES_OK); + CHK(iphase_fn == 0); + CHK(rnsf_fetch_phase_fn(rnsf, 120, 0.8, &iphase_fn) == RES_OK); + CHK(iphase_fn == 1); + CHK(rnsf_fetch_phase_fn(rnsf, 270, 0.29, &iphase_fn) == RES_OK); + CHK(iphase_fn == 1); + CHK(rnsf_fetch_phase_fn(rnsf, 270, 0.3, &iphase_fn) == RES_OK); + CHK(iphase_fn == 2); + CHK(rnsf_fetch_phase_fn(rnsf, 350, 0.5, &iphase_fn) == RES_OK); + CHK(iphase_fn == 3); + CHK(rnsf_fetch_phase_fn(rnsf, 450, 0, &iphase_fn) == RES_OK); + CHK(iphase_fn == 3); +} + +static void test_load_failure(struct rnsf* rnsf) { FILE* fp = NULL; @@ -253,6 +325,7 @@ main(int argc, char** argv) CHK(rnsf_get_phase_fn_count(rnsf) == 0); test_load(rnsf); + test_fetch(rnsf); test_load_failure(rnsf); CHK(rnsf_ref_put(rnsf) == RES_OK);