star-line

Structure for accelerating line importance sampling
git clone git://git.meso-star.fr/star-line.git
Log | Files | Refs | README | LICENSE

commit af80b87f0dffb12f0429229c64f8725f65c0b49e
parent b95348c666e7c6345f2e4c33168f7df4e5abeba8
Author: Vincent Forest <vincent.forest@meso-star.com>
Date:   Mon, 23 May 2022 16:14:57 +0200

Test the mixture [de]serialization

Diffstat:
Msrc/test_sln_mixture.c | 62++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 62 insertions(+), 0 deletions(-)

diff --git a/src/test_sln_mixture.c b/src/test_sln_mixture.c @@ -128,6 +128,67 @@ test_mixture CHK(sln_mixture_create(sln, &mixture_args, &mixture) == RES_BAD_ARG); } +static void +test_mixture_serialization + (struct sln_device* sln, + struct shtr* shtr, + struct shtr_isotope_metadata* metadata, + struct shtr_line_list* line_list) +{ + struct sln_mixture_create_args mixture_args = SLN_MIXTURE_CREATE_ARGS_DEFAULT; + struct sln_mixture_desc desc1 = SLN_MIXTURE_DESC_NULL; + struct sln_mixture_desc desc2 = SLN_MIXTURE_DESC_NULL; + struct sln_mixture* mixture1 = NULL; + struct sln_mixture* mixture2 = NULL; + FILE* fp = NULL; + + mixture_args.metadata = metadata; + mixture_args.lines = line_list; + mixture_args.molecules[0].nisotopes = 0; /* Handle all isotopes */ + mixture_args.molecules[0].concentration = 1.0/3.0; + mixture_args.molecules[0].cutoff = 25; + mixture_args.molecules[0].id = 1; /* H2O */ + mixture_args.molecules[1].nisotopes = 0; /* Handle all isotopes */ + mixture_args.molecules[1].concentration = 1.0/3.0; + mixture_args.molecules[1].cutoff = 50; + mixture_args.molecules[1].id = 2; /* CO2 */ + mixture_args.molecules[2].nisotopes = 0; /* Handle all isotopes */ + mixture_args.molecules[2].concentration = 1.0/3.0; + mixture_args.molecules[2].cutoff = 25; + mixture_args.molecules[2].id = 3; /* O3 */ + mixture_args.nmolecules = 3; + mixture_args.wavenumber_range[0] = 0; + mixture_args.wavenumber_range[1] = INF; + mixture_args.pressure = 1; + mixture_args.temperature = 296; + CHK(sln_mixture_create(sln, &mixture_args, &mixture1) == RES_OK); + + CHK(fp = tmpfile()); + CHK(sln_mixture_write(NULL, fp) == RES_BAD_ARG); + CHK(sln_mixture_write(mixture1, NULL) == RES_BAD_ARG); + CHK(sln_mixture_write(mixture1, fp) == RES_OK); + rewind(fp); + + CHK(sln_mixture_create_from_stream(NULL, shtr, fp, &mixture2) == RES_BAD_ARG); + CHK(sln_mixture_create_from_stream(sln, NULL, fp, &mixture2) == RES_BAD_ARG); + CHK(sln_mixture_create_from_stream(sln, shtr, NULL, &mixture2) == RES_BAD_ARG); + CHK(sln_mixture_create_from_stream(sln, shtr, fp, NULL) == RES_BAD_ARG); + CHK(sln_mixture_create_from_stream(sln, shtr, fp, &mixture2) == RES_OK); + fclose(fp); + + CHK(sln_mixture_get_desc(mixture1, &desc1) == RES_OK); + CHK(sln_mixture_get_desc(mixture2, &desc2) == RES_OK); + + CHK(desc1.wavenumber_range[0] == desc2.wavenumber_range[0]); + CHK(desc1.wavenumber_range[1] == desc2.wavenumber_range[1]); + CHK(desc1.pressure == desc2.pressure); + CHK(desc1.temperature == desc2.temperature); + CHK(desc1.nlines == desc2.nlines); + + CHK(sln_mixture_ref_put(mixture1) == RES_OK); + CHK(sln_mixture_ref_put(mixture2) == RES_OK); +} + /******************************************************************************* * Test function ******************************************************************************/ @@ -173,6 +234,7 @@ main(int argc, char** argv) CHK(sln_device_create(&dev_args, &sln) == RES_OK); test_mixture(sln, metadata, line_list); + test_mixture_serialization(sln, shtr, metadata, line_list); CHK(sln_device_ref_put(sln) == RES_OK); CHK(shtr_ref_put(shtr) == RES_OK);