commit fa08e16b7ce1d4446ea12eea47ed194cd0adc16e
parent 63b61bf51eed806db87f577c535c44e1e9f1c78d
Author: Vincent Forest <vincent.forest@meso-star.com>
Date: Wed, 22 Feb 2017 11:52:51 +0100
Test the ssol_scene_for_each_instance function
Diffstat:
2 files changed, 47 insertions(+), 2 deletions(-)
diff --git a/src/test_ssol_instance.c b/src/test_ssol_instance.c
@@ -134,7 +134,6 @@ main(int argc, char** argv)
CHECK(eq_eps(val[1], val2[1], 1.e-6), 1);
CHECK(eq_eps(val[2], val2[2], 1.e-6), 1);
}
-
CHECK(ssol_instance_get_shaded_shape(instance1, 0, &sshape), RES_OK);
FOR_EACH(i, 0, count) {
float valf[3];
@@ -145,7 +144,6 @@ main(int argc, char** argv)
CHECK((float)val[1], valf[1]);
CHECK((float)val[2], valf[2]);
}
-
#undef GET_ATTR
diff --git a/src/test_ssol_scene.c b/src/test_ssol_scene.c
@@ -16,6 +16,32 @@
#include "ssol.h"
#include "test_ssol_utils.h"
+struct scene_ctx {
+ struct ssol_instance* instance;
+ struct ssol_instance* instance2;
+ int instance_found;
+ int instance2_found;
+};
+
+static res_T
+instance_func(struct ssol_instance* inst, void* context)
+{
+ struct scene_ctx* ctx = context;
+ NCHECK(inst, NULL);
+ if(!ctx) return RES_BAD_ARG;
+
+ if(inst == ctx->instance) {
+ CHECK(ctx->instance_found, 0);
+ ctx->instance_found = 1;
+ } else if(inst == ctx->instance2) {
+ CHECK(ctx->instance2_found, 0);
+ ctx->instance2_found = 1;
+ } else {
+ CHECK(0, 1); /* Unreachable code */
+ }
+ return RES_OK;
+}
+
static void
get_wlen(const size_t i, double* wlen, double* data, void* ctx)
{
@@ -36,6 +62,7 @@ main(int argc, char** argv)
struct ssol_material* material;
struct ssol_object* object;
struct ssol_instance* instance;
+ struct ssol_instance* instance2;
struct ssol_sun* sun;
struct ssol_sun* sun2;
struct ssol_scene* scene;
@@ -43,6 +70,7 @@ main(int argc, char** argv)
struct ssol_spectrum* spectrum;
struct ssol_atmosphere* atm;
struct ssol_atmosphere* atm2;
+ struct scene_ctx ctx;
double transform[12];
(void) argc, (void) argv;
@@ -57,6 +85,7 @@ main(int argc, char** argv)
CHECK(ssol_object_create(dev, &object), RES_OK);
CHECK(ssol_object_add_shaded_shape(object, shape, material, material), RES_OK);
CHECK(ssol_object_instantiate(object, &instance), RES_OK);
+ CHECK(ssol_object_instantiate(object, &instance2), RES_OK);
CHECK(ssol_instance_set_transform(instance, transform), RES_OK);
CHECK(ssol_sun_create_directional(dev, &sun), RES_OK);
CHECK(ssol_sun_create_directional(dev, &sun2), RES_OK);
@@ -77,11 +106,28 @@ main(int argc, char** argv)
CHECK(ssol_scene_attach_instance(scene, NULL), RES_BAD_ARG);
CHECK(ssol_scene_attach_instance(scene, instance), RES_OK);
CHECK(ssol_scene_attach_instance(scene, instance), RES_OK);
+ CHECK(ssol_scene_attach_instance(scene, instance2), RES_OK);
+
+ ctx.instance = instance;
+ ctx.instance2 = instance2;
+ ctx.instance_found = 0;
+ ctx.instance2_found = 0;
+ CHECK(ssol_scene_for_each_instance(NULL, NULL, NULL), RES_BAD_ARG);
+ CHECK(ssol_scene_for_each_instance(scene, NULL, NULL), RES_BAD_ARG);
+ CHECK(ssol_scene_for_each_instance(NULL, instance_func, NULL), RES_BAD_ARG);
+ CHECK(ssol_scene_for_each_instance(scene, instance_func, NULL), RES_BAD_ARG);
+ CHECK(ssol_scene_for_each_instance(NULL, NULL, &ctx), RES_BAD_ARG);
+ CHECK(ssol_scene_for_each_instance(scene, NULL, &ctx), RES_BAD_ARG);
+ CHECK(ssol_scene_for_each_instance(NULL, instance_func, &ctx), RES_BAD_ARG);
+ CHECK(ssol_scene_for_each_instance(scene, instance_func, &ctx), RES_OK);
+ CHECK(ctx.instance_found, 1);
+ CHECK(ctx.instance2_found, 1);
CHECK(ssol_scene_detach_instance(NULL, instance), RES_BAD_ARG);
CHECK(ssol_scene_detach_instance(scene, NULL), RES_BAD_ARG);
CHECK(ssol_scene_detach_instance(scene, instance), RES_OK);
CHECK(ssol_scene_detach_instance(scene, instance), RES_BAD_ARG);
+ CHECK(ssol_scene_detach_instance(scene, instance2), RES_OK);
CHECK(ssol_scene_attach_instance(scene, instance), RES_OK);
CHECK(ssol_scene_attach_instance(scene2, instance), RES_OK);
@@ -148,6 +194,7 @@ main(int argc, char** argv)
CHECK(ssol_scene_ref_put(scene2), RES_OK);
CHECK(ssol_instance_ref_put(instance), RES_OK);
+ CHECK(ssol_instance_ref_put(instance2), RES_OK);
CHECK(ssol_object_ref_put(object), RES_OK);
CHECK(ssol_shape_ref_put(shape), RES_OK);
CHECK(ssol_sun_ref_put(sun), RES_OK);