commit 0ee25b24ca9120dd75b25c6f5bf077f1665e80d6
parent 28aac8885d79f8e00f68896e10d8f3d43b568d01
Author: Vincent Forest <vincent.forest@meso-star.com>
Date: Sat, 1 Oct 2022 13:47:42 +0200
Fix sck_find_band
When the subject range is a single wavelength and that wavelength is
below the first band, the function considers this band as valid whereas
it should be excluded. This commit fixes this issue by notifying that in
this case no band was found.
Diffstat:
2 files changed, 25 insertions(+), 3 deletions(-)
diff --git a/src/sck.c b/src/sck.c
@@ -573,9 +573,16 @@ sck_find_bands
goto exit;
}
- if(range[0] == range[1]) {
- ibands[1] = ibands[0];
- goto exit; /* No more to search */
+ if(range[0] == range[1]) { /* No more to search */
+ if(range[0] < low->low) {
+ /* The wavelength is not included in any band */
+ ibands[0] = SIZE_MAX;
+ ibands[1] = 0;
+ } else {
+ ASSERT(range[0] < low->upp);
+ ibands[1] = ibands[0];
+ }
+ goto exit;
}
upp = search_lower_bound(range+1, bands, nbands, sizeof(*bands), cmp_band);
diff --git a/src/test_sck_load.c b/src/test_sck_load.c
@@ -444,11 +444,26 @@ test_find(struct sck* sck)
CHK(sck_find_bands(sck, range, ibands) == RES_OK);
CHK(ibands[0] > ibands[1]);
+ range[0] = 11;
+ range[1] = 11;
+ CHK(sck_find_bands(sck, range, ibands) == RES_OK);
+ CHK(ibands[0] > ibands[1]);
+
range[0] = 0;
range[1] = nextafter(1, 0);
CHK(sck_find_bands(sck, range, ibands) == RES_OK);
CHK(ibands[0] > ibands[1]);
+ range[0] = 0;
+ range[1] = 0;
+ CHK(sck_find_bands(sck, range, ibands) == RES_OK);
+ CHK(ibands[0] > ibands[1]);
+
+ range[0] = nextafter(1, 0);
+ range[1] = nextafter(1, 0);
+ CHK(sck_find_bands(sck, range, ibands) == RES_OK);
+ CHK(ibands[0] > ibands[1]);
+
range[0] = 2;
range[1] = 2;
CHK(sck_find_bands(sck, range, ibands) == RES_OK);