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:
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);