star-aerosol

Describe the radiative properties of aerosols
git clone git://git.meso-star.fr/star-aerosol.git
Log | Files | Refs | README | LICENSE

commit 9078eddf1adb446bfa00b4692b986eb97aed6c87
parent 1eaa75002d3ee4c17cfc54dd07fd9ef1194273b3
Author: Vincent Forest <vincent.forest@meso-star.com>
Date:   Thu, 25 Aug 2022 18:26:52 +0200

Test the sars_find_overlaped_bands function

Diffstat:
Msrc/sars.h | 2+-
Msrc/test_sars_load.c | 80++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-----
2 files changed, 76 insertions(+), 6 deletions(-)

diff --git a/src/sars.h b/src/sars.h @@ -108,7 +108,7 @@ sars_get_band SARS_API res_T sars_find_overlaped_bands (const struct sars* sars, - const double range[2], /* in cm^-1 */ + const double range[2], /* In cm^-1. Limits are inclusive */ size_t ibands[2]); /* Range of overlaped bands. Limits are inclusive */ #endif /* SARS_H */ diff --git a/src/test_sars_load.c b/src/test_sars_load.c @@ -13,9 +13,11 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ -#include "sars.h" +#define _POSIX_C_SOURCE 200112L /* nextarfter */ +#include "sars.h" #include <rsys/mem_allocator.h> +#include <math.h> /******************************************************************************* * Helper functions @@ -42,8 +44,8 @@ check_sars_load CHK(sars_get_band(sars, 0, &band) == RES_OK); FOR_EACH(iband, 0, nbands) { - const double low = (double)iband; - const double upp = (double)(iband+1); + const double low = (double)(iband+1); + const double upp = (double)(iband+2); size_t inode; CHK(sars_get_band(sars, iband, &band) == RES_OK); @@ -76,8 +78,8 @@ write_sars CHK(fwrite(&nnodes, sizeof(nnodes), 1, fp) == 1); FOR_EACH(iband, 0, nbands) { - const double low = (double)iband; - const double upp = (double)(iband+1); + const double low = (double)(iband+1); + const double upp = (double)(iband+2); /* Write band description */ CHK(fwrite(&low, sizeof(low), 1, fp) == 1); @@ -255,6 +257,73 @@ test_load_files(struct sars* sars, int argc, char** argv) } } +static void +test_find(struct sars* sars) +{ + size_t ibands[2]; + double range[2]; + FILE* fp; + + CHK(fp = tmpfile()); + write_sars(fp, 4096, 10, 1); + rewind(fp); + CHK(sars_load_stream(sars, fp, NULL) == RES_OK); + + range[0] = 0; + range[1] = 10; + CHK(sars_find_overlaped_bands(NULL, range, ibands) == RES_BAD_ARG); + CHK(sars_find_overlaped_bands(sars, NULL, ibands) == RES_BAD_ARG); + CHK(sars_find_overlaped_bands(sars, range, NULL) == RES_BAD_ARG); + CHK(sars_find_overlaped_bands(sars, range, ibands) == RES_OK); + CHK(ibands[0] == 0 && ibands[1] == 9); + + range[0] = 10; + range[1] = 0; + CHK(sars_find_overlaped_bands(sars, range, ibands) == RES_BAD_ARG); + + range[0] = 11; + range[1] = 12; + CHK(sars_find_overlaped_bands(sars, range, ibands) == RES_OK); + CHK(ibands[0] > ibands[1]); + + range[0] = 0; + range[1] = nextafter(1, 0); + CHK(sars_find_overlaped_bands(sars, range, ibands) == RES_OK); + CHK(ibands[0] > ibands[1]); + + range[0] = 0; + range[1] = 1; + CHK(sars_find_overlaped_bands(sars, range, ibands) == RES_OK); + CHK(ibands[0] == 0 && ibands[1] == 0); + + range[0] = 1; + range[1] = nextafterf(2, 1); + CHK(sars_find_overlaped_bands(sars, range, ibands) == RES_OK); + CHK(ibands[0] == 0 && ibands[1] == 0); + + range[0] = 2; + range[1] = 20; + CHK(sars_find_overlaped_bands(sars, range, ibands) == RES_OK); + CHK(ibands[0] == 1 && ibands[1] == 9); + + range[0] = 1.5; + range[1] = 2; + CHK(sars_find_overlaped_bands(sars, range, ibands) == RES_OK); + CHK(ibands[0] == 0 && ibands[1] == 1); + + range[0] = 3.1; + range[1] = nextafter(6, 0); + CHK(sars_find_overlaped_bands(sars, range, ibands) == RES_OK); + CHK(ibands[0] == 2 && ibands[1] == 4); + + range[0] = 3.1; + range[1] = 7; + CHK(sars_find_overlaped_bands(sars, range, ibands) == RES_OK); + CHK(ibands[0] == 2 && ibands[1] == 6); + + CHK(fclose(fp) == 0); +} + /******************************************************************************* * Main function ******************************************************************************/ @@ -273,6 +342,7 @@ main(int argc, char** argv) } else { test_load(sars); test_load_fail(sars); + test_find(sars); } CHK(sars_ref_put(sars) == RES_OK);