solstice-solver

Solver library of the solstice app
git clone git://git.meso-star.com/solstice-solver.git
Log | Files | Refs | README | LICENSE

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:
Msrc/ssol_sun.c | 5++++-
Msrc/test_ssol_sun.c | 4++++
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);