commit 83d90029a9bd49c1938ad5e7c3e64fbb57f928a1
parent 034cc545b66357dfc0c15f0193a2af0ea3fbbc5e
Author: Christophe Coustet <christophe.coustet@meso-star.com>
Date: Wed, 20 Jul 2016 18:46:34 +0200
Bugfix: could define a null direction for sun.
Diffstat:
2 files changed, 8 insertions(+), 1 deletion(-)
diff --git a/src/ssol_sun.c b/src/ssol_sun.c
@@ -21,6 +21,7 @@
#include <rsys/mem_allocator.h>
#include <rsys/ref_count.h>
#include <rsys/math.h>
+#include <rsys/double3.h>
#include <string.h>
@@ -118,7 +119,9 @@ ssol_sun_set_direction(struct ssol_sun* sun, const double direction[3])
{
if (!sun || !direction)
return RES_BAD_ARG;
- memcpy(sun->direction, direction, 3 * sizeof(double));
+ if (0 == d3_normalize(sun->direction, direction))
+ /* zero vector */
+ return RES_BAD_ARG;
return RES_OK;
}
diff --git a/src/test_ssol_sun.c b/src/test_ssol_sun.c
@@ -26,6 +26,7 @@ main(int argc, char** argv)
struct ssol_device* dev;
struct ssol_spectrum* spectrum;
struct ssol_sun* sun;
+ double dir0[3] = { 0, 0, 0 };
double dir[3] = { 1, 0, 0 };
(void) argc, (void) argv;
@@ -56,6 +57,7 @@ main(int argc, char** argv)
CHECK(ssol_sun_set_direction(NULL, dir), RES_BAD_ARG);
CHECK(ssol_sun_set_direction(sun, NULL), RES_BAD_ARG);
+ CHECK(ssol_sun_set_direction(sun, dir0), RES_BAD_ARG);
CHECK(ssol_sun_set_direction(sun, dir), RES_OK);
CHECK(ssol_sun_set_pillbox_aperture(NULL, 0.1), RES_BAD_ARG);
@@ -86,6 +88,7 @@ main(int argc, char** argv)
CHECK(ssol_sun_set_direction(NULL, dir), RES_BAD_ARG);
CHECK(ssol_sun_set_direction(sun, NULL), RES_BAD_ARG);
+ CHECK(ssol_sun_set_direction(sun, dir0), RES_BAD_ARG);
CHECK(ssol_sun_set_direction(sun, dir), RES_OK);
CHECK(ssol_sun_set_pillbox_aperture(NULL, 0.1), RES_BAD_ARG);
@@ -116,6 +119,7 @@ main(int argc, char** argv)
CHECK(ssol_sun_set_direction(NULL, dir), RES_BAD_ARG);
CHECK(ssol_sun_set_direction(sun, NULL), RES_BAD_ARG);
+ CHECK(ssol_sun_set_direction(sun, dir0), RES_BAD_ARG);
CHECK(ssol_sun_set_direction(sun, dir), RES_OK);
CHECK(ssol_sun_set_dni(NULL, 1000), RES_BAD_ARG);