solstice-solver

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

commit 0e0e19d032035812014aeb9b0e4640eb08a22156
parent f1235b6fa475d3b4e8c92bf116d7793c5f3c66a9
Author: Vincent Forest <vincent.forest@meso-star.com>
Date:   Wed, 13 Dec 2017 11:38:23 +0100

Merge branch 'release_0.7'

Diffstat:
MREADME.md | 6++++++
Mcmake/CMakeLists.txt | 10++++++----
Msrc/ssol.h | 22++++++++++++++++++++--
Msrc/ssol_material.c | 31++++++++++++++++++++++++-------
Msrc/ssol_material_c.h | 1+
Msrc/ssol_ranst_sun_dir.c | 43+++++++++++++++++++++++++++++++++++++++++++
Msrc/ssol_ranst_sun_dir.h | 6++++++
Msrc/ssol_solver.c | 2+-
Msrc/ssol_sun.c | 25++++++++++++++++++++++---
Msrc/ssol_sun_c.h | 6++++++
Msrc/test_ssol_atmosphere.c | 46+++++++++++++++++++++++-----------------------
Msrc/test_ssol_by_receiver_integration.c | 128++++++++++++++++++++++++++++++++++++++++----------------------------------------
Msrc/test_ssol_camera.c | 88++++++++++++++++++++++++++++++++++++++++----------------------------------------
Msrc/test_ssol_data.c | 60++++++++++++++++++++++++++++++------------------------------
Msrc/test_ssol_device.c | 54+++++++++++++++++++++++++++---------------------------
Msrc/test_ssol_draw.c | 256++++++++++++++++++++++++++++++++++++++++----------------------------------------
Msrc/test_ssol_geometries.h | 16++++++++--------
Msrc/test_ssol_image.c | 206++++++++++++++++++++++++++++++++++++++++----------------------------------------
Msrc/test_ssol_instance.c | 226++++++++++++++++++++++++++++++++++++++++----------------------------------------
Msrc/test_ssol_material.c | 259+++++++++++++++++++++++++++++++++++++++++--------------------------------------
Msrc/test_ssol_object.c | 94++++++++++++++++++++++++++++++++++++++++----------------------------------------
Msrc/test_ssol_param_buffer.c | 130++++++++++++++++++++++++++++++++++++++++----------------------------------------
Msrc/test_ssol_scene.c | 292++++++++++++++++++++++++++++++++++++++++----------------------------------------
Msrc/test_ssol_shape.c | 202++++++++++++++++++++++++++++++++++++++++----------------------------------------
Msrc/test_ssol_solver1.c | 621+++++++++++++++++++++++++++++++++++++++----------------------------------------
Msrc/test_ssol_solver10.c | 134++++++++++++++++++++++++++++++++++++++++----------------------------------------
Asrc/test_ssol_solver11.c | 202+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Asrc/test_ssol_solver12.c | 202+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Msrc/test_ssol_solver2.c | 162++++++++++++++++++++++++++++++++++++++++----------------------------------------
Msrc/test_ssol_solver2b.c | 162++++++++++++++++++++++++++++++++++++++++----------------------------------------
Msrc/test_ssol_solver3.c | 128++++++++++++++++++++++++++++++++++++++++----------------------------------------
Msrc/test_ssol_solver4.c | 136++++++++++++++++++++++++++++++++++++++++----------------------------------------
Msrc/test_ssol_solver5.c | 120++++++++++++++++++++++++++++++++++++++++----------------------------------------
Msrc/test_ssol_solver6.c | 156++++++++++++++++++++++++++++++++++++++++----------------------------------------
Msrc/test_ssol_solver7.c | 141+++++++++++++++++++++++++++++++++++++++----------------------------------------
Msrc/test_ssol_solver8.c | 120++++++++++++++++++++++++++++++++++++++++----------------------------------------
Msrc/test_ssol_solver9.c | 124++++++++++++++++++++++++++++++++++++++++----------------------------------------
Msrc/test_ssol_spectrum.c | 58+++++++++++++++++++++++++++++-----------------------------
Msrc/test_ssol_sun.c | 381++++++++++++++++++++++++++++++++++++++++++++++---------------------------------
39 files changed, 2827 insertions(+), 2229 deletions(-)

diff --git a/README.md b/README.md @@ -26,6 +26,12 @@ variable the install directories of its dependencies. ## Release notes +### Version 0.7 + +- Add the Gaussian sun shape. +- Add the microfacet distribution parameter to the mirror material: one can + choose either the Beckmann or the pillbox distribution. + ### Version 0.6.1 - Rename the `ssol_sun_pillbox_set_theta_max` function in diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt @@ -24,11 +24,11 @@ option(NO_TEST "Do not build tests" OFF) # Check dependencies ################################################################################ find_package(RCMake 0.3 REQUIRED) -find_package(RSys 0.5 REQUIRED) +find_package(RSys 0.6 REQUIRED) find_package(Star3D 0.4.1 REQUIRED) find_package(Star3DUT 0.2 REQUIRED) find_package(StarCPR 0.1 REQUIRED) -find_package(StarSF 0.3 REQUIRED) +find_package(StarSF 0.4 REQUIRED) find_package(StarSP 0.4 REQUIRED) find_package(OpenMP 1.2 REQUIRED) @@ -50,8 +50,8 @@ rcmake_append_runtime_dirs(_runtime_dirs RSys Star3D Star3DUT StarCPR StarSF Sta # Configure and define targets ################################################################################ set(VERSION_MAJOR 0) -set(VERSION_MINOR 6) -set(VERSION_PATCH 1) +set(VERSION_MINOR 7) +set(VERSION_PATCH 0) set(VERSION ${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}) set(SSOL_FILES_SRC @@ -182,6 +182,8 @@ if(NOT NO_TEST) new_test(test_ssol_solver8) new_test(test_ssol_solver9) new_test(test_ssol_solver10) + new_test(test_ssol_solver11) + new_test(test_ssol_solver12) new_test(test_ssol_sun) build_test(test_ssol_draw) diff --git a/src/ssol.h b/src/ssol.h @@ -82,6 +82,12 @@ enum ssol_material_type { SSOL_MATERIAL_TYPES_COUNT__ }; +enum ssol_microfacet_distribution { + SSOL_MICROFACET_BECKMANN, + SSOL_MICROFACET_PILLBOX, + SSOL_MICROFACET_DISTRIBUTIONS_COUNT__ +}; + enum ssol_clipping_op { SSOL_AND, SSOL_SUB, @@ -799,7 +805,8 @@ ssol_dielectric_setup SSOL_API res_T ssol_mirror_setup (struct ssol_material* mtl, - const struct ssol_mirror_shader* shader); + const struct ssol_mirror_shader* shader, + const enum ssol_microfacet_distribution distrib); SSOL_API res_T ssol_matte_setup @@ -996,6 +1003,12 @@ ssol_sun_create_pillbox (struct ssol_device* dev, struct ssol_sun** sun); +/* The sun disk intensity has a gaussian shape */ +SSOL_API res_T +ssol_sun_create_gaussian + (struct ssol_device* dev, + struct ssol_sun** sun); + /* The sun disk intensity is controlled by a circumsolar ratio. From the paper * "Sunshape distributions for terrestrial solar simulations". D. Buie, A.G. * Monger, C.J. Dey */ @@ -1042,7 +1055,12 @@ ssol_sun_set_spectrum SSOL_API res_T ssol_sun_pillbox_set_half_angle (struct ssol_sun* sun, - const double half_angle); /* In radian */ + const double half_angle); /* In ]0, PI/2], in radian */ + +SSOL_API res_T +ssol_sun_gaussian_set_std_dev + (struct ssol_sun* sun, + const double std_dev); /* In ]0, +Inf[, in radian */ SSOL_API res_T ssol_sun_set_buie_param diff --git a/src/ssol_material.c b/src/ssol_material.c @@ -183,11 +183,24 @@ create_mirror_bsdf res = ssf_specular_reflection_setup(*bsdf, fresnel); if(res != RES_OK) goto error; } else { /* Glossy reflection */ - res = ssf_microfacet_distribution_create - (mtl->dev->allocator, &ssf_beckmann_distribution, &distrib); - if(res != RES_OK) goto error; - res = ssf_beckmann_distribution_setup(distrib, roughness); - if(res != RES_OK) goto error; + switch(mtl->data.mirror.distrib) { + /* Setup the microfacet distribution */ + case SSOL_MICROFACET_BECKMANN: + res = ssf_microfacet_distribution_create + (mtl->dev->allocator, &ssf_beckmann_distribution, &distrib); + if(res != RES_OK) goto error; + res = ssf_beckmann_distribution_setup(distrib, roughness); + if(res != RES_OK) goto error; + break; + case SSOL_MICROFACET_PILLBOX: + res = ssf_microfacet_distribution_create + (mtl->dev->allocator, &ssf_pillbox_distribution, &distrib); + if(res != RES_OK) goto error; + res = ssf_beckmann_distribution_setup(distrib, roughness); + if(res != RES_OK) goto error; + break; + default: FATAL("Unreachable code.\n"); break; + } /* Microfacet2 is not well suited for rendering since it cannot be * evaluated and consequently it returns an invalid result for direct @@ -472,15 +485,19 @@ ssol_dielectric_setup res_T ssol_mirror_setup - (struct ssol_material* material, const struct ssol_mirror_shader* shader) + (struct ssol_material* material, + const struct ssol_mirror_shader* shader, + const enum ssol_microfacet_distribution distrib) { if(!material || material->type != SSOL_MATERIAL_MIRROR - || !check_shader_mirror(shader)) + || !check_shader_mirror(shader) + || (unsigned)distrib >= SSOL_MICROFACET_DISTRIBUTIONS_COUNT__) return RES_BAD_ARG; material->normal = shader->normal; material->data.mirror.reflectivity = shader->reflectivity; material->data.mirror.roughness = shader->roughness; + material->data.mirror.distrib = distrib; return RES_OK; } diff --git a/src/ssol_material_c.h b/src/ssol_material_c.h @@ -34,6 +34,7 @@ struct matte { struct mirror { ssol_shader_getter_T reflectivity; ssol_shader_getter_T roughness; + enum ssol_microfacet_distribution distrib; }; struct thin_dielectric { diff --git a/src/ssol_ranst_sun_dir.c b/src/ssol_ranst_sun_dir.c @@ -44,6 +44,11 @@ struct ran_pillbox_state { double basis[9]; }; +struct ran_gaussian_state { + double std_dev; + double basis[9]; +}; + struct ran_dirac_state { double dir[3]; }; @@ -56,6 +61,7 @@ struct ranst_sun_dir { union { struct ran_buie_state buie; struct ran_pillbox_state pillbox; + struct ran_gaussian_state gaussian; struct ran_dirac_state dirac; } state; @@ -260,6 +266,30 @@ ran_pillbox_get } /******************************************************************************* +* Gaussian random variate +******************************************************************************/ +static double* +ran_gaussian_get + (const struct ranst_sun_dir* ran, + struct ssp_rng* rng, + double dir[3]) +{ + double pt[3]; + double phi, theta, sin_theta; + + ASSERT(ran && 0 <= ran->state.gaussian.std_dev); + theta = ssp_ran_gaussian(rng, 0, ran->state.gaussian.std_dev); + sin_theta = sin(theta); + phi = ssp_rng_uniform_double(rng, 0, 2 * PI); + pt[0] = cos(phi) * sin_theta; + pt[1] = sin(phi) * sin_theta; + pt[2] = cos(theta); + d33_muld3(dir, ran->state.pillbox.basis, pt); + d3_normalize(dir, dir); + return dir; +} + +/******************************************************************************* * Dirac distribution ******************************************************************************/ static double* @@ -358,6 +388,19 @@ ranst_sun_dir_pillbox_setup } res_T +ranst_sun_dir_gaussian_setup + (struct ranst_sun_dir* ran, + const double std_dev, + const double dir[3]) +{ + if(!ran || !dir || std_dev <= 0) return RES_BAD_ARG; + ran->get = ran_gaussian_get; + ran->state.gaussian.std_dev = std_dev; + d33_basis(ran->state.pillbox.basis, dir); + return RES_OK; +} + +res_T ranst_sun_dir_dirac_setup (struct ranst_sun_dir* ran, const double dir[3]) diff --git a/src/ssol_ranst_sun_dir.h b/src/ssol_ranst_sun_dir.h @@ -55,6 +55,12 @@ ranst_sun_dir_pillbox_setup const double dir[3]); extern LOCAL_SYM res_T +ranst_sun_dir_gaussian_setup + (struct ranst_sun_dir* ran, + const double std_dev, + const double dir[3]); + +extern LOCAL_SYM res_T ranst_sun_dir_dirac_setup (struct ranst_sun_dir* ran, const double dir[3]); diff --git a/src/ssol_solver.c b/src/ssol_solver.c @@ -871,7 +871,7 @@ trace_radiative_path struct ssol_medium in_medium = SSOL_MEDIUM_VACUUM; struct ssol_medium out_medium = SSOL_MEDIUM_VACUUM; struct s3d_hit hit = S3D_HIT_NULL; - struct point pt; + struct point pt = POINT_NULL; float org[3], dir[3], range[2] = { 0, FLT_MAX }; size_t depth = 0; size_t roulette_interval, typical_max_depth; diff --git a/src/ssol_sun.c b/src/ssol_sun.c @@ -93,6 +93,12 @@ ssol_sun_create_pillbox(struct ssol_device* dev, struct ssol_sun** out_sun) } res_T +ssol_sun_create_gaussian(struct ssol_device* dev, struct ssol_sun** out_sun) +{ + return sun_create(dev, out_sun, SUN_GAUSSIAN); +} + +res_T ssol_sun_create_buie (struct ssol_device* dev, struct ssol_sun** out_sun) { @@ -172,13 +178,22 @@ ssol_sun_set_spectrum(struct ssol_sun* sun, struct ssol_spectrum* spectrum) res_T ssol_sun_pillbox_set_half_angle(struct ssol_sun* sun, const double half_angle) { - if(!sun || half_angle <= 0 || half_angle > PI || sun->type != SUN_PILLBOX) + if(!sun || half_angle <= 0 || half_angle > PI * 0.5 || sun->type != SUN_PILLBOX) return RES_BAD_ARG; sun->data.pillbox.half_angle = half_angle; return RES_OK; } res_T +ssol_sun_gaussian_set_std_dev(struct ssol_sun* sun, const double std_dev) +{ + if(!sun || std_dev <= 0 || sun->type != SUN_GAUSSIAN) + return RES_BAD_ARG; + sun->data.gaussian.std_dev = std_dev; + return RES_OK; +} + +res_T ssol_sun_set_buie_param (struct ssol_sun* sun, const double ratio) @@ -213,6 +228,10 @@ sun_create_direction_distribution res = ranst_sun_dir_pillbox_setup (ran_dir, sun->data.pillbox.half_angle, sun->direction); break; + case SUN_GAUSSIAN: + res = ranst_sun_dir_gaussian_setup + (ran_dir, sun->data.gaussian.std_dev, sun->direction); + break; case SUN_BUIE: res = ranst_sun_dir_buie_setup (ran_dir, sun->data.csr.ratio, sun->direction); @@ -224,7 +243,7 @@ exit: return res; error: if(ran_dir) { - CHECK(ranst_sun_dir_ref_put(ran_dir), RES_OK); + CHK(ranst_sun_dir_ref_put(ran_dir) == RES_OK); ran_dir = NULL; } goto exit; @@ -252,7 +271,7 @@ exit: return res; error: if(ran_wl) { - CHECK(ranst_sun_wl_ref_put(ran_wl), RES_OK); + CHK(ranst_sun_wl_ref_put(ran_wl) == RES_OK); ran_wl = NULL; } goto exit; diff --git a/src/ssol_sun_c.h b/src/ssol_sun_c.h @@ -26,6 +26,7 @@ struct ranst_sun_wl; enum sun_type { SUN_DIRECTIONAL, SUN_PILLBOX, + SUN_GAUSSIAN, SUN_BUIE, SUN_TYPES_COUNT__ }; @@ -34,6 +35,10 @@ struct pillbox { double half_angle; }; +struct gaussian { + double std_dev; +}; + struct buie { double ratio; }; @@ -46,6 +51,7 @@ struct ssol_sun { enum sun_type type; union { struct pillbox pillbox; + struct gaussian gaussian; struct buie csr; } data; diff --git a/src/test_ssol_atmosphere.c b/src/test_ssol_atmosphere.c @@ -39,46 +39,46 @@ main(int argc, char** argv) mem_init_proxy_allocator(&allocator, &mem_default_allocator); - CHECK(ssol_device_create - (NULL, &allocator, SSOL_NTHREADS_DEFAULT, 0, &dev), RES_OK); + CHK(ssol_device_create + (NULL, &allocator, SSOL_NTHREADS_DEFAULT, 0, &dev) == RES_OK); extinction2.type = SSOL_DATA_SPECTRUM; - CHECK(ssol_spectrum_create(dev, &spectrum), RES_OK); - CHECK(ssol_spectrum_setup(spectrum, get_wlen, 2, NULL), RES_OK); + CHK(ssol_spectrum_create(dev, &spectrum) == RES_OK); + CHK(ssol_spectrum_setup(spectrum, get_wlen, 2, NULL) == RES_OK); extinction2.type = SSOL_DATA_SPECTRUM; extinction2.value.spectrum = spectrum; - CHECK(ssol_atmosphere_create(NULL, &atm), RES_BAD_ARG); - CHECK(ssol_atmosphere_create(dev, NULL), RES_BAD_ARG); - CHECK(ssol_atmosphere_create(dev, &atm), RES_OK); + CHK(ssol_atmosphere_create(NULL, &atm) == RES_BAD_ARG); + CHK(ssol_atmosphere_create(dev, NULL) == RES_BAD_ARG); + CHK(ssol_atmosphere_create(dev, &atm) == RES_OK); - CHECK(ssol_atmosphere_ref_get(NULL), RES_BAD_ARG); - CHECK(ssol_atmosphere_ref_get(atm), RES_OK); + CHK(ssol_atmosphere_ref_get(NULL) == RES_BAD_ARG); + CHK(ssol_atmosphere_ref_get(atm) == RES_OK); - CHECK(ssol_atmosphere_ref_put(NULL), RES_BAD_ARG); - CHECK(ssol_atmosphere_ref_put(atm), RES_OK); + CHK(ssol_atmosphere_ref_put(NULL) == RES_BAD_ARG); + CHK(ssol_atmosphere_ref_put(atm) == RES_OK); extinction.type = SSOL_DATA_REAL; extinction.value.real = 0.1; - CHECK(ssol_atmosphere_set_extinction(NULL, &extinction), RES_BAD_ARG); - CHECK(ssol_atmosphere_set_extinction(atm, NULL), RES_BAD_ARG); - CHECK(ssol_atmosphere_set_extinction(atm, &extinction), RES_OK); - CHECK(ssol_atmosphere_set_extinction(atm, &extinction), RES_OK); - CHECK(ssol_atmosphere_set_extinction(atm, &extinction2), RES_OK); + CHK(ssol_atmosphere_set_extinction(NULL, &extinction) == RES_BAD_ARG); + CHK(ssol_atmosphere_set_extinction(atm, NULL) == RES_BAD_ARG); + CHK(ssol_atmosphere_set_extinction(atm, &extinction) == RES_OK); + CHK(ssol_atmosphere_set_extinction(atm, &extinction) == RES_OK); + CHK(ssol_atmosphere_set_extinction(atm, &extinction2) == RES_OK); /* extinction values out of range */ extinction.value.real = 2; - CHECK(ssol_atmosphere_set_extinction(atm, &extinction), RES_BAD_ARG); - CHECK(ssol_spectrum_setup(spectrum, get_wlen, 3, NULL), RES_OK); - CHECK(ssol_atmosphere_set_extinction(atm, &extinction2), RES_BAD_ARG); + CHK(ssol_atmosphere_set_extinction(atm, &extinction) == RES_BAD_ARG); + CHK(ssol_spectrum_setup(spectrum, get_wlen, 3, NULL) == RES_OK); + CHK(ssol_atmosphere_set_extinction(atm, &extinction2) == RES_BAD_ARG); - CHECK(ssol_spectrum_ref_put(extinction2.value.spectrum), RES_OK); - CHECK(ssol_device_ref_put(dev), RES_OK); - CHECK(ssol_atmosphere_ref_put(atm), RES_OK); + CHK(ssol_spectrum_ref_put(extinction2.value.spectrum) == RES_OK); + CHK(ssol_device_ref_put(dev) == RES_OK); + CHK(ssol_atmosphere_ref_put(atm) == RES_OK); check_memory_allocator(&allocator); mem_shutdown_proxy_allocator(&allocator); - CHECK(mem_allocated_size(), 0); + CHK(mem_allocated_size() == 0); return 0; } diff --git a/src/test_ssol_by_receiver_integration.c b/src/test_ssol_by_receiver_integration.c @@ -37,7 +37,7 @@ get_wlen(const size_t i, double* wlen, double* data, void* ctx) { double wavelengths[3] = { 1, 2, 3 }; double intensities[3] = { 1, 0.8, 1 }; - CHECK(i < 3, 1); + CHK(i < 3); (void)ctx; *wlen = wavelengths[i]; *data = intensities[i]; @@ -78,28 +78,28 @@ main(int argc, char** argv) mem_init_proxy_allocator(&allocator, &mem_default_allocator); - CHECK(ssol_device_create - (NULL, &allocator, SSOL_NTHREADS_DEFAULT, 0, &dev), RES_OK); + CHK(ssol_device_create + (NULL, &allocator, SSOL_NTHREADS_DEFAULT, 0, &dev) == RES_OK); - CHECK(ssp_rng_create(&allocator, &ssp_rng_threefry, &rng), RES_OK); - CHECK(ssol_spectrum_create(dev, &spectrum), RES_OK); - CHECK(ssol_spectrum_setup(spectrum, get_wlen, 3, NULL), RES_OK); - CHECK(ssol_sun_create_directional(dev, &sun), RES_OK); - CHECK(ssol_sun_set_direction(sun, d3(dir, 1, 0, -1)), RES_OK); - CHECK(ssol_sun_set_spectrum(sun, spectrum), RES_OK); - CHECK(ssol_sun_set_dni(sun, 1000), RES_OK); - CHECK(ssol_scene_create(dev, &scene), RES_OK); - CHECK(ssol_scene_attach_sun(scene, sun), RES_OK); + CHK(ssp_rng_create(&allocator, &ssp_rng_threefry, &rng) == RES_OK); + CHK(ssol_spectrum_create(dev, &spectrum) == RES_OK); + CHK(ssol_spectrum_setup(spectrum, get_wlen, 3, NULL) == RES_OK); + CHK(ssol_sun_create_directional(dev, &sun) == RES_OK); + CHK(ssol_sun_set_direction(sun, d3(dir, 1, 0, -1)) == RES_OK); + CHK(ssol_sun_set_spectrum(sun, spectrum) == RES_OK); + CHK(ssol_sun_set_dni(sun, 1000) == RES_OK); + CHK(ssol_scene_create(dev, &scene) == RES_OK); + CHK(ssol_scene_attach_sun(scene, sun) == RES_OK); /* Create scene content */ - CHECK(ssol_shape_create_mesh(dev, &square), RES_OK); + CHK(ssol_shape_create_mesh(dev, &square) == RES_OK); attribs[0].usage = SSOL_POSITION; attribs[0].get = get_position; - CHECK(ssol_mesh_setup(square, SQUARE_NTRIS__, get_ids, - SQUARE_NVERTS__, attribs, 1, (void*) &SQUARE_DESC__), RES_OK); + CHK(ssol_mesh_setup(square, SQUARE_NTRIS__, get_ids, + SQUARE_NVERTS__, attribs, 1, (void*) &SQUARE_DESC__) == RES_OK); - CHECK(ssol_shape_create_punched_surface(dev, &quad_square), RES_OK); + CHK(ssol_shape_create_punched_surface(dev, &quad_square) == RES_OK); carving.get = get_polygon_vertices; carving.operation = SSOL_AND; carving.nb_vertices = POLY_NVERTS__; @@ -108,78 +108,78 @@ main(int argc, char** argv) punched.nb_carvings = 1; punched.quadric = &quadric; punched.carvings = &carving; - CHECK(ssol_punched_surface_setup(quad_square, &punched), RES_OK); + CHK(ssol_punched_surface_setup(quad_square, &punched) == RES_OK); - CHECK(ssol_material_create_mirror(dev, &m_mtl), RES_OK); + CHK(ssol_material_create_mirror(dev, &m_mtl) == RES_OK); shader.normal = get_shader_normal; shader.reflectivity = get_shader_reflectivity; shader.roughness = get_shader_roughness; - CHECK(ssol_mirror_setup(m_mtl, &shader), RES_OK); - CHECK(ssol_material_create_virtual(dev, &v_mtl), RES_OK); - - CHECK(ssol_object_create(dev, &m_object), RES_OK); - CHECK(ssol_object_add_shaded_shape(m_object, quad_square, m_mtl, m_mtl), RES_OK); - CHECK(ssol_object_instantiate(m_object, &heliostat), RES_OK); - CHECK(ssol_scene_attach_instance(scene, heliostat), RES_OK); - - CHECK(ssol_object_create(dev, &t_object), RES_OK); - CHECK(ssol_object_add_shaded_shape(t_object, square, v_mtl, v_mtl), RES_OK); - CHECK(ssol_object_instantiate(t_object, &target), RES_OK); - CHECK(ssol_instance_set_transform(target, transform), RES_OK); - CHECK(ssol_instance_set_receiver(target, SSOL_FRONT, 0), RES_OK); - CHECK(ssol_instance_sample(target, 0), RES_OK); - CHECK(ssol_scene_attach_instance(scene, target), RES_OK); + CHK(ssol_mirror_setup(m_mtl, &shader, SSOL_MICROFACET_BECKMANN) == RES_OK); + CHK(ssol_material_create_virtual(dev, &v_mtl) == RES_OK); + + CHK(ssol_object_create(dev, &m_object) == RES_OK); + CHK(ssol_object_add_shaded_shape(m_object, quad_square, m_mtl, m_mtl) == RES_OK); + CHK(ssol_object_instantiate(m_object, &heliostat) == RES_OK); + CHK(ssol_scene_attach_instance(scene, heliostat) == RES_OK); + + CHK(ssol_object_create(dev, &t_object) == RES_OK); + CHK(ssol_object_add_shaded_shape(t_object, square, v_mtl, v_mtl) == RES_OK); + CHK(ssol_object_instantiate(t_object, &target) == RES_OK); + CHK(ssol_instance_set_transform(target, transform) == RES_OK); + CHK(ssol_instance_set_receiver(target, SSOL_FRONT, 0) == RES_OK); + CHK(ssol_instance_sample(target, 0) == RES_OK); + CHK(ssol_scene_attach_instance(scene, target) == RES_OK); #define N__ 10000 #define S_DNI_cos (4 * 1000 * cos(PI / 4)) #define GET_MC_RCV ssol_estimator_get_mc_receiver #define GET_MC_SAMP_X_RCV ssol_estimator_get_mc_sampled_x_receiver - CHECK(ssol_solve(scene, rng, N__, 0, NULL, &estimator1), RES_OK); - CHECK(GET_MC_RCV(estimator1, target, SSOL_FRONT, &mc_rcv), RES_OK); + CHK(ssol_solve(scene, rng, N__, 0, NULL, &estimator1) == RES_OK); + CHK(GET_MC_RCV(estimator1, target, SSOL_FRONT, &mc_rcv) == RES_OK); printf("Ir(target) = %g +/- %g\n", mc_rcv.incoming_flux.E, mc_rcv.incoming_flux.SE); - CHECK(ssol_instance_set_receiver(heliostat, SSOL_FRONT, 0), RES_OK); - CHECK(eq_eps + CHK(ssol_instance_set_receiver(heliostat, SSOL_FRONT, 0) == RES_OK); + CHK(eq_eps (mc_rcv.incoming_flux.E, S_DNI_cos, - mc_rcv.incoming_flux.SE*3), 1); - CHECK(ssol_solve(scene, rng, 8 * N__, 0, NULL, &estimator2), RES_OK); - CHECK(GET_MC_RCV(estimator2, target, SSOL_FRONT, &mc_rcv), RES_OK); + mc_rcv.incoming_flux.SE*3)); + CHK(ssol_solve(scene, rng, 8 * N__, 0, NULL, &estimator2) == RES_OK); + CHK(GET_MC_RCV(estimator2, target, SSOL_FRONT, &mc_rcv) == RES_OK); printf("Ir(target) = %g +/- %g\n", mc_rcv.incoming_flux.E, mc_rcv.incoming_flux.SE); - CHECK(eq_eps(mc_rcv.incoming_flux.E, S_DNI_cos, mc_rcv.incoming_flux.SE*3), 1); - CHECK(ssol_estimator_ref_put(estimator1), RES_OK); - CHECK(ssol_solve(scene, rng, 3 * N__, 0, NULL, &estimator1), RES_OK); - CHECK(GET_MC_RCV(estimator1, target, SSOL_FRONT, &mc_rcv), RES_OK); + CHK(eq_eps(mc_rcv.incoming_flux.E, S_DNI_cos, mc_rcv.incoming_flux.SE*3) == 1); + CHK(ssol_estimator_ref_put(estimator1) == RES_OK); + CHK(ssol_solve(scene, rng, 3 * N__, 0, NULL, &estimator1) == RES_OK); + CHK(GET_MC_RCV(estimator1, target, SSOL_FRONT, &mc_rcv) == RES_OK); printf("Ir(target) = %g +/- %g\n", mc_rcv.incoming_flux.E, mc_rcv.incoming_flux.SE); - CHECK(eq_eps + CHK(eq_eps (mc_rcv.incoming_flux.E, S_DNI_cos, - mc_rcv.incoming_flux.SE*3), 1); - CHECK(GET_MC_SAMP_X_RCV(estimator1, heliostat, target, SSOL_FRONT, &mc_rcv), RES_OK); + mc_rcv.incoming_flux.SE*3)); + CHK(GET_MC_SAMP_X_RCV(estimator1, heliostat, target, SSOL_FRONT, &mc_rcv) == RES_OK); printf("Ir(heliostat=>target) = %g +/- %g\n", mc_rcv.incoming_flux.E, mc_rcv.incoming_flux.SE); - CHECK(eq_eps(mc_rcv.incoming_flux.E, S_DNI_cos, mc_rcv.incoming_flux.SE*3), 1); + CHK(eq_eps(mc_rcv.incoming_flux.E, S_DNI_cos, mc_rcv.incoming_flux.SE*3) == 1); /* Free data */ - CHECK(ssol_instance_ref_put(heliostat), RES_OK); - CHECK(ssol_instance_ref_put(target), RES_OK); - CHECK(ssol_object_ref_put(m_object), RES_OK); - CHECK(ssol_object_ref_put(t_object), RES_OK); - CHECK(ssol_shape_ref_put(square), RES_OK); - CHECK(ssol_shape_ref_put(quad_square), RES_OK); - CHECK(ssol_material_ref_put(m_mtl), RES_OK); - CHECK(ssol_material_ref_put(v_mtl), RES_OK); - CHECK(ssol_device_ref_put(dev), RES_OK); - CHECK(ssol_estimator_ref_put(estimator1), RES_OK); - CHECK(ssol_estimator_ref_put(estimator2), RES_OK); - CHECK(ssol_scene_ref_put(scene), RES_OK); - CHECK(ssp_rng_ref_put(rng), RES_OK); - CHECK(ssol_spectrum_ref_put(spectrum), RES_OK); - CHECK(ssol_sun_ref_put(sun), RES_OK); + CHK(ssol_instance_ref_put(heliostat) == RES_OK); + CHK(ssol_instance_ref_put(target) == RES_OK); + CHK(ssol_object_ref_put(m_object) == RES_OK); + CHK(ssol_object_ref_put(t_object) == RES_OK); + CHK(ssol_shape_ref_put(square) == RES_OK); + CHK(ssol_shape_ref_put(quad_square) == RES_OK); + CHK(ssol_material_ref_put(m_mtl) == RES_OK); + CHK(ssol_material_ref_put(v_mtl) == RES_OK); + CHK(ssol_device_ref_put(dev) == RES_OK); + CHK(ssol_estimator_ref_put(estimator1) == RES_OK); + CHK(ssol_estimator_ref_put(estimator2) == RES_OK); + CHK(ssol_scene_ref_put(scene) == RES_OK); + CHK(ssp_rng_ref_put(rng) == RES_OK); + CHK(ssol_spectrum_ref_put(spectrum) == RES_OK); + CHK(ssol_sun_ref_put(sun) == RES_OK); check_memory_allocator(&allocator); mem_shutdown_proxy_allocator(&allocator); - CHECK(mem_allocated_size(), 0); + CHK(mem_allocated_size() == 0); return 0; } diff --git a/src/test_ssol_camera.c b/src/test_ssol_camera.c @@ -29,66 +29,66 @@ main(int argc, char** argv) double up[3] = {0}; (void)argc, (void)argv; - CHECK(mem_init_proxy_allocator(&allocator, &mem_default_allocator), RES_OK); + CHK(mem_init_proxy_allocator(&allocator, &mem_default_allocator) == RES_OK); - CHECK(ssol_device_create - (NULL, &allocator, SSOL_NTHREADS_DEFAULT, 0, &dev), RES_OK); + CHK(ssol_device_create + (NULL, &allocator, SSOL_NTHREADS_DEFAULT, 0, &dev) == RES_OK); - CHECK(ssol_camera_create(NULL, NULL), RES_BAD_ARG); - CHECK(ssol_camera_create(dev, NULL), RES_BAD_ARG); - CHECK(ssol_camera_create(NULL, &cam), RES_BAD_ARG); - CHECK(ssol_camera_create(dev, &cam), RES_OK); + CHK(ssol_camera_create(NULL, NULL) == RES_BAD_ARG); + CHK(ssol_camera_create(dev, NULL) == RES_BAD_ARG); + CHK(ssol_camera_create(NULL, &cam) == RES_BAD_ARG); + CHK(ssol_camera_create(dev, &cam) == RES_OK); - CHECK(ssol_camera_ref_get(NULL), RES_BAD_ARG); - CHECK(ssol_camera_ref_get(cam), RES_OK); - CHECK(ssol_camera_ref_put(NULL), RES_BAD_ARG); - CHECK(ssol_camera_ref_put(cam), RES_OK); - CHECK(ssol_camera_ref_put(cam), RES_OK); + CHK(ssol_camera_ref_get(NULL) == RES_BAD_ARG); + CHK(ssol_camera_ref_get(cam) == RES_OK); + CHK(ssol_camera_ref_put(NULL) == RES_BAD_ARG); + CHK(ssol_camera_ref_put(cam) == RES_OK); + CHK(ssol_camera_ref_put(cam) == RES_OK); - CHECK(ssol_camera_create(dev, &cam), RES_OK); - CHECK(ssol_camera_set_proj_ratio(NULL, 0), RES_BAD_ARG); - CHECK(ssol_camera_set_proj_ratio(cam, 0), RES_BAD_ARG); - CHECK(ssol_camera_set_proj_ratio(NULL, 4.0/3.0), RES_BAD_ARG); - CHECK(ssol_camera_set_proj_ratio(cam, 4.0/3.0), RES_OK); - CHECK(ssol_camera_set_proj_ratio(cam, -4.0/3.0), RES_BAD_ARG); + CHK(ssol_camera_create(dev, &cam) == RES_OK); + CHK(ssol_camera_set_proj_ratio(NULL, 0) == RES_BAD_ARG); + CHK(ssol_camera_set_proj_ratio(cam, 0) == RES_BAD_ARG); + CHK(ssol_camera_set_proj_ratio(NULL, 4.0/3.0) == RES_BAD_ARG); + CHK(ssol_camera_set_proj_ratio(cam, 4.0/3.0) == RES_OK); + CHK(ssol_camera_set_proj_ratio(cam, -4.0/3.0) == RES_BAD_ARG); - CHECK(ssol_camera_set_fov(NULL, 0), RES_BAD_ARG); - CHECK(ssol_camera_set_fov(cam, 0), RES_BAD_ARG); - CHECK(ssol_camera_set_fov(NULL, PI/4.0), RES_BAD_ARG); - CHECK(ssol_camera_set_fov(cam, PI/4.0), RES_OK); - CHECK(ssol_camera_set_fov(cam, -PI/4.0), RES_BAD_ARG); + CHK(ssol_camera_set_fov(NULL, 0) == RES_BAD_ARG); + CHK(ssol_camera_set_fov(cam, 0) == RES_BAD_ARG); + CHK(ssol_camera_set_fov(NULL, PI/4.0) == RES_BAD_ARG); + CHK(ssol_camera_set_fov(cam, PI/4.0) == RES_OK); + CHK(ssol_camera_set_fov(cam, -PI/4.0) == RES_BAD_ARG); pos[0] = 0, pos[1] = 0, pos[2] = 0; tgt[0] = 0, tgt[1] = 0, tgt[2] = -1; up[0] = 0, up[1] = 1, up[2] = 0; - CHECK(ssol_camera_look_at(NULL, NULL, NULL, NULL), RES_BAD_ARG); - CHECK(ssol_camera_look_at(cam, NULL, NULL, NULL), RES_BAD_ARG); - CHECK(ssol_camera_look_at(NULL, pos, NULL, NULL), RES_BAD_ARG); - CHECK(ssol_camera_look_at(cam, pos, NULL, NULL), RES_BAD_ARG); - CHECK(ssol_camera_look_at(NULL, NULL, tgt, NULL), RES_BAD_ARG); - CHECK(ssol_camera_look_at(cam, NULL, tgt, NULL), RES_BAD_ARG); - CHECK(ssol_camera_look_at(NULL, pos, tgt, NULL), RES_BAD_ARG); - CHECK(ssol_camera_look_at(cam, pos, tgt, NULL), RES_BAD_ARG); - CHECK(ssol_camera_look_at(NULL, NULL, NULL, up), RES_BAD_ARG); - CHECK(ssol_camera_look_at(cam, NULL, NULL, up), RES_BAD_ARG); - CHECK(ssol_camera_look_at(NULL, pos, NULL, up), RES_BAD_ARG); - CHECK(ssol_camera_look_at(cam, pos, NULL, up), RES_BAD_ARG); - CHECK(ssol_camera_look_at(NULL, NULL, tgt, up), RES_BAD_ARG); - CHECK(ssol_camera_look_at(cam, NULL, tgt, up), RES_BAD_ARG); - CHECK(ssol_camera_look_at(NULL, pos, tgt, up), RES_BAD_ARG); - CHECK(ssol_camera_look_at(cam, pos, tgt, up), RES_OK); + CHK(ssol_camera_look_at(NULL, NULL, NULL, NULL) == RES_BAD_ARG); + CHK(ssol_camera_look_at(cam, NULL, NULL, NULL) == RES_BAD_ARG); + CHK(ssol_camera_look_at(NULL, pos, NULL, NULL) == RES_BAD_ARG); + CHK(ssol_camera_look_at(cam, pos, NULL, NULL) == RES_BAD_ARG); + CHK(ssol_camera_look_at(NULL, NULL, tgt, NULL) == RES_BAD_ARG); + CHK(ssol_camera_look_at(cam, NULL, tgt, NULL) == RES_BAD_ARG); + CHK(ssol_camera_look_at(NULL, pos, tgt, NULL) == RES_BAD_ARG); + CHK(ssol_camera_look_at(cam, pos, tgt, NULL) == RES_BAD_ARG); + CHK(ssol_camera_look_at(NULL, NULL, NULL, up) == RES_BAD_ARG); + CHK(ssol_camera_look_at(cam, NULL, NULL, up) == RES_BAD_ARG); + CHK(ssol_camera_look_at(NULL, pos, NULL, up) == RES_BAD_ARG); + CHK(ssol_camera_look_at(cam, pos, NULL, up) == RES_BAD_ARG); + CHK(ssol_camera_look_at(NULL, NULL, tgt, up) == RES_BAD_ARG); + CHK(ssol_camera_look_at(cam, NULL, tgt, up) == RES_BAD_ARG); + CHK(ssol_camera_look_at(NULL, pos, tgt, up) == RES_BAD_ARG); + CHK(ssol_camera_look_at(cam, pos, tgt, up) == RES_OK); tgt[0] = 0, tgt[1] = 0, tgt[2] = 0; - CHECK(ssol_camera_look_at(cam, pos, tgt, up), RES_BAD_ARG); + CHK(ssol_camera_look_at(cam, pos, tgt, up) == RES_BAD_ARG); tgt[0] = 0, tgt[1] = 0, tgt[2] = -1; up[0] = 0, up[1] = 0, up[2] = 0; - CHECK(ssol_camera_look_at(cam, pos, tgt, up), RES_BAD_ARG); + CHK(ssol_camera_look_at(cam, pos, tgt, up) == RES_BAD_ARG); - CHECK(ssol_device_ref_put(dev), RES_OK); - CHECK(ssol_camera_ref_put(cam), RES_OK); + CHK(ssol_device_ref_put(dev) == RES_OK); + CHK(ssol_camera_ref_put(cam) == RES_OK); check_memory_allocator(&allocator); mem_shutdown_proxy_allocator(&allocator); - CHECK(mem_allocated_size(), 0); + CHK(mem_allocated_size() == 0); return 0; } diff --git a/src/test_ssol_data.c b/src/test_ssol_data.c @@ -21,8 +21,8 @@ static void get_wlen(const size_t i, double* wlen, double* data, void* ctx) { - NCHECK(wlen, NULL); - NCHECK(data, NULL); + CHK(wlen != NULL); + CHK(data != NULL); *wlen = (double)(i+1); *data = (double)(i+2); (void)ctx; @@ -38,48 +38,48 @@ main(int argc, char** argv) size_t i; (void)argc, (void)argv; - CHECK(mem_init_proxy_allocator(&allocator, &mem_default_allocator), RES_OK); + CHK(mem_init_proxy_allocator(&allocator, &mem_default_allocator) == RES_OK); - CHECK(ssol_device_create - (NULL, &allocator, SSOL_NTHREADS_DEFAULT, 0, &dev), RES_OK); - CHECK(ssol_spectrum_create(dev, &spectrum), RES_OK); - CHECK(ssol_spectrum_setup(spectrum, get_wlen, 10, NULL), RES_OK); + CHK(ssol_device_create + (NULL, &allocator, SSOL_NTHREADS_DEFAULT, 0, &dev) == RES_OK); + CHK(ssol_spectrum_create(dev, &spectrum) == RES_OK); + CHK(ssol_spectrum_setup(spectrum, get_wlen, 10, NULL) == RES_OK); - CHECK(ssol_data_get_value(&data, 1), ssol_data_get_value(&SSOL_DATA_NULL, 1)); - CHECK(ssol_data_get_value(&data, 4), ssol_data_get_value(&SSOL_DATA_NULL, 4)); - CHECK(ssol_data_get_value(&data, 2), ssol_data_get_value(&SSOL_DATA_NULL, 2)); - CHECK(ssol_data_get_value(&data, 7), ssol_data_get_value(&SSOL_DATA_NULL, 7)); + CHK(ssol_data_get_value(&data, 1) == ssol_data_get_value(&SSOL_DATA_NULL, 1)); + CHK(ssol_data_get_value(&data, 4) == ssol_data_get_value(&SSOL_DATA_NULL, 4)); + CHK(ssol_data_get_value(&data, 2) == ssol_data_get_value(&SSOL_DATA_NULL, 2)); + CHK(ssol_data_get_value(&data, 7) == ssol_data_get_value(&SSOL_DATA_NULL, 7)); - CHECK(ssol_data_set_real(&data, 1.25), &data); - CHECK(ssol_data_get_value(&data, 1), 1.25); - CHECK(ssol_data_get_value(&data, 1.234), 1.25); - CHECK(data.type, SSOL_DATA_REAL); - CHECK(data.value.real, 1.25); + CHK(ssol_data_set_real(&data, 1.25) == &data); + CHK(ssol_data_get_value(&data, 1) == 1.25); + CHK(ssol_data_get_value(&data, 1.234) == 1.25); + CHK(data.type == SSOL_DATA_REAL); + CHK(data.value.real == 1.25); - CHECK(ssol_data_set_spectrum(&data, spectrum), &data); - CHECK(ssol_data_set_spectrum(&data, spectrum), &data); + CHK(ssol_data_set_spectrum(&data, spectrum) == &data); + CHK(ssol_data_set_spectrum(&data, spectrum) == &data); - CHECK(data.type, SSOL_DATA_SPECTRUM); - CHECK(data.value.spectrum, spectrum); - CHECK(ssol_spectrum_ref_put(spectrum), RES_OK); + CHK(data.type == SSOL_DATA_SPECTRUM); + CHK(data.value.spectrum == spectrum); + CHK(ssol_spectrum_ref_put(spectrum) == RES_OK); FOR_EACH(i, 0, 10) { - CHECK(ssol_data_get_value(&data, (double)(i+1)), (double)(i+2)); + CHK(ssol_data_get_value(&data, (double)(i+1)) == (double)(i+2)); } - CHECK(eq_eps(ssol_data_get_value(&data, 1.5), 2.5, 1.e-6), 1); - CHECK(eq_eps(ssol_data_get_value(&data, 1.25), 2.25, 1.e-6), 1); - CHECK(ssol_data_get_value(&data, 0.5), 2); - CHECK(ssol_data_get_value(&data, 0.1), 2); - CHECK(ssol_data_get_value(&data, 10), 11); - CHECK(ssol_data_get_value(&data, 10.1), 11); + CHK(eq_eps(ssol_data_get_value(&data, 1.5), 2.5, 1.e-6) == 1); + CHK(eq_eps(ssol_data_get_value(&data, 1.25), 2.25, 1.e-6) == 1); + CHK(ssol_data_get_value(&data, 0.5) == 2); + CHK(ssol_data_get_value(&data, 0.1) == 2); + CHK(ssol_data_get_value(&data, 10) == 11); + CHK(ssol_data_get_value(&data, 10.1) == 11); - CHECK(ssol_device_ref_put(dev), RES_OK); + CHK(ssol_device_ref_put(dev) == RES_OK); ssol_data_clear(&data); check_memory_allocator(&allocator); mem_shutdown_proxy_allocator(&allocator); - CHECK(mem_allocated_size(), 0); + CHK(mem_allocated_size() == 0); return 0; } diff --git a/src/test_ssol_device.c b/src/test_ssol_device.c @@ -34,47 +34,47 @@ main(int argc, char** argv) struct ssol_device* dev; (void)argc, (void)argv; - CHECK(ssol_device_create(NULL, NULL, 0, 0, NULL), RES_BAD_ARG); - CHECK(ssol_device_create(NULL, NULL, SSOL_NTHREADS_DEFAULT, 0, &dev), RES_OK); + CHK(ssol_device_create(NULL, NULL, 0, 0, NULL) == RES_BAD_ARG); + CHK(ssol_device_create(NULL, NULL, SSOL_NTHREADS_DEFAULT, 0, &dev) == RES_OK); - CHECK(ssol_device_ref_get(NULL), RES_BAD_ARG); - CHECK(ssol_device_ref_get(dev), RES_OK); - CHECK(ssol_device_ref_put(NULL), RES_BAD_ARG); - CHECK(ssol_device_ref_put(dev), RES_OK); - CHECK(ssol_device_ref_put(dev), RES_OK); + CHK(ssol_device_ref_get(NULL) == RES_BAD_ARG); + CHK(ssol_device_ref_get(dev) == RES_OK); + CHK(ssol_device_ref_put(NULL) == RES_BAD_ARG); + CHK(ssol_device_ref_put(dev) == RES_OK); + CHK(ssol_device_ref_put(dev) == RES_OK); mem_init_proxy_allocator(&allocator, &mem_default_allocator); - CHECK(MEM_ALLOCATED_SIZE(&allocator), 0); - CHECK(ssol_device_create(NULL, &allocator, 2, 0, NULL), RES_BAD_ARG); - CHECK(ssol_device_create - (NULL, &allocator, SSOL_NTHREADS_DEFAULT, 0, &dev), RES_OK); - CHECK(ssol_device_ref_put(dev), RES_OK); - CHECK(MEM_ALLOCATED_SIZE(&allocator), 0); + CHK(MEM_ALLOCATED_SIZE(&allocator) == 0); + CHK(ssol_device_create(NULL, &allocator, 2, 0, NULL) == RES_BAD_ARG); + CHK(ssol_device_create + (NULL, &allocator, SSOL_NTHREADS_DEFAULT, 0, &dev) == RES_OK); + CHK(ssol_device_ref_put(dev) == RES_OK); + CHK(MEM_ALLOCATED_SIZE(&allocator) == 0); - CHECK(logger_init(&allocator, &logger), RES_OK); + CHK(logger_init(&allocator, &logger) == RES_OK); logger_set_stream(&logger, LOG_OUTPUT, log_stream, NULL); logger_set_stream(&logger, LOG_ERROR, log_stream, NULL); logger_set_stream(&logger, LOG_WARNING, log_stream, NULL); - CHECK(ssol_device_create(&logger, NULL, 4, 0, NULL), RES_BAD_ARG); - CHECK(ssol_device_create - (&logger, NULL, SSOL_NTHREADS_DEFAULT, 0, &dev), RES_OK); - CHECK(ssol_device_ref_put(dev), RES_OK); + CHK(ssol_device_create(&logger, NULL, 4, 0, NULL) == RES_BAD_ARG); + CHK(ssol_device_create + (&logger, NULL, SSOL_NTHREADS_DEFAULT, 0, &dev) == RES_OK); + CHK(ssol_device_ref_put(dev) == RES_OK); - CHECK(ssol_device_create(&logger, &allocator, 2, 0, NULL), RES_BAD_ARG); - CHECK(ssol_device_create - (&logger, &allocator, SSOL_NTHREADS_DEFAULT, 0, &dev), RES_OK); - CHECK(ssol_device_ref_put(dev), RES_OK); + CHK(ssol_device_create(&logger, &allocator, 2, 0, NULL) == RES_BAD_ARG); + CHK(ssol_device_create + (&logger, &allocator, SSOL_NTHREADS_DEFAULT, 0, &dev) == RES_OK); + CHK(ssol_device_ref_put(dev) == RES_OK); - CHECK(ssol_device_create(&logger, &allocator, 0, 0, &dev), RES_BAD_ARG); - CHECK(ssol_device_create - (&logger, &allocator, SSOL_NTHREADS_DEFAULT, 0, &dev), RES_OK); - CHECK(ssol_device_ref_put(dev), RES_OK); + CHK(ssol_device_create(&logger, &allocator, 0, 0, &dev) == RES_BAD_ARG); + CHK(ssol_device_create + (&logger, &allocator, SSOL_NTHREADS_DEFAULT, 0, &dev) == RES_OK); + CHK(ssol_device_ref_put(dev) == RES_OK); logger_release(&logger); check_memory_allocator(&allocator); mem_shutdown_proxy_allocator(&allocator); - CHECK(mem_allocated_size(), 0); + CHK(mem_allocated_size() == 0); return 0; } diff --git a/src/test_ssol_draw.c b/src/test_ssol_draw.c @@ -35,7 +35,7 @@ get_wlen(const size_t i, double* wlen, double* data, void* ctx) { double wavelengths[3] = { 1, 2, 3 }; double intensities[3] = { 1, 0.8, 1 }; - CHECK(i < 3, 1); + CHK(i < 3); (void)ctx; *wlen = wavelengths[i]; *data = intensities[i]; @@ -54,8 +54,8 @@ write_RGB8 size_t src_pitch = ssol_sizeof_pixel_format(fmt) * sz[0]; size_t x, y; - CHECK(org[0] + sz[0] <= WIDTH, 1); - CHECK(org[1] + sz[1] <= HEIGHT, 1); + CHK(org[0] + sz[0] <= WIDTH); + CHK(org[1] + sz[1] <= HEIGHT); FOR_EACH(y, 0, sz[1]) { unsigned char* row_dst = img + (y + org[1]) * PITCH; @@ -136,8 +136,8 @@ setup_cornell_box(struct ssol_device* dev, struct ssol_scene* scn) shader.normal = get_shader_normal; shader.reflectivity = get_shader_reflectivity; - CHECK(ssol_material_create_matte(dev, &mtl), RES_OK); - CHECK(ssol_matte_setup(mtl, &shader), RES_OK); + CHK(ssol_material_create_matte(dev, &mtl) == RES_OK); + CHK(ssol_matte_setup(mtl, &shader) == RES_OK); vdata.usage = SSOL_POSITION; vdata.get = get_position; @@ -145,45 +145,45 @@ setup_cornell_box(struct ssol_device* dev, struct ssol_scene* scn) desc.vertices = walls; desc.indices = walls_ids; - CHECK(ssol_shape_create_mesh(dev, &shape), RES_OK); - CHECK(ssol_mesh_setup(shape, 10, get_ids, 8, &vdata, 1, &desc), RES_OK); - CHECK(ssol_object_create(dev, &obj), RES_OK); - CHECK(ssol_object_add_shaded_shape(obj, shape, mtl, mtl), RES_OK); - CHECK(ssol_object_instantiate(obj, &inst), RES_OK); - CHECK(ssol_scene_attach_instance(scn, inst), RES_OK); - CHECK(ssol_instance_ref_put(inst), RES_OK); - CHECK(ssol_shape_ref_put(shape), RES_OK); - CHECK(ssol_object_ref_put(obj), RES_OK); + CHK(ssol_shape_create_mesh(dev, &shape) == RES_OK); + CHK(ssol_mesh_setup(shape, 10, get_ids, 8, &vdata, 1, &desc) == RES_OK); + CHK(ssol_object_create(dev, &obj) == RES_OK); + CHK(ssol_object_add_shaded_shape(obj, shape, mtl, mtl) == RES_OK); + CHK(ssol_object_instantiate(obj, &inst) == RES_OK); + CHK(ssol_scene_attach_instance(scn, inst) == RES_OK); + CHK(ssol_instance_ref_put(inst) == RES_OK); + CHK(ssol_shape_ref_put(shape) == RES_OK); + CHK(ssol_object_ref_put(obj) == RES_OK); desc.vertices = short_block; desc.indices = block_ids; - CHECK(ssol_shape_create_mesh(dev, &shape), RES_OK); - CHECK(ssol_mesh_setup(shape, 10, get_ids, 8, &vdata, 1, &desc), RES_OK); - CHECK(ssol_object_create(dev, &obj), RES_OK); - CHECK(ssol_object_add_shaded_shape(obj, shape, mtl, mtl), RES_OK); - CHECK(ssol_object_instantiate(obj, &inst), RES_OK); - CHECK(ssol_scene_attach_instance(scn, inst), RES_OK); - CHECK(ssol_instance_ref_put(inst), RES_OK); - CHECK(ssol_shape_ref_put(shape), RES_OK); - CHECK(ssol_object_ref_put(obj), RES_OK); + CHK(ssol_shape_create_mesh(dev, &shape) == RES_OK); + CHK(ssol_mesh_setup(shape, 10, get_ids, 8, &vdata, 1, &desc) == RES_OK); + CHK(ssol_object_create(dev, &obj) == RES_OK); + CHK(ssol_object_add_shaded_shape(obj, shape, mtl, mtl) == RES_OK); + CHK(ssol_object_instantiate(obj, &inst) == RES_OK); + CHK(ssol_scene_attach_instance(scn, inst) == RES_OK); + CHK(ssol_instance_ref_put(inst) == RES_OK); + CHK(ssol_shape_ref_put(shape) == RES_OK); + CHK(ssol_object_ref_put(obj) == RES_OK); desc.vertices = tall_block; desc.indices = block_ids; - CHECK(ssol_shape_create_mesh(dev, &shape), RES_OK); - CHECK(ssol_mesh_setup(shape, 10, get_ids, 8, &vdata, 1, &desc), RES_OK); - CHECK(ssol_object_create(dev, &obj), RES_OK); - CHECK(ssol_object_add_shaded_shape(obj, shape, mtl, mtl), RES_OK); - CHECK(ssol_object_instantiate(obj, &inst), RES_OK); - CHECK(ssol_scene_attach_instance(scn, inst), RES_OK); - CHECK(ssol_instance_ref_put(inst), RES_OK); - CHECK(ssol_shape_ref_put(shape), RES_OK); - CHECK(ssol_object_ref_put(obj), RES_OK); - - CHECK(ssol_material_ref_put(mtl), RES_OK); - - CHECK(ssol_scene_compute_aabb(scn, lower, upper), RES_OK); - CHECK(f3_eq_eps(lower, f3(tmp, 0, 0, 0), 1.e-6f), 1); - CHECK(f3_eq_eps(upper, f3(tmp, 552.f, 559.f, 548.f), 1.e-6f), 1); + CHK(ssol_shape_create_mesh(dev, &shape) == RES_OK); + CHK(ssol_mesh_setup(shape, 10, get_ids, 8, &vdata, 1, &desc) == RES_OK); + CHK(ssol_object_create(dev, &obj) == RES_OK); + CHK(ssol_object_add_shaded_shape(obj, shape, mtl, mtl) == RES_OK); + CHK(ssol_object_instantiate(obj, &inst) == RES_OK); + CHK(ssol_scene_attach_instance(scn, inst) == RES_OK); + CHK(ssol_instance_ref_put(inst) == RES_OK); + CHK(ssol_shape_ref_put(shape) == RES_OK); + CHK(ssol_object_ref_put(obj) == RES_OK); + + CHK(ssol_material_ref_put(mtl) == RES_OK); + + CHK(ssol_scene_compute_aabb(scn, lower, upper) == RES_OK); + CHK(f3_eq_eps(lower, f3(tmp, 0, 0, 0), 1.e-6f) == 1); + CHK(f3_eq_eps(upper, f3(tmp, 552.f, 559.f, 548.f), 1.e-6f) == 1); } @@ -242,121 +242,121 @@ main(int argc, char** argv) return -1; } - CHECK(mem_init_proxy_allocator(&allocator, &mem_default_allocator), RES_OK); + CHK(mem_init_proxy_allocator(&allocator, &mem_default_allocator) == RES_OK); - CHECK(ssol_device_create - (NULL, &allocator, SSOL_NTHREADS_DEFAULT, 0, &dev), RES_OK); + CHK(ssol_device_create + (NULL, &allocator, SSOL_NTHREADS_DEFAULT, 0, &dev) == RES_OK); - CHECK(ssol_scene_create(dev, &scn), RES_OK); + CHK(ssol_scene_create(dev, &scn) == RES_OK); setup_cornell_box(dev, scn); - CHECK(ssol_camera_create(dev, &cam), RES_OK); - CHECK(ssol_camera_set_proj_ratio(cam, PROJ_RATIO), RES_OK); - CHECK(ssol_camera_set_fov(cam, PI/4.0), RES_OK); - CHECK(ssol_camera_look_at(cam, pos, tgt, up), RES_OK); + CHK(ssol_camera_create(dev, &cam) == RES_OK); + CHK(ssol_camera_set_proj_ratio(cam, PROJ_RATIO) == RES_OK); + CHK(ssol_camera_set_fov(cam, PI/4.0) == RES_OK); + CHK(ssol_camera_look_at(cam, pos, tgt, up) == RES_OK); d3(dir, 1, 1, -1); d3_normalize(dir, dir); - CHECK(ssol_sun_create_directional(dev, &sun), RES_OK); - CHECK(ssol_sun_set_direction(sun, dir), RES_OK); - CHECK(ssol_sun_set_dni(sun, 1000), RES_OK); - CHECK(ssol_scene_attach_sun(scn, sun), RES_OK); + CHK(ssol_sun_create_directional(dev, &sun) == RES_OK); + CHK(ssol_sun_set_direction(sun, dir) == RES_OK); + CHK(ssol_sun_set_dni(sun, 1000) == RES_OK); + CHK(ssol_scene_attach_sun(scn, sun) == RES_OK); pitch = WIDTH * sizeof_image_format(IMAGE_RGB8); image_init(&allocator, &img); image_setup(&img, WIDTH, HEIGHT, pitch, IMAGE_RGB8, NULL); pixels = (uint8_t*)img.pixels; - CHECK(draw_func(NULL, NULL, 0, 0, 0, NULL, pixels), RES_BAD_ARG); - CHECK(draw_func(scn, NULL, 0, 0, 0, NULL, pixels), RES_BAD_ARG); - CHECK(draw_func(NULL, cam, 0, 0, 0, NULL, pixels), RES_BAD_ARG); - CHECK(draw_func(scn, cam, 0, 0, 0, NULL, pixels), RES_BAD_ARG); - CHECK(draw_func(NULL, NULL, WIDTH, 0, 0, NULL, pixels), RES_BAD_ARG); - CHECK(draw_func(scn, NULL, WIDTH, 0, 0, NULL, pixels), RES_BAD_ARG); - CHECK(draw_func(NULL, cam, WIDTH, 0, 0, NULL, pixels), RES_BAD_ARG); - CHECK(draw_func(scn, cam, WIDTH, 0, 0, NULL, pixels), RES_BAD_ARG); - CHECK(draw_func(NULL, NULL, 0, HEIGHT, 0, NULL, pixels), RES_BAD_ARG); - CHECK(draw_func(scn, NULL, 0, HEIGHT, 0, NULL, pixels), RES_BAD_ARG); - CHECK(draw_func(NULL, cam, 0, HEIGHT, 0, NULL, pixels), RES_BAD_ARG); - CHECK(draw_func(scn, cam, 0, HEIGHT, 0, NULL, pixels), RES_BAD_ARG); - CHECK(draw_func(NULL, NULL, WIDTH, HEIGHT, 0, NULL, pixels), RES_BAD_ARG); - CHECK(draw_func(scn, NULL, WIDTH, HEIGHT, 0, NULL, pixels), RES_BAD_ARG); - CHECK(draw_func(NULL, cam, WIDTH, WIDTH, 0, NULL, pixels), RES_BAD_ARG); - CHECK(draw_func(scn, cam, WIDTH, HEIGHT, 0, NULL, pixels), RES_BAD_ARG); - CHECK(draw_func(NULL, NULL, 0, 0, 0, write_RGB8, pixels), RES_BAD_ARG); - CHECK(draw_func(scn, NULL, 0, 0, 0, write_RGB8, pixels), RES_BAD_ARG); - CHECK(draw_func(NULL, cam, 0, 0, 0, write_RGB8, pixels), RES_BAD_ARG); - CHECK(draw_func(scn, cam, 0, 0, 0, write_RGB8, pixels), RES_BAD_ARG); - CHECK(draw_func(NULL, NULL, WIDTH, 0, 0, write_RGB8, pixels), RES_BAD_ARG); - CHECK(draw_func(scn, NULL, WIDTH, 0, 0, write_RGB8, pixels), RES_BAD_ARG); - CHECK(draw_func(NULL, cam, WIDTH, 0, 0, write_RGB8, pixels), RES_BAD_ARG); - CHECK(draw_func(scn, cam, WIDTH, 0, 0, write_RGB8, pixels), RES_BAD_ARG); - CHECK(draw_func(NULL, NULL, 0, HEIGHT, 0, write_RGB8, pixels), RES_BAD_ARG); - CHECK(draw_func(scn, NULL, 0, HEIGHT, 0, write_RGB8, pixels), RES_BAD_ARG); - CHECK(draw_func(NULL, cam, 0, HEIGHT, 0, write_RGB8, pixels), RES_BAD_ARG); - CHECK(draw_func(scn, cam, 0, HEIGHT, 0, write_RGB8, pixels), RES_BAD_ARG); - CHECK(draw_func(NULL, NULL, WIDTH, HEIGHT, 0, write_RGB8, pixels), RES_BAD_ARG); - CHECK(draw_func(scn, NULL, WIDTH, HEIGHT, 0, write_RGB8, pixels), RES_BAD_ARG); - CHECK(draw_func(NULL, cam, WIDTH, WIDTH, 0, write_RGB8, pixels), RES_BAD_ARG); - CHECK(draw_func(scn, cam, WIDTH, HEIGHT, 0, write_RGB8, pixels), RES_BAD_ARG); - CHECK(draw_func(NULL, NULL, 0, 0, 4, NULL, pixels), RES_BAD_ARG); - CHECK(draw_func(scn, NULL, 0, 0, 4, NULL, pixels), RES_BAD_ARG); - CHECK(draw_func(NULL, cam, 0, 0, 4, NULL, pixels), RES_BAD_ARG); - CHECK(draw_func(scn, cam, 0, 0, 4, NULL, pixels), RES_BAD_ARG); - CHECK(draw_func(NULL, NULL, WIDTH, 0, 4, NULL, pixels), RES_BAD_ARG); - CHECK(draw_func(scn, NULL, WIDTH, 0, 4, NULL, pixels), RES_BAD_ARG); - CHECK(draw_func(NULL, cam, WIDTH, 0, 4, NULL, pixels), RES_BAD_ARG); - CHECK(draw_func(scn, cam, WIDTH, 0, 4, NULL, pixels), RES_BAD_ARG); - CHECK(draw_func(NULL, NULL, 0, HEIGHT, 4, NULL, pixels), RES_BAD_ARG); - CHECK(draw_func(scn, NULL, 0, HEIGHT, 4, NULL, pixels), RES_BAD_ARG); - CHECK(draw_func(NULL, cam, 0, HEIGHT, 4, NULL, pixels), RES_BAD_ARG); - CHECK(draw_func(scn, cam, 0, HEIGHT, 4, NULL, pixels), RES_BAD_ARG); - CHECK(draw_func(NULL, NULL, WIDTH, HEIGHT, 4, NULL, pixels), RES_BAD_ARG); - CHECK(draw_func(scn, NULL, WIDTH, HEIGHT, 4, NULL, pixels), RES_BAD_ARG); - CHECK(draw_func(NULL, cam, WIDTH, WIDTH, 4, NULL, pixels), RES_BAD_ARG); - CHECK(draw_func(scn, cam, WIDTH, HEIGHT, 4, NULL, pixels), RES_BAD_ARG); - CHECK(draw_func(NULL, NULL, 0, 0, 4, write_RGB8, pixels), RES_BAD_ARG); - CHECK(draw_func(scn, NULL, 0, 0, 4, write_RGB8, pixels), RES_BAD_ARG); - CHECK(draw_func(NULL, cam, 0, 0, 4, write_RGB8, pixels), RES_BAD_ARG); - CHECK(draw_func(scn, cam, 0, 0, 4, write_RGB8, pixels), RES_BAD_ARG); - CHECK(draw_func(NULL, NULL, WIDTH, 0, 4, write_RGB8, pixels), RES_BAD_ARG); - CHECK(draw_func(scn, NULL, WIDTH, 0, 4, write_RGB8, pixels), RES_BAD_ARG); - CHECK(draw_func(NULL, cam, WIDTH, 0, 4, write_RGB8, pixels), RES_BAD_ARG); - CHECK(draw_func(scn, cam, WIDTH, 0, 4, write_RGB8, pixels), RES_BAD_ARG); - CHECK(draw_func(NULL, NULL, 0, HEIGHT, 4, write_RGB8, pixels), RES_BAD_ARG); - CHECK(draw_func(scn, NULL, 0, HEIGHT, 4, write_RGB8, pixels), RES_BAD_ARG); - CHECK(draw_func(NULL, cam, 0, HEIGHT, 4, write_RGB8, pixels), RES_BAD_ARG); - CHECK(draw_func(scn, cam, 0, HEIGHT, 4, write_RGB8, pixels), RES_BAD_ARG); - CHECK(draw_func(NULL, NULL, WIDTH, HEIGHT, 4, write_RGB8, pixels), RES_BAD_ARG); - CHECK(draw_func(scn, NULL, WIDTH, HEIGHT, 4, write_RGB8, pixels), RES_BAD_ARG); - CHECK(draw_func(NULL, cam, WIDTH, WIDTH, 4, write_RGB8, pixels), RES_BAD_ARG); + CHK(draw_func(NULL, NULL, 0, 0, 0, NULL, pixels) == RES_BAD_ARG); + CHK(draw_func(scn, NULL, 0, 0, 0, NULL, pixels) == RES_BAD_ARG); + CHK(draw_func(NULL, cam, 0, 0, 0, NULL, pixels) == RES_BAD_ARG); + CHK(draw_func(scn, cam, 0, 0, 0, NULL, pixels) == RES_BAD_ARG); + CHK(draw_func(NULL, NULL, WIDTH, 0, 0, NULL, pixels) == RES_BAD_ARG); + CHK(draw_func(scn, NULL, WIDTH, 0, 0, NULL, pixels) == RES_BAD_ARG); + CHK(draw_func(NULL, cam, WIDTH, 0, 0, NULL, pixels) == RES_BAD_ARG); + CHK(draw_func(scn, cam, WIDTH, 0, 0, NULL, pixels) == RES_BAD_ARG); + CHK(draw_func(NULL, NULL, 0, HEIGHT, 0, NULL, pixels) == RES_BAD_ARG); + CHK(draw_func(scn, NULL, 0, HEIGHT, 0, NULL, pixels) == RES_BAD_ARG); + CHK(draw_func(NULL, cam, 0, HEIGHT, 0, NULL, pixels) == RES_BAD_ARG); + CHK(draw_func(scn, cam, 0, HEIGHT, 0, NULL, pixels) == RES_BAD_ARG); + CHK(draw_func(NULL, NULL, WIDTH, HEIGHT, 0, NULL, pixels) == RES_BAD_ARG); + CHK(draw_func(scn, NULL, WIDTH, HEIGHT, 0, NULL, pixels) == RES_BAD_ARG); + CHK(draw_func(NULL, cam, WIDTH, WIDTH, 0, NULL, pixels) == RES_BAD_ARG); + CHK(draw_func(scn, cam, WIDTH, HEIGHT, 0, NULL, pixels) == RES_BAD_ARG); + CHK(draw_func(NULL, NULL, 0, 0, 0, write_RGB8, pixels) == RES_BAD_ARG); + CHK(draw_func(scn, NULL, 0, 0, 0, write_RGB8, pixels) == RES_BAD_ARG); + CHK(draw_func(NULL, cam, 0, 0, 0, write_RGB8, pixels) == RES_BAD_ARG); + CHK(draw_func(scn, cam, 0, 0, 0, write_RGB8, pixels) == RES_BAD_ARG); + CHK(draw_func(NULL, NULL, WIDTH, 0, 0, write_RGB8, pixels) == RES_BAD_ARG); + CHK(draw_func(scn, NULL, WIDTH, 0, 0, write_RGB8, pixels) == RES_BAD_ARG); + CHK(draw_func(NULL, cam, WIDTH, 0, 0, write_RGB8, pixels) == RES_BAD_ARG); + CHK(draw_func(scn, cam, WIDTH, 0, 0, write_RGB8, pixels) == RES_BAD_ARG); + CHK(draw_func(NULL, NULL, 0, HEIGHT, 0, write_RGB8, pixels) == RES_BAD_ARG); + CHK(draw_func(scn, NULL, 0, HEIGHT, 0, write_RGB8, pixels) == RES_BAD_ARG); + CHK(draw_func(NULL, cam, 0, HEIGHT, 0, write_RGB8, pixels) == RES_BAD_ARG); + CHK(draw_func(scn, cam, 0, HEIGHT, 0, write_RGB8, pixels) == RES_BAD_ARG); + CHK(draw_func(NULL, NULL, WIDTH, HEIGHT, 0, write_RGB8, pixels) == RES_BAD_ARG); + CHK(draw_func(scn, NULL, WIDTH, HEIGHT, 0, write_RGB8, pixels) == RES_BAD_ARG); + CHK(draw_func(NULL, cam, WIDTH, WIDTH, 0, write_RGB8, pixels) == RES_BAD_ARG); + CHK(draw_func(scn, cam, WIDTH, HEIGHT, 0, write_RGB8, pixels) == RES_BAD_ARG); + CHK(draw_func(NULL, NULL, 0, 0, 4, NULL, pixels) == RES_BAD_ARG); + CHK(draw_func(scn, NULL, 0, 0, 4, NULL, pixels) == RES_BAD_ARG); + CHK(draw_func(NULL, cam, 0, 0, 4, NULL, pixels) == RES_BAD_ARG); + CHK(draw_func(scn, cam, 0, 0, 4, NULL, pixels) == RES_BAD_ARG); + CHK(draw_func(NULL, NULL, WIDTH, 0, 4, NULL, pixels) == RES_BAD_ARG); + CHK(draw_func(scn, NULL, WIDTH, 0, 4, NULL, pixels) == RES_BAD_ARG); + CHK(draw_func(NULL, cam, WIDTH, 0, 4, NULL, pixels) == RES_BAD_ARG); + CHK(draw_func(scn, cam, WIDTH, 0, 4, NULL, pixels) == RES_BAD_ARG); + CHK(draw_func(NULL, NULL, 0, HEIGHT, 4, NULL, pixels) == RES_BAD_ARG); + CHK(draw_func(scn, NULL, 0, HEIGHT, 4, NULL, pixels) == RES_BAD_ARG); + CHK(draw_func(NULL, cam, 0, HEIGHT, 4, NULL, pixels) == RES_BAD_ARG); + CHK(draw_func(scn, cam, 0, HEIGHT, 4, NULL, pixels) == RES_BAD_ARG); + CHK(draw_func(NULL, NULL, WIDTH, HEIGHT, 4, NULL, pixels) == RES_BAD_ARG); + CHK(draw_func(scn, NULL, WIDTH, HEIGHT, 4, NULL, pixels) == RES_BAD_ARG); + CHK(draw_func(NULL, cam, WIDTH, WIDTH, 4, NULL, pixels) == RES_BAD_ARG); + CHK(draw_func(scn, cam, WIDTH, HEIGHT, 4, NULL, pixels) == RES_BAD_ARG); + CHK(draw_func(NULL, NULL, 0, 0, 4, write_RGB8, pixels) == RES_BAD_ARG); + CHK(draw_func(scn, NULL, 0, 0, 4, write_RGB8, pixels) == RES_BAD_ARG); + CHK(draw_func(NULL, cam, 0, 0, 4, write_RGB8, pixels) == RES_BAD_ARG); + CHK(draw_func(scn, cam, 0, 0, 4, write_RGB8, pixels) == RES_BAD_ARG); + CHK(draw_func(NULL, NULL, WIDTH, 0, 4, write_RGB8, pixels) == RES_BAD_ARG); + CHK(draw_func(scn, NULL, WIDTH, 0, 4, write_RGB8, pixels) == RES_BAD_ARG); + CHK(draw_func(NULL, cam, WIDTH, 0, 4, write_RGB8, pixels) == RES_BAD_ARG); + CHK(draw_func(scn, cam, WIDTH, 0, 4, write_RGB8, pixels) == RES_BAD_ARG); + CHK(draw_func(NULL, NULL, 0, HEIGHT, 4, write_RGB8, pixels) == RES_BAD_ARG); + CHK(draw_func(scn, NULL, 0, HEIGHT, 4, write_RGB8, pixels) == RES_BAD_ARG); + CHK(draw_func(NULL, cam, 0, HEIGHT, 4, write_RGB8, pixels) == RES_BAD_ARG); + CHK(draw_func(scn, cam, 0, HEIGHT, 4, write_RGB8, pixels) == RES_BAD_ARG); + CHK(draw_func(NULL, NULL, WIDTH, HEIGHT, 4, write_RGB8, pixels) == RES_BAD_ARG); + CHK(draw_func(scn, NULL, WIDTH, HEIGHT, 4, write_RGB8, pixels) == RES_BAD_ARG); + CHK(draw_func(NULL, cam, WIDTH, WIDTH, 4, write_RGB8, pixels) == RES_BAD_ARG); /* No sun spectrum */ - CHECK(draw_func(scn, cam, WIDTH, HEIGHT, 4, write_RGB8, pixels), RES_BAD_ARG); + CHK(draw_func(scn, cam, WIDTH, HEIGHT, 4, write_RGB8, pixels) == RES_BAD_ARG); - CHECK(ssol_spectrum_create(dev, &spectrum), RES_OK); - CHECK(ssol_spectrum_setup(spectrum, get_wlen, 3, NULL), RES_OK); - CHECK(ssol_sun_set_spectrum(sun, spectrum), RES_OK); - CHECK(draw_func(scn, cam, WIDTH, HEIGHT, 4, write_RGB8, pixels), RES_OK); + CHK(ssol_spectrum_create(dev, &spectrum) == RES_OK); + CHK(ssol_spectrum_setup(spectrum, get_wlen, 3, NULL) == RES_OK); + CHK(ssol_sun_set_spectrum(sun, spectrum) == RES_OK); + CHK(draw_func(scn, cam, WIDTH, HEIGHT, 4, write_RGB8, pixels) == RES_OK); - CHECK(image_write_ppm_stream(&img, 0, stdout), RES_OK); + CHK(image_write_ppm_stream(&img, 0, stdout) == RES_OK); if(draw_func == draw_pt) { - CHECK(ssol_draw_pt - (scn, cam, WIDTH, HEIGHT, 4, NULL, write_RGB8, pixels), RES_BAD_ARG); + CHK(ssol_draw_pt + (scn, cam, WIDTH, HEIGHT, 4, NULL, write_RGB8, pixels) == RES_BAD_ARG); } - CHECK(image_release(&img), RES_OK); - CHECK(ssol_device_ref_put(dev), RES_OK); - CHECK(ssol_camera_ref_put(cam), RES_OK); - CHECK(ssol_scene_ref_put(scn), RES_OK); - CHECK(ssol_spectrum_ref_put(spectrum), RES_OK); - CHECK(ssol_sun_ref_put(sun), RES_OK); + CHK(image_release(&img) == RES_OK); + CHK(ssol_device_ref_put(dev) == RES_OK); + CHK(ssol_camera_ref_put(cam) == RES_OK); + CHK(ssol_scene_ref_put(scn) == RES_OK); + CHK(ssol_spectrum_ref_put(spectrum) == RES_OK); + CHK(ssol_sun_ref_put(sun) == RES_OK); check_memory_allocator(&allocator); mem_shutdown_proxy_allocator(&allocator); - CHECK(mem_allocated_size(), 0); + CHK(mem_allocated_size() == 0); return 0; } diff --git a/src/test_ssol_geometries.h b/src/test_ssol_geometries.h @@ -29,8 +29,8 @@ get_ids(const unsigned itri, unsigned ids[3], void* data) { const unsigned id = itri * 3; struct desc* desc = data; - NCHECK(desc, NULL); - NCHECK(ids, NULL); + CHK(desc != NULL); + CHK(ids != NULL); ids[0] = desc->indices[id + 0]; ids[1] = desc->indices[id + 1]; ids[2] = desc->indices[id + 2]; @@ -40,8 +40,8 @@ static INLINE void get_position(const unsigned ivert, float position[3], void* data) { struct desc* desc = data; - NCHECK(desc, NULL); - NCHECK(position, NULL); + CHK(desc != NULL); + CHK(position != NULL); position[0] = desc->vertices[ivert * 3 + 0]; position[1] = desc->vertices[ivert * 3 + 1]; position[2] = desc->vertices[ivert * 3 + 2]; @@ -51,7 +51,7 @@ static INLINE void get_normal(const unsigned ivert, float normal[3], void* data) { (void)ivert, (void)data; - NCHECK(normal, NULL); + CHK(normal != NULL); normal[0] = 1.f; normal[1] = 0.f; normal[2] = 0.f; @@ -61,7 +61,7 @@ static INLINE void get_uv(const unsigned ivert, float uv[2], void* data) { (void)ivert, (void)data; - NCHECK(uv, NULL); + CHK(uv != NULL); uv[0] = -1.f; uv[1] = 1.f; } @@ -70,8 +70,8 @@ static INLINE void get_polygon_vertices(const size_t ivert, double position[2], void* ctx) { const double* verts = ctx; - NCHECK(position, NULL); - NCHECK(ctx, NULL); + CHK(position != NULL); + CHK(ctx != NULL); position[0] = verts[ivert*2+0]; position[1] = verts[ivert*2+1]; } diff --git a/src/test_ssol_image.c b/src/test_ssol_image.c @@ -31,13 +31,13 @@ check_sampling(struct ssol_device* dev) double pix[3]; double tmp[3]; - CHECK(ssol_image_create(dev, &img), RES_OK); - CHECK(ssol_image_setup(img, 4, 2, SSOL_PIXEL_DOUBLE3), RES_OK); - CHECK(ssol_image_get_layout(img, &layout), RES_OK); + CHK(ssol_image_create(dev, &img) == RES_OK); + CHK(ssol_image_setup(img, 4, 2, SSOL_PIXEL_DOUBLE3) == RES_OK); + CHK(ssol_image_get_layout(img, &layout) == RES_OK); pixsz = ssol_sizeof_pixel_format(layout.pixel_format); - CHECK(ssol_image_map(img, &mem), RES_OK); + CHK(ssol_image_map(img, &mem) == RES_OK); d3((double*)(mem + layout.offset + 0*pixsz + 0*layout.row_pitch), 1, 0, 0); d3((double*)(mem + layout.offset + 1*pixsz + 0*layout.row_pitch), 1, 0, 0); d3((double*)(mem + layout.offset + 2*pixsz + 0*layout.row_pitch), 1, 1, 0); @@ -46,7 +46,7 @@ check_sampling(struct ssol_device* dev) d3((double*)(mem + layout.offset + 1*pixsz + 1*layout.row_pitch), 1, 0, 1); d3((double*)(mem + layout.offset + 2*pixsz + 1*layout.row_pitch), 0, 1, 1); d3((double*)(mem + layout.offset + 3*pixsz + 1*layout.row_pitch), 0, 1, 1); - CHECK(ssol_image_unmap(img), RES_OK); + CHK(ssol_image_unmap(img) == RES_OK); #define CLAMPED SSOL_ADDRESS_CLAMP #define REPEAT SSOL_ADDRESS_REPEAT @@ -54,54 +54,54 @@ check_sampling(struct ssol_device* dev) #define LINEAR SSOL_FILTER_LINEAR d2_splat(uv, 0); - CHECK(ssol_image_sample(NULL, NEAREST, CLAMPED, CLAMPED, NULL, NULL), RES_BAD_ARG); - CHECK(ssol_image_sample(img, NEAREST, CLAMPED, CLAMPED, NULL, NULL), RES_BAD_ARG); - CHECK(ssol_image_sample(NULL, NEAREST, CLAMPED, CLAMPED, uv, NULL), RES_BAD_ARG); - CHECK(ssol_image_sample(img, NEAREST, CLAMPED, CLAMPED, uv, NULL), RES_BAD_ARG); - CHECK(ssol_image_sample(NULL, NEAREST, CLAMPED, CLAMPED, NULL, pix), RES_BAD_ARG); - CHECK(ssol_image_sample(img, NEAREST, CLAMPED, CLAMPED, NULL, pix), RES_BAD_ARG); - CHECK(ssol_image_sample(NULL, NEAREST, CLAMPED, CLAMPED, uv, pix), RES_BAD_ARG); - CHECK(ssol_image_sample(img, NEAREST, CLAMPED, CLAMPED, uv, pix), RES_OK); - CHECK(d3_eq(pix, d3(tmp,1,0,0)), 1); + CHK(ssol_image_sample(NULL, NEAREST, CLAMPED, CLAMPED, NULL, NULL) == RES_BAD_ARG); + CHK(ssol_image_sample(img, NEAREST, CLAMPED, CLAMPED, NULL, NULL) == RES_BAD_ARG); + CHK(ssol_image_sample(NULL, NEAREST, CLAMPED, CLAMPED, uv, NULL) == RES_BAD_ARG); + CHK(ssol_image_sample(img, NEAREST, CLAMPED, CLAMPED, uv, NULL) == RES_BAD_ARG); + CHK(ssol_image_sample(NULL, NEAREST, CLAMPED, CLAMPED, NULL, pix) == RES_BAD_ARG); + CHK(ssol_image_sample(img, NEAREST, CLAMPED, CLAMPED, NULL, pix) == RES_BAD_ARG); + CHK(ssol_image_sample(NULL, NEAREST, CLAMPED, CLAMPED, uv, pix) == RES_BAD_ARG); + CHK(ssol_image_sample(img, NEAREST, CLAMPED, CLAMPED, uv, pix) == RES_OK); + CHK(d3_eq(pix, d3(tmp,1,0,0)) == 1); uv[0] = 1.0/4.0; - CHECK(ssol_image_sample(img, NEAREST, CLAMPED, CLAMPED, uv, pix), RES_OK); - CHECK(d3_eq(pix, d3(tmp,1,0,0)), 1); + CHK(ssol_image_sample(img, NEAREST, CLAMPED, CLAMPED, uv, pix) == RES_OK); + CHK(d3_eq(pix, d3(tmp,1,0,0)) == 1); uv[0] = 2.0/4.0; - CHECK(ssol_image_sample(img, NEAREST, CLAMPED, CLAMPED, uv, pix), RES_OK); - CHECK(d3_eq(pix, d3(tmp,1,1,0)), 1); + CHK(ssol_image_sample(img, NEAREST, CLAMPED, CLAMPED, uv, pix) == RES_OK); + CHK(d3_eq(pix, d3(tmp,1,1,0)) == 1); uv[0] = 3.0/4.0; - CHECK(ssol_image_sample(img, NEAREST, CLAMPED, CLAMPED, uv, pix), RES_OK); - CHECK(d3_eq(pix, d3(tmp,1,1,0)), 1); + CHK(ssol_image_sample(img, NEAREST, CLAMPED, CLAMPED, uv, pix) == RES_OK); + CHK(d3_eq(pix, d3(tmp,1,1,0)) == 1); uv[0] = -1.0/4.0; - CHECK(ssol_image_sample(img, NEAREST, CLAMPED, CLAMPED, uv, pix), RES_OK); - CHECK(d3_eq(pix, d3(tmp,1,0,0)), 1); - CHECK(ssol_image_sample(img, NEAREST, REPEAT, CLAMPED, uv, pix), RES_OK); - CHECK(d3_eq(pix, d3(tmp,1,1,0)), 1); + CHK(ssol_image_sample(img, NEAREST, CLAMPED, CLAMPED, uv, pix) == RES_OK); + CHK(d3_eq(pix, d3(tmp,1,0,0)) == 1); + CHK(ssol_image_sample(img, NEAREST, REPEAT, CLAMPED, uv, pix) == RES_OK); + CHK(d3_eq(pix, d3(tmp,1,1,0)) == 1); uv[0] = 4.0/4.0; - CHECK(ssol_image_sample(img, NEAREST, CLAMPED, CLAMPED, uv, pix), RES_OK); - CHECK(d3_eq(pix, d3(tmp,1,1,0)), 1); - CHECK(ssol_image_sample(img, NEAREST, REPEAT, CLAMPED, uv, pix), RES_OK); - CHECK(d3_eq(pix, d3(tmp,1,0,0)), 1); + CHK(ssol_image_sample(img, NEAREST, CLAMPED, CLAMPED, uv, pix) == RES_OK); + CHK(d3_eq(pix, d3(tmp,1,1,0)) == 1); + CHK(ssol_image_sample(img, NEAREST, REPEAT, CLAMPED, uv, pix) == RES_OK); + CHK(d3_eq(pix, d3(tmp,1,0,0)) == 1); uv[1] = 1.0/2.0; - CHECK(ssol_image_sample(img, NEAREST, CLAMPED, CLAMPED, uv, pix), RES_OK); - CHECK(d3_eq(pix, d3(tmp,0,1,1)), 1); + CHK(ssol_image_sample(img, NEAREST, CLAMPED, CLAMPED, uv, pix) == RES_OK); + CHK(d3_eq(pix, d3(tmp,0,1,1)) == 1); uv[1] = 2.0/2.0; - CHECK(ssol_image_sample(img, NEAREST, REPEAT, CLAMPED, uv, pix), RES_OK); - CHECK(d3_eq(pix, d3(tmp,1,0,1)), 1); - CHECK(ssol_image_sample(img, NEAREST, REPEAT, REPEAT, uv, pix), RES_OK); - CHECK(d3_eq(pix, d3(tmp,1,0,0)), 1); - CHECK(ssol_image_sample(img, NEAREST, CLAMPED, REPEAT, uv, pix), RES_OK); - CHECK(d3_eq(pix, d3(tmp,1,1,0)), 1); + CHK(ssol_image_sample(img, NEAREST, REPEAT, CLAMPED, uv, pix) == RES_OK); + CHK(d3_eq(pix, d3(tmp,1,0,1)) == 1); + CHK(ssol_image_sample(img, NEAREST, REPEAT, REPEAT, uv, pix) == RES_OK); + CHK(d3_eq(pix, d3(tmp,1,0,0)) == 1); + CHK(ssol_image_sample(img, NEAREST, CLAMPED, REPEAT, uv, pix) == RES_OK); + CHK(d3_eq(pix, d3(tmp,1,1,0)) == 1); uv[0] = 1.0/4.0 + 1.0/8.0; uv[1] = 0.0/2.0 + 1.0/4.0; - CHECK(ssol_image_sample(img, LINEAR, CLAMPED, CLAMPED, uv, pix), RES_OK); - CHECK(d3_eq(pix, d3(tmp,0.75,0.5,0.5)), 1); + CHK(ssol_image_sample(img, LINEAR, CLAMPED, CLAMPED, uv, pix) == RES_OK); + CHK(d3_eq(pix, d3(tmp,0.75,0.5,0.5)) == 1); - CHECK(ssol_image_ref_put(img), RES_OK); + CHK(ssol_image_ref_put(img) == RES_OK); } int @@ -120,74 +120,74 @@ main(int argc, char** argv) mem_init_proxy_allocator(&allocator, &mem_default_allocator); - CHECK(ssol_device_create - (NULL, &allocator, SSOL_NTHREADS_DEFAULT, 0, &dev), RES_OK); + CHK(ssol_device_create + (NULL, &allocator, SSOL_NTHREADS_DEFAULT, 0, &dev) == RES_OK); - CHECK(ssol_image_create(dev, &img), RES_OK); + CHK(ssol_image_create(dev, &img) == RES_OK); - CHECK(ssol_image_ref_get(NULL), RES_BAD_ARG); - CHECK(ssol_image_ref_get(img), RES_OK); + CHK(ssol_image_ref_get(NULL) == RES_BAD_ARG); + CHK(ssol_image_ref_get(img) == RES_OK); - CHECK(ssol_image_ref_put(NULL), RES_BAD_ARG); - CHECK(ssol_image_ref_put(img), RES_OK); + CHK(ssol_image_ref_put(NULL) == RES_BAD_ARG); + CHK(ssol_image_ref_put(img) == RES_OK); - CHECK(ssol_image_setup(NULL, 128, 128, SSOL_PIXEL_DOUBLE3), RES_BAD_ARG); - CHECK(ssol_image_setup(img, 0, 128, SSOL_PIXEL_DOUBLE3), RES_BAD_ARG); - CHECK(ssol_image_setup(img, 32, 32, (enum ssol_pixel_format)99), RES_BAD_ARG); - CHECK(ssol_image_setup(img, 128, 128, SSOL_PIXEL_DOUBLE3), RES_OK); - CHECK(ssol_image_setup(img, 128, 128, SSOL_PIXEL_DOUBLE3), RES_OK); - CHECK(ssol_image_setup(img, 16, 16, SSOL_PIXEL_DOUBLE3), RES_OK); + CHK(ssol_image_setup(NULL, 128, 128, SSOL_PIXEL_DOUBLE3) == RES_BAD_ARG); + CHK(ssol_image_setup(img, 0, 128, SSOL_PIXEL_DOUBLE3) == RES_BAD_ARG); + CHK(ssol_image_setup(img, 32, 32, (enum ssol_pixel_format)99) == RES_BAD_ARG); + CHK(ssol_image_setup(img, 128, 128, SSOL_PIXEL_DOUBLE3) == RES_OK); + CHK(ssol_image_setup(img, 128, 128, SSOL_PIXEL_DOUBLE3) == RES_OK); + CHK(ssol_image_setup(img, 16, 16, SSOL_PIXEL_DOUBLE3) == RES_OK); org[0] = 0, org[1] = 0; sz[0] = 8, sz[1] = 8; #define WRITE ssol_image_write FOR_EACH(i, 0, sizeof(block)/sizeof(double)) block[i] = 1.0; - CHECK(WRITE(NULL, NULL, NULL, SSOL_PIXEL_DOUBLE3, NULL), RES_BAD_ARG); - CHECK(WRITE(img, NULL, NULL, SSOL_PIXEL_DOUBLE3, NULL), RES_BAD_ARG); - CHECK(WRITE(NULL, org, NULL, SSOL_PIXEL_DOUBLE3, NULL), RES_BAD_ARG); - CHECK(WRITE(img, org, NULL, SSOL_PIXEL_DOUBLE3, NULL), RES_BAD_ARG); - CHECK(WRITE(NULL, NULL, sz, SSOL_PIXEL_DOUBLE3, NULL), RES_BAD_ARG); - CHECK(WRITE(img, NULL, sz, SSOL_PIXEL_DOUBLE3, NULL), RES_BAD_ARG); - CHECK(WRITE(NULL, org, sz, SSOL_PIXEL_DOUBLE3, NULL), RES_BAD_ARG); - CHECK(WRITE(img, org, sz, SSOL_PIXEL_DOUBLE3, NULL), RES_BAD_ARG); - CHECK(WRITE(NULL, NULL, NULL, SSOL_PIXEL_DOUBLE3, block), RES_BAD_ARG); - CHECK(WRITE(img, NULL, NULL, SSOL_PIXEL_DOUBLE3, block), RES_BAD_ARG); - CHECK(WRITE(NULL, org, NULL, SSOL_PIXEL_DOUBLE3, block), RES_BAD_ARG); - CHECK(WRITE(img, org, NULL, SSOL_PIXEL_DOUBLE3, block), RES_BAD_ARG); - CHECK(WRITE(NULL, NULL, sz, SSOL_PIXEL_DOUBLE3, block), RES_BAD_ARG); - CHECK(WRITE(img, NULL, sz, SSOL_PIXEL_DOUBLE3, block), RES_BAD_ARG); - CHECK(WRITE(NULL, org, sz, SSOL_PIXEL_DOUBLE3, block), RES_BAD_ARG); - CHECK(WRITE(img, org, sz, SSOL_PIXEL_DOUBLE3, block), RES_OK); + CHK(WRITE(NULL, NULL, NULL, SSOL_PIXEL_DOUBLE3, NULL) == RES_BAD_ARG); + CHK(WRITE(img, NULL, NULL, SSOL_PIXEL_DOUBLE3, NULL) == RES_BAD_ARG); + CHK(WRITE(NULL, org, NULL, SSOL_PIXEL_DOUBLE3, NULL) == RES_BAD_ARG); + CHK(WRITE(img, org, NULL, SSOL_PIXEL_DOUBLE3, NULL) == RES_BAD_ARG); + CHK(WRITE(NULL, NULL, sz, SSOL_PIXEL_DOUBLE3, NULL) == RES_BAD_ARG); + CHK(WRITE(img, NULL, sz, SSOL_PIXEL_DOUBLE3, NULL) == RES_BAD_ARG); + CHK(WRITE(NULL, org, sz, SSOL_PIXEL_DOUBLE3, NULL) == RES_BAD_ARG); + CHK(WRITE(img, org, sz, SSOL_PIXEL_DOUBLE3, NULL) == RES_BAD_ARG); + CHK(WRITE(NULL, NULL, NULL, SSOL_PIXEL_DOUBLE3, block) == RES_BAD_ARG); + CHK(WRITE(img, NULL, NULL, SSOL_PIXEL_DOUBLE3, block) == RES_BAD_ARG); + CHK(WRITE(NULL, org, NULL, SSOL_PIXEL_DOUBLE3, block) == RES_BAD_ARG); + CHK(WRITE(img, org, NULL, SSOL_PIXEL_DOUBLE3, block) == RES_BAD_ARG); + CHK(WRITE(NULL, NULL, sz, SSOL_PIXEL_DOUBLE3, block) == RES_BAD_ARG); + CHK(WRITE(img, NULL, sz, SSOL_PIXEL_DOUBLE3, block) == RES_BAD_ARG); + CHK(WRITE(NULL, org, sz, SSOL_PIXEL_DOUBLE3, block) == RES_BAD_ARG); + CHK(WRITE(img, org, sz, SSOL_PIXEL_DOUBLE3, block) == RES_OK); org[0] = 14, org[1] = 0; - CHECK(WRITE(img, org, sz, SSOL_PIXEL_DOUBLE3, block), RES_BAD_ARG); + CHK(WRITE(img, org, sz, SSOL_PIXEL_DOUBLE3, block) == RES_BAD_ARG); org[0] = 8, org[1] = 0; FOR_EACH(i, 0, sizeof(block)/sizeof(double)) block[i] = 2.0; - CHECK(WRITE(img, org, sz, SSOL_PIXEL_DOUBLE3, block), RES_OK); + CHK(WRITE(img, org, sz, SSOL_PIXEL_DOUBLE3, block) == RES_OK); org[0] = 0, org[1] = 8; FOR_EACH(i, 0, sizeof(block)/sizeof(double)) block[i] = 3.0; - CHECK(WRITE(img, org, sz, SSOL_PIXEL_DOUBLE3, block), RES_OK); + CHK(WRITE(img, org, sz, SSOL_PIXEL_DOUBLE3, block) == RES_OK); org[0] = 8, org[1] = 8; FOR_EACH(i, 0, sizeof(block)/sizeof(double)) block[i] = 4.0; - CHECK(WRITE(img, org, sz, SSOL_PIXEL_DOUBLE3, block), RES_OK); + CHK(WRITE(img, org, sz, SSOL_PIXEL_DOUBLE3, block) == RES_OK); #undef WRITE - CHECK(ssol_image_get_layout(NULL, NULL), RES_BAD_ARG); - CHECK(ssol_image_get_layout(img, NULL), RES_BAD_ARG); - CHECK(ssol_image_get_layout(NULL, &layout), RES_BAD_ARG); - CHECK(ssol_image_get_layout(img, &layout), RES_OK); + CHK(ssol_image_get_layout(NULL, NULL) == RES_BAD_ARG); + CHK(ssol_image_get_layout(img, NULL) == RES_BAD_ARG); + CHK(ssol_image_get_layout(NULL, &layout) == RES_BAD_ARG); + CHK(ssol_image_get_layout(img, &layout) == RES_OK); - CHECK(layout.size > layout.offset, 1); - CHECK(layout.width, 16); - CHECK(layout.height, 16); - CHECK(layout.size - layout.offset >= 16*16, 1); - CHECK(layout.row_pitch >= 16, 1); - CHECK(layout.pixel_format, SSOL_PIXEL_DOUBLE3); + CHK(layout.size > layout.offset); + CHK(layout.width == 16); + CHK(layout.height == 16); + CHK(layout.size - layout.offset >= 16*16); + CHK(layout.row_pitch >= 16); + CHK(layout.pixel_format == SSOL_PIXEL_DOUBLE3); - CHECK(ssol_image_map(NULL, NULL), RES_BAD_ARG); - CHECK(ssol_image_map(img, NULL), RES_BAD_ARG); - CHECK(ssol_image_map(NULL, &mem), RES_BAD_ARG); - CHECK(ssol_image_map(img, &mem), RES_OK); + CHK(ssol_image_map(NULL, NULL) == RES_BAD_ARG); + CHK(ssol_image_map(img, NULL) == RES_BAD_ARG); + CHK(ssol_image_map(NULL, &mem) == RES_BAD_ARG); + CHK(ssol_image_map(img, &mem) == RES_OK); FOR_EACH(y, 0, layout.height) { const double* row = (const double*) @@ -196,38 +196,38 @@ main(int argc, char** argv) const double* pixel = row + x*3; if(y < 8) { if(x < 8) { - CHECK(pixel[0], 1); - CHECK(pixel[1], 1); - CHECK(pixel[2], 1); + CHK(pixel[0] == 1); + CHK(pixel[1] == 1); + CHK(pixel[2] == 1); } else { - CHECK(pixel[0], 2); - CHECK(pixel[1], 2); - CHECK(pixel[2], 2); + CHK(pixel[0] == 2); + CHK(pixel[1] == 2); + CHK(pixel[2] == 2); } } else { if(x < 8) { - CHECK(pixel[0], 3); - CHECK(pixel[1], 3); - CHECK(pixel[2], 3); + CHK(pixel[0] == 3); + CHK(pixel[1] == 3); + CHK(pixel[2] == 3); } else { - CHECK(pixel[0], 4); - CHECK(pixel[1], 4); - CHECK(pixel[2], 4); + CHK(pixel[0] == 4); + CHK(pixel[1] == 4); + CHK(pixel[2] == 4); } } } } - CHECK(ssol_image_unmap(NULL), RES_BAD_ARG); - CHECK(ssol_image_unmap(img), RES_OK); + CHK(ssol_image_unmap(NULL) == RES_BAD_ARG); + CHK(ssol_image_unmap(img) == RES_OK); - CHECK(ssol_image_ref_put(img), RES_OK); + CHK(ssol_image_ref_put(img) == RES_OK); check_sampling(dev); - CHECK(ssol_device_ref_put(dev), RES_OK); + CHK(ssol_device_ref_put(dev) == RES_OK); check_memory_allocator(&allocator); mem_shutdown_proxy_allocator(&allocator); - CHECK(mem_allocated_size(), 0); + CHK(mem_allocated_size() == 0); return 0; } diff --git a/src/test_ssol_instance.c b/src/test_ssol_instance.c @@ -44,146 +44,146 @@ main(int argc, char** argv) mem_init_proxy_allocator(&allocator, &mem_default_allocator); - CHECK(ssol_device_create - (NULL, &allocator, SSOL_NTHREADS_DEFAULT, 0, &dev), RES_OK); + CHK(ssol_device_create + (NULL, &allocator, SSOL_NTHREADS_DEFAULT, 0, &dev) == RES_OK); - CHECK(ssol_material_create_virtual(dev, &material), RES_OK); + CHK(ssol_material_create_virtual(dev, &material) == RES_OK); attrib.usage = SSOL_POSITION; attrib.get = get_position; - CHECK(ssol_shape_create_mesh(dev, &shape), RES_OK); - CHECK(ssol_mesh_setup(shape, SQUARE_NTRIS__, get_ids, SQUARE_NVERTS__, - &attrib, 1, (void*)&SQUARE_DESC__), RES_OK); - - 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, &instance1), RES_OK); - - CHECK(ssol_instance_get_id(NULL, NULL), RES_BAD_ARG); - CHECK(ssol_instance_get_id(instance, NULL), RES_BAD_ARG); - CHECK(ssol_instance_get_id(NULL, &id), RES_BAD_ARG); - CHECK(ssol_instance_get_id(instance, &id), RES_OK); - CHECK(ssol_instance_get_id(instance1, &id1), RES_OK); - NCHECK(id, id1); - - CHECK(ssol_instance_ref_get(NULL), RES_BAD_ARG); - CHECK(ssol_instance_ref_get(instance), RES_OK); - - CHECK(ssol_instance_ref_put(NULL), RES_BAD_ARG); - CHECK(ssol_instance_ref_put(instance), RES_OK); - - CHECK(ssol_instance_set_transform(NULL, transform), RES_BAD_ARG); - CHECK(ssol_instance_set_transform(instance, NULL), RES_BAD_ARG); - CHECK(ssol_instance_set_transform(instance, transform), RES_OK); - CHECK(ssol_instance_set_transform(instance, transform), RES_OK); - - CHECK(ssol_instance_get_area(instance, NULL), RES_BAD_ARG); - CHECK(ssol_instance_get_area(NULL, &area), RES_BAD_ARG); - CHECK(ssol_instance_get_area(instance, &area), RES_OK); - - CHECK(ssol_instance_set_receiver(NULL, 0, 0), RES_BAD_ARG); - CHECK(ssol_instance_set_receiver(instance, 0, 0), RES_OK); - - CHECK(ssol_instance_is_receiver(NULL, NULL, NULL), RES_BAD_ARG); - CHECK(ssol_instance_is_receiver(instance, NULL, NULL), RES_BAD_ARG); - CHECK(ssol_instance_is_receiver(NULL, &mask, NULL), RES_BAD_ARG); - CHECK(ssol_instance_is_receiver(instance, &mask, NULL), RES_BAD_ARG); - CHECK(ssol_instance_is_receiver(NULL, NULL, &prim), RES_BAD_ARG); - CHECK(ssol_instance_is_receiver(instance, NULL, &prim), RES_BAD_ARG); - CHECK(ssol_instance_is_receiver(NULL, &mask, &prim), RES_BAD_ARG); - CHECK(ssol_instance_is_receiver(instance, &mask, &prim), RES_OK); - CHECK(mask, 0); - CHECK(prim, 0); - - CHECK(ssol_instance_set_receiver(instance, SSOL_FRONT, 0), RES_OK); - CHECK(ssol_instance_is_receiver(instance, &mask, &prim), RES_OK); - CHECK(mask, SSOL_FRONT); - CHECK(prim, 0); - CHECK(ssol_instance_set_receiver(instance, SSOL_FRONT|SSOL_BACK, 1), RES_OK); - CHECK(ssol_instance_is_receiver(instance, &mask, &prim), RES_OK); - CHECK(mask, SSOL_FRONT|SSOL_BACK); - CHECK(prim, 1); - - CHECK(ssol_instance_sample(NULL, 0), RES_BAD_ARG); - CHECK(ssol_instance_sample(instance, 0), RES_OK); - CHECK(ssol_instance_sample(instance, 1), RES_OK); - - CHECK(ssol_instance_get_shaded_shapes_count(NULL, NULL), RES_BAD_ARG); - CHECK(ssol_instance_get_shaded_shapes_count(instance, NULL), RES_BAD_ARG); - CHECK(ssol_instance_get_shaded_shapes_count(NULL, &n), RES_BAD_ARG); - CHECK(ssol_instance_get_shaded_shapes_count(instance, &n), RES_OK); - CHECK(n, 1); - - CHECK(ssol_instance_get_shaded_shape(NULL, n, NULL), RES_BAD_ARG); - CHECK(ssol_instance_get_shaded_shape(instance, n, NULL), RES_BAD_ARG); - CHECK(ssol_instance_get_shaded_shape(NULL, 0, NULL), RES_BAD_ARG); - CHECK(ssol_instance_get_shaded_shape(instance, 0, NULL), RES_BAD_ARG); - CHECK(ssol_instance_get_shaded_shape(NULL, n, &sshape), RES_BAD_ARG); - CHECK(ssol_instance_get_shaded_shape(instance, n, &sshape), RES_BAD_ARG); - CHECK(ssol_instance_get_shaded_shape(NULL, 0, &sshape), RES_BAD_ARG); - CHECK(ssol_instance_get_shaded_shape(instance, 0, &sshape), RES_OK); - - CHECK(sshape.shape, shape); - CHECK(sshape.mtl_front, material); - CHECK(sshape.mtl_back, material); - - CHECK(ssol_shape_get_vertices_count(sshape.shape, &count), RES_OK); + CHK(ssol_shape_create_mesh(dev, &shape) == RES_OK); + CHK(ssol_mesh_setup(shape, SQUARE_NTRIS__, get_ids, SQUARE_NVERTS__, + &attrib, 1, (void*)&SQUARE_DESC__) == RES_OK); + + CHK(ssol_object_create(dev, &object) == RES_OK); + CHK(ssol_object_add_shaded_shape(object, shape, material, material) == RES_OK); + + CHK(ssol_object_instantiate(object, &instance) == RES_OK); + CHK(ssol_object_instantiate(object, &instance1) == RES_OK); + + CHK(ssol_instance_get_id(NULL, NULL) == RES_BAD_ARG); + CHK(ssol_instance_get_id(instance, NULL) == RES_BAD_ARG); + CHK(ssol_instance_get_id(NULL, &id) == RES_BAD_ARG); + CHK(ssol_instance_get_id(instance, &id) == RES_OK); + CHK(ssol_instance_get_id(instance1, &id1) == RES_OK); + CHK(id != id1); + + CHK(ssol_instance_ref_get(NULL) == RES_BAD_ARG); + CHK(ssol_instance_ref_get(instance) == RES_OK); + + CHK(ssol_instance_ref_put(NULL) == RES_BAD_ARG); + CHK(ssol_instance_ref_put(instance) == RES_OK); + + CHK(ssol_instance_set_transform(NULL, transform) == RES_BAD_ARG); + CHK(ssol_instance_set_transform(instance, NULL) == RES_BAD_ARG); + CHK(ssol_instance_set_transform(instance, transform) == RES_OK); + CHK(ssol_instance_set_transform(instance, transform) == RES_OK); + + CHK(ssol_instance_get_area(instance, NULL) == RES_BAD_ARG); + CHK(ssol_instance_get_area(NULL, &area) == RES_BAD_ARG); + CHK(ssol_instance_get_area(instance, &area) == RES_OK); + + CHK(ssol_instance_set_receiver(NULL, 0, 0) == RES_BAD_ARG); + CHK(ssol_instance_set_receiver(instance, 0, 0) == RES_OK); + + CHK(ssol_instance_is_receiver(NULL, NULL, NULL) == RES_BAD_ARG); + CHK(ssol_instance_is_receiver(instance, NULL, NULL) == RES_BAD_ARG); + CHK(ssol_instance_is_receiver(NULL, &mask, NULL) == RES_BAD_ARG); + CHK(ssol_instance_is_receiver(instance, &mask, NULL) == RES_BAD_ARG); + CHK(ssol_instance_is_receiver(NULL, NULL, &prim) == RES_BAD_ARG); + CHK(ssol_instance_is_receiver(instance, NULL, &prim) == RES_BAD_ARG); + CHK(ssol_instance_is_receiver(NULL, &mask, &prim) == RES_BAD_ARG); + CHK(ssol_instance_is_receiver(instance, &mask, &prim) == RES_OK); + CHK(mask == 0); + CHK(prim == 0); + + CHK(ssol_instance_set_receiver(instance, SSOL_FRONT, 0) == RES_OK); + CHK(ssol_instance_is_receiver(instance, &mask, &prim) == RES_OK); + CHK(mask == SSOL_FRONT); + CHK(prim == 0); + CHK(ssol_instance_set_receiver(instance, SSOL_FRONT|SSOL_BACK, 1) == RES_OK); + CHK(ssol_instance_is_receiver(instance, &mask, &prim) == RES_OK); + CHK(mask == (SSOL_FRONT|SSOL_BACK)); + CHK(prim == 1); + + CHK(ssol_instance_sample(NULL, 0) == RES_BAD_ARG); + CHK(ssol_instance_sample(instance, 0) == RES_OK); + CHK(ssol_instance_sample(instance, 1) == RES_OK); + + CHK(ssol_instance_get_shaded_shapes_count(NULL, NULL) == RES_BAD_ARG); + CHK(ssol_instance_get_shaded_shapes_count(instance, NULL) == RES_BAD_ARG); + CHK(ssol_instance_get_shaded_shapes_count(NULL, &n) == RES_BAD_ARG); + CHK(ssol_instance_get_shaded_shapes_count(instance, &n) == RES_OK); + CHK(n == 1); + + CHK(ssol_instance_get_shaded_shape(NULL, n, NULL) == RES_BAD_ARG); + CHK(ssol_instance_get_shaded_shape(instance, n, NULL) == RES_BAD_ARG); + CHK(ssol_instance_get_shaded_shape(NULL, 0, NULL) == RES_BAD_ARG); + CHK(ssol_instance_get_shaded_shape(instance, 0, NULL) == RES_BAD_ARG); + CHK(ssol_instance_get_shaded_shape(NULL, n, &sshape) == RES_BAD_ARG); + CHK(ssol_instance_get_shaded_shape(instance, n, &sshape) == RES_BAD_ARG); + CHK(ssol_instance_get_shaded_shape(NULL, 0, &sshape) == RES_BAD_ARG); + CHK(ssol_instance_get_shaded_shape(instance, 0, &sshape) == RES_OK); + + CHK(sshape.shape == shape); + CHK(sshape.mtl_front == material); + CHK(sshape.mtl_back == material); + + CHK(ssol_shape_get_vertices_count(sshape.shape, &count) == RES_OK); #define GET_ATTR ssol_instantiated_shaded_shape_get_vertex_attrib - CHECK(GET_ATTR(NULL, count, (unsigned)-1, NULL), RES_BAD_ARG); - CHECK(GET_ATTR(&sshape, count, (unsigned)-1, NULL), RES_BAD_ARG); - CHECK(GET_ATTR(NULL, 0, (unsigned)-1, NULL), RES_BAD_ARG); - CHECK(GET_ATTR(&sshape, 0, (unsigned)-1, NULL), RES_BAD_ARG); - CHECK(GET_ATTR(NULL, count, SSOL_POSITION, NULL), RES_BAD_ARG); - CHECK(GET_ATTR(&sshape, count, SSOL_POSITION, NULL), RES_BAD_ARG); - CHECK(GET_ATTR(NULL, 0, SSOL_POSITION, NULL), RES_BAD_ARG); - CHECK(GET_ATTR(&sshape, 0, SSOL_POSITION, NULL), RES_BAD_ARG); - CHECK(GET_ATTR(NULL, count, (unsigned)-1, val), RES_BAD_ARG); - CHECK(GET_ATTR(&sshape, count, (unsigned)-1, val), RES_BAD_ARG); - CHECK(GET_ATTR(NULL, 0, (unsigned)-1, val), RES_BAD_ARG); - CHECK(GET_ATTR(&sshape, 0, (unsigned)-1, val), RES_BAD_ARG); - CHECK(GET_ATTR(NULL, count, SSOL_POSITION, val), RES_BAD_ARG); - CHECK(GET_ATTR(&sshape, count, SSOL_POSITION, val), RES_BAD_ARG); - CHECK(GET_ATTR(NULL, 0, SSOL_POSITION, val), RES_BAD_ARG); + CHK(GET_ATTR(NULL, count, (unsigned)-1, NULL) == RES_BAD_ARG); + CHK(GET_ATTR(&sshape, count, (unsigned)-1, NULL) == RES_BAD_ARG); + CHK(GET_ATTR(NULL, 0, (unsigned)-1, NULL) == RES_BAD_ARG); + CHK(GET_ATTR(&sshape, 0, (unsigned)-1, NULL) == RES_BAD_ARG); + CHK(GET_ATTR(NULL, count, SSOL_POSITION, NULL) == RES_BAD_ARG); + CHK(GET_ATTR(&sshape, count, SSOL_POSITION, NULL) == RES_BAD_ARG); + CHK(GET_ATTR(NULL, 0, SSOL_POSITION, NULL) == RES_BAD_ARG); + CHK(GET_ATTR(&sshape, 0, SSOL_POSITION, NULL) == RES_BAD_ARG); + CHK(GET_ATTR(NULL, count, (unsigned)-1, val) == RES_BAD_ARG); + CHK(GET_ATTR(&sshape, count, (unsigned)-1, val) == RES_BAD_ARG); + CHK(GET_ATTR(NULL, 0, (unsigned)-1, val) == RES_BAD_ARG); + CHK(GET_ATTR(&sshape, 0, (unsigned)-1, val) == RES_BAD_ARG); + CHK(GET_ATTR(NULL, count, SSOL_POSITION, val) == RES_BAD_ARG); + CHK(GET_ATTR(&sshape, count, SSOL_POSITION, val) == RES_BAD_ARG); + CHK(GET_ATTR(NULL, 0, SSOL_POSITION, val) == RES_BAD_ARG); FOR_EACH(i, 0, count) { float valf[3]; double val2[3]; - CHECK(GET_ATTR(&sshape, i, SSOL_POSITION, val), RES_OK); + CHK(GET_ATTR(&sshape, i, SSOL_POSITION, val) == RES_OK); get_position(i, valf, (void*)&SQUARE_DESC__); d3_set_f3(val2, valf); d33_muld3(val2, transform, val2); d3_add(val2, transform+9, val2); - CHECK(eq_eps(val[0], val2[0], 1.e-6), 1); - CHECK(eq_eps(val[1], val2[1], 1.e-6), 1); - CHECK(eq_eps(val[2], val2[2], 1.e-6), 1); + CHK(eq_eps(val[0], val2[0], 1.e-6) == 1); + CHK(eq_eps(val[1], val2[1], 1.e-6) == 1); + CHK(eq_eps(val[2], val2[2], 1.e-6) == 1); } - CHECK(ssol_instance_get_shaded_shape(instance1, 0, &sshape), RES_OK); + CHK(ssol_instance_get_shaded_shape(instance1, 0, &sshape) == RES_OK); FOR_EACH(i, 0, count) { float valf[3]; - CHECK(GET_ATTR(&sshape, i, SSOL_POSITION, val), RES_OK); + CHK(GET_ATTR(&sshape, i, SSOL_POSITION, val) == RES_OK); get_position(i, valf, (void*)&SQUARE_DESC__); - CHECK((float)val[0], valf[0]); - CHECK((float)val[1], valf[1]); - CHECK((float)val[2], valf[2]); + CHK((float)val[0] == valf[0]); + CHK((float)val[1] == valf[1]); + CHK((float)val[2] == valf[2]); } #undef GET_ATTR - CHECK(ssol_instance_ref_put(instance), RES_OK); - CHECK(ssol_instance_ref_put(instance1), RES_OK); - CHECK(ssol_object_ref_put(object), RES_OK); - CHECK(ssol_shape_ref_put(shape), RES_OK); - CHECK(ssol_material_ref_put(material), RES_OK); + CHK(ssol_instance_ref_put(instance) == RES_OK); + CHK(ssol_instance_ref_put(instance1) == RES_OK); + CHK(ssol_object_ref_put(object) == RES_OK); + CHK(ssol_shape_ref_put(shape) == RES_OK); + CHK(ssol_material_ref_put(material) == RES_OK); - CHECK(ssol_device_ref_put(dev), RES_OK); + CHK(ssol_device_ref_put(dev) == RES_OK); check_memory_allocator(&allocator); mem_shutdown_proxy_allocator(&allocator); - CHECK(mem_allocated_size(), 0); + CHK(mem_allocated_size() == 0); return 0; } diff --git a/src/test_ssol_material.c b/src/test_ssol_material.c @@ -25,53 +25,64 @@ test_mirror(struct ssol_device* dev) struct ssol_material* material; enum ssol_material_type type; - CHECK(ssol_material_create_mirror(NULL, NULL), RES_BAD_ARG); - CHECK(ssol_material_create_mirror(NULL, &material), RES_BAD_ARG); - CHECK(ssol_material_create_mirror(dev, NULL), RES_BAD_ARG); - CHECK(ssol_material_create_mirror(dev, &material), RES_OK); + CHK(ssol_material_create_mirror(NULL, NULL) == RES_BAD_ARG); + CHK(ssol_material_create_mirror(NULL, &material) == RES_BAD_ARG); + CHK(ssol_material_create_mirror(dev, NULL) == RES_BAD_ARG); + CHK(ssol_material_create_mirror(dev, &material) == RES_OK); - CHECK(ssol_material_get_type(NULL, NULL), RES_BAD_ARG); - CHECK(ssol_material_get_type(material, NULL), RES_BAD_ARG); - CHECK(ssol_material_get_type(NULL, &type), RES_BAD_ARG); - CHECK(ssol_material_get_type(material, &type), RES_OK); - CHECK(type, SSOL_MATERIAL_MIRROR); + CHK(ssol_material_get_type(NULL, NULL) == RES_BAD_ARG); + CHK(ssol_material_get_type(material, NULL) == RES_BAD_ARG); + CHK(ssol_material_get_type(NULL, &type) == RES_BAD_ARG); + CHK(ssol_material_get_type(material, &type) == RES_OK); + CHK(type == SSOL_MATERIAL_MIRROR); - CHECK(ssol_material_ref_get(NULL), RES_BAD_ARG); - CHECK(ssol_material_ref_get(material), RES_OK); + CHK(ssol_material_ref_get(NULL) == RES_BAD_ARG); + CHK(ssol_material_ref_get(material) == RES_OK); - CHECK(ssol_material_ref_put(NULL), RES_BAD_ARG); - CHECK(ssol_material_ref_put(material), RES_OK); + CHK(ssol_material_ref_put(NULL) == RES_BAD_ARG); + CHK(ssol_material_ref_put(material) == RES_OK); - CHECK(ssol_param_buffer_create(dev, 32, &pbuf), RES_OK); + CHK(ssol_param_buffer_create(dev, 32, &pbuf) == RES_OK); mirror.normal = get_shader_normal; mirror.reflectivity = get_shader_reflectivity; mirror.roughness = get_shader_roughness; - CHECK(ssol_mirror_setup(NULL, &mirror), RES_BAD_ARG); - CHECK(ssol_mirror_setup(material, NULL), RES_BAD_ARG); - CHECK(ssol_mirror_setup(material, &mirror), RES_OK); - CHECK(ssol_mirror_setup(material, &mirror), RES_OK); - - CHECK(ssol_material_set_param_buffer(NULL, NULL), RES_BAD_ARG); - CHECK(ssol_material_set_param_buffer(material, NULL), RES_BAD_ARG); - CHECK(ssol_material_set_param_buffer(NULL, pbuf), RES_BAD_ARG); - CHECK(ssol_material_set_param_buffer(material, pbuf), RES_OK); + CHK(ssol_mirror_setup(NULL, NULL, SSOL_MICROFACET_DISTRIBUTIONS_COUNT__) + == RES_BAD_ARG); + CHK(ssol_mirror_setup(material, NULL, SSOL_MICROFACET_DISTRIBUTIONS_COUNT__) + == RES_BAD_ARG); + CHK(ssol_mirror_setup(NULL, &mirror, SSOL_MICROFACET_DISTRIBUTIONS_COUNT__) + == RES_BAD_ARG); + CHK(ssol_mirror_setup(material, &mirror, SSOL_MICROFACET_DISTRIBUTIONS_COUNT__) + == RES_BAD_ARG); + CHK(ssol_mirror_setup(NULL, NULL, SSOL_MICROFACET_BECKMANN) == RES_BAD_ARG); + CHK(ssol_mirror_setup(material, NULL, SSOL_MICROFACET_BECKMANN) == RES_BAD_ARG); + CHK(ssol_mirror_setup(NULL, &mirror, SSOL_MICROFACET_BECKMANN) == RES_BAD_ARG); + CHK(ssol_mirror_setup(material, &mirror, SSOL_MICROFACET_BECKMANN) == RES_OK); + + CHK(ssol_material_set_param_buffer(NULL, NULL) == RES_BAD_ARG); + CHK(ssol_material_set_param_buffer(material, NULL) == RES_BAD_ARG); + CHK(ssol_material_set_param_buffer(NULL, pbuf) == RES_BAD_ARG); + CHK(ssol_material_set_param_buffer(material, pbuf) == RES_OK); mirror.normal = NULL; - CHECK(ssol_mirror_setup(material, &mirror), RES_BAD_ARG); + CHK(ssol_mirror_setup(material, &mirror, SSOL_MICROFACET_BECKMANN) + == RES_BAD_ARG); mirror.normal = get_shader_normal; mirror.reflectivity = NULL; - CHECK(ssol_mirror_setup(material, &mirror), RES_BAD_ARG); + CHK(ssol_mirror_setup(material, &mirror, SSOL_MICROFACET_BECKMANN) + == RES_BAD_ARG); mirror.reflectivity = get_shader_reflectivity; mirror.roughness = NULL; - CHECK(ssol_mirror_setup(material, &mirror), RES_BAD_ARG); + CHK(ssol_mirror_setup(material, &mirror, SSOL_MICROFACET_BECKMANN) + == RES_BAD_ARG); mirror.roughness = get_shader_roughness; - CHECK(ssol_material_ref_put(material), RES_OK); - CHECK(ssol_param_buffer_ref_put(pbuf), RES_OK); + CHK(ssol_material_ref_put(material) == RES_OK); + CHK(ssol_param_buffer_ref_put(pbuf) == RES_OK); } static void @@ -81,28 +92,28 @@ test_matte(struct ssol_device* dev) struct ssol_material* material; enum ssol_material_type type; - CHECK(ssol_material_create_matte(NULL, NULL), RES_BAD_ARG); - CHECK(ssol_material_create_matte(dev, NULL), RES_BAD_ARG); - CHECK(ssol_material_create_matte(NULL, &material), RES_BAD_ARG); - CHECK(ssol_material_create_matte(dev, &material), RES_OK); + CHK(ssol_material_create_matte(NULL, NULL) == RES_BAD_ARG); + CHK(ssol_material_create_matte(dev, NULL) == RES_BAD_ARG); + CHK(ssol_material_create_matte(NULL, &material) == RES_BAD_ARG); + CHK(ssol_material_create_matte(dev, &material) == RES_OK); - CHECK(ssol_material_get_type(material, &type), RES_OK); - CHECK(type, SSOL_MATERIAL_MATTE); + CHK(ssol_material_get_type(material, &type) == RES_OK); + CHK(type == SSOL_MATERIAL_MATTE); matte.normal = get_shader_normal; matte.reflectivity = get_shader_reflectivity; - CHECK(ssol_matte_setup(NULL, NULL), RES_BAD_ARG); - CHECK(ssol_matte_setup(material, NULL), RES_BAD_ARG); - CHECK(ssol_matte_setup(NULL, &matte), RES_BAD_ARG); - CHECK(ssol_matte_setup(material, &matte), RES_OK); + CHK(ssol_matte_setup(NULL, NULL) == RES_BAD_ARG); + CHK(ssol_matte_setup(material, NULL) == RES_BAD_ARG); + CHK(ssol_matte_setup(NULL, &matte) == RES_BAD_ARG); + CHK(ssol_matte_setup(material, &matte) == RES_OK); matte.normal = NULL; - CHECK(ssol_matte_setup(material, &matte), RES_BAD_ARG); + CHK(ssol_matte_setup(material, &matte) == RES_BAD_ARG); matte.normal = get_shader_normal; matte.reflectivity = NULL; - CHECK(ssol_matte_setup(material, &matte), RES_BAD_ARG); + CHK(ssol_matte_setup(material, &matte) == RES_BAD_ARG); - CHECK(ssol_material_ref_put(material), RES_OK); + CHK(ssol_material_ref_put(material) == RES_OK); } static void @@ -115,70 +126,70 @@ test_thin_dielectric(struct ssol_device* dev) struct ssol_medium mdm1 = SSOL_MEDIUM_VACUUM; enum ssol_material_type type; - CHECK(ssol_material_create_thin_dielectric(NULL, NULL), RES_BAD_ARG); - CHECK(ssol_material_create_thin_dielectric(dev, NULL), RES_BAD_ARG); - CHECK(ssol_material_create_thin_dielectric(NULL, &mtl), RES_BAD_ARG); - CHECK(ssol_material_create_thin_dielectric(dev, &mtl), RES_OK); + CHK(ssol_material_create_thin_dielectric(NULL, NULL) == RES_BAD_ARG); + CHK(ssol_material_create_thin_dielectric(dev, NULL) == RES_BAD_ARG); + CHK(ssol_material_create_thin_dielectric(NULL, &mtl) == RES_BAD_ARG); + CHK(ssol_material_create_thin_dielectric(dev, &mtl) == RES_OK); - CHECK(ssol_material_get_type(mtl, &type), RES_OK); - CHECK(type, SSOL_MATERIAL_THIN_DIELECTRIC); + CHK(ssol_material_get_type(mtl, &type) == RES_OK); + CHK(type == SSOL_MATERIAL_THIN_DIELECTRIC); shader.normal = get_shader_normal; - CHECK(ssol_thin_dielectric_setup(NULL, NULL, NULL, NULL, -1), RES_BAD_ARG); - CHECK(ssol_thin_dielectric_setup(mtl, NULL, NULL, NULL, -1), RES_BAD_ARG); - CHECK(ssol_thin_dielectric_setup(NULL, &shader, NULL, NULL, -1), RES_BAD_ARG); - CHECK(ssol_thin_dielectric_setup(mtl, &shader, NULL, NULL, -1), RES_BAD_ARG); - CHECK(ssol_thin_dielectric_setup(NULL, NULL, &mdm0, NULL, -1), RES_BAD_ARG); - CHECK(ssol_thin_dielectric_setup(mtl, NULL, &mdm0, NULL, -1), RES_BAD_ARG); - CHECK(ssol_thin_dielectric_setup(NULL, &shader, &mdm0, NULL, -1), RES_BAD_ARG); - CHECK(ssol_thin_dielectric_setup(mtl, &shader, &mdm0, NULL, -1), RES_BAD_ARG); - CHECK(ssol_thin_dielectric_setup(NULL, NULL, NULL, NULL, 1), RES_BAD_ARG); - CHECK(ssol_thin_dielectric_setup(mtl, NULL, NULL, NULL, 1), RES_BAD_ARG); - CHECK(ssol_thin_dielectric_setup(NULL, &shader, NULL, NULL, 1), RES_BAD_ARG); - CHECK(ssol_thin_dielectric_setup(mtl, &shader, NULL, NULL, 1), RES_BAD_ARG); - CHECK(ssol_thin_dielectric_setup(NULL, NULL, &mdm0, NULL, 1), RES_BAD_ARG); - CHECK(ssol_thin_dielectric_setup(mtl, NULL, &mdm0, NULL, 1), RES_BAD_ARG); - CHECK(ssol_thin_dielectric_setup(NULL, &shader, &mdm0, NULL, 1), RES_BAD_ARG); - CHECK(ssol_thin_dielectric_setup(mtl, &shader, &mdm0, NULL, 1), RES_BAD_ARG); - CHECK(ssol_thin_dielectric_setup(NULL, NULL, NULL, &mdm1, -1), RES_BAD_ARG); - CHECK(ssol_thin_dielectric_setup(mtl, NULL, NULL, &mdm1, -1), RES_BAD_ARG); - CHECK(ssol_thin_dielectric_setup(NULL, &shader, NULL, &mdm1, -1), RES_BAD_ARG); - CHECK(ssol_thin_dielectric_setup(mtl, &shader, NULL, &mdm1, -1), RES_BAD_ARG); - CHECK(ssol_thin_dielectric_setup(NULL, NULL, &mdm0, &mdm1, -1), RES_BAD_ARG); - CHECK(ssol_thin_dielectric_setup(mtl, NULL, &mdm0, &mdm1, -1), RES_BAD_ARG); - CHECK(ssol_thin_dielectric_setup(NULL, &shader, &mdm0, &mdm1, -1), RES_BAD_ARG); - CHECK(ssol_thin_dielectric_setup(mtl, &shader, &mdm0, &mdm1, -1), RES_BAD_ARG); - CHECK(ssol_thin_dielectric_setup(NULL, NULL, NULL, &mdm1, 1), RES_BAD_ARG); - CHECK(ssol_thin_dielectric_setup(mtl, NULL, NULL, &mdm1, 1), RES_BAD_ARG); - CHECK(ssol_thin_dielectric_setup(NULL, &shader, NULL, &mdm1, 1), RES_BAD_ARG); - CHECK(ssol_thin_dielectric_setup(mtl, &shader, NULL, &mdm1, 1), RES_BAD_ARG); - CHECK(ssol_thin_dielectric_setup(NULL, NULL, &mdm0, &mdm1, 1), RES_BAD_ARG); - CHECK(ssol_thin_dielectric_setup(mtl, NULL, &mdm0, &mdm1, 1), RES_BAD_ARG); - CHECK(ssol_thin_dielectric_setup(NULL, &shader, &mdm0, &mdm1, 1), RES_BAD_ARG); - CHECK(ssol_thin_dielectric_setup(mtl, &shader, &mdm0, &mdm1, 1), RES_OK); + CHK(ssol_thin_dielectric_setup(NULL, NULL, NULL, NULL, -1) == RES_BAD_ARG); + CHK(ssol_thin_dielectric_setup(mtl, NULL, NULL, NULL, -1) == RES_BAD_ARG); + CHK(ssol_thin_dielectric_setup(NULL, &shader, NULL, NULL, -1) == RES_BAD_ARG); + CHK(ssol_thin_dielectric_setup(mtl, &shader, NULL, NULL, -1) == RES_BAD_ARG); + CHK(ssol_thin_dielectric_setup(NULL, NULL, &mdm0, NULL, -1) == RES_BAD_ARG); + CHK(ssol_thin_dielectric_setup(mtl, NULL, &mdm0, NULL, -1) == RES_BAD_ARG); + CHK(ssol_thin_dielectric_setup(NULL, &shader, &mdm0, NULL, -1) == RES_BAD_ARG); + CHK(ssol_thin_dielectric_setup(mtl, &shader, &mdm0, NULL, -1) == RES_BAD_ARG); + CHK(ssol_thin_dielectric_setup(NULL, NULL, NULL, NULL, 1) == RES_BAD_ARG); + CHK(ssol_thin_dielectric_setup(mtl, NULL, NULL, NULL, 1) == RES_BAD_ARG); + CHK(ssol_thin_dielectric_setup(NULL, &shader, NULL, NULL, 1) == RES_BAD_ARG); + CHK(ssol_thin_dielectric_setup(mtl, &shader, NULL, NULL, 1) == RES_BAD_ARG); + CHK(ssol_thin_dielectric_setup(NULL, NULL, &mdm0, NULL, 1) == RES_BAD_ARG); + CHK(ssol_thin_dielectric_setup(mtl, NULL, &mdm0, NULL, 1) == RES_BAD_ARG); + CHK(ssol_thin_dielectric_setup(NULL, &shader, &mdm0, NULL, 1) == RES_BAD_ARG); + CHK(ssol_thin_dielectric_setup(mtl, &shader, &mdm0, NULL, 1) == RES_BAD_ARG); + CHK(ssol_thin_dielectric_setup(NULL, NULL, NULL, &mdm1, -1) == RES_BAD_ARG); + CHK(ssol_thin_dielectric_setup(mtl, NULL, NULL, &mdm1, -1) == RES_BAD_ARG); + CHK(ssol_thin_dielectric_setup(NULL, &shader, NULL, &mdm1, -1) == RES_BAD_ARG); + CHK(ssol_thin_dielectric_setup(mtl, &shader, NULL, &mdm1, -1) == RES_BAD_ARG); + CHK(ssol_thin_dielectric_setup(NULL, NULL, &mdm0, &mdm1, -1) == RES_BAD_ARG); + CHK(ssol_thin_dielectric_setup(mtl, NULL, &mdm0, &mdm1, -1) == RES_BAD_ARG); + CHK(ssol_thin_dielectric_setup(NULL, &shader, &mdm0, &mdm1, -1) == RES_BAD_ARG); + CHK(ssol_thin_dielectric_setup(mtl, &shader, &mdm0, &mdm1, -1) == RES_BAD_ARG); + CHK(ssol_thin_dielectric_setup(NULL, NULL, NULL, &mdm1, 1) == RES_BAD_ARG); + CHK(ssol_thin_dielectric_setup(mtl, NULL, NULL, &mdm1, 1) == RES_BAD_ARG); + CHK(ssol_thin_dielectric_setup(NULL, &shader, NULL, &mdm1, 1) == RES_BAD_ARG); + CHK(ssol_thin_dielectric_setup(mtl, &shader, NULL, &mdm1, 1) == RES_BAD_ARG); + CHK(ssol_thin_dielectric_setup(NULL, NULL, &mdm0, &mdm1, 1) == RES_BAD_ARG); + CHK(ssol_thin_dielectric_setup(mtl, NULL, &mdm0, &mdm1, 1) == RES_BAD_ARG); + CHK(ssol_thin_dielectric_setup(NULL, &shader, &mdm0, &mdm1, 1) == RES_BAD_ARG); + CHK(ssol_thin_dielectric_setup(mtl, &shader, &mdm0, &mdm1, 1) == RES_OK); shader.normal = NULL; - CHECK(ssol_thin_dielectric_setup(mtl, &shader, &mdm0, &mdm1, 1), RES_BAD_ARG); + CHK(ssol_thin_dielectric_setup(mtl, &shader, &mdm0, &mdm1, 1) == RES_BAD_ARG); shader.normal = get_shader_normal; ssol_data_set_real(&mdm0.extinction, -1); - CHECK(ssol_thin_dielectric_setup(mtl, &shader, &mdm0, &mdm1, 1), RES_BAD_ARG); + CHK(ssol_thin_dielectric_setup(mtl, &shader, &mdm0, &mdm1, 1) == RES_BAD_ARG); ssol_data_copy(&mdm0.extinction, &SSOL_MEDIUM_VACUUM.extinction); ssol_data_set_real(&mdm0.refractive_index, 0); - CHECK(ssol_thin_dielectric_setup(mtl, &shader, &mdm0, &mdm1, 1), RES_BAD_ARG); + CHK(ssol_thin_dielectric_setup(mtl, &shader, &mdm0, &mdm1, 1) == RES_BAD_ARG); ssol_data_copy(&mdm0.refractive_index, &SSOL_MEDIUM_VACUUM.refractive_index); ssol_data_set_real(&mdm1.extinction, -1); - CHECK(ssol_thin_dielectric_setup(mtl, &shader, &mdm0, &mdm1, 1), RES_BAD_ARG); + CHK(ssol_thin_dielectric_setup(mtl, &shader, &mdm0, &mdm1, 1) == RES_BAD_ARG); ssol_data_copy(&mdm1.extinction, &SSOL_MEDIUM_VACUUM.extinction); ssol_data_set_real(&mdm1.refractive_index, 0); - CHECK(ssol_thin_dielectric_setup(mtl, &shader, &mdm0, &mdm1, 1), RES_BAD_ARG); + CHK(ssol_thin_dielectric_setup(mtl, &shader, &mdm0, &mdm1, 1) == RES_BAD_ARG); ssol_data_copy(&mdm1.refractive_index, &SSOL_MEDIUM_VACUUM.refractive_index); - CHECK(ssol_material_ref_put(mtl), RES_OK); + CHK(ssol_material_ref_put(mtl) == RES_OK); } static void @@ -190,54 +201,54 @@ test_dielectric(struct ssol_device* dev) struct ssol_medium mdm1 = SSOL_MEDIUM_VACUUM; enum ssol_material_type type; - CHECK(ssol_material_create_dielectric(NULL, NULL), RES_BAD_ARG); - CHECK(ssol_material_create_dielectric(dev, NULL), RES_BAD_ARG); - CHECK(ssol_material_create_dielectric(NULL, &material), RES_BAD_ARG); - CHECK(ssol_material_create_dielectric(dev, &material), RES_OK); + CHK(ssol_material_create_dielectric(NULL, NULL) == RES_BAD_ARG); + CHK(ssol_material_create_dielectric(dev, NULL) == RES_BAD_ARG); + CHK(ssol_material_create_dielectric(NULL, &material) == RES_BAD_ARG); + CHK(ssol_material_create_dielectric(dev, &material) == RES_OK); - CHECK(ssol_material_get_type(material, &type), RES_OK); - CHECK(type, SSOL_MATERIAL_DIELECTRIC); + CHK(ssol_material_get_type(material, &type) == RES_OK); + CHK(type == SSOL_MATERIAL_DIELECTRIC); dielectric.normal = get_shader_normal; - CHECK(ssol_dielectric_setup(NULL, NULL, NULL, NULL), RES_BAD_ARG); - CHECK(ssol_dielectric_setup(material, NULL, NULL, NULL), RES_BAD_ARG); - CHECK(ssol_dielectric_setup(NULL, &dielectric, NULL, NULL), RES_BAD_ARG); - CHECK(ssol_dielectric_setup(material, &dielectric, NULL, NULL), RES_BAD_ARG); - CHECK(ssol_dielectric_setup(NULL, NULL, &mdm0, NULL), RES_BAD_ARG); - CHECK(ssol_dielectric_setup(material, NULL, &mdm0, NULL), RES_BAD_ARG); - CHECK(ssol_dielectric_setup(NULL, &dielectric, &mdm0, NULL), RES_BAD_ARG); - CHECK(ssol_dielectric_setup(material, &dielectric, &mdm0, NULL), RES_BAD_ARG); - CHECK(ssol_dielectric_setup(NULL, NULL, NULL, &mdm1), RES_BAD_ARG); - CHECK(ssol_dielectric_setup(material, NULL, NULL, &mdm1), RES_BAD_ARG); - CHECK(ssol_dielectric_setup(NULL, &dielectric, NULL, &mdm1), RES_BAD_ARG); - CHECK(ssol_dielectric_setup(material, &dielectric, NULL, &mdm1), RES_BAD_ARG); - CHECK(ssol_dielectric_setup(NULL, NULL, &mdm0, &mdm1), RES_BAD_ARG); - CHECK(ssol_dielectric_setup(material, NULL, &mdm0, &mdm1), RES_BAD_ARG); - CHECK(ssol_dielectric_setup(NULL, &dielectric, &mdm0, &mdm1), RES_BAD_ARG); - CHECK(ssol_dielectric_setup(material, &dielectric, &mdm0, &mdm1), RES_OK); + CHK(ssol_dielectric_setup(NULL, NULL, NULL, NULL) == RES_BAD_ARG); + CHK(ssol_dielectric_setup(material, NULL, NULL, NULL) == RES_BAD_ARG); + CHK(ssol_dielectric_setup(NULL, &dielectric, NULL, NULL) == RES_BAD_ARG); + CHK(ssol_dielectric_setup(material, &dielectric, NULL, NULL) == RES_BAD_ARG); + CHK(ssol_dielectric_setup(NULL, NULL, &mdm0, NULL) == RES_BAD_ARG); + CHK(ssol_dielectric_setup(material, NULL, &mdm0, NULL) == RES_BAD_ARG); + CHK(ssol_dielectric_setup(NULL, &dielectric, &mdm0, NULL) == RES_BAD_ARG); + CHK(ssol_dielectric_setup(material, &dielectric, &mdm0, NULL) == RES_BAD_ARG); + CHK(ssol_dielectric_setup(NULL, NULL, NULL, &mdm1) == RES_BAD_ARG); + CHK(ssol_dielectric_setup(material, NULL, NULL, &mdm1) == RES_BAD_ARG); + CHK(ssol_dielectric_setup(NULL, &dielectric, NULL, &mdm1) == RES_BAD_ARG); + CHK(ssol_dielectric_setup(material, &dielectric, NULL, &mdm1) == RES_BAD_ARG); + CHK(ssol_dielectric_setup(NULL, NULL, &mdm0, &mdm1) == RES_BAD_ARG); + CHK(ssol_dielectric_setup(material, NULL, &mdm0, &mdm1) == RES_BAD_ARG); + CHK(ssol_dielectric_setup(NULL, &dielectric, &mdm0, &mdm1) == RES_BAD_ARG); + CHK(ssol_dielectric_setup(material, &dielectric, &mdm0, &mdm1) == RES_OK); dielectric.normal = NULL; - CHECK(ssol_dielectric_setup(NULL, &dielectric, &mdm0, &mdm1), RES_BAD_ARG); + CHK(ssol_dielectric_setup(NULL, &dielectric, &mdm0, &mdm1) == RES_BAD_ARG); dielectric.normal = get_shader_normal; ssol_data_set_real(&mdm0.refractive_index, 0); - CHECK(ssol_dielectric_setup(NULL, &dielectric, &mdm0, &mdm1), RES_BAD_ARG); + CHK(ssol_dielectric_setup(NULL, &dielectric, &mdm0, &mdm1) == RES_BAD_ARG); ssol_data_copy(&mdm0.refractive_index, &SSOL_MEDIUM_VACUUM.refractive_index); ssol_data_set_real(&mdm1.refractive_index, 0); - CHECK(ssol_dielectric_setup(NULL, &dielectric, &mdm0, &mdm1), RES_BAD_ARG); + CHK(ssol_dielectric_setup(NULL, &dielectric, &mdm0, &mdm1) == RES_BAD_ARG); ssol_data_copy(&mdm1.refractive_index, &SSOL_MEDIUM_VACUUM.refractive_index); ssol_data_set_real(&mdm0.extinction, -1); - CHECK(ssol_dielectric_setup(NULL, &dielectric, &mdm0, &mdm1), RES_BAD_ARG); + CHK(ssol_dielectric_setup(NULL, &dielectric, &mdm0, &mdm1) == RES_BAD_ARG); ssol_data_copy(&mdm0.extinction, &SSOL_MEDIUM_VACUUM.refractive_index); ssol_data_set_real(&mdm1.extinction, -1); - CHECK(ssol_dielectric_setup(NULL, &dielectric, &mdm0, &mdm1), RES_BAD_ARG); + CHK(ssol_dielectric_setup(NULL, &dielectric, &mdm0, &mdm1) == RES_BAD_ARG); ssol_data_copy(&mdm1.refractive_index, &SSOL_MEDIUM_VACUUM.refractive_index); - CHECK(ssol_material_ref_put(material), RES_OK); + CHK(ssol_material_ref_put(material) == RES_OK); } static void @@ -246,15 +257,15 @@ test_virtual(struct ssol_device* dev) struct ssol_material* material; enum ssol_material_type type; - CHECK(ssol_material_create_virtual(NULL, NULL), RES_BAD_ARG); - CHECK(ssol_material_create_virtual(NULL, &material), RES_BAD_ARG); - CHECK(ssol_material_create_virtual(dev, NULL), RES_BAD_ARG); - CHECK(ssol_material_create_virtual(dev, &material), RES_OK); + CHK(ssol_material_create_virtual(NULL, NULL) == RES_BAD_ARG); + CHK(ssol_material_create_virtual(NULL, &material) == RES_BAD_ARG); + CHK(ssol_material_create_virtual(dev, NULL) == RES_BAD_ARG); + CHK(ssol_material_create_virtual(dev, &material) == RES_OK); - CHECK(ssol_material_get_type(material, &type), RES_OK); - CHECK(type, SSOL_MATERIAL_VIRTUAL); + CHK(ssol_material_get_type(material, &type) == RES_OK); + CHK(type == SSOL_MATERIAL_VIRTUAL); - CHECK(ssol_material_ref_put(material), RES_OK); + CHK(ssol_material_ref_put(material) == RES_OK); } int @@ -266,8 +277,8 @@ main(int argc, char** argv) mem_init_proxy_allocator(&allocator, &mem_default_allocator); - CHECK(ssol_device_create - (NULL, &allocator, SSOL_NTHREADS_DEFAULT, 0, &dev), RES_OK); + CHK(ssol_device_create + (NULL, &allocator, SSOL_NTHREADS_DEFAULT, 0, &dev) == RES_OK); test_mirror(dev); test_matte(dev); @@ -275,11 +286,11 @@ main(int argc, char** argv) test_dielectric(dev); test_virtual(dev); - CHECK(ssol_device_ref_put(dev), RES_OK); + CHK(ssol_device_ref_put(dev) == RES_OK); check_memory_allocator(&allocator); mem_shutdown_proxy_allocator(&allocator); - CHECK(mem_allocated_size(), 0); + CHK(mem_allocated_size() == 0); return 0; } diff --git a/src/test_ssol_object.c b/src/test_ssol_object.c @@ -31,63 +31,63 @@ main(int argc, char** argv) mem_init_proxy_allocator(&allocator, &mem_default_allocator); - CHECK(ssol_device_create - (NULL, &allocator, SSOL_NTHREADS_DEFAULT, 0, &dev), RES_OK); - CHECK(ssol_material_create_virtual(dev, &mtl), RES_OK); - CHECK(ssol_material_create_virtual(dev, &mtl2), RES_OK); - CHECK(ssol_shape_create_punched_surface(dev, &shape), RES_OK); - CHECK(ssol_shape_create_punched_surface(dev, &shape2), RES_OK); + CHK(ssol_device_create + (NULL, &allocator, SSOL_NTHREADS_DEFAULT, 0, &dev) == RES_OK); + CHK(ssol_material_create_virtual(dev, &mtl) == RES_OK); + CHK(ssol_material_create_virtual(dev, &mtl2) == RES_OK); + CHK(ssol_shape_create_punched_surface(dev, &shape) == RES_OK); + CHK(ssol_shape_create_punched_surface(dev, &shape2) == RES_OK); - CHECK(ssol_object_create(NULL, NULL), RES_BAD_ARG); - CHECK(ssol_object_create(dev, NULL), RES_BAD_ARG); - CHECK(ssol_object_create(NULL, &object), RES_BAD_ARG); - CHECK(ssol_object_create(dev, &object), RES_OK); + CHK(ssol_object_create(NULL, NULL) == RES_BAD_ARG); + CHK(ssol_object_create(dev, NULL) == RES_BAD_ARG); + CHK(ssol_object_create(NULL, &object) == RES_BAD_ARG); + CHK(ssol_object_create(dev, &object) == RES_OK); - CHECK(ssol_object_add_shaded_shape(NULL, NULL, NULL, NULL), RES_BAD_ARG); - CHECK(ssol_object_add_shaded_shape(object, NULL, NULL, NULL), RES_BAD_ARG); - CHECK(ssol_object_add_shaded_shape(NULL, shape, NULL, NULL), RES_BAD_ARG); - CHECK(ssol_object_add_shaded_shape(object, shape, NULL, NULL), RES_BAD_ARG); - CHECK(ssol_object_add_shaded_shape(NULL, NULL, mtl, NULL), RES_BAD_ARG); - CHECK(ssol_object_add_shaded_shape(object, NULL, mtl, NULL), RES_BAD_ARG); - CHECK(ssol_object_add_shaded_shape(NULL, shape, mtl, NULL), RES_BAD_ARG); - CHECK(ssol_object_add_shaded_shape(object, shape, mtl, NULL), RES_BAD_ARG); - CHECK(ssol_object_add_shaded_shape(NULL, NULL, NULL, mtl), RES_BAD_ARG); - CHECK(ssol_object_add_shaded_shape(object, NULL, NULL, mtl), RES_BAD_ARG); - CHECK(ssol_object_add_shaded_shape(NULL, shape, NULL, mtl), RES_BAD_ARG); - CHECK(ssol_object_add_shaded_shape(object, shape, NULL, mtl), RES_BAD_ARG); - CHECK(ssol_object_add_shaded_shape(NULL, NULL, mtl, mtl), RES_BAD_ARG); - CHECK(ssol_object_add_shaded_shape(object, NULL, mtl, mtl), RES_BAD_ARG); - CHECK(ssol_object_add_shaded_shape(NULL, shape, mtl, mtl), RES_BAD_ARG); - CHECK(ssol_object_add_shaded_shape(object, shape, mtl, mtl), RES_OK); - CHECK(ssol_object_add_shaded_shape(object, shape2, mtl2, mtl2), RES_OK); + CHK(ssol_object_add_shaded_shape(NULL, NULL, NULL, NULL) == RES_BAD_ARG); + CHK(ssol_object_add_shaded_shape(object, NULL, NULL, NULL) == RES_BAD_ARG); + CHK(ssol_object_add_shaded_shape(NULL, shape, NULL, NULL) == RES_BAD_ARG); + CHK(ssol_object_add_shaded_shape(object, shape, NULL, NULL) == RES_BAD_ARG); + CHK(ssol_object_add_shaded_shape(NULL, NULL, mtl, NULL) == RES_BAD_ARG); + CHK(ssol_object_add_shaded_shape(object, NULL, mtl, NULL) == RES_BAD_ARG); + CHK(ssol_object_add_shaded_shape(NULL, shape, mtl, NULL) == RES_BAD_ARG); + CHK(ssol_object_add_shaded_shape(object, shape, mtl, NULL) == RES_BAD_ARG); + CHK(ssol_object_add_shaded_shape(NULL, NULL, NULL, mtl) == RES_BAD_ARG); + CHK(ssol_object_add_shaded_shape(object, NULL, NULL, mtl) == RES_BAD_ARG); + CHK(ssol_object_add_shaded_shape(NULL, shape, NULL, mtl) == RES_BAD_ARG); + CHK(ssol_object_add_shaded_shape(object, shape, NULL, mtl) == RES_BAD_ARG); + CHK(ssol_object_add_shaded_shape(NULL, NULL, mtl, mtl) == RES_BAD_ARG); + CHK(ssol_object_add_shaded_shape(object, NULL, mtl, mtl) == RES_BAD_ARG); + CHK(ssol_object_add_shaded_shape(NULL, shape, mtl, mtl) == RES_BAD_ARG); + CHK(ssol_object_add_shaded_shape(object, shape, mtl, mtl) == RES_OK); + CHK(ssol_object_add_shaded_shape(object, shape2, mtl2, mtl2) == RES_OK); - CHECK(ssol_object_ref_get(NULL), RES_BAD_ARG); - CHECK(ssol_object_ref_get(object), RES_OK); - CHECK(ssol_object_ref_put(NULL), RES_BAD_ARG); - CHECK(ssol_object_ref_put(object), RES_OK); - CHECK(ssol_object_ref_put(object), RES_OK); + CHK(ssol_object_ref_get(NULL) == RES_BAD_ARG); + CHK(ssol_object_ref_get(object) == RES_OK); + CHK(ssol_object_ref_put(NULL) == RES_BAD_ARG); + CHK(ssol_object_ref_put(object) == RES_OK); + CHK(ssol_object_ref_put(object) == RES_OK); - CHECK(ssol_object_create(dev, &object), RES_OK); - CHECK(ssol_object_add_shaded_shape(object, shape, mtl, mtl2), RES_OK); - CHECK(ssol_object_add_shaded_shape(object, shape, mtl2, mtl), RES_OK); + CHK(ssol_object_create(dev, &object) == RES_OK); + CHK(ssol_object_add_shaded_shape(object, shape, mtl, mtl2) == RES_OK); + CHK(ssol_object_add_shaded_shape(object, shape, mtl2, mtl) == RES_OK); - CHECK(ssol_object_clear(NULL), RES_BAD_ARG); - CHECK(ssol_object_clear(object), RES_OK); + CHK(ssol_object_clear(NULL) == RES_BAD_ARG); + CHK(ssol_object_clear(object) == RES_OK); - CHECK(ssol_object_get_area(object, NULL), RES_BAD_ARG); - CHECK(ssol_object_get_area(NULL, &a), RES_BAD_ARG); - CHECK(ssol_object_get_area(object, &a), RES_OK); + CHK(ssol_object_get_area(object, NULL) == RES_BAD_ARG); + CHK(ssol_object_get_area(NULL, &a) == RES_BAD_ARG); + CHK(ssol_object_get_area(object, &a) == RES_OK); - CHECK(ssol_object_ref_put(object), RES_OK); - CHECK(ssol_shape_ref_put(shape), RES_OK); - CHECK(ssol_shape_ref_put(shape2), RES_OK); - CHECK(ssol_material_ref_put(mtl), RES_OK); - CHECK(ssol_material_ref_put(mtl2), RES_OK); - CHECK(ssol_device_ref_put(dev), RES_OK); + CHK(ssol_object_ref_put(object) == RES_OK); + CHK(ssol_shape_ref_put(shape) == RES_OK); + CHK(ssol_shape_ref_put(shape2) == RES_OK); + CHK(ssol_material_ref_put(mtl) == RES_OK); + CHK(ssol_material_ref_put(mtl2) == RES_OK); + CHK(ssol_device_ref_put(dev) == RES_OK); check_memory_allocator(&allocator); mem_shutdown_proxy_allocator(&allocator); - CHECK(mem_allocated_size(), 0); + CHK(mem_allocated_size() == 0); return 0; } diff --git a/src/test_ssol_param_buffer.c b/src/test_ssol_param_buffer.c @@ -47,130 +47,130 @@ main(int argc, char** argv) void* mem; (void)argc, (void)argv; - CHECK(mem_init_proxy_allocator(&allocator, &mem_default_allocator), RES_OK); + CHK(mem_init_proxy_allocator(&allocator, &mem_default_allocator) == RES_OK); - CHECK(ssol_device_create - (NULL, &allocator, SSOL_NTHREADS_DEFAULT, 0, &dev), RES_OK); + CHK(ssol_device_create + (NULL, &allocator, SSOL_NTHREADS_DEFAULT, 0, &dev) == RES_OK); - CHECK(ssol_param_buffer_create(NULL, 0, NULL), RES_BAD_ARG); - CHECK(ssol_param_buffer_create(dev, 0, NULL), RES_BAD_ARG); - CHECK(ssol_param_buffer_create(NULL, 0, &pbuf), RES_BAD_ARG); - CHECK(ssol_param_buffer_create(dev, 0, &pbuf), RES_BAD_ARG); - CHECK(ssol_param_buffer_create(NULL, 1024, NULL), RES_BAD_ARG); - CHECK(ssol_param_buffer_create(dev, 1024, NULL), RES_BAD_ARG); - CHECK(ssol_param_buffer_create(NULL, 1024, &pbuf), RES_BAD_ARG); - CHECK(ssol_param_buffer_create(dev, 1024, &pbuf), RES_OK); + CHK(ssol_param_buffer_create(NULL, 0, NULL) == RES_BAD_ARG); + CHK(ssol_param_buffer_create(dev, 0, NULL) == RES_BAD_ARG); + CHK(ssol_param_buffer_create(NULL, 0, &pbuf) == RES_BAD_ARG); + CHK(ssol_param_buffer_create(dev, 0, &pbuf) == RES_BAD_ARG); + CHK(ssol_param_buffer_create(NULL, 1024, NULL) == RES_BAD_ARG); + CHK(ssol_param_buffer_create(dev, 1024, NULL) == RES_BAD_ARG); + CHK(ssol_param_buffer_create(NULL, 1024, &pbuf) == RES_BAD_ARG); + CHK(ssol_param_buffer_create(dev, 1024, &pbuf) == RES_OK); - CHECK(ssol_param_buffer_get(pbuf), NULL); + CHK(ssol_param_buffer_get(pbuf) == NULL); sz = sizeof(intptr_t); al = ALIGNOF(intptr_t); - CHECK(mem = ssol_param_buffer_allocate(NULL, 0, 0, NULL), NULL); - CHECK(mem = ssol_param_buffer_allocate(pbuf, 0, 0, NULL), NULL); - CHECK(mem = ssol_param_buffer_allocate(NULL, sz, 0, NULL), NULL); - CHECK(mem = ssol_param_buffer_allocate(pbuf, sz, 0, NULL), NULL); - CHECK(mem = ssol_param_buffer_allocate(NULL, 0, al, NULL), NULL); - CHECK(mem = ssol_param_buffer_allocate(pbuf, 0, al, NULL), NULL); - CHECK(mem = ssol_param_buffer_allocate(NULL, sz, al, NULL), NULL); - NCHECK(mem = ssol_param_buffer_allocate(pbuf, sz, al, NULL), NULL); + CHK((mem = ssol_param_buffer_allocate(NULL, 0, 0, NULL)) == NULL); + CHK((mem = ssol_param_buffer_allocate(pbuf, 0, 0, NULL)) == NULL); + CHK((mem = ssol_param_buffer_allocate(NULL, sz, 0, NULL)) == NULL); + CHK((mem = ssol_param_buffer_allocate(pbuf, sz, 0, NULL)) == NULL); + CHK((mem = ssol_param_buffer_allocate(NULL, 0, al, NULL)) == NULL); + CHK((mem = ssol_param_buffer_allocate(pbuf, 0, al, NULL)) == NULL); + CHK((mem = ssol_param_buffer_allocate(NULL, sz, al, NULL)) == NULL); + CHK((mem = ssol_param_buffer_allocate(pbuf, sz, al, NULL)) != NULL); *(intptr_t*)mem = 0xDECAFBAD; - CHECK(*(intptr_t*)ssol_param_buffer_get(pbuf), 0xDECAFBAD); + CHK(*(intptr_t*)ssol_param_buffer_get(pbuf) == 0xDECAFBAD); *(intptr_t*)mem = 0XDEADBEEF; - CHECK(*(intptr_t*)ssol_param_buffer_get(pbuf), 0XDEADBEEF); + CHK(*(intptr_t*)ssol_param_buffer_get(pbuf) == 0XDEADBEEF); - CHECK(ssol_param_buffer_clear(NULL), RES_BAD_ARG); - CHECK(ssol_param_buffer_clear(pbuf), RES_OK); - CHECK(ssol_param_buffer_get(pbuf), NULL); + CHK(ssol_param_buffer_clear(NULL) == RES_BAD_ARG); + CHK(ssol_param_buffer_clear(pbuf) == RES_OK); + CHK(ssol_param_buffer_get(pbuf) == NULL); sz = strlen("Foo") + 1; al = 4; - NCHECK(mem = ssol_param_buffer_allocate(pbuf, sz, al, NULL), NULL); + CHK((mem = ssol_param_buffer_allocate(pbuf, sz, al, NULL)) != NULL); strcpy(mem, "Foo"); - CHECK(strcmp(ssol_param_buffer_get(pbuf), "Foo"), 0); + CHK(strcmp(ssol_param_buffer_get(pbuf), "Foo") == 0); strcpy(mem, "Bar"); - CHECK(strcmp(ssol_param_buffer_get(pbuf), "Bar"), 0); - CHECK(IS_ALIGNED(ssol_param_buffer_get(pbuf), al), 1); + CHK(strcmp(ssol_param_buffer_get(pbuf), "Bar") == 0); + CHK(IS_ALIGNED(ssol_param_buffer_get(pbuf), al) == 1); - CHECK(ssol_param_buffer_clear(pbuf), RES_OK); + CHK(ssol_param_buffer_clear(pbuf) == RES_OK); sz = sizeof(struct param); al = ALIGNOF(struct param); - NCHECK(param = ssol_param_buffer_allocate(pbuf, sz, al, NULL), NULL); - NCHECK(param->name = ssol_param_buffer_allocate(pbuf, 7, 64, NULL), NULL); + CHK((param = ssol_param_buffer_allocate(pbuf, sz, al, NULL)) != NULL); + CHK((param->name = ssol_param_buffer_allocate(pbuf, 7, 64, NULL)) != NULL); strcpy(param->name, "0123456"); - NCHECK(param->ptr = ssol_param_buffer_allocate(pbuf, 4, 16, NULL), NULL); + CHK((param->ptr = ssol_param_buffer_allocate(pbuf, 4, 16, NULL)) != NULL); param->d = PI; param->i = -123; param->img = NULL; strcpy(param->ptr, "abc"); - NCHECK(param = ssol_param_buffer_get(pbuf), NULL); - CHECK(IS_ALIGNED(param, ALIGNOF(struct param)), 1); - CHECK(IS_ALIGNED(param->name, 64), 1); - CHECK(IS_ALIGNED(param->ptr, 16), 1); - CHECK(param->d, PI); - CHECK(param->i, -123); - CHECK(strcmp(param->name, "0123456"), 0); - CHECK(strcmp(param->ptr, "abc"), 0); + CHK((param = ssol_param_buffer_get(pbuf)) != NULL); + CHK(IS_ALIGNED(param, ALIGNOF(struct param)) == 1); + CHK(IS_ALIGNED(param->name, 64) == 1); + CHK(IS_ALIGNED(param->ptr, 16) == 1); + CHK(param->d == PI); + CHK(param->i == -123); + CHK(strcmp(param->name, "0123456") == 0); + CHK(strcmp(param->ptr, "abc") == 0); - CHECK(ssol_param_buffer_clear(pbuf), RES_OK); + CHK(ssol_param_buffer_clear(pbuf) == RES_OK); sz = sizeof(struct param); al = ALIGNOF(struct param); - CHECK(ssol_image_create(dev, &img), RES_OK); - CHECK(ssol_image_setup(img, 1280, 720, SSOL_PIXEL_DOUBLE3), RES_OK); - NCHECK(param = ssol_param_buffer_allocate(pbuf, sz, al, &param_release), NULL); + CHK(ssol_image_create(dev, &img) == RES_OK); + CHK(ssol_image_setup(img, 1280, 720, SSOL_PIXEL_DOUBLE3) == RES_OK); + CHK((param = ssol_param_buffer_allocate(pbuf, sz, al, &param_release)) != NULL); param->d = PI; param->i = -123; param->name = NULL; param->ptr = NULL; param->img = img; - CHECK(ssol_image_ref_get(img), RES_OK); + CHK(ssol_image_ref_get(img) == RES_OK); - NCHECK(param = ssol_param_buffer_allocate(pbuf, sz, al, &param_release), NULL); + CHK((param = ssol_param_buffer_allocate(pbuf, sz, al, &param_release)) != NULL); param->d = 123.456; param->i = -1; param->name = NULL; param->ptr = NULL; param->img = img; - CHECK(ssol_image_ref_get(img), RES_OK); + CHK(ssol_image_ref_get(img) == RES_OK); - NCHECK(param = ssol_param_buffer_allocate(pbuf, sz, al, &param_release), NULL); + CHK((param = ssol_param_buffer_allocate(pbuf, sz, al, &param_release)) != NULL); param->d = 0.1; param->i = 789; param->name = NULL; param->ptr = NULL; param->img = img; - CHECK(ssol_image_ref_get(img), RES_OK); + CHK(ssol_image_ref_get(img) == RES_OK); - CHECK(ssol_param_buffer_clear(pbuf), RES_OK); + CHK(ssol_param_buffer_clear(pbuf) == RES_OK); - NCHECK(param = ssol_param_buffer_allocate(pbuf, sz, al, &param_release), NULL); + CHK((param = ssol_param_buffer_allocate(pbuf, sz, al, &param_release)) != NULL); param->d = 0.1; param->i = 789; param->name = NULL; param->ptr = NULL; param->img = img; - CHECK(ssol_image_ref_get(img), RES_OK); + CHK(ssol_image_ref_get(img) == RES_OK); - CHECK(ssol_param_buffer_ref_get(NULL), RES_BAD_ARG); - CHECK(ssol_param_buffer_ref_get(pbuf), RES_OK); - CHECK(ssol_param_buffer_ref_put(NULL), RES_BAD_ARG); - CHECK(ssol_param_buffer_ref_put(pbuf), RES_OK); - CHECK(ssol_param_buffer_ref_put(pbuf), RES_OK); + CHK(ssol_param_buffer_ref_get(NULL) == RES_BAD_ARG); + CHK(ssol_param_buffer_ref_get(pbuf) == RES_OK); + CHK(ssol_param_buffer_ref_put(NULL) == RES_BAD_ARG); + CHK(ssol_param_buffer_ref_put(pbuf) == RES_OK); + CHK(ssol_param_buffer_ref_put(pbuf) == RES_OK); - CHECK(ssol_param_buffer_create(dev, 8, &pbuf), RES_OK); - NCHECK(mem = ssol_param_buffer_allocate(pbuf, 2, 1, NULL), NULL); - CHECK(mem = ssol_param_buffer_allocate(pbuf, 1, 16, NULL), NULL); + CHK(ssol_param_buffer_create(dev, 8, &pbuf) == RES_OK); + CHK((mem = ssol_param_buffer_allocate(pbuf, 2, 1, NULL)) != NULL); + CHK((mem = ssol_param_buffer_allocate(pbuf, 1, 16, NULL)) == NULL); - CHECK(ssol_image_ref_put(img), RES_OK); - CHECK(ssol_param_buffer_ref_put(pbuf), RES_OK); - CHECK(ssol_device_ref_put(dev), RES_OK); + CHK(ssol_image_ref_put(img) == RES_OK); + CHK(ssol_param_buffer_ref_put(pbuf) == RES_OK); + CHK(ssol_device_ref_put(dev) == RES_OK); check_memory_allocator(&allocator); mem_shutdown_proxy_allocator(&allocator); - CHECK(mem_allocated_size(), 0); + CHK(mem_allocated_size() == 0); return 0; } diff --git a/src/test_ssol_scene.c b/src/test_ssol_scene.c @@ -30,14 +30,14 @@ static res_T instance_func(struct ssol_instance* inst, void* context) { struct scene_ctx* ctx = context; - NCHECK(inst, NULL); + CHK(inst != NULL); if(!ctx) return RES_BAD_ARG; if(inst == ctx->instance) { - CHECK(ctx->instance_found, 0); + CHK(ctx->instance_found == 0); ctx->instance_found = 1; } else if(inst == ctx->instance2) { - CHECK(ctx->instance2_found, 0); + CHK(ctx->instance2_found == 0); ctx->instance2_found = 1; } else { FATAL("Unreachable code.\n"); @@ -88,182 +88,182 @@ main(int argc, char** argv) mem_init_proxy_allocator(&allocator, &mem_default_allocator); - CHECK(ssol_device_create - (NULL, &allocator, SSOL_NTHREADS_DEFAULT, 0, &dev), RES_OK); + CHK(ssol_device_create + (NULL, &allocator, SSOL_NTHREADS_DEFAULT, 0, &dev) == RES_OK); - CHECK(ssol_material_create_virtual(dev, &material), RES_OK); + CHK(ssol_material_create_virtual(dev, &material) == RES_OK); - CHECK(ssol_shape_create_punched_surface(dev, &shape), RES_OK); - 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); + CHK(ssol_shape_create_punched_surface(dev, &shape) == RES_OK); + CHK(ssol_object_create(dev, &object) == RES_OK); + CHK(ssol_object_add_shaded_shape(object, shape, material, material) == RES_OK); + CHK(ssol_object_instantiate(object, &instance) == RES_OK); + CHK(ssol_object_instantiate(object, &instance2) == RES_OK); + CHK(ssol_instance_set_transform(instance, transform) == RES_OK); + CHK(ssol_sun_create_directional(dev, &sun) == RES_OK); + CHK(ssol_sun_create_directional(dev, &sun2) == RES_OK); - CHECK(ssol_scene_create(dev, &scene), RES_OK); - CHECK(ssol_scene_create(dev, &scene2), RES_OK); + CHK(ssol_scene_create(dev, &scene) == RES_OK); + CHK(ssol_scene_create(dev, &scene2) == RES_OK); - CHECK(ssol_scene_ref_get(NULL), RES_BAD_ARG); - CHECK(ssol_scene_ref_get(scene), RES_OK); + CHK(ssol_scene_ref_get(NULL) == RES_BAD_ARG); + CHK(ssol_scene_ref_get(scene) == RES_OK); - CHECK(ssol_scene_ref_put(NULL), RES_BAD_ARG); - CHECK(ssol_scene_ref_put(scene), RES_OK); + CHK(ssol_scene_ref_put(NULL) == RES_BAD_ARG); + CHK(ssol_scene_ref_put(scene) == RES_OK); - CHECK(ssol_scene_clear(NULL), RES_BAD_ARG); - CHECK(ssol_scene_clear(scene), RES_OK); + CHK(ssol_scene_clear(NULL) == RES_BAD_ARG); + CHK(ssol_scene_clear(scene) == RES_OK); - CHECK(ssol_scene_attach_instance(NULL, instance), RES_BAD_ARG); - 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); + CHK(ssol_scene_attach_instance(NULL, instance) == RES_BAD_ARG); + CHK(ssol_scene_attach_instance(scene, NULL) == RES_BAD_ARG); + CHK(ssol_scene_attach_instance(scene, instance) == RES_OK); + CHK(ssol_scene_attach_instance(scene, instance) == RES_OK); + CHK(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); - CHECK(ssol_scene_detach_instance(scene2, instance), RES_OK); - CHECK(ssol_scene_detach_instance(scene, instance), RES_OK); - CHECK(ssol_scene_attach_instance(scene, instance), RES_OK); - CHECK(ssol_scene_detach_instance(scene2, instance), RES_BAD_ARG); - CHECK(ssol_scene_detach_instance(scene, instance), RES_OK); - - CHECK(ssol_scene_attach_sun(NULL, sun), RES_BAD_ARG); - CHECK(ssol_scene_attach_sun(scene, NULL), RES_BAD_ARG); - CHECK(ssol_scene_attach_sun(scene, sun), RES_OK); - CHECK(ssol_scene_attach_sun(scene, sun), RES_OK); - CHECK(ssol_scene_attach_sun(scene, sun2), RES_BAD_ARG); - - CHECK(ssol_scene_detach_sun(NULL, sun), RES_BAD_ARG); - CHECK(ssol_scene_detach_sun(scene, NULL), RES_BAD_ARG); - CHECK(ssol_scene_detach_sun(scene, sun), RES_OK); - CHECK(ssol_scene_detach_sun(scene, sun), RES_BAD_ARG); - - CHECK(ssol_scene_attach_sun(scene, sun), RES_OK); - CHECK(ssol_scene_attach_sun(scene2, sun), RES_BAD_ARG); - CHECK(ssol_scene_detach_sun(scene2, sun), RES_BAD_ARG); - CHECK(ssol_scene_detach_sun(scene, sun), RES_OK); - CHECK(ssol_scene_attach_sun(scene2, sun), RES_OK); - CHECK(ssol_scene_detach_sun(scene, sun), RES_BAD_ARG); - CHECK(ssol_scene_detach_sun(scene2, sun), RES_OK); - - CHECK(ssol_atmosphere_create(dev, &atm), RES_OK); + CHK(ssol_scene_for_each_instance(NULL, NULL, NULL) == RES_BAD_ARG); + CHK(ssol_scene_for_each_instance(scene, NULL, NULL) == RES_BAD_ARG); + CHK(ssol_scene_for_each_instance(NULL, instance_func, NULL) == RES_BAD_ARG); + CHK(ssol_scene_for_each_instance(scene, instance_func, NULL) == RES_BAD_ARG); + CHK(ssol_scene_for_each_instance(NULL, NULL, &ctx) == RES_BAD_ARG); + CHK(ssol_scene_for_each_instance(scene, NULL, &ctx) == RES_BAD_ARG); + CHK(ssol_scene_for_each_instance(NULL, instance_func, &ctx) == RES_BAD_ARG); + CHK(ssol_scene_for_each_instance(scene, instance_func, &ctx) == RES_OK); + CHK(ctx.instance_found == 1); + CHK(ctx.instance2_found == 1); + + CHK(ssol_scene_detach_instance(NULL, instance) == RES_BAD_ARG); + CHK(ssol_scene_detach_instance(scene, NULL) == RES_BAD_ARG); + CHK(ssol_scene_detach_instance(scene, instance) == RES_OK); + CHK(ssol_scene_detach_instance(scene, instance) == RES_BAD_ARG); + CHK(ssol_scene_detach_instance(scene, instance2) == RES_OK); + + CHK(ssol_scene_attach_instance(scene, instance) == RES_OK); + CHK(ssol_scene_attach_instance(scene2, instance) == RES_OK); + CHK(ssol_scene_detach_instance(scene2, instance) == RES_OK); + CHK(ssol_scene_detach_instance(scene, instance) == RES_OK); + CHK(ssol_scene_attach_instance(scene, instance) == RES_OK); + CHK(ssol_scene_detach_instance(scene2, instance) == RES_BAD_ARG); + CHK(ssol_scene_detach_instance(scene, instance) == RES_OK); + + CHK(ssol_scene_attach_sun(NULL, sun) == RES_BAD_ARG); + CHK(ssol_scene_attach_sun(scene, NULL) == RES_BAD_ARG); + CHK(ssol_scene_attach_sun(scene, sun) == RES_OK); + CHK(ssol_scene_attach_sun(scene, sun) == RES_OK); + CHK(ssol_scene_attach_sun(scene, sun2) == RES_BAD_ARG); + + CHK(ssol_scene_detach_sun(NULL, sun) == RES_BAD_ARG); + CHK(ssol_scene_detach_sun(scene, NULL) == RES_BAD_ARG); + CHK(ssol_scene_detach_sun(scene, sun) == RES_OK); + CHK(ssol_scene_detach_sun(scene, sun) == RES_BAD_ARG); + + CHK(ssol_scene_attach_sun(scene, sun) == RES_OK); + CHK(ssol_scene_attach_sun(scene2, sun) == RES_BAD_ARG); + CHK(ssol_scene_detach_sun(scene2, sun) == RES_BAD_ARG); + CHK(ssol_scene_detach_sun(scene, sun) == RES_OK); + CHK(ssol_scene_attach_sun(scene2, sun) == RES_OK); + CHK(ssol_scene_detach_sun(scene, sun) == RES_BAD_ARG); + CHK(ssol_scene_detach_sun(scene2, sun) == RES_OK); + + CHK(ssol_atmosphere_create(dev, &atm) == RES_OK); extinction.type = SSOL_DATA_REAL; extinction.value.real = 0.1; - CHECK(ssol_atmosphere_set_extinction(atm, &extinction), RES_OK); - CHECK(ssol_atmosphere_create(dev, &atm2), RES_OK); - CHECK(ssol_atmosphere_set_extinction(atm2, &extinction), RES_OK); - - CHECK(ssol_scene_attach_atmosphere(NULL, atm), RES_BAD_ARG); - CHECK(ssol_scene_attach_atmosphere(scene, NULL), RES_BAD_ARG); - CHECK(ssol_scene_attach_atmosphere(scene, atm), RES_OK); - CHECK(ssol_scene_attach_atmosphere(scene, atm), RES_OK); - CHECK(ssol_scene_attach_atmosphere(scene, atm2), RES_BAD_ARG); - - CHECK(ssol_scene_detach_atmosphere(NULL, atm), RES_BAD_ARG); - CHECK(ssol_scene_detach_atmosphere(scene, NULL), RES_BAD_ARG); - CHECK(ssol_scene_detach_atmosphere(scene, atm), RES_OK); - CHECK(ssol_scene_detach_atmosphere(scene, atm), RES_BAD_ARG); - - CHECK(ssol_scene_attach_atmosphere(scene, atm), RES_OK); - CHECK(ssol_scene_attach_atmosphere(scene2, atm), RES_BAD_ARG); - CHECK(ssol_scene_detach_atmosphere(scene2, atm), RES_BAD_ARG); - CHECK(ssol_scene_detach_atmosphere(scene, atm), RES_OK); - CHECK(ssol_scene_attach_atmosphere(scene2, atm), RES_OK); - CHECK(ssol_scene_detach_atmosphere(scene, atm), RES_BAD_ARG); - CHECK(ssol_scene_detach_atmosphere(scene2, atm), RES_OK); - - CHECK(ssol_scene_detach_sun(scene, sun2), RES_BAD_ARG); - CHECK(ssol_sun_ref_put(sun2), RES_OK); - - CHECK(ssol_scene_attach_instance(scene, instance), RES_OK); - CHECK(ssol_scene_attach_sun(scene, sun), RES_OK); - CHECK(ssol_scene_attach_atmosphere(scene, atm), RES_OK); - CHECK(ssol_scene_clear(scene), RES_OK); - - CHECK(ssol_scene_ref_put(scene), RES_OK); - CHECK(ssol_scene_ref_put(scene2), RES_OK); - CHECK(ssol_shape_ref_put(shape), RES_OK); - CHECK(ssol_object_ref_put(object), RES_OK); - CHECK(ssol_instance_ref_put(instance), RES_OK); - - CHECK(ssol_scene_create(dev, &scene), RES_OK); - CHECK(ssol_shape_create_mesh(dev, &shape), RES_OK); - CHECK(ssol_object_create(dev, &object), RES_OK); + CHK(ssol_atmosphere_set_extinction(atm, &extinction) == RES_OK); + CHK(ssol_atmosphere_create(dev, &atm2) == RES_OK); + CHK(ssol_atmosphere_set_extinction(atm2, &extinction) == RES_OK); + + CHK(ssol_scene_attach_atmosphere(NULL, atm) == RES_BAD_ARG); + CHK(ssol_scene_attach_atmosphere(scene, NULL) == RES_BAD_ARG); + CHK(ssol_scene_attach_atmosphere(scene, atm) == RES_OK); + CHK(ssol_scene_attach_atmosphere(scene, atm) == RES_OK); + CHK(ssol_scene_attach_atmosphere(scene, atm2) == RES_BAD_ARG); + + CHK(ssol_scene_detach_atmosphere(NULL, atm) == RES_BAD_ARG); + CHK(ssol_scene_detach_atmosphere(scene, NULL) == RES_BAD_ARG); + CHK(ssol_scene_detach_atmosphere(scene, atm) == RES_OK); + CHK(ssol_scene_detach_atmosphere(scene, atm) == RES_BAD_ARG); + + CHK(ssol_scene_attach_atmosphere(scene, atm) == RES_OK); + CHK(ssol_scene_attach_atmosphere(scene2, atm) == RES_BAD_ARG); + CHK(ssol_scene_detach_atmosphere(scene2, atm) == RES_BAD_ARG); + CHK(ssol_scene_detach_atmosphere(scene, atm) == RES_OK); + CHK(ssol_scene_attach_atmosphere(scene2, atm) == RES_OK); + CHK(ssol_scene_detach_atmosphere(scene, atm) == RES_BAD_ARG); + CHK(ssol_scene_detach_atmosphere(scene2, atm) == RES_OK); + + CHK(ssol_scene_detach_sun(scene, sun2) == RES_BAD_ARG); + CHK(ssol_sun_ref_put(sun2) == RES_OK); + + CHK(ssol_scene_attach_instance(scene, instance) == RES_OK); + CHK(ssol_scene_attach_sun(scene, sun) == RES_OK); + CHK(ssol_scene_attach_atmosphere(scene, atm) == RES_OK); + CHK(ssol_scene_clear(scene) == RES_OK); + + CHK(ssol_scene_ref_put(scene) == RES_OK); + CHK(ssol_scene_ref_put(scene2) == RES_OK); + CHK(ssol_shape_ref_put(shape) == RES_OK); + CHK(ssol_object_ref_put(object) == RES_OK); + CHK(ssol_instance_ref_put(instance) == RES_OK); + + CHK(ssol_scene_create(dev, &scene) == RES_OK); + CHK(ssol_shape_create_mesh(dev, &shape) == RES_OK); + CHK(ssol_object_create(dev, &object) == RES_OK); vdata.usage = SSOL_POSITION; vdata.get = get_position; desc.vertices = tall_block;; desc.indices = block_ids; - CHECK(ssol_mesh_setup(shape, 10, get_ids, 8, &vdata, 1, &desc), RES_OK); - CHECK(ssol_object_add_shaded_shape(object, shape, material, material), RES_OK); - CHECK(ssol_object_instantiate(object, &instance), RES_OK); + CHK(ssol_mesh_setup(shape, 10, get_ids, 8, &vdata, 1, &desc) == RES_OK); + CHK(ssol_object_add_shaded_shape(object, shape, material, material) == RES_OK); + CHK(ssol_object_instantiate(object, &instance) == RES_OK); - CHECK(ssol_scene_compute_aabb(NULL, NULL, NULL), RES_BAD_ARG); - CHECK(ssol_scene_compute_aabb(scene, NULL, NULL), RES_BAD_ARG); - CHECK(ssol_scene_compute_aabb(NULL, lower, NULL), RES_BAD_ARG); - CHECK(ssol_scene_compute_aabb(scene, lower, NULL), RES_BAD_ARG); - CHECK(ssol_scene_compute_aabb(NULL, NULL, upper), RES_BAD_ARG); - CHECK(ssol_scene_compute_aabb(scene, NULL, upper), RES_BAD_ARG); - CHECK(ssol_scene_compute_aabb(NULL, lower, upper), RES_BAD_ARG); - CHECK(ssol_scene_compute_aabb(scene, lower, upper), RES_OK); + CHK(ssol_scene_compute_aabb(NULL, NULL, NULL) == RES_BAD_ARG); + CHK(ssol_scene_compute_aabb(scene, NULL, NULL) == RES_BAD_ARG); + CHK(ssol_scene_compute_aabb(NULL, lower, NULL) == RES_BAD_ARG); + CHK(ssol_scene_compute_aabb(scene, lower, NULL) == RES_BAD_ARG); + CHK(ssol_scene_compute_aabb(NULL, NULL, upper) == RES_BAD_ARG); + CHK(ssol_scene_compute_aabb(scene, NULL, upper) == RES_BAD_ARG); + CHK(ssol_scene_compute_aabb(NULL, lower, upper) == RES_BAD_ARG); + CHK(ssol_scene_compute_aabb(scene, lower, upper) == RES_OK); /* Empty scene */ - CHECK(lower[0] > upper[0], 1); - CHECK(lower[1] > upper[1], 1); - CHECK(lower[2] > upper[2], 1); + CHK(lower[0] > upper[0]); + CHK(lower[1] > upper[1]); + CHK(lower[2] > upper[2]); - CHECK(ssol_scene_attach_instance(scene, instance), RES_OK); - CHECK(ssol_scene_compute_aabb(scene, lower, upper), RES_OK); - CHECK(f3_eq_eps(lower, f3(tmp, 265.f, 247.f, 0.f), 1.e-6f), 1); - CHECK(f3_eq_eps(upper, f3(tmp, 472.f, 456.f, 330.f), 1.e-6f), 1); + CHK(ssol_scene_attach_instance(scene, instance) == RES_OK); + CHK(ssol_scene_compute_aabb(scene, lower, upper) == RES_OK); + CHK(f3_eq_eps(lower, f3(tmp, 265.f, 247.f, 0.f), 1.e-6f) == 1); + CHK(f3_eq_eps(upper, f3(tmp, 472.f, 456.f, 330.f), 1.e-6f) == 1); - CHECK(ssol_scene_clear(scene), RES_OK); - CHECK(ssol_scene_compute_aabb(scene, lower, upper), RES_OK); + CHK(ssol_scene_clear(scene) == RES_OK); + CHK(ssol_scene_compute_aabb(scene, lower, upper) == RES_OK); /* Empty scene */ - CHECK(lower[0] > upper[0], 1); - CHECK(lower[1] > upper[1], 1); - CHECK(lower[2] > upper[2], 1); + CHK(lower[0] > upper[0]); + CHK(lower[1] > upper[1]); + CHK(lower[2] > upper[2]); - CHECK(ssol_scene_ref_put(scene), RES_OK); + CHK(ssol_scene_ref_put(scene) == 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); - CHECK(ssol_atmosphere_ref_put(atm), RES_OK); - CHECK(ssol_atmosphere_ref_put(atm2), RES_OK); - CHECK(ssol_material_ref_put(material), RES_OK); + CHK(ssol_instance_ref_put(instance) == RES_OK); + CHK(ssol_instance_ref_put(instance2) == RES_OK); + CHK(ssol_object_ref_put(object) == RES_OK); + CHK(ssol_shape_ref_put(shape) == RES_OK); + CHK(ssol_sun_ref_put(sun) == RES_OK); + CHK(ssol_atmosphere_ref_put(atm) == RES_OK); + CHK(ssol_atmosphere_ref_put(atm2) == RES_OK); + CHK(ssol_material_ref_put(material) == RES_OK); - CHECK(ssol_device_ref_put(dev), RES_OK); + CHK(ssol_device_ref_put(dev) == RES_OK); check_memory_allocator(&allocator); mem_shutdown_proxy_allocator(&allocator); - CHECK(mem_allocated_size(), 0); + CHK(mem_allocated_size() == 0); return 0; } diff --git a/src/test_ssol_shape.c b/src/test_ssol_shape.c @@ -43,19 +43,19 @@ main(int argc, char** argv) mem_init_proxy_allocator(&allocator, &mem_default_allocator); - CHECK(ssol_device_create - (NULL, &allocator, SSOL_NTHREADS_DEFAULT, 0, &dev), RES_OK); + CHK(ssol_device_create + (NULL, &allocator, SSOL_NTHREADS_DEFAULT, 0, &dev) == RES_OK); - CHECK(ssol_shape_create_mesh(NULL, NULL), RES_BAD_ARG); - CHECK(ssol_shape_create_mesh(dev, NULL), RES_BAD_ARG); - CHECK(ssol_shape_create_mesh(NULL, &shape), RES_BAD_ARG); - CHECK(ssol_shape_create_mesh(dev, &shape), RES_OK); + CHK(ssol_shape_create_mesh(NULL, NULL) == RES_BAD_ARG); + CHK(ssol_shape_create_mesh(dev, NULL) == RES_BAD_ARG); + CHK(ssol_shape_create_mesh(NULL, &shape) == RES_BAD_ARG); + CHK(ssol_shape_create_mesh(dev, &shape) == RES_OK); - CHECK(ssol_shape_ref_get(NULL), RES_BAD_ARG); - CHECK(ssol_shape_ref_get(shape), RES_OK); + CHK(ssol_shape_ref_get(NULL) == RES_BAD_ARG); + CHK(ssol_shape_ref_get(shape) == RES_OK); - CHECK(ssol_shape_ref_put(NULL), RES_BAD_ARG); - CHECK(ssol_shape_ref_put(shape), RES_OK); + CHK(ssol_shape_ref_put(NULL) == RES_BAD_ARG); + CHK(ssol_shape_ref_put(shape) == RES_OK); attribs[0].usage = SSOL_POSITION; attribs[0].get = get_position; @@ -64,93 +64,93 @@ main(int argc, char** argv) attribs[2].usage = SSOL_TEXCOORD; attribs[2].get = get_uv; - CHECK(ssol_mesh_setup(NULL, SQUARE_NTRIS__, get_ids, SQUARE_NVERTS__, - attribs, 1, (void*)&SQUARE_DESC__), RES_BAD_ARG); - CHECK(ssol_mesh_setup(shape, 0, get_ids, SQUARE_NVERTS__, attribs, 1, - (void*)&SQUARE_DESC__), RES_BAD_ARG); - CHECK(ssol_mesh_setup(shape, SQUARE_NTRIS__, NULL, SQUARE_NVERTS__, - attribs, 1, (void*)&SQUARE_DESC__), RES_BAD_ARG); - CHECK(ssol_mesh_setup(shape, SQUARE_NTRIS__, get_ids, 0, attribs, 1, - (void*)&SQUARE_DESC__), RES_BAD_ARG); - CHECK(ssol_mesh_setup(shape, SQUARE_NTRIS__, get_ids, SQUARE_NVERTS__, - NULL, 1, (void*)&SQUARE_DESC__), RES_BAD_ARG); - CHECK(ssol_mesh_setup(shape, SQUARE_NTRIS__, get_ids, SQUARE_NVERTS__, - attribs, 0, (void*)&SQUARE_DESC__), RES_BAD_ARG); - CHECK(ssol_mesh_setup(shape, SQUARE_NTRIS__, get_ids, SQUARE_NVERTS__, - attribs, 3, (void*)&SQUARE_DESC__), RES_OK); - - CHECK(ssol_shape_get_vertices_count(NULL, NULL), RES_BAD_ARG); - CHECK(ssol_shape_get_vertices_count(shape, NULL), RES_BAD_ARG); - CHECK(ssol_shape_get_vertices_count(NULL, &n), RES_BAD_ARG); - CHECK(ssol_shape_get_vertices_count(shape, &n), RES_OK); - CHECK(n, SQUARE_NVERTS__); - - CHECK(ssol_shape_get_vertex_attrib(NULL, n, (unsigned)-1, NULL), RES_BAD_ARG); - CHECK(ssol_shape_get_vertex_attrib(shape, n, (unsigned)-1, NULL), RES_BAD_ARG); - CHECK(ssol_shape_get_vertex_attrib(NULL, 0, (unsigned)-1, NULL), RES_BAD_ARG); - CHECK(ssol_shape_get_vertex_attrib(shape, 0, (unsigned)-1, NULL), RES_BAD_ARG); - CHECK(ssol_shape_get_vertex_attrib(NULL, n, SSOL_POSITION, NULL), RES_BAD_ARG); - CHECK(ssol_shape_get_vertex_attrib(shape, n, SSOL_POSITION, NULL), RES_BAD_ARG); - CHECK(ssol_shape_get_vertex_attrib(NULL, 0, SSOL_POSITION, NULL), RES_BAD_ARG); - CHECK(ssol_shape_get_vertex_attrib(shape, 0, SSOL_POSITION, NULL), RES_BAD_ARG); - CHECK(ssol_shape_get_vertex_attrib(NULL, n, (unsigned)-1, val), RES_BAD_ARG); - CHECK(ssol_shape_get_vertex_attrib(shape, n, (unsigned)-1, val), RES_BAD_ARG); - CHECK(ssol_shape_get_vertex_attrib(NULL, 0, (unsigned)-1, val), RES_BAD_ARG); - CHECK(ssol_shape_get_vertex_attrib(shape, 0, (unsigned)-1,val), RES_BAD_ARG); - CHECK(ssol_shape_get_vertex_attrib(NULL, n, SSOL_POSITION, val), RES_BAD_ARG); - CHECK(ssol_shape_get_vertex_attrib(shape, n, SSOL_POSITION, val), RES_BAD_ARG); - CHECK(ssol_shape_get_vertex_attrib(NULL, 0, SSOL_POSITION, val), RES_BAD_ARG); + CHK(ssol_mesh_setup(NULL, SQUARE_NTRIS__, get_ids, SQUARE_NVERTS__, + attribs, 1, (void*)&SQUARE_DESC__) == RES_BAD_ARG); + CHK(ssol_mesh_setup(shape, 0, get_ids, SQUARE_NVERTS__, attribs, 1, + (void*)&SQUARE_DESC__) == RES_BAD_ARG); + CHK(ssol_mesh_setup(shape, SQUARE_NTRIS__, NULL, SQUARE_NVERTS__, + attribs, 1, (void*)&SQUARE_DESC__) == RES_BAD_ARG); + CHK(ssol_mesh_setup(shape, SQUARE_NTRIS__, get_ids, 0, attribs, 1, + (void*)&SQUARE_DESC__) == RES_BAD_ARG); + CHK(ssol_mesh_setup(shape, SQUARE_NTRIS__, get_ids, SQUARE_NVERTS__, + NULL, 1, (void*)&SQUARE_DESC__) == RES_BAD_ARG); + CHK(ssol_mesh_setup(shape, SQUARE_NTRIS__, get_ids, SQUARE_NVERTS__, + attribs, 0, (void*)&SQUARE_DESC__) == RES_BAD_ARG); + CHK(ssol_mesh_setup(shape, SQUARE_NTRIS__, get_ids, SQUARE_NVERTS__, + attribs, 3, (void*)&SQUARE_DESC__) == RES_OK); + + CHK(ssol_shape_get_vertices_count(NULL, NULL) == RES_BAD_ARG); + CHK(ssol_shape_get_vertices_count(shape, NULL) == RES_BAD_ARG); + CHK(ssol_shape_get_vertices_count(NULL, &n) == RES_BAD_ARG); + CHK(ssol_shape_get_vertices_count(shape, &n) == RES_OK); + CHK(n == SQUARE_NVERTS__); + + CHK(ssol_shape_get_vertex_attrib(NULL, n, (unsigned)-1, NULL) == RES_BAD_ARG); + CHK(ssol_shape_get_vertex_attrib(shape, n, (unsigned)-1, NULL) == RES_BAD_ARG); + CHK(ssol_shape_get_vertex_attrib(NULL, 0, (unsigned)-1, NULL) == RES_BAD_ARG); + CHK(ssol_shape_get_vertex_attrib(shape, 0, (unsigned)-1, NULL) == RES_BAD_ARG); + CHK(ssol_shape_get_vertex_attrib(NULL, n, SSOL_POSITION, NULL) == RES_BAD_ARG); + CHK(ssol_shape_get_vertex_attrib(shape, n, SSOL_POSITION, NULL) == RES_BAD_ARG); + CHK(ssol_shape_get_vertex_attrib(NULL, 0, SSOL_POSITION, NULL) == RES_BAD_ARG); + CHK(ssol_shape_get_vertex_attrib(shape, 0, SSOL_POSITION, NULL) == RES_BAD_ARG); + CHK(ssol_shape_get_vertex_attrib(NULL, n, (unsigned)-1, val) == RES_BAD_ARG); + CHK(ssol_shape_get_vertex_attrib(shape, n, (unsigned)-1, val) == RES_BAD_ARG); + CHK(ssol_shape_get_vertex_attrib(NULL, 0, (unsigned)-1, val) == RES_BAD_ARG); + CHK(ssol_shape_get_vertex_attrib(shape, 0, (unsigned)-1,val) == RES_BAD_ARG); + CHK(ssol_shape_get_vertex_attrib(NULL, n, SSOL_POSITION, val) == RES_BAD_ARG); + CHK(ssol_shape_get_vertex_attrib(shape, n, SSOL_POSITION, val) == RES_BAD_ARG); + CHK(ssol_shape_get_vertex_attrib(NULL, 0, SSOL_POSITION, val) == RES_BAD_ARG); FOR_EACH(i, 0, n) { float valf[3]; - CHECK(ssol_shape_get_vertex_attrib(shape, i, SSOL_POSITION, val), RES_OK); + CHK(ssol_shape_get_vertex_attrib(shape, i, SSOL_POSITION, val) == RES_OK); get_position(i, valf, (void*)&SQUARE_DESC__); - CHECK((float)val[0], valf[0]); - CHECK((float)val[1], valf[1]); - CHECK((float)val[2], valf[2]); + CHK((float)val[0] == valf[0]); + CHK((float)val[1] == valf[1]); + CHK((float)val[2] == valf[2]); - CHECK(ssol_shape_get_vertex_attrib(shape, i, SSOL_NORMAL, val), RES_OK); + CHK(ssol_shape_get_vertex_attrib(shape, i, SSOL_NORMAL, val) == RES_OK); get_normal(i, valf, (void*)&SQUARE_DESC__); - CHECK((float)val[0], valf[0]); - CHECK((float)val[1], valf[1]); - CHECK((float)val[2], valf[2]); + CHK((float)val[0] == valf[0]); + CHK((float)val[1] == valf[1]); + CHK((float)val[2] == valf[2]); - CHECK(ssol_shape_get_vertex_attrib(shape, i, SSOL_TEXCOORD, val), RES_OK); + CHK(ssol_shape_get_vertex_attrib(shape, i, SSOL_TEXCOORD, val) == RES_OK); get_uv(i, valf, (void*)&SQUARE_DESC__); - CHECK((float)val[0], valf[0]); - CHECK((float)val[1], valf[1]); + CHK((float)val[0] == valf[0]); + CHK((float)val[1] == valf[1]); } - CHECK(ssol_shape_get_triangles_count(NULL, NULL), RES_BAD_ARG); - CHECK(ssol_shape_get_triangles_count(shape, NULL), RES_BAD_ARG); - CHECK(ssol_shape_get_triangles_count(NULL, &n), RES_BAD_ARG); - CHECK(ssol_shape_get_triangles_count(shape, &n), RES_OK); - CHECK(n, SQUARE_NTRIS__); + CHK(ssol_shape_get_triangles_count(NULL, NULL) == RES_BAD_ARG); + CHK(ssol_shape_get_triangles_count(shape, NULL) == RES_BAD_ARG); + CHK(ssol_shape_get_triangles_count(NULL, &n) == RES_BAD_ARG); + CHK(ssol_shape_get_triangles_count(shape, &n) == RES_OK); + CHK(n == SQUARE_NTRIS__); - CHECK(ssol_shape_get_triangle_indices(NULL, n, NULL), RES_BAD_ARG); - CHECK(ssol_shape_get_triangle_indices(shape, n, NULL), RES_BAD_ARG); - CHECK(ssol_shape_get_triangle_indices(NULL, 0, NULL), RES_BAD_ARG); - CHECK(ssol_shape_get_triangle_indices(shape, 0, NULL), RES_BAD_ARG); - CHECK(ssol_shape_get_triangle_indices(NULL, n, ids), RES_BAD_ARG); - CHECK(ssol_shape_get_triangle_indices(shape, n, ids), RES_BAD_ARG); - CHECK(ssol_shape_get_triangle_indices(NULL, 0, ids), RES_BAD_ARG); + CHK(ssol_shape_get_triangle_indices(NULL, n, NULL) == RES_BAD_ARG); + CHK(ssol_shape_get_triangle_indices(shape, n, NULL) == RES_BAD_ARG); + CHK(ssol_shape_get_triangle_indices(NULL, 0, NULL) == RES_BAD_ARG); + CHK(ssol_shape_get_triangle_indices(shape, 0, NULL) == RES_BAD_ARG); + CHK(ssol_shape_get_triangle_indices(NULL, n, ids) == RES_BAD_ARG); + CHK(ssol_shape_get_triangle_indices(shape, n, ids) == RES_BAD_ARG); + CHK(ssol_shape_get_triangle_indices(NULL, 0, ids) == RES_BAD_ARG); FOR_EACH(i, 0, n) { unsigned ids2[3]; - CHECK(ssol_shape_get_triangle_indices(shape, i, ids), RES_OK); + CHK(ssol_shape_get_triangle_indices(shape, i, ids) == RES_OK); get_ids(i, ids2, (void*)&SQUARE_DESC__); - CHECK(ids[0], ids2[0]); - CHECK(ids[1], ids2[1]); - CHECK(ids[2], ids2[2]); + CHK(ids[0] == ids2[0]); + CHK(ids[1] == ids2[1]); + CHK(ids[2] == ids2[2]); } - CHECK(ssol_shape_ref_put(shape), RES_OK); + CHK(ssol_shape_ref_put(shape) == RES_OK); - CHECK(ssol_shape_create_punched_surface(NULL, NULL), RES_BAD_ARG); - CHECK(ssol_shape_create_punched_surface(dev, NULL), RES_BAD_ARG); - CHECK(ssol_shape_create_punched_surface(NULL, &shape), RES_BAD_ARG); - CHECK(ssol_shape_create_punched_surface(dev, &shape), RES_OK); + CHK(ssol_shape_create_punched_surface(NULL, NULL) == RES_BAD_ARG); + CHK(ssol_shape_create_punched_surface(dev, NULL) == RES_BAD_ARG); + CHK(ssol_shape_create_punched_surface(NULL, &shape) == RES_BAD_ARG); + CHK(ssol_shape_create_punched_surface(dev, &shape) == RES_OK); carving.get = get_polygon_vertices; carving.operation = SSOL_AND; @@ -160,91 +160,91 @@ main(int argc, char** argv) punched_surface.nb_carvings = 1; punched_surface.quadric = &quadric; punched_surface.carvings = &carving; - CHECK(ssol_punched_surface_setup(shape, &punched_surface), RES_OK); + CHK(ssol_punched_surface_setup(shape, &punched_surface) == RES_OK); punched_surface.nb_carvings = 0; - CHECK(ssol_punched_surface_setup(shape, &punched_surface), RES_BAD_ARG); + CHK(ssol_punched_surface_setup(shape, &punched_surface) == RES_BAD_ARG); punched_surface.nb_carvings = 1; punched_surface.carvings = NULL; - CHECK(ssol_punched_surface_setup(shape, &punched_surface), RES_BAD_ARG); + CHK(ssol_punched_surface_setup(shape, &punched_surface) == RES_BAD_ARG); punched_surface.carvings = &carving; punched_surface.quadric = NULL; - CHECK(ssol_punched_surface_setup(shape, &punched_surface), RES_BAD_ARG); + CHK(ssol_punched_surface_setup(shape, &punched_surface) == RES_BAD_ARG); punched_surface.quadric = &quadric; quadric.type = (enum ssol_quadric_type)999; - CHECK(ssol_punched_surface_setup(shape, &punched_surface), RES_BAD_ARG); + CHK(ssol_punched_surface_setup(shape, &punched_surface) == RES_BAD_ARG); quadric.type = SSOL_QUADRIC_PLANE; carving.nb_vertices = 0; - CHECK(ssol_punched_surface_setup(shape, &punched_surface), RES_BAD_ARG); + CHK(ssol_punched_surface_setup(shape, &punched_surface) == RES_BAD_ARG); carving.nb_vertices = npolygon_verts; carving.get = NULL; - CHECK(ssol_punched_surface_setup(shape, &punched_surface), RES_BAD_ARG); + CHK(ssol_punched_surface_setup(shape, &punched_surface) == RES_BAD_ARG); carving.get = get_polygon_vertices; quadric.type = SSOL_QUADRIC_PARABOL; quadric.data.parabol.focal = 1; - CHECK(ssol_punched_surface_setup(shape, &punched_surface), RES_OK); + CHK(ssol_punched_surface_setup(shape, &punched_surface) == RES_OK); punched_surface.nb_carvings = 0; - CHECK(ssol_punched_surface_setup(shape, &punched_surface), RES_BAD_ARG); + CHK(ssol_punched_surface_setup(shape, &punched_surface) == RES_BAD_ARG); punched_surface.nb_carvings = 1; quadric.data.parabol.focal = 0; - CHECK(ssol_punched_surface_setup(shape, &punched_surface), RES_BAD_ARG); + CHK(ssol_punched_surface_setup(shape, &punched_surface) == RES_BAD_ARG); quadric.data.parabol.focal = 1; quadric.type = SSOL_QUADRIC_HYPERBOL; quadric.data.hyperbol.real_focal = 1; quadric.data.hyperbol.img_focal = 1; - CHECK(ssol_punched_surface_setup(shape, &punched_surface), RES_OK); + CHK(ssol_punched_surface_setup(shape, &punched_surface) == RES_OK); punched_surface.nb_carvings = 0; - CHECK(ssol_punched_surface_setup(shape, &punched_surface), RES_BAD_ARG); + CHK(ssol_punched_surface_setup(shape, &punched_surface) == RES_BAD_ARG); punched_surface.nb_carvings = 1; quadric.data.hyperbol.real_focal = 0; - CHECK(ssol_punched_surface_setup(shape, &punched_surface), RES_BAD_ARG); + CHK(ssol_punched_surface_setup(shape, &punched_surface) == RES_BAD_ARG); quadric.data.hyperbol.real_focal = 1; quadric.data.hyperbol.img_focal = 0; - CHECK(ssol_punched_surface_setup(shape, &punched_surface), RES_BAD_ARG); + CHK(ssol_punched_surface_setup(shape, &punched_surface) == RES_BAD_ARG); quadric.data.hyperbol.img_focal = 1; quadric.type = SSOL_QUADRIC_PARABOLIC_CYLINDER; quadric.data.parabolic_cylinder.focal = 1; - CHECK(ssol_punched_surface_setup(shape, &punched_surface), RES_OK); + CHK(ssol_punched_surface_setup(shape, &punched_surface) == RES_OK); punched_surface.nb_carvings = 0; - CHECK(ssol_punched_surface_setup(shape, &punched_surface), RES_BAD_ARG); + CHK(ssol_punched_surface_setup(shape, &punched_surface) == RES_BAD_ARG); punched_surface.nb_carvings = 1; quadric.data.parabolic_cylinder.focal = 0; - CHECK(ssol_punched_surface_setup(shape, &punched_surface), RES_BAD_ARG); + CHK(ssol_punched_surface_setup(shape, &punched_surface) == RES_BAD_ARG); quadric.data.parabolic_cylinder.focal = 1; quadric.type = SSOL_QUADRIC_HEMISPHERE; quadric.data.hemisphere.radius = 10; - CHECK(ssol_punched_surface_setup(shape, &punched_surface), RES_OK); + CHK(ssol_punched_surface_setup(shape, &punched_surface) == RES_OK); punched_surface.nb_carvings = 0; - CHECK(ssol_punched_surface_setup(shape, &punched_surface), RES_OK); + CHK(ssol_punched_surface_setup(shape, &punched_surface) == RES_OK); punched_surface.nb_carvings = 1; quadric.data.hemisphere.radius = 0; - CHECK(ssol_punched_surface_setup(shape, &punched_surface), RES_BAD_ARG); + CHK(ssol_punched_surface_setup(shape, &punched_surface) == RES_BAD_ARG); quadric.data.hemisphere.radius = 10; - CHECK(ssol_shape_ref_put(shape), RES_OK); - CHECK(ssol_device_ref_put(dev), RES_OK); + CHK(ssol_shape_ref_put(shape) == RES_OK); + CHK(ssol_device_ref_put(dev) == RES_OK); check_memory_allocator(&allocator); mem_shutdown_proxy_allocator(&allocator); - CHECK(mem_allocated_size(), 0); + CHK(mem_allocated_size() == 0); return 0; } diff --git a/src/test_ssol_solver1.c b/src/test_ssol_solver1.c @@ -39,7 +39,7 @@ static void get_wlen(const size_t i, double* wlen, double* data, void* ctx) { const struct spectrum_desc* desc = ctx; - CHECK(i < desc->count, 1); + CHK(i < desc->count); *wlen = desc->wavelengths[i]; *data = desc->intensities[i]; } @@ -103,198 +103,198 @@ main(int argc, char** argv) mem_init_proxy_allocator(&allocator, &mem_default_allocator); - CHECK(ssol_device_create - (NULL, &allocator, SSOL_NTHREADS_DEFAULT, 0, &dev), RES_OK); + CHK(ssol_device_create + (NULL, &allocator, SSOL_NTHREADS_DEFAULT, 0, &dev) == RES_OK); - CHECK(ssp_rng_create(&allocator, &ssp_rng_threefry, &rng), RES_OK); + CHK(ssp_rng_create(&allocator, &ssp_rng_threefry, &rng) == RES_OK); desc.wavelengths = wavelengths; desc.intensities = intensities; desc.count = 3; - CHECK(ssol_spectrum_create(dev, &spectrum), RES_OK); - CHECK(ssol_spectrum_setup(spectrum, get_wlen, 3, &desc), RES_OK); - CHECK(ssol_sun_create_directional(dev, &sun), RES_OK); - CHECK(ssol_sun_set_direction(sun, d3(dir, 1, 0, -1)), RES_OK); - CHECK(ssol_sun_set_spectrum(sun, spectrum), RES_OK); + CHK(ssol_spectrum_create(dev, &spectrum) == RES_OK); + CHK(ssol_spectrum_setup(spectrum, get_wlen, 3, &desc) == RES_OK); + CHK(ssol_sun_create_directional(dev, &sun) == RES_OK); + CHK(ssol_sun_set_direction(sun, d3(dir, 1, 0, -1)) == RES_OK); + CHK(ssol_sun_set_spectrum(sun, spectrum) == RES_OK); #define DNI 1000 - CHECK(ssol_sun_set_dni(sun, DNI), RES_OK); - CHECK(ssol_scene_create(dev, &scene), RES_OK); + CHK(ssol_sun_set_dni(sun, DNI) == RES_OK); + CHK(ssol_scene_create(dev, &scene) == RES_OK); - CHECK(ssol_solve(NULL, rng, 10, 0, NULL, &estimator), RES_BAD_ARG); - CHECK(ssol_solve(scene, NULL, 10, 0, NULL, &estimator), RES_BAD_ARG); - CHECK(ssol_solve(scene, rng, 0, 0, NULL, &estimator), RES_BAD_ARG); - CHECK(ssol_solve(scene, rng, 10, 0, NULL, &estimator), RES_BAD_ARG); - CHECK(ssol_solve(scene, rng, 10, 0, NULL, NULL), RES_BAD_ARG); + CHK(ssol_solve(NULL, rng, 10, 0, NULL, &estimator) == RES_BAD_ARG); + CHK(ssol_solve(scene, NULL, 10, 0, NULL, &estimator) == RES_BAD_ARG); + CHK(ssol_solve(scene, rng, 0, 0, NULL, &estimator) == RES_BAD_ARG); + CHK(ssol_solve(scene, rng, 10, 0, NULL, &estimator) == RES_BAD_ARG); + CHK(ssol_solve(scene, rng, 10, 0, NULL, NULL) == RES_BAD_ARG); /* No geometry */ - CHECK(ssol_solve(scene, rng, 10, 0, NULL, &estimator), RES_BAD_ARG); + CHK(ssol_solve(scene, rng, 10, 0, NULL, &estimator) == RES_BAD_ARG); /* Create scene content */ - CHECK(ssol_shape_create_mesh(dev, &dummy), RES_OK); - CHECK(ssol_shape_create_mesh(dev, &square), RES_OK); + CHK(ssol_shape_create_mesh(dev, &dummy) == RES_OK); + CHK(ssol_shape_create_mesh(dev, &square) == RES_OK); attribs[0].usage = SSOL_POSITION; attribs[0].get = get_position; - CHECK(ssol_mesh_setup(square, SQUARE_NTRIS__, get_ids, - SQUARE_NVERTS__, attribs, 1, (void*)&SQUARE_DESC__), RES_OK); + CHK(ssol_mesh_setup(square, SQUARE_NTRIS__, get_ids, + SQUARE_NVERTS__, attribs, 1, (void*)&SQUARE_DESC__) == RES_OK); - CHECK(ssol_material_create_mirror(dev, &m_mtl), RES_OK); + CHK(ssol_material_create_mirror(dev, &m_mtl) == RES_OK); shader.normal = get_shader_normal; shader.reflectivity = get_shader_reflectivity; shader.roughness = get_shader_roughness; - CHECK(ssol_mirror_setup(m_mtl, &shader), RES_OK); - CHECK(ssol_material_create_virtual(dev, &v_mtl), RES_OK); - - CHECK(ssol_object_create(dev, &m_object), RES_OK); - CHECK(ssol_object_add_shaded_shape(m_object, square, m_mtl, m_mtl), RES_OK); - CHECK(ssol_object_instantiate(m_object, &heliostat), RES_OK); - CHECK(ssol_instance_set_receiver(heliostat, SSOL_FRONT, 0), RES_OK); - CHECK(ssol_scene_attach_instance(scene, heliostat), RES_OK); - - CHECK(ssol_object_instantiate(m_object, &secondary), RES_OK); - CHECK(ssol_instance_set_receiver(secondary, SSOL_FRONT, 0), RES_OK); - CHECK(ssol_instance_set_transform(secondary, transform1), RES_OK); - CHECK(ssol_scene_attach_instance(scene, secondary), RES_OK); - - CHECK(ssol_object_create(dev, &t_object), RES_OK); - CHECK(ssol_object_add_shaded_shape(t_object, square, v_mtl, v_mtl), RES_OK); - CHECK(ssol_object_instantiate(t_object, &target), RES_OK); - CHECK(ssol_instance_set_transform(target, transform2), RES_OK); - CHECK(ssol_instance_set_receiver(target, SSOL_FRONT, 0), RES_OK); - CHECK(ssol_scene_attach_instance(scene, target), RES_OK); + CHK(ssol_mirror_setup(m_mtl, &shader, SSOL_MICROFACET_BECKMANN) == RES_OK); + CHK(ssol_material_create_virtual(dev, &v_mtl) == RES_OK); + + CHK(ssol_object_create(dev, &m_object) == RES_OK); + CHK(ssol_object_add_shaded_shape(m_object, square, m_mtl, m_mtl) == RES_OK); + CHK(ssol_object_instantiate(m_object, &heliostat) == RES_OK); + CHK(ssol_instance_set_receiver(heliostat, SSOL_FRONT, 0) == RES_OK); + CHK(ssol_scene_attach_instance(scene, heliostat) == RES_OK); + + CHK(ssol_object_instantiate(m_object, &secondary) == RES_OK); + CHK(ssol_instance_set_receiver(secondary, SSOL_FRONT, 0) == RES_OK); + CHK(ssol_instance_set_transform(secondary, transform1) == RES_OK); + CHK(ssol_scene_attach_instance(scene, secondary) == RES_OK); + + CHK(ssol_object_create(dev, &t_object) == RES_OK); + CHK(ssol_object_add_shaded_shape(t_object, square, v_mtl, v_mtl) == RES_OK); + CHK(ssol_object_instantiate(t_object, &target) == RES_OK); + CHK(ssol_instance_set_transform(target, transform2) == RES_OK); + CHK(ssol_instance_set_receiver(target, SSOL_FRONT, 0) == RES_OK); + CHK(ssol_scene_attach_instance(scene, target) == RES_OK); /* No sun */ - CHECK(ssol_solve(scene, rng, 10, 0, NULL, &estimator), RES_BAD_ARG); - - CHECK(ssol_scene_attach_sun(scene, sun), RES_OK); - CHECK(ssol_solve(scene, rng, 10, 0, NULL, &estimator), RES_OK); - CHECK(ssol_estimator_ref_put(estimator), RES_OK); - - CHECK(ssol_solve - (scene, rng, 1, 0, &SSOL_PATH_TRACKER_DEFAULT, &estimator), RES_OK); - - CHECK(ssol_estimator_get_tracked_paths_count(NULL, NULL), RES_BAD_ARG); - CHECK(ssol_estimator_get_tracked_paths_count(estimator, NULL), RES_BAD_ARG); - CHECK(ssol_estimator_get_tracked_paths_count(NULL, &count), RES_BAD_ARG); - CHECK(ssol_estimator_get_tracked_paths_count(estimator, &count), RES_OK); - CHECK(count, 1); - - CHECK(ssol_estimator_get_tracked_path(NULL, count, NULL), RES_BAD_ARG); - CHECK(ssol_estimator_get_tracked_path(estimator, count, NULL), RES_BAD_ARG); - CHECK(ssol_estimator_get_tracked_path(NULL, 0, NULL), RES_BAD_ARG); - CHECK(ssol_estimator_get_tracked_path(estimator, 0, NULL), RES_BAD_ARG); - CHECK(ssol_estimator_get_tracked_path(NULL, count, &path), RES_BAD_ARG); - CHECK(ssol_estimator_get_tracked_path(estimator, count, &path), RES_BAD_ARG); - CHECK(ssol_estimator_get_tracked_path(NULL, 0, &path), RES_BAD_ARG); - CHECK(ssol_estimator_get_tracked_path(estimator, 0, &path), RES_OK); - - CHECK(ssol_path_get_vertices_count(NULL, NULL), RES_BAD_ARG); - CHECK(ssol_path_get_vertices_count(&path, NULL), RES_BAD_ARG); - CHECK(ssol_path_get_vertices_count(NULL, &count), RES_BAD_ARG); - CHECK(ssol_path_get_vertices_count(&path, &count), RES_OK); - NCHECK(count, 0); - - CHECK(ssol_path_get_vertex(NULL, count, NULL), RES_BAD_ARG); - CHECK(ssol_path_get_vertex(&path, count, NULL), RES_BAD_ARG); - CHECK(ssol_path_get_vertex(NULL, 0, NULL), RES_BAD_ARG); - CHECK(ssol_path_get_vertex(&path, 0, NULL), RES_BAD_ARG); - CHECK(ssol_path_get_vertex(NULL, count, &vertex), RES_BAD_ARG); - CHECK(ssol_path_get_vertex(&path, count, &vertex), RES_BAD_ARG); - CHECK(ssol_path_get_vertex(NULL, 0, &vertex), RES_BAD_ARG); + CHK(ssol_solve(scene, rng, 10, 0, NULL, &estimator) == RES_BAD_ARG); + + CHK(ssol_scene_attach_sun(scene, sun) == RES_OK); + CHK(ssol_solve(scene, rng, 10, 0, NULL, &estimator) == RES_OK); + CHK(ssol_estimator_ref_put(estimator) == RES_OK); + + CHK(ssol_solve + (scene, rng, 1, 0, &SSOL_PATH_TRACKER_DEFAULT, &estimator) == RES_OK); + + CHK(ssol_estimator_get_tracked_paths_count(NULL, NULL) == RES_BAD_ARG); + CHK(ssol_estimator_get_tracked_paths_count(estimator, NULL) == RES_BAD_ARG); + CHK(ssol_estimator_get_tracked_paths_count(NULL, &count) == RES_BAD_ARG); + CHK(ssol_estimator_get_tracked_paths_count(estimator, &count) == RES_OK); + CHK(count == 1); + + CHK(ssol_estimator_get_tracked_path(NULL, count, NULL) == RES_BAD_ARG); + CHK(ssol_estimator_get_tracked_path(estimator, count, NULL) == RES_BAD_ARG); + CHK(ssol_estimator_get_tracked_path(NULL, 0, NULL) == RES_BAD_ARG); + CHK(ssol_estimator_get_tracked_path(estimator, 0, NULL) == RES_BAD_ARG); + CHK(ssol_estimator_get_tracked_path(NULL, count, &path) == RES_BAD_ARG); + CHK(ssol_estimator_get_tracked_path(estimator, count, &path) == RES_BAD_ARG); + CHK(ssol_estimator_get_tracked_path(NULL, 0, &path) == RES_BAD_ARG); + CHK(ssol_estimator_get_tracked_path(estimator, 0, &path) == RES_OK); + + CHK(ssol_path_get_vertices_count(NULL, NULL) == RES_BAD_ARG); + CHK(ssol_path_get_vertices_count(&path, NULL) == RES_BAD_ARG); + CHK(ssol_path_get_vertices_count(NULL, &count) == RES_BAD_ARG); + CHK(ssol_path_get_vertices_count(&path, &count) == RES_OK); + CHK(count != 0); + + CHK(ssol_path_get_vertex(NULL, count, NULL) == RES_BAD_ARG); + CHK(ssol_path_get_vertex(&path, count, NULL) == RES_BAD_ARG); + CHK(ssol_path_get_vertex(NULL, 0, NULL) == RES_BAD_ARG); + CHK(ssol_path_get_vertex(&path, 0, NULL) == RES_BAD_ARG); + CHK(ssol_path_get_vertex(NULL, count, &vertex) == RES_BAD_ARG); + CHK(ssol_path_get_vertex(&path, count, &vertex) == RES_BAD_ARG); + CHK(ssol_path_get_vertex(NULL, 0, &vertex) == RES_BAD_ARG); FOR_EACH(i, 0, count) { - CHECK(ssol_path_get_vertex(&path, i, &vertex), RES_OK); + CHK(ssol_path_get_vertex(&path, i, &vertex) == RES_OK); } - CHECK(ssol_estimator_get_sampled_area(NULL, NULL), RES_BAD_ARG); - CHECK(ssol_estimator_get_sampled_area(estimator, NULL), RES_BAD_ARG); - CHECK(ssol_estimator_get_sampled_area(NULL, &dbl), RES_BAD_ARG); - CHECK(ssol_estimator_get_sampled_area(estimator, &dbl), RES_OK); - CHECK(eq_eps(dbl, 12, DBL_EPSILON), 1); - - CHECK(ssol_estimator_get_realisation_count(NULL, NULL), RES_BAD_ARG); - CHECK(ssol_estimator_get_realisation_count(estimator, NULL), RES_BAD_ARG); - CHECK(ssol_estimator_get_realisation_count(NULL, &count), RES_BAD_ARG); - CHECK(ssol_estimator_get_realisation_count(estimator, &count), RES_OK); - CHECK(count, 1); - - CHECK(ssol_estimator_get_failed_count(NULL, NULL), RES_BAD_ARG); - CHECK(ssol_estimator_get_failed_count(estimator, NULL), RES_BAD_ARG); - CHECK(ssol_estimator_get_failed_count(NULL, &count), RES_BAD_ARG); - CHECK(ssol_estimator_get_failed_count(estimator, &fcount), RES_OK); - CHECK(fcount, 0); - - CHECK(ssol_estimator_get_sampled_count(NULL, NULL), RES_BAD_ARG); - CHECK(ssol_estimator_get_sampled_count(estimator, NULL), RES_BAD_ARG); - CHECK(ssol_estimator_get_sampled_count(NULL, &scount), RES_BAD_ARG); - CHECK(ssol_estimator_get_sampled_count(estimator, &scount), RES_OK); - CHECK(scount, 3); - - CHECK(ssol_estimator_get_mc_sampled(NULL, heliostat, &sampled), RES_BAD_ARG); - CHECK(ssol_estimator_get_mc_sampled(estimator, NULL, &sampled), RES_BAD_ARG); - CHECK(ssol_estimator_get_mc_sampled(estimator, heliostat, NULL), RES_BAD_ARG); - CHECK(ssol_estimator_get_mc_sampled(estimator, heliostat, &sampled), RES_OK); - - CHECK(ssol_estimator_get_mc_global(NULL, &mc_global), RES_BAD_ARG); - CHECK(ssol_estimator_get_mc_global(estimator, NULL), RES_BAD_ARG); - CHECK(ssol_estimator_get_mc_global(estimator, &mc_global), RES_OK); - - CHECK(ssol_estimator_ref_get(NULL), RES_BAD_ARG); - CHECK(ssol_estimator_ref_get(estimator), RES_OK); - CHECK(ssol_estimator_ref_put(NULL), RES_BAD_ARG); - CHECK(ssol_estimator_ref_put(estimator), RES_OK); - CHECK(ssol_estimator_ref_put(estimator), RES_OK); + CHK(ssol_estimator_get_sampled_area(NULL, NULL) == RES_BAD_ARG); + CHK(ssol_estimator_get_sampled_area(estimator, NULL) == RES_BAD_ARG); + CHK(ssol_estimator_get_sampled_area(NULL, &dbl) == RES_BAD_ARG); + CHK(ssol_estimator_get_sampled_area(estimator, &dbl) == RES_OK); + CHK(eq_eps(dbl, 12, DBL_EPSILON) == 1); + + CHK(ssol_estimator_get_realisation_count(NULL, NULL) == RES_BAD_ARG); + CHK(ssol_estimator_get_realisation_count(estimator, NULL) == RES_BAD_ARG); + CHK(ssol_estimator_get_realisation_count(NULL, &count) == RES_BAD_ARG); + CHK(ssol_estimator_get_realisation_count(estimator, &count) == RES_OK); + CHK(count == 1); + + CHK(ssol_estimator_get_failed_count(NULL, NULL) == RES_BAD_ARG); + CHK(ssol_estimator_get_failed_count(estimator, NULL) == RES_BAD_ARG); + CHK(ssol_estimator_get_failed_count(NULL, &count) == RES_BAD_ARG); + CHK(ssol_estimator_get_failed_count(estimator, &fcount) == RES_OK); + CHK(fcount == 0); + + CHK(ssol_estimator_get_sampled_count(NULL, NULL) == RES_BAD_ARG); + CHK(ssol_estimator_get_sampled_count(estimator, NULL) == RES_BAD_ARG); + CHK(ssol_estimator_get_sampled_count(NULL, &scount) == RES_BAD_ARG); + CHK(ssol_estimator_get_sampled_count(estimator, &scount) == RES_OK); + CHK(scount == 3); + + CHK(ssol_estimator_get_mc_sampled(NULL, heliostat, &sampled) == RES_BAD_ARG); + CHK(ssol_estimator_get_mc_sampled(estimator, NULL, &sampled) == RES_BAD_ARG); + CHK(ssol_estimator_get_mc_sampled(estimator, heliostat, NULL) == RES_BAD_ARG); + CHK(ssol_estimator_get_mc_sampled(estimator, heliostat, &sampled) == RES_OK); + + CHK(ssol_estimator_get_mc_global(NULL, &mc_global) == RES_BAD_ARG); + CHK(ssol_estimator_get_mc_global(estimator, NULL) == RES_BAD_ARG); + CHK(ssol_estimator_get_mc_global(estimator, &mc_global) == RES_OK); + + CHK(ssol_estimator_ref_get(NULL) == RES_BAD_ARG); + CHK(ssol_estimator_ref_get(estimator) == RES_OK); + CHK(ssol_estimator_ref_put(NULL) == RES_BAD_ARG); + CHK(ssol_estimator_ref_put(estimator) == RES_OK); + CHK(ssol_estimator_ref_put(estimator) == RES_OK); /* No geometry to sample */ - CHECK(ssol_instance_sample(target, 0), RES_OK); - CHECK(ssol_instance_sample(secondary, 0), RES_OK); - CHECK(ssol_instance_sample(heliostat, 0), RES_OK); - CHECK(ssol_solve(scene, rng, 10, 0, NULL, &estimator), RES_BAD_ARG); - CHECK(ssol_estimator_get_mc_sampled(estimator, heliostat, &sampled), RES_BAD_ARG); + CHK(ssol_instance_sample(target, 0) == RES_OK); + CHK(ssol_instance_sample(secondary, 0) == RES_OK); + CHK(ssol_instance_sample(heliostat, 0) == RES_OK); + CHK(ssol_solve(scene, rng, 10, 0, NULL, &estimator) == RES_BAD_ARG); + CHK(ssol_estimator_get_mc_sampled(estimator, heliostat, &sampled) == RES_BAD_ARG); - CHECK(ssol_instance_sample(target, 1), RES_OK); - CHECK(ssol_instance_sample(secondary, 1), RES_OK); - CHECK(ssol_instance_sample(heliostat, 1), RES_OK); + CHK(ssol_instance_sample(target, 1) == RES_OK); + CHK(ssol_instance_sample(secondary, 1) == RES_OK); + CHK(ssol_instance_sample(heliostat, 1) == RES_OK); /* No attached sun */ - CHECK(ssol_scene_detach_sun(scene, sun), RES_OK); - CHECK(ssol_solve(scene, rng, 10, 0, NULL, &estimator), RES_BAD_ARG); - CHECK(ssol_sun_ref_put(sun), RES_OK); + CHK(ssol_scene_detach_sun(scene, sun) == RES_OK); + CHK(ssol_solve(scene, rng, 10, 0, NULL, &estimator) == RES_BAD_ARG); + CHK(ssol_sun_ref_put(sun) == RES_OK); /* Sun with no spectrum */ - CHECK(ssol_sun_create_directional(dev, &sun), RES_OK); - CHECK(ssol_sun_set_direction(sun, d3(dir, 1, 0, -1)), RES_OK); - CHECK(ssol_sun_set_dni(sun, DNI), RES_OK); - CHECK(ssol_scene_attach_sun(scene, sun), RES_OK); - CHECK(ssol_solve(scene, rng, 10, 0, NULL, &estimator), RES_BAD_ARG); - CHECK(ssol_scene_detach_sun(scene, sun), RES_OK); - CHECK(ssol_sun_ref_put(sun), RES_OK); + CHK(ssol_sun_create_directional(dev, &sun) == RES_OK); + CHK(ssol_sun_set_direction(sun, d3(dir, 1, 0, -1)) == RES_OK); + CHK(ssol_sun_set_dni(sun, DNI) == RES_OK); + CHK(ssol_scene_attach_sun(scene, sun) == RES_OK); + CHK(ssol_solve(scene, rng, 10, 0, NULL, &estimator) == RES_BAD_ARG); + CHK(ssol_scene_detach_sun(scene, sun) == RES_OK); + CHK(ssol_sun_ref_put(sun) == RES_OK); /* Sun with undefined DNI */ - CHECK(ssol_sun_create_directional(dev, &sun), RES_OK); - CHECK(ssol_sun_set_direction(sun, d3(dir, 1, 0, -1)), RES_OK); - CHECK(ssol_sun_set_spectrum(sun, spectrum), RES_OK); - CHECK(ssol_scene_attach_sun(scene, sun), RES_OK); - CHECK(ssol_solve(scene, rng, 10, 0, NULL, &estimator), RES_BAD_ARG); - CHECK(ssol_sun_set_dni(sun, DNI), RES_OK); + CHK(ssol_sun_create_directional(dev, &sun) == RES_OK); + CHK(ssol_sun_set_direction(sun, d3(dir, 1, 0, -1)) == RES_OK); + CHK(ssol_sun_set_spectrum(sun, spectrum) == RES_OK); + CHK(ssol_scene_attach_sun(scene, sun) == RES_OK); + CHK(ssol_solve(scene, rng, 10, 0, NULL, &estimator) == RES_BAD_ARG); + CHK(ssol_sun_set_dni(sun, DNI) == RES_OK); /* No receiver in scene */ - CHECK(ssol_instance_set_receiver(heliostat, 0, 0), RES_OK); - CHECK(ssol_instance_set_receiver(secondary, 0, 0), RES_OK); - CHECK(ssol_instance_set_receiver(target, 0, 0), RES_OK); - CHECK(ssol_solve(scene, rng, 10, 0, NULL, &estimator), RES_OK); - CHECK(ssol_instance_set_receiver(heliostat, SSOL_FRONT, 0), RES_OK); - CHECK(ssol_instance_set_receiver(secondary, SSOL_FRONT, 0), RES_OK); - CHECK(ssol_instance_set_receiver(target, SSOL_FRONT, 0), RES_OK); - CHECK(ssol_estimator_ref_put(estimator), RES_OK); + CHK(ssol_instance_set_receiver(heliostat, 0, 0) == RES_OK); + CHK(ssol_instance_set_receiver(secondary, 0, 0) == RES_OK); + CHK(ssol_instance_set_receiver(target, 0, 0) == RES_OK); + CHK(ssol_solve(scene, rng, 10, 0, NULL, &estimator) == RES_OK); + CHK(ssol_instance_set_receiver(heliostat, SSOL_FRONT, 0) == RES_OK); + CHK(ssol_instance_set_receiver(secondary, SSOL_FRONT, 0) == RES_OK); + CHK(ssol_instance_set_receiver(target, SSOL_FRONT, 0) == RES_OK); + CHK(ssol_estimator_ref_put(estimator) == RES_OK); /* Can sample any geometry; variance is high */ #define N__ 10000 #define GET_MC_RCV ssol_estimator_get_mc_receiver #define GET_MC_GLOBAL ssol_estimator_get_mc_global - CHECK(ssol_solve(scene, rng, N__, 0, NULL, &estimator), RES_OK); - CHECK(ssol_estimator_get_realisation_count(estimator, &count), RES_OK); - CHECK(count, N__); - CHECK(ssol_estimator_get_failed_count(estimator, &fcount), RES_OK); - CHECK(fcount, 0); + CHK(ssol_solve(scene, rng, N__, 0, NULL, &estimator) == RES_OK); + CHK(ssol_estimator_get_realisation_count(estimator, &count) == RES_OK); + CHK(count == N__); + CHK(ssol_estimator_get_failed_count(estimator, &fcount) == RES_OK); + CHK(fcount == 0); #define COS cos(PI / 4) #define DNI_cos (DNI * COS) m = 4 * DNI_cos; @@ -302,235 +302,234 @@ main(int argc, char** argv) dbl = sqrt((SQR(12 * DNI_cos) / 3 - SQR(4 * DNI_cos)) / (double)count); std = dbl; /* Target was sampled but shadowed by secondary */ - CHECK(ssol_estimator_get_mc_global(estimator, &mc_global), RES_OK); + CHK(ssol_estimator_get_mc_global(estimator, &mc_global) == RES_OK); PRINT_GLOBAL(mc_global); - CHECK(eq_eps(mc_global.shadowed.E, m, 2 * dbl), 1); - CHECK(eq_eps(mc_global.missing.E, 2*m, 2*mc_global.missing.SE), 1); - CHECK(GET_MC_RCV(NULL, NULL, SSOL_BACK, NULL), RES_BAD_ARG); - CHECK(GET_MC_RCV(estimator, NULL, SSOL_BACK, NULL), RES_BAD_ARG); - CHECK(GET_MC_RCV(NULL, target, SSOL_BACK, NULL), RES_BAD_ARG); - CHECK(GET_MC_RCV(estimator, target, SSOL_BACK, NULL), RES_BAD_ARG); - CHECK(GET_MC_RCV(NULL, NULL, SSOL_BACK, &mc_rcv), RES_BAD_ARG); - CHECK(GET_MC_RCV(estimator, NULL, SSOL_BACK, &mc_rcv), RES_BAD_ARG); - CHECK(GET_MC_RCV(NULL, target, SSOL_BACK, &mc_rcv), RES_BAD_ARG); - CHECK(GET_MC_RCV(estimator, target, SSOL_BACK, &mc_rcv), RES_BAD_ARG); - CHECK(GET_MC_RCV(NULL, NULL, SSOL_FRONT, NULL), RES_BAD_ARG); - CHECK(GET_MC_RCV(estimator, NULL, SSOL_FRONT, NULL), RES_BAD_ARG); - CHECK(GET_MC_RCV(NULL, target, SSOL_FRONT, NULL), RES_BAD_ARG); - CHECK(GET_MC_RCV(estimator, target, SSOL_FRONT, NULL), RES_BAD_ARG); - CHECK(GET_MC_RCV(NULL, NULL, SSOL_FRONT, &mc_rcv), RES_BAD_ARG); - CHECK(GET_MC_RCV(estimator, NULL, SSOL_FRONT, &mc_rcv), RES_BAD_ARG); - CHECK(GET_MC_RCV(NULL, target, SSOL_FRONT, &mc_rcv), RES_BAD_ARG); - CHECK(GET_MC_RCV(estimator, target, SSOL_FRONT, &mc_rcv), RES_OK); + CHK(eq_eps(mc_global.shadowed.E, m, 2 * dbl) == 1); + CHK(eq_eps(mc_global.missing.E, 2*m, 2*mc_global.missing.SE) == 1); + CHK(GET_MC_RCV(NULL, NULL, SSOL_BACK, NULL) == RES_BAD_ARG); + CHK(GET_MC_RCV(estimator, NULL, SSOL_BACK, NULL) == RES_BAD_ARG); + CHK(GET_MC_RCV(NULL, target, SSOL_BACK, NULL) == RES_BAD_ARG); + CHK(GET_MC_RCV(estimator, target, SSOL_BACK, NULL) == RES_BAD_ARG); + CHK(GET_MC_RCV(NULL, NULL, SSOL_BACK, &mc_rcv) == RES_BAD_ARG); + CHK(GET_MC_RCV(estimator, NULL, SSOL_BACK, &mc_rcv) == RES_BAD_ARG); + CHK(GET_MC_RCV(NULL, target, SSOL_BACK, &mc_rcv) == RES_BAD_ARG); + CHK(GET_MC_RCV(estimator, target, SSOL_BACK, &mc_rcv) == RES_BAD_ARG); + CHK(GET_MC_RCV(NULL, NULL, SSOL_FRONT, NULL) == RES_BAD_ARG); + CHK(GET_MC_RCV(estimator, NULL, SSOL_FRONT, NULL) == RES_BAD_ARG); + CHK(GET_MC_RCV(NULL, target, SSOL_FRONT, NULL) == RES_BAD_ARG); + CHK(GET_MC_RCV(estimator, target, SSOL_FRONT, NULL) == RES_BAD_ARG); + CHK(GET_MC_RCV(NULL, NULL, SSOL_FRONT, &mc_rcv) == RES_BAD_ARG); + CHK(GET_MC_RCV(estimator, NULL, SSOL_FRONT, &mc_rcv) == RES_BAD_ARG); + CHK(GET_MC_RCV(NULL, target, SSOL_FRONT, &mc_rcv) == RES_BAD_ARG); + CHK(GET_MC_RCV(estimator, target, SSOL_FRONT, &mc_rcv) == RES_OK); printf("Ir(target) = %g +/- %g\n", mc_rcv.incoming_flux.E, mc_rcv.incoming_flux.SE); - CHECK(eq_eps(mc_rcv.incoming_flux.E, m, 2 * std), 1); - CHECK(eq_eps(mc_rcv.incoming_flux.SE, std, 1e-1), 1); - CHECK(ssol_estimator_ref_put(estimator), RES_OK); + CHK(eq_eps(mc_rcv.incoming_flux.E, m, 2 * std) == 1); + CHK(eq_eps(mc_rcv.incoming_flux.SE, std, 1e-1) == 1); + CHK(ssol_estimator_ref_put(estimator) == RES_OK); /* Sample primary mirror only; variance is low */ - CHECK(ssol_instance_sample(target, 0), RES_OK); - CHECK(ssol_instance_sample(secondary, 0), RES_OK); + CHK(ssol_instance_sample(target, 0) == RES_OK); + CHK(ssol_instance_sample(secondary, 0) == RES_OK); - CHECK(ssol_solve(scene, rng, N__, 0, NULL, &estimator), RES_OK); - CHECK(ssol_estimator_get_realisation_count(estimator, &count), RES_OK); - CHECK(count, N__); + CHK(ssol_solve(scene, rng, N__, 0, NULL, &estimator) == RES_OK); + CHK(ssol_estimator_get_realisation_count(estimator, &count) == RES_OK); + CHK(count == N__); m = 4 * DNI_cos; std = 0; - CHECK(ssol_estimator_get_mc_global(estimator, &mc_global), RES_OK); + CHK(ssol_estimator_get_mc_global(estimator, &mc_global) == RES_OK); PRINT_GLOBAL(mc_global); - CHECK(eq_eps(mc_global.shadowed.E, 0, 1e-4), 1); - CHECK(eq_eps(mc_global.missing.E, m, 1e-4), 1); - CHECK(eq_eps(mc_global.cos_factor.E, COS, 1e-4), 1); - CHECK(GET_MC_RCV(estimator, target, SSOL_FRONT, &mc_rcv), RES_OK); + CHK(eq_eps(mc_global.shadowed.E, 0, 1e-4) == 1); + CHK(eq_eps(mc_global.missing.E, m, 1e-4) == 1); + CHK(eq_eps(mc_global.cos_factor.E, COS, 1e-4) == 1); + CHK(GET_MC_RCV(estimator, target, SSOL_FRONT, &mc_rcv) == RES_OK); printf("Ir(target) = %g +/- %g\n", mc_rcv.incoming_flux.E, mc_rcv.incoming_flux.SE); - CHECK(eq_eps(mc_rcv.incoming_flux.E, m, 1e-8), 1); - CHECK(eq_eps(mc_rcv.incoming_flux.SE, std, 1e-4), 1); - CHECK(ssol_estimator_ref_put(estimator), RES_OK); + CHK(eq_eps(mc_rcv.incoming_flux.E, m, 1e-8) == 1); + CHK(eq_eps(mc_rcv.incoming_flux.SE, std, 1e-4) == 1); + CHK(ssol_estimator_ref_put(estimator) == RES_OK); /* Check atmosphere model; with no extinction result is unchanged */ - CHECK(ssol_atmosphere_create(dev, &atm), RES_OK); + CHK(ssol_atmosphere_create(dev, &atm) == RES_OK); extinction.type = SSOL_DATA_REAL; extinction.value.real = 0; - CHECK(ssol_atmosphere_set_extinction(atm, &extinction), RES_OK); - CHECK(ssol_scene_attach_atmosphere(scene, atm), RES_OK); + CHK(ssol_atmosphere_set_extinction(atm, &extinction) == RES_OK); + CHK(ssol_scene_attach_atmosphere(scene, atm) == RES_OK); - CHECK(ssol_solve(scene, rng, N__, 0, NULL, &estimator), RES_OK); - CHECK(ssol_estimator_get_realisation_count(estimator, &count), RES_OK); - CHECK(count, N__); + CHK(ssol_solve(scene, rng, N__, 0, NULL, &estimator) == RES_OK); + CHK(ssol_estimator_get_realisation_count(estimator, &count) == RES_OK); + CHK(count == N__); m = 4 * DNI_cos; std = 0; - CHECK(ssol_scene_detach_atmosphere(scene, atm), RES_OK); - CHECK(ssol_atmosphere_ref_put(atm), RES_OK); - CHECK(ssol_estimator_get_mc_global(estimator, &mc_global), RES_OK); + CHK(ssol_scene_detach_atmosphere(scene, atm) == RES_OK); + CHK(ssol_atmosphere_ref_put(atm) == RES_OK); + CHK(ssol_estimator_get_mc_global(estimator, &mc_global) == RES_OK); PRINT_GLOBAL(mc_global); - CHECK(eq_eps(mc_global.shadowed.E, 0, 1e-4), 1); - CHECK(eq_eps(mc_global.missing.E, m, 1e-4), 1); - CHECK(eq_eps(mc_global.cos_factor.E, COS, 1e-4), 1); - CHECK(GET_MC_RCV(estimator, target, SSOL_FRONT, &mc_rcv), RES_OK); + CHK(eq_eps(mc_global.shadowed.E, 0, 1e-4) == 1); + CHK(eq_eps(mc_global.missing.E, m, 1e-4) == 1); + CHK(eq_eps(mc_global.cos_factor.E, COS, 1e-4) == 1); + CHK(GET_MC_RCV(estimator, target, SSOL_FRONT, &mc_rcv) == RES_OK); printf("Ir(target) = %g +/- %g\n", mc_rcv.incoming_flux.E, mc_rcv.incoming_flux.SE); - CHECK(eq_eps(mc_rcv.incoming_flux.E, m, 1e-8), 1); - CHECK(eq_eps(mc_rcv.incoming_flux.SE, std, 1e-4), 1); - CHECK(eq_eps(mc_global.cos_factor.E, COS, 1e-4), 1); - CHECK(ssol_estimator_ref_put(estimator), RES_OK); + CHK(eq_eps(mc_rcv.incoming_flux.E, m, 1e-8) == 1); + CHK(eq_eps(mc_rcv.incoming_flux.SE, std, 1e-4) == 1); + CHK(eq_eps(mc_global.cos_factor.E, COS, 1e-4) == 1); + CHK(ssol_estimator_ref_put(estimator) == RES_OK); /* Check atmosphere model and imperfect mirror: there are losses */ - CHECK(ssol_scene_detach_instance(scene, heliostat), RES_OK); + CHK(ssol_scene_detach_instance(scene, heliostat) == RES_OK); - CHECK(ssol_material_create_mirror(dev, &m_mtl2), RES_OK); + CHK(ssol_material_create_mirror(dev, &m_mtl2) == RES_OK); shader.normal = get_shader_normal; shader.reflectivity = get_shader_reflectivity_2; shader.roughness = get_shader_roughness; - CHECK(ssol_mirror_setup(m_mtl2, &shader), RES_OK); + CHK(ssol_mirror_setup(m_mtl2, &shader, SSOL_MICROFACET_BECKMANN) == RES_OK); - CHECK(ssol_object_create(dev, &m_object2), RES_OK); - CHECK(ssol_object_add_shaded_shape(m_object2, square, m_mtl2, m_mtl2), RES_OK); - CHECK(ssol_object_instantiate(m_object2, &heliostat2), RES_OK); - CHECK(ssol_instance_set_receiver(heliostat2, SSOL_FRONT, 0), RES_OK); - CHECK(ssol_scene_attach_instance(scene, heliostat2), RES_OK); + CHK(ssol_object_create(dev, &m_object2) == RES_OK); + CHK(ssol_object_add_shaded_shape(m_object2, square, m_mtl2, m_mtl2) == RES_OK); + CHK(ssol_object_instantiate(m_object2, &heliostat2) == RES_OK); + CHK(ssol_instance_set_receiver(heliostat2, SSOL_FRONT, 0) == RES_OK); + CHK(ssol_scene_attach_instance(scene, heliostat2) == RES_OK); #define KA 0.03 extinction.value.real = KA; - CHECK(ssol_spectrum_create(dev, &abs_spectrum), RES_OK); - CHECK(ssol_spectrum_setup(abs_spectrum, get_wlen, 3, &desc), RES_OK); - CHECK(ssol_atmosphere_create(dev, &atm), RES_OK); - CHECK(ssol_atmosphere_set_extinction(atm, &extinction), RES_OK); - CHECK(ssol_scene_attach_atmosphere(scene, atm), RES_OK); - CHECK(ssol_instance_set_receiver(target, SSOL_FRONT, 1), RES_OK); - - CHECK(ssol_solve(scene, rng, N__, 0, NULL, &estimator), RES_OK); - CHECK(ssol_estimator_get_realisation_count(estimator, &count), RES_OK); - CHECK(count, N__); + CHK(ssol_spectrum_create(dev, &abs_spectrum) == RES_OK); + CHK(ssol_spectrum_setup(abs_spectrum, get_wlen, 3, &desc) == RES_OK); + CHK(ssol_atmosphere_create(dev, &atm) == RES_OK); + CHK(ssol_atmosphere_set_extinction(atm, &extinction) == RES_OK); + CHK(ssol_scene_attach_atmosphere(scene, atm) == RES_OK); + CHK(ssol_instance_set_receiver(target, SSOL_FRONT, 1) == RES_OK); + + CHK(ssol_solve(scene, rng, N__, 0, NULL, &estimator) == RES_OK); + CHK(ssol_estimator_get_realisation_count(estimator, &count) == RES_OK); + CHK(count == N__); #define K (exp(-KA * 4 * sqrt(2))) a_m = REFLECTIVITY * 4 * K * DNI_cos; a_std = 0; - CHECK(ssol_estimator_get_mc_global(estimator, &mc_global), RES_OK); + CHK(ssol_estimator_get_mc_global(estimator, &mc_global) == RES_OK); PRINT_GLOBAL(mc_global); - CHECK(eq_eps(mc_global.shadowed.E, 0, 1e-4), 1); - CHECK(eq_eps( + CHK(eq_eps(mc_global.shadowed.E, 0, 1e-4) == 1); + CHK(eq_eps( mc_global.missing.E + mc_global.shadowed.E + mc_global.absorbed_by_receivers.E + mc_global.extinguished_by_atmosphere.E + mc_global.other_absorbed.E, - m, - 1e-4), 1); - CHECK(eq_eps(mc_global.cos_factor.E, COS, 1e-4), 1); - CHECK(GET_MC_RCV(estimator, target, SSOL_FRONT, &mc_rcv), RES_OK); + m, 1e-4)); + CHK(eq_eps(mc_global.cos_factor.E, COS, 1e-4) == 1); + CHK(GET_MC_RCV(estimator, target, SSOL_FRONT, &mc_rcv) == RES_OK); PRINT_RCV(mc_rcv); - CHECK(ssol_estimator_get_sampled_count(estimator, &scount), RES_OK); - CHECK(ssol_estimator_get_mc_sampled(estimator, heliostat, &sampled), RES_BAD_ARG); - CHECK(ssol_estimator_get_mc_sampled(estimator, heliostat2, &sampled), RES_OK); - - CHECK(eq_eps(mc_rcv.incoming_flux.E, a_m, 1e-4), 1); - CHECK(eq_eps(mc_rcv.incoming_flux.SE, a_std, 1e-4), 1); - - CHECK(ssol_mc_receiver_get_mc_shape(NULL, NULL, NULL), RES_BAD_ARG); - CHECK(ssol_mc_receiver_get_mc_shape(&mc_rcv, NULL, NULL), RES_BAD_ARG); - CHECK(ssol_mc_receiver_get_mc_shape(NULL, square, NULL), RES_BAD_ARG); - CHECK(ssol_mc_receiver_get_mc_shape(&mc_rcv, square, NULL), RES_BAD_ARG); - CHECK(ssol_mc_receiver_get_mc_shape(NULL, NULL, &mc_shape), RES_BAD_ARG); - CHECK(ssol_mc_receiver_get_mc_shape(&mc_rcv, NULL, &mc_shape), RES_BAD_ARG); - CHECK(ssol_mc_receiver_get_mc_shape(NULL, square, &mc_shape), RES_BAD_ARG); - CHECK(ssol_mc_receiver_get_mc_shape(&mc_rcv, dummy, &mc_shape), RES_BAD_ARG); - CHECK(ssol_mc_receiver_get_mc_shape(&mc_rcv, square, &mc_shape), RES_OK); - - CHECK(ssol_shape_get_triangles_count(square, &ntris), RES_OK); - NCHECK(ntris, 0); - - CHECK(ssol_mc_shape_get_mc_primitive(NULL, ntris, NULL), RES_BAD_ARG); - CHECK(ssol_mc_shape_get_mc_primitive(&mc_shape, ntris, NULL), RES_BAD_ARG); - CHECK(ssol_mc_shape_get_mc_primitive(NULL, 0, NULL), RES_BAD_ARG); - CHECK(ssol_mc_shape_get_mc_primitive(&mc_shape, 0, NULL), RES_BAD_ARG); - CHECK(ssol_mc_shape_get_mc_primitive(NULL, ntris, &mc_prim), RES_BAD_ARG); - CHECK(ssol_mc_shape_get_mc_primitive(&mc_shape, ntris, &mc_prim), RES_BAD_ARG); - CHECK(ssol_mc_shape_get_mc_primitive(NULL, 0, &mc_prim), RES_BAD_ARG); + CHK(ssol_estimator_get_sampled_count(estimator, &scount) == RES_OK); + CHK(ssol_estimator_get_mc_sampled(estimator, heliostat, &sampled) == RES_BAD_ARG); + CHK(ssol_estimator_get_mc_sampled(estimator, heliostat2, &sampled) == RES_OK); + + CHK(eq_eps(mc_rcv.incoming_flux.E, a_m, 1e-4) == 1); + CHK(eq_eps(mc_rcv.incoming_flux.SE, a_std, 1e-4) == 1); + + CHK(ssol_mc_receiver_get_mc_shape(NULL, NULL, NULL) == RES_BAD_ARG); + CHK(ssol_mc_receiver_get_mc_shape(&mc_rcv, NULL, NULL) == RES_BAD_ARG); + CHK(ssol_mc_receiver_get_mc_shape(NULL, square, NULL) == RES_BAD_ARG); + CHK(ssol_mc_receiver_get_mc_shape(&mc_rcv, square, NULL) == RES_BAD_ARG); + CHK(ssol_mc_receiver_get_mc_shape(NULL, NULL, &mc_shape) == RES_BAD_ARG); + CHK(ssol_mc_receiver_get_mc_shape(&mc_rcv, NULL, &mc_shape) == RES_BAD_ARG); + CHK(ssol_mc_receiver_get_mc_shape(NULL, square, &mc_shape) == RES_BAD_ARG); + CHK(ssol_mc_receiver_get_mc_shape(&mc_rcv, dummy, &mc_shape) == RES_BAD_ARG); + CHK(ssol_mc_receiver_get_mc_shape(&mc_rcv, square, &mc_shape) == RES_OK); + + CHK(ssol_shape_get_triangles_count(square, &ntris) == RES_OK); + CHK(ntris != 0); + + CHK(ssol_mc_shape_get_mc_primitive(NULL, ntris, NULL) == RES_BAD_ARG); + CHK(ssol_mc_shape_get_mc_primitive(&mc_shape, ntris, NULL) == RES_BAD_ARG); + CHK(ssol_mc_shape_get_mc_primitive(NULL, 0, NULL) == RES_BAD_ARG); + CHK(ssol_mc_shape_get_mc_primitive(&mc_shape, 0, NULL) == RES_BAD_ARG); + CHK(ssol_mc_shape_get_mc_primitive(NULL, ntris, &mc_prim) == RES_BAD_ARG); + CHK(ssol_mc_shape_get_mc_primitive(&mc_shape, ntris, &mc_prim) == RES_BAD_ARG); + CHK(ssol_mc_shape_get_mc_primitive(NULL, 0, &mc_prim) == RES_BAD_ARG); dbl = 0; FOR_EACH(i, 0, ntris) { double v0[3], v1[3], v2[3], E1[3], E2[3], N[3], area; unsigned ids[3]; - CHECK(ssol_shape_get_triangle_indices(square, (unsigned)i, ids), RES_OK); - CHECK(ssol_shape_get_vertex_attrib(square, ids[0], SSOL_POSITION, v0), RES_OK); - CHECK(ssol_shape_get_vertex_attrib(square, ids[1], SSOL_POSITION, v1), RES_OK); - CHECK(ssol_shape_get_vertex_attrib(square, ids[2], SSOL_POSITION, v2), RES_OK); + CHK(ssol_shape_get_triangle_indices(square, (unsigned)i, ids) == RES_OK); + CHK(ssol_shape_get_vertex_attrib(square, ids[0], SSOL_POSITION, v0) == RES_OK); + CHK(ssol_shape_get_vertex_attrib(square, ids[1], SSOL_POSITION, v1) == RES_OK); + CHK(ssol_shape_get_vertex_attrib(square, ids[2], SSOL_POSITION, v2) == RES_OK); area = d3_len(d3_cross(N, d3_sub(E1, v1, v0), d3_sub(E2, v2, v0))) * 0.5; - CHECK(ssol_mc_shape_get_mc_primitive(&mc_shape, (unsigned)i, &mc_prim), RES_OK); + CHK(ssol_mc_shape_get_mc_primitive(&mc_shape, (unsigned)i, &mc_prim) == RES_OK); dbl += mc_prim.incoming_flux.E * area; } - CHECK(eq_eps(dbl, a_m, 1e-4), 1); - CHECK(ssol_estimator_ref_put(estimator), RES_OK); + CHK(eq_eps(dbl, a_m, 1e-4) == 1); + CHK(ssol_estimator_ref_put(estimator) == RES_OK); - CHECK(ssol_scene_detach_instance(scene, heliostat2), RES_OK); - CHECK(ssol_scene_attach_instance(scene, heliostat), RES_OK); - CHECK(ssol_instance_set_receiver(target, SSOL_FRONT, 0), RES_OK); + CHK(ssol_scene_detach_instance(scene, heliostat2) == RES_OK); + CHK(ssol_scene_attach_instance(scene, heliostat) == RES_OK); + CHK(ssol_instance_set_receiver(target, SSOL_FRONT, 0) == RES_OK); /* Check a monochromatic sun */ desc.wavelengths = &mono; desc.intensities = intensities; desc.count = 1; - CHECK(ssol_spectrum_setup(spectrum, get_wlen, 1, &desc), RES_OK); - CHECK(ssol_sun_create_directional(dev, &sun_mono), RES_OK); - CHECK(ssol_sun_set_direction(sun_mono, d3(dir, 1, 0, -1)), RES_OK); - CHECK(ssol_sun_set_spectrum(sun_mono, spectrum), RES_OK); - CHECK(ssol_sun_set_dni(sun_mono, DNI), RES_OK); - CHECK(ssol_scene_detach_sun(scene, sun), RES_OK); - CHECK(ssol_scene_attach_sun(scene, sun_mono), RES_OK); + CHK(ssol_spectrum_setup(spectrum, get_wlen, 1, &desc) == RES_OK); + CHK(ssol_sun_create_directional(dev, &sun_mono) == RES_OK); + CHK(ssol_sun_set_direction(sun_mono, d3(dir, 1, 0, -1)) == RES_OK); + CHK(ssol_sun_set_spectrum(sun_mono, spectrum) == RES_OK); + CHK(ssol_sun_set_dni(sun_mono, DNI) == RES_OK); + CHK(ssol_scene_detach_sun(scene, sun) == RES_OK); + CHK(ssol_scene_attach_sun(scene, sun_mono) == RES_OK); ka[1] = 0.2; ka[0] = ka[2] = 0.1; desc.wavelengths = wavelengths; desc.intensities = ka; desc.count = 3; - CHECK(ssol_spectrum_setup(abs_spectrum, get_wlen, 3, &desc), RES_OK); - CHECK(ssol_spectrum_setup(abs_spectrum, get_wlen, 2, &desc), RES_OK); + CHK(ssol_spectrum_setup(abs_spectrum, get_wlen, 3, &desc) == RES_OK); + CHK(ssol_spectrum_setup(abs_spectrum, get_wlen, 2, &desc) == RES_OK); extinction.type = SSOL_DATA_SPECTRUM; extinction.value.spectrum = abs_spectrum; - CHECK(ssol_atmosphere_set_extinction(atm, &extinction), RES_OK); + CHK(ssol_atmosphere_set_extinction(atm, &extinction) == RES_OK); - CHECK(ssol_solve(scene, rng, N__, 0, NULL, &estimator), RES_OK); - CHECK(ssol_estimator_get_realisation_count(estimator, &count), RES_OK); - CHECK(count, N__); + CHK(ssol_solve(scene, rng, N__, 0, NULL, &estimator) == RES_OK); + CHK(ssol_estimator_get_realisation_count(estimator, &count) == RES_OK); + CHK(count == N__); #define K2 (exp(-0.121 * 4 * sqrt(2))) m = 4 * K2 * DNI_cos; std = 0; - CHECK(ssol_estimator_get_mc_global(estimator, &mc_global), RES_OK); + CHK(ssol_estimator_get_mc_global(estimator, &mc_global) == RES_OK); PRINT_GLOBAL(mc_global); - CHECK(eq_eps(mc_global.shadowed.E, 0, 1e-4), 1); - CHECK(eq_eps(mc_global.missing.E, m, 1e-4), 1); - CHECK(eq_eps(mc_global.cos_factor.E, COS, 1e-4), 1); - CHECK(GET_MC_RCV(estimator, target, SSOL_FRONT, &mc_rcv), RES_OK); + CHK(eq_eps(mc_global.shadowed.E, 0, 1e-4) == 1); + CHK(eq_eps(mc_global.missing.E, m, 1e-4) == 1); + CHK(eq_eps(mc_global.cos_factor.E, COS, 1e-4) == 1); + CHK(GET_MC_RCV(estimator, target, SSOL_FRONT, &mc_rcv) == RES_OK); printf("Ir(target) = %g +/- %g\n", mc_rcv.incoming_flux.E, mc_rcv.incoming_flux.SE); PRINT_RCV(mc_rcv); - CHECK(eq_eps(mc_rcv.incoming_flux.E, m, 1e-4), 1); - CHECK(eq_eps(mc_rcv.incoming_flux.SE, std, 1e-4), 1); + CHK(eq_eps(mc_rcv.incoming_flux.E, m, 1e-4) == 1); + CHK(eq_eps(mc_rcv.incoming_flux.SE, std, 1e-4) == 1); /* Free data */ - CHECK(ssol_instance_ref_put(heliostat2), RES_OK); - CHECK(ssol_object_ref_put(m_object2), RES_OK); - CHECK(ssol_material_ref_put(m_mtl2), RES_OK); - CHECK(ssol_instance_ref_put(heliostat), RES_OK); - CHECK(ssol_instance_ref_put(secondary), RES_OK); - CHECK(ssol_instance_ref_put(target), RES_OK); - CHECK(ssol_object_ref_put(m_object), RES_OK); - CHECK(ssol_object_ref_put(t_object), RES_OK); - CHECK(ssol_shape_ref_put(dummy), RES_OK); - CHECK(ssol_shape_ref_put(square), RES_OK); - CHECK(ssol_material_ref_put(m_mtl), RES_OK); - CHECK(ssol_material_ref_put(v_mtl), RES_OK); - CHECK(ssol_device_ref_put(dev), RES_OK); - CHECK(ssol_scene_ref_put(scene), RES_OK); - CHECK(ssol_atmosphere_ref_put(atm), RES_OK); - CHECK(ssol_estimator_ref_put(estimator), RES_OK); - CHECK(ssol_spectrum_ref_put(spectrum), RES_OK); - CHECK(ssol_spectrum_ref_put(abs_spectrum), RES_OK); - CHECK(ssol_sun_ref_put(sun), RES_OK); - CHECK(ssol_sun_ref_put(sun_mono), RES_OK); - CHECK(ssp_rng_ref_put(rng), RES_OK); + CHK(ssol_instance_ref_put(heliostat2) == RES_OK); + CHK(ssol_object_ref_put(m_object2) == RES_OK); + CHK(ssol_material_ref_put(m_mtl2) == RES_OK); + CHK(ssol_instance_ref_put(heliostat) == RES_OK); + CHK(ssol_instance_ref_put(secondary) == RES_OK); + CHK(ssol_instance_ref_put(target) == RES_OK); + CHK(ssol_object_ref_put(m_object) == RES_OK); + CHK(ssol_object_ref_put(t_object) == RES_OK); + CHK(ssol_shape_ref_put(dummy) == RES_OK); + CHK(ssol_shape_ref_put(square) == RES_OK); + CHK(ssol_material_ref_put(m_mtl) == RES_OK); + CHK(ssol_material_ref_put(v_mtl) == RES_OK); + CHK(ssol_device_ref_put(dev) == RES_OK); + CHK(ssol_scene_ref_put(scene) == RES_OK); + CHK(ssol_atmosphere_ref_put(atm) == RES_OK); + CHK(ssol_estimator_ref_put(estimator) == RES_OK); + CHK(ssol_spectrum_ref_put(spectrum) == RES_OK); + CHK(ssol_spectrum_ref_put(abs_spectrum) == RES_OK); + CHK(ssol_sun_ref_put(sun) == RES_OK); + CHK(ssol_sun_ref_put(sun_mono) == RES_OK); + CHK(ssp_rng_ref_put(rng) == RES_OK); check_memory_allocator(&allocator); mem_shutdown_proxy_allocator(&allocator); - CHECK(mem_allocated_size(), 0); + CHK(mem_allocated_size() == 0); return 0; } diff --git a/src/test_ssol_solver10.c b/src/test_ssol_solver10.c @@ -46,7 +46,7 @@ get_wlen(const size_t i, double* wlen, double* data, void* ctx) { double wavelengths[3] = { 1, 2, 3 }; double intensities[3] = { 1, 0.8, 1 }; - CHECK(i < 3, 1); + CHK(i < 3); (void) ctx; *wlen = wavelengths[i]; *data = intensities[i]; @@ -87,62 +87,62 @@ main(int argc, char** argv) d33_set_identity(transform); - CHECK(ssol_device_create - (NULL, &allocator, SSOL_NTHREADS_DEFAULT, 0, &dev), RES_OK); + CHK(ssol_device_create + (NULL, &allocator, SSOL_NTHREADS_DEFAULT, 0, &dev) == RES_OK); #define DNI 1000 - CHECK(ssp_rng_create(&allocator, &ssp_rng_threefry, &rng), RES_OK); - CHECK(ssol_spectrum_create(dev, &spectrum), RES_OK); - CHECK(ssol_spectrum_setup(spectrum, get_wlen, 3, NULL), RES_OK); - CHECK(ssol_sun_create_pillbox(dev, &sun), RES_OK); - CHECK(ssol_sun_pillbox_set_half_angle(sun, 1), RES_OK); - CHECK(ssol_sun_set_direction(sun, d3(dir, 0, 0, -1)), RES_OK); - CHECK(ssol_sun_set_spectrum(sun, spectrum), RES_OK); - CHECK(ssol_sun_set_dni(sun, DNI), RES_OK); - CHECK(ssol_scene_create(dev, &scene), RES_OK); - CHECK(ssol_scene_attach_sun(scene, sun), RES_OK); + CHK(ssp_rng_create(&allocator, &ssp_rng_threefry, &rng) == RES_OK); + CHK(ssol_spectrum_create(dev, &spectrum) == RES_OK); + CHK(ssol_spectrum_setup(spectrum, get_wlen, 3, NULL) == RES_OK); + CHK(ssol_sun_create_pillbox(dev, &sun) == RES_OK); + CHK(ssol_sun_pillbox_set_half_angle(sun, 1) == RES_OK); + CHK(ssol_sun_set_direction(sun, d3(dir, 0, 0, -1)) == RES_OK); + CHK(ssol_sun_set_spectrum(sun, spectrum) == RES_OK); + CHK(ssol_sun_set_dni(sun, DNI) == RES_OK); + CHK(ssol_scene_create(dev, &scene) == RES_OK); + CHK(ssol_scene_attach_sun(scene, sun) == RES_OK); /* Create scene content */ - CHECK(ssol_shape_create_mesh(dev, &square), RES_OK); + CHK(ssol_shape_create_mesh(dev, &square) == RES_OK); attribs[0].usage = SSOL_POSITION; attribs[0].get = get_position; - CHECK(ssol_mesh_setup(square, SQUARE_NTRIS__, get_ids, - SQUARE_NVERTS__, attribs, 1, (void*) &SQUARE_DESC__), RES_OK); + CHK(ssol_mesh_setup(square, SQUARE_NTRIS__, get_ids, + SQUARE_NVERTS__, attribs, 1, (void*) &SQUARE_DESC__) == RES_OK); - CHECK(ssol_material_create_matte(dev, &m_mtl), RES_OK); + CHK(ssol_material_create_matte(dev, &m_mtl) == RES_OK); shader.normal = get_shader_normal; shader.reflectivity = get_shader_reflectivity_2; - CHECK(ssol_matte_setup(m_mtl, &shader), RES_OK); + CHK(ssol_matte_setup(m_mtl, &shader) == RES_OK); - CHECK(ssol_object_create(dev, &m_object), RES_OK); - CHECK(ssol_object_add_shaded_shape(m_object, square, m_mtl, m_mtl), RES_OK); - CHECK(ssol_object_instantiate(m_object, &geom1), RES_OK); - CHECK(ssol_instance_set_receiver(geom1, SSOL_FRONT, 0), RES_OK); + CHK(ssol_object_create(dev, &m_object) == RES_OK); + CHK(ssol_object_add_shaded_shape(m_object, square, m_mtl, m_mtl) == RES_OK); + CHK(ssol_object_instantiate(m_object, &geom1) == RES_OK); + CHK(ssol_instance_set_receiver(geom1, SSOL_FRONT, 0) == RES_OK); d3_splat(transform + 9, 0); transform[9] = -10; - CHECK(ssol_instance_set_transform(geom1, transform), RES_OK); - CHECK(ssol_scene_attach_instance(scene, geom1), RES_OK); + CHK(ssol_instance_set_transform(geom1, transform) == RES_OK); + CHK(ssol_scene_attach_instance(scene, geom1) == RES_OK); #define N1__ 10000 #define GET_MC_RCV ssol_estimator_get_mc_receiver - CHECK(ssol_solve(scene, rng, N1__, 0, NULL, &estimator), RES_OK); - CHECK(ssol_estimator_get_realisation_count(estimator, &count), RES_OK); - CHECK(count, N1__); - CHECK(ssol_estimator_get_failed_count(estimator, &count), RES_OK); - CHECK(count, 0); + CHK(ssol_solve(scene, rng, N1__, 0, NULL, &estimator) == RES_OK); + CHK(ssol_estimator_get_realisation_count(estimator, &count) == RES_OK); + CHK(count == N1__); + CHK(ssol_estimator_get_failed_count(estimator, &count) == RES_OK); + CHK(count == 0); #define DNI_S (DNI * X_SZ * Y_SZ) - CHECK(ssol_estimator_get_mc_global(estimator, &mc_global1), RES_OK); - CHECK(GET_MC_RCV(estimator, geom1, SSOL_FRONT, &mc_rcv1), RES_OK); + CHK(ssol_estimator_get_mc_global(estimator, &mc_global1) == RES_OK); + CHK(GET_MC_RCV(estimator, geom1, SSOL_FRONT, &mc_rcv1) == RES_OK); PRINT_GLOBAL(mc_global1); PRINT_RCV(mc_rcv1); - CHECK(mc_global1.cos_factor.E, 1); - CHECK(mc_global1.cos_factor.SE, 0); - CHECK(mc_global1.absorbed_by_receivers.E, DNI_S); - CHECK(mc_global1.absorbed_by_receivers.SE, 0); + CHK(mc_global1.cos_factor.E == 1); + CHK(mc_global1.cos_factor.SE == 0); + CHK(mc_global1.absorbed_by_receivers.E == DNI_S); + CHK(mc_global1.absorbed_by_receivers.SE == 0); - CHECK(ssol_shape_create_punched_surface(dev, &parabol), RES_OK); + CHK(ssol_shape_create_punched_surface(dev, &parabol) == RES_OK); carving.get = get_polygon_vertices; carving.operation = SSOL_AND; carving.nb_vertices = POLY_NVERTS__; @@ -152,51 +152,51 @@ main(int argc, char** argv) punched.nb_carvings = 1; punched.quadric = &quadric; punched.carvings = &carving; - CHECK(ssol_punched_surface_setup(parabol, &punched), RES_OK); + CHK(ssol_punched_surface_setup(parabol, &punched) == RES_OK); - CHECK(ssol_object_create(dev, &q_object), RES_OK); - CHECK(ssol_object_add_shaded_shape(q_object, parabol, m_mtl, m_mtl), RES_OK); - CHECK(ssol_object_instantiate(q_object, &geom2), RES_OK); - CHECK(ssol_instance_set_receiver(geom2, SSOL_FRONT, 0), RES_OK); + CHK(ssol_object_create(dev, &q_object) == RES_OK); + CHK(ssol_object_add_shaded_shape(q_object, parabol, m_mtl, m_mtl) == RES_OK); + CHK(ssol_object_instantiate(q_object, &geom2) == RES_OK); + CHK(ssol_instance_set_receiver(geom2, SSOL_FRONT, 0) == RES_OK); d3_splat(transform + 9, 0); transform[9] = +10; - CHECK(ssol_instance_set_transform(geom2, transform), RES_OK); - CHECK(ssol_scene_attach_instance(scene, geom2), RES_OK); + CHK(ssol_instance_set_transform(geom2, transform) == RES_OK); + CHK(ssol_scene_attach_instance(scene, geom2) == RES_OK); - CHECK(ssol_scene_detach_instance(scene, geom1), RES_OK); - CHECK(ssol_estimator_ref_put(estimator), RES_OK); + CHK(ssol_scene_detach_instance(scene, geom1) == RES_OK); + CHK(ssol_estimator_ref_put(estimator) == RES_OK); #define N2__ 100000 - CHECK(ssol_solve(scene, rng, N2__, 0, NULL, &estimator), RES_OK); - CHECK(ssol_estimator_get_realisation_count(estimator, &count), RES_OK); - CHECK(count, N2__); - CHECK(ssol_estimator_get_failed_count(estimator, &count), RES_OK); - CHECK(count, 0); - CHECK(ssol_estimator_get_mc_global(estimator, &mc_global2), RES_OK); - CHECK(GET_MC_RCV(estimator, geom2, SSOL_FRONT, &mc_rcv2), RES_OK); + CHK(ssol_solve(scene, rng, N2__, 0, NULL, &estimator) == RES_OK); + CHK(ssol_estimator_get_realisation_count(estimator, &count) == RES_OK); + CHK(count == N2__); + CHK(ssol_estimator_get_failed_count(estimator, &count) == RES_OK); + CHK(count == 0); + CHK(ssol_estimator_get_mc_global(estimator, &mc_global2) == RES_OK); + CHK(GET_MC_RCV(estimator, geom2, SSOL_FRONT, &mc_rcv2) == RES_OK); PRINT_GLOBAL(mc_global2); PRINT_RCV(mc_rcv2); - CHECK(eq_eps(mc_global2.absorbed_by_receivers.E, DNI_S, 3 * mc_global2.absorbed_by_receivers.SE), 1); + CHK(eq_eps(mc_global2.absorbed_by_receivers.E, DNI_S, 3 * mc_global2.absorbed_by_receivers.SE) == 1); /* Free data */ - CHECK(ssol_instance_ref_put(geom1), RES_OK); - CHECK(ssol_instance_ref_put(geom2), RES_OK); - CHECK(ssol_object_ref_put(m_object), RES_OK); - CHECK(ssol_object_ref_put(q_object), RES_OK); - CHECK(ssol_shape_ref_put(square), RES_OK); - CHECK(ssol_shape_ref_put(parabol), RES_OK); - CHECK(ssol_material_ref_put(m_mtl), RES_OK); - CHECK(ssol_estimator_ref_put(estimator), RES_OK); - CHECK(ssol_device_ref_put(dev), RES_OK); - CHECK(ssol_scene_ref_put(scene), RES_OK); - CHECK(ssp_rng_ref_put(rng), RES_OK); - CHECK(ssol_spectrum_ref_put(spectrum), RES_OK); - CHECK(ssol_sun_ref_put(sun), RES_OK); + CHK(ssol_instance_ref_put(geom1) == RES_OK); + CHK(ssol_instance_ref_put(geom2) == RES_OK); + CHK(ssol_object_ref_put(m_object) == RES_OK); + CHK(ssol_object_ref_put(q_object) == RES_OK); + CHK(ssol_shape_ref_put(square) == RES_OK); + CHK(ssol_shape_ref_put(parabol) == RES_OK); + CHK(ssol_material_ref_put(m_mtl) == RES_OK); + CHK(ssol_estimator_ref_put(estimator) == RES_OK); + CHK(ssol_device_ref_put(dev) == RES_OK); + CHK(ssol_scene_ref_put(scene) == RES_OK); + CHK(ssp_rng_ref_put(rng) == RES_OK); + CHK(ssol_spectrum_ref_put(spectrum) == RES_OK); + CHK(ssol_sun_ref_put(sun) == RES_OK); check_memory_allocator(&allocator); mem_shutdown_proxy_allocator(&allocator); - CHECK(mem_allocated_size(), 0); + CHK(mem_allocated_size() == 0); return 0; } diff --git a/src/test_ssol_solver11.c b/src/test_ssol_solver11.c @@ -0,0 +1,202 @@ +/* Copyright (C) CNRS 2016-2017 + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * 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 "ssol.h" +#include "test_ssol_utils.h" +#define REFLECTIVITY 0 +#include "test_ssol_materials.h" + +#include <rsys/math.h> + +#define X_SZ 10 +#define Y_SZ 10 +#define PLANE_NAME SQUARE +#define HALF_X (X_SZ / 2) +#define HALF_Y (Y_SZ / 2) +STATIC_ASSERT((HALF_X * 2 == X_SZ), ONLY_ENVEN_VALUES_FOR_SQUARE_X); +STATIC_ASSERT((HALF_Y * 2 == Y_SZ), ONLY_ENVEN_VALUES_FOR_SQUARE_Y); +#include "test_ssol_rect_geometry.h" + +#define POLYGON_NAME POLY +#define HALF_X (X_SZ / 2) +#define HALF_Y (Y_SZ / 2) +STATIC_ASSERT((HALF_X * 2 == X_SZ), ONLY_ENVEN_VALUES_FOR_X_SZ); +STATIC_ASSERT((HALF_Y * 2 == Y_SZ), ONLY_ENVEN_VALUES_FOR_Y_SZ); +#include "test_ssol_rect2D_geometry.h" + +#include <rsys/double33.h> + +#include <star/s3d.h> +#include <star/ssp.h> + +static void +get_wlen(const size_t i, double* wlen, double* data, void* ctx) +{ + double wavelengths[3] = { 1, 2, 3 }; + double intensities[3] = { 1, 0.8, 1 }; + CHK(i < 3); + (void) ctx; + *wlen = wavelengths[i]; + *data = intensities[i]; +} + +int +main(int argc, char** argv) +{ + struct mem_allocator allocator; + struct ssol_device* dev; + struct ssp_rng* rng; + struct ssol_scene* scene; + struct ssol_shape* square; + struct ssol_shape* parabol; + struct ssol_vertex_data attribs[1] = { SSOL_VERTEX_DATA_NULL__ }; + struct ssol_material* m_mtl; + struct ssol_matte_shader shader = SSOL_MATTE_SHADER_NULL; + struct ssol_object* m_object; + struct ssol_object* q_object; + struct ssol_carving carving = SSOL_CARVING_NULL; + struct ssol_quadric quadric = SSOL_QUADRIC_DEFAULT; + struct ssol_punched_surface punched = SSOL_PUNCHED_SURFACE_NULL; + struct ssol_instance* geom1; + struct ssol_instance* geom2; + struct ssol_sun* sun; + struct ssol_spectrum* spectrum; + struct ssol_estimator* estimator; + struct ssol_mc_global mc_global1; + struct ssol_mc_global mc_global2; + struct ssol_mc_receiver mc_rcv1; + struct ssol_mc_receiver mc_rcv2; + double dir[3]; + double transform[12]; /* 3x4 column major matrix */ + size_t count; + + (void) argc, (void) argv; + mem_init_proxy_allocator(&allocator, &mem_default_allocator); + + d33_set_identity(transform); + + CHK(ssol_device_create + (NULL, &allocator, SSOL_NTHREADS_DEFAULT, 0, &dev) == RES_OK); + +#define DNI 1000 + CHK(ssp_rng_create(&allocator, &ssp_rng_threefry, &rng) == RES_OK); + CHK(ssol_spectrum_create(dev, &spectrum) == RES_OK); + CHK(ssol_spectrum_setup(spectrum, get_wlen, 3, NULL) == RES_OK); + CHK(ssol_sun_create_buie(dev, &sun) == RES_OK); + CHK(ssol_sun_set_buie_param(sun, 0.1) == RES_OK); + CHK(ssol_sun_set_direction(sun, d3(dir, 0, 0, -1)) == RES_OK); + CHK(ssol_sun_set_spectrum(sun, spectrum) == RES_OK); + CHK(ssol_sun_set_dni(sun, DNI) == RES_OK); + CHK(ssol_scene_create(dev, &scene) == RES_OK); + CHK(ssol_scene_attach_sun(scene, sun) == RES_OK); + + /* Create scene content */ + + CHK(ssol_shape_create_mesh(dev, &square) == RES_OK); + attribs[0].usage = SSOL_POSITION; + attribs[0].get = get_position; + CHK(ssol_mesh_setup(square, SQUARE_NTRIS__, get_ids, + SQUARE_NVERTS__, attribs, 1, (void*) &SQUARE_DESC__) == RES_OK); + + CHK(ssol_material_create_matte(dev, &m_mtl) == RES_OK); + shader.normal = get_shader_normal; + shader.reflectivity = get_shader_reflectivity_2; + CHK(ssol_matte_setup(m_mtl, &shader) == RES_OK); + + CHK(ssol_object_create(dev, &m_object) == RES_OK); + CHK(ssol_object_add_shaded_shape(m_object, square, m_mtl, m_mtl) == RES_OK); + CHK(ssol_object_instantiate(m_object, &geom1) == RES_OK); + CHK(ssol_instance_set_receiver(geom1, SSOL_FRONT, 0) == RES_OK); + d3_splat(transform + 9, 0); + transform[9] = -10; + CHK(ssol_instance_set_transform(geom1, transform) == RES_OK); + CHK(ssol_scene_attach_instance(scene, geom1) == RES_OK); + +#define N1__ 10000 +#define GET_MC_RCV ssol_estimator_get_mc_receiver + CHK(ssol_solve(scene, rng, N1__, 0, NULL, &estimator) == RES_OK); + CHK(ssol_estimator_get_realisation_count(estimator, &count) == RES_OK); + CHK(count == N1__); + CHK(ssol_estimator_get_failed_count(estimator, &count) == RES_OK); + CHK(count == 0); +#define DNI_S (DNI * X_SZ * Y_SZ) + CHK(ssol_estimator_get_mc_global(estimator, &mc_global1) == RES_OK); + CHK(GET_MC_RCV(estimator, geom1, SSOL_FRONT, &mc_rcv1) == RES_OK); + + PRINT_GLOBAL(mc_global1); + PRINT_RCV(mc_rcv1); + CHK(mc_global1.cos_factor.E == 1); + CHK(mc_global1.cos_factor.SE == 0); + CHK(mc_global1.absorbed_by_receivers.E == DNI_S); + CHK(mc_global1.absorbed_by_receivers.SE == 0); + + CHK(ssol_shape_create_punched_surface(dev, &parabol) == RES_OK); + carving.get = get_polygon_vertices; + carving.operation = SSOL_AND; + carving.nb_vertices = POLY_NVERTS__; + carving.context = &POLY_EDGES__; + quadric.type = SSOL_QUADRIC_PARABOL; + quadric.data.parabol.focal = 10; + punched.nb_carvings = 1; + punched.quadric = &quadric; + punched.carvings = &carving; + CHK(ssol_punched_surface_setup(parabol, &punched) == RES_OK); + + CHK(ssol_object_create(dev, &q_object) == RES_OK); + CHK(ssol_object_add_shaded_shape(q_object, parabol, m_mtl, m_mtl) == RES_OK); + CHK(ssol_object_instantiate(q_object, &geom2) == RES_OK); + CHK(ssol_instance_set_receiver(geom2, SSOL_FRONT, 0) == RES_OK); + d3_splat(transform + 9, 0); + transform[9] = +10; + CHK(ssol_instance_set_transform(geom2, transform) == RES_OK); + CHK(ssol_scene_attach_instance(scene, geom2) == RES_OK); + + CHK(ssol_scene_detach_instance(scene, geom1) == RES_OK); + CHK(ssol_estimator_ref_put(estimator) == RES_OK); + +#define N2__ 100000 + CHK(ssol_solve(scene, rng, N2__, 0, NULL, &estimator) == RES_OK); + CHK(ssol_estimator_get_realisation_count(estimator, &count) == RES_OK); + CHK(count == N2__); + CHK(ssol_estimator_get_failed_count(estimator, &count) == RES_OK); + CHK(count == 0); + CHK(ssol_estimator_get_mc_global(estimator, &mc_global2) == RES_OK); + CHK(GET_MC_RCV(estimator, geom2, SSOL_FRONT, &mc_rcv2) == RES_OK); + + PRINT_GLOBAL(mc_global2); + PRINT_RCV(mc_rcv2); + CHK(eq_eps(mc_global2.absorbed_by_receivers.E, DNI_S, 3 * mc_global2.absorbed_by_receivers.SE) == 1); + + /* Free data */ + CHK(ssol_instance_ref_put(geom1) == RES_OK); + CHK(ssol_instance_ref_put(geom2) == RES_OK); + CHK(ssol_object_ref_put(m_object) == RES_OK); + CHK(ssol_object_ref_put(q_object) == RES_OK); + CHK(ssol_shape_ref_put(square) == RES_OK); + CHK(ssol_shape_ref_put(parabol) == RES_OK); + CHK(ssol_material_ref_put(m_mtl) == RES_OK); + CHK(ssol_estimator_ref_put(estimator) == RES_OK); + CHK(ssol_device_ref_put(dev) == RES_OK); + CHK(ssol_scene_ref_put(scene) == RES_OK); + CHK(ssp_rng_ref_put(rng) == RES_OK); + CHK(ssol_spectrum_ref_put(spectrum) == RES_OK); + CHK(ssol_sun_ref_put(sun) == RES_OK); + + check_memory_allocator(&allocator); + mem_shutdown_proxy_allocator(&allocator); + CHK(mem_allocated_size() == 0); + + return 0; +} diff --git a/src/test_ssol_solver12.c b/src/test_ssol_solver12.c @@ -0,0 +1,202 @@ +/* Copyright (C) CNRS 2016-2017 + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * 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 "ssol.h" +#include "test_ssol_utils.h" +#define REFLECTIVITY 0 +#include "test_ssol_materials.h" + +#include <rsys/math.h> + +#define X_SZ 10 +#define Y_SZ 10 +#define PLANE_NAME SQUARE +#define HALF_X (X_SZ / 2) +#define HALF_Y (Y_SZ / 2) +STATIC_ASSERT((HALF_X * 2 == X_SZ), ONLY_ENVEN_VALUES_FOR_SQUARE_X); +STATIC_ASSERT((HALF_Y * 2 == Y_SZ), ONLY_ENVEN_VALUES_FOR_SQUARE_Y); +#include "test_ssol_rect_geometry.h" + +#define POLYGON_NAME POLY +#define HALF_X (X_SZ / 2) +#define HALF_Y (Y_SZ / 2) +STATIC_ASSERT((HALF_X * 2 == X_SZ), ONLY_ENVEN_VALUES_FOR_X_SZ); +STATIC_ASSERT((HALF_Y * 2 == Y_SZ), ONLY_ENVEN_VALUES_FOR_Y_SZ); +#include "test_ssol_rect2D_geometry.h" + +#include <rsys/double33.h> + +#include <star/s3d.h> +#include <star/ssp.h> + +static void +get_wlen(const size_t i, double* wlen, double* data, void* ctx) +{ + double wavelengths[3] = { 1, 2, 3 }; + double intensities[3] = { 1, 0.8, 1 }; + CHK(i < 3); + (void) ctx; + *wlen = wavelengths[i]; + *data = intensities[i]; +} + +int +main(int argc, char** argv) +{ + struct mem_allocator allocator; + struct ssol_device* dev; + struct ssp_rng* rng; + struct ssol_scene* scene; + struct ssol_shape* square; + struct ssol_shape* parabol; + struct ssol_vertex_data attribs[1] = { SSOL_VERTEX_DATA_NULL__ }; + struct ssol_material* m_mtl; + struct ssol_matte_shader shader = SSOL_MATTE_SHADER_NULL; + struct ssol_object* m_object; + struct ssol_object* q_object; + struct ssol_carving carving = SSOL_CARVING_NULL; + struct ssol_quadric quadric = SSOL_QUADRIC_DEFAULT; + struct ssol_punched_surface punched = SSOL_PUNCHED_SURFACE_NULL; + struct ssol_instance* geom1; + struct ssol_instance* geom2; + struct ssol_sun* sun; + struct ssol_spectrum* spectrum; + struct ssol_estimator* estimator; + struct ssol_mc_global mc_global1; + struct ssol_mc_global mc_global2; + struct ssol_mc_receiver mc_rcv1; + struct ssol_mc_receiver mc_rcv2; + double dir[3]; + double transform[12]; /* 3x4 column major matrix */ + size_t count; + + (void) argc, (void) argv; + mem_init_proxy_allocator(&allocator, &mem_default_allocator); + + d33_set_identity(transform); + + CHK(ssol_device_create + (NULL, &allocator, SSOL_NTHREADS_DEFAULT, 0, &dev) == RES_OK); + +#define DNI 1000 + CHK(ssp_rng_create(&allocator, &ssp_rng_threefry, &rng) == RES_OK); + CHK(ssol_spectrum_create(dev, &spectrum) == RES_OK); + CHK(ssol_spectrum_setup(spectrum, get_wlen, 3, NULL) == RES_OK); + CHK(ssol_sun_create_gaussian(dev, &sun) == RES_OK); + CHK(ssol_sun_gaussian_set_std_dev(sun, 0.01) == RES_OK); + CHK(ssol_sun_set_direction(sun, d3(dir, 0, 0, -1)) == RES_OK); + CHK(ssol_sun_set_spectrum(sun, spectrum) == RES_OK); + CHK(ssol_sun_set_dni(sun, DNI) == RES_OK); + CHK(ssol_scene_create(dev, &scene) == RES_OK); + CHK(ssol_scene_attach_sun(scene, sun) == RES_OK); + + /* Create scene content */ + + CHK(ssol_shape_create_mesh(dev, &square) == RES_OK); + attribs[0].usage = SSOL_POSITION; + attribs[0].get = get_position; + CHK(ssol_mesh_setup(square, SQUARE_NTRIS__, get_ids, + SQUARE_NVERTS__, attribs, 1, (void*) &SQUARE_DESC__) == RES_OK); + + CHK(ssol_material_create_matte(dev, &m_mtl) == RES_OK); + shader.normal = get_shader_normal; + shader.reflectivity = get_shader_reflectivity_2; + CHK(ssol_matte_setup(m_mtl, &shader) == RES_OK); + + CHK(ssol_object_create(dev, &m_object) == RES_OK); + CHK(ssol_object_add_shaded_shape(m_object, square, m_mtl, m_mtl) == RES_OK); + CHK(ssol_object_instantiate(m_object, &geom1) == RES_OK); + CHK(ssol_instance_set_receiver(geom1, SSOL_FRONT, 0) == RES_OK); + d3_splat(transform + 9, 0); + transform[9] = -10; + CHK(ssol_instance_set_transform(geom1, transform) == RES_OK); + CHK(ssol_scene_attach_instance(scene, geom1) == RES_OK); + +#define N1__ 10000 +#define GET_MC_RCV ssol_estimator_get_mc_receiver + CHK(ssol_solve(scene, rng, N1__, 0, NULL, &estimator) == RES_OK); + CHK(ssol_estimator_get_realisation_count(estimator, &count) == RES_OK); + CHK(count == N1__); + CHK(ssol_estimator_get_failed_count(estimator, &count) == RES_OK); + CHK(count == 0); +#define DNI_S (DNI * X_SZ * Y_SZ) + CHK(ssol_estimator_get_mc_global(estimator, &mc_global1) == RES_OK); + CHK(GET_MC_RCV(estimator, geom1, SSOL_FRONT, &mc_rcv1) == RES_OK); + + PRINT_GLOBAL(mc_global1); + PRINT_RCV(mc_rcv1); + CHK(mc_global1.cos_factor.E == 1); + CHK(mc_global1.cos_factor.SE == 0); + CHK(mc_global1.absorbed_by_receivers.E == DNI_S); + CHK(mc_global1.absorbed_by_receivers.SE == 0); + + CHK(ssol_shape_create_punched_surface(dev, &parabol) == RES_OK); + carving.get = get_polygon_vertices; + carving.operation = SSOL_AND; + carving.nb_vertices = POLY_NVERTS__; + carving.context = &POLY_EDGES__; + quadric.type = SSOL_QUADRIC_PARABOL; + quadric.data.parabol.focal = 10; + punched.nb_carvings = 1; + punched.quadric = &quadric; + punched.carvings = &carving; + CHK(ssol_punched_surface_setup(parabol, &punched) == RES_OK); + + CHK(ssol_object_create(dev, &q_object) == RES_OK); + CHK(ssol_object_add_shaded_shape(q_object, parabol, m_mtl, m_mtl) == RES_OK); + CHK(ssol_object_instantiate(q_object, &geom2) == RES_OK); + CHK(ssol_instance_set_receiver(geom2, SSOL_FRONT, 0) == RES_OK); + d3_splat(transform + 9, 0); + transform[9] = +10; + CHK(ssol_instance_set_transform(geom2, transform) == RES_OK); + CHK(ssol_scene_attach_instance(scene, geom2) == RES_OK); + + CHK(ssol_scene_detach_instance(scene, geom1) == RES_OK); + CHK(ssol_estimator_ref_put(estimator) == RES_OK); + +#define N2__ 100000 + CHK(ssol_solve(scene, rng, N2__, 0, NULL, &estimator) == RES_OK); + CHK(ssol_estimator_get_realisation_count(estimator, &count) == RES_OK); + CHK(count == N2__); + CHK(ssol_estimator_get_failed_count(estimator, &count) == RES_OK); + CHK(count == 0); + CHK(ssol_estimator_get_mc_global(estimator, &mc_global2) == RES_OK); + CHK(GET_MC_RCV(estimator, geom2, SSOL_FRONT, &mc_rcv2) == RES_OK); + + PRINT_GLOBAL(mc_global2); + PRINT_RCV(mc_rcv2); + CHK(eq_eps(mc_global2.absorbed_by_receivers.E, DNI_S, 3 * mc_global2.absorbed_by_receivers.SE) == 1); + + /* Free data */ + CHK(ssol_instance_ref_put(geom1) == RES_OK); + CHK(ssol_instance_ref_put(geom2) == RES_OK); + CHK(ssol_object_ref_put(m_object) == RES_OK); + CHK(ssol_object_ref_put(q_object) == RES_OK); + CHK(ssol_shape_ref_put(square) == RES_OK); + CHK(ssol_shape_ref_put(parabol) == RES_OK); + CHK(ssol_material_ref_put(m_mtl) == RES_OK); + CHK(ssol_estimator_ref_put(estimator) == RES_OK); + CHK(ssol_device_ref_put(dev) == RES_OK); + CHK(ssol_scene_ref_put(scene) == RES_OK); + CHK(ssp_rng_ref_put(rng) == RES_OK); + CHK(ssol_spectrum_ref_put(spectrum) == RES_OK); + CHK(ssol_sun_ref_put(sun) == RES_OK); + + check_memory_allocator(&allocator); + mem_shutdown_proxy_allocator(&allocator); + CHK(mem_allocated_size() == 0); + + return 0; +} diff --git a/src/test_ssol_solver2.c b/src/test_ssol_solver2.c @@ -42,7 +42,7 @@ get_wlen(const size_t i, double* wlen, double* data, void* ctx) { double wavelengths[3] = { 1, 2, 3 }; double intensities[3] = { 1, 0.8, 1 }; - CHECK(i < 3, 1); + CHK(i < 3); (void)ctx; *wlen = wavelengths[i]; *data = intensities[i]; @@ -101,34 +101,34 @@ main(int argc, char** argv) mem_init_proxy_allocator(&allocator, &mem_default_allocator); - CHECK(ssol_device_create - (NULL, &allocator, SSOL_NTHREADS_DEFAULT, 0, &dev), RES_OK); + CHK(ssol_device_create + (NULL, &allocator, SSOL_NTHREADS_DEFAULT, 0, &dev) == RES_OK); - CHECK(ssp_rng_create(&allocator, &ssp_rng_threefry, &rng), RES_OK); - CHECK(ssol_spectrum_create(dev, &spectrum), RES_OK); - CHECK(ssol_spectrum_setup(spectrum, get_wlen, 3, NULL), RES_OK); - CHECK(ssol_sun_create_directional(dev, &sun), RES_OK); - CHECK(ssol_sun_set_direction(sun, d3(dir, 1, 0, -1)), RES_OK); - CHECK(ssol_sun_set_spectrum(sun, spectrum), RES_OK); - CHECK(ssol_sun_set_dni(sun, 1000), RES_OK); - CHECK(ssol_scene_create(dev, &scene), RES_OK); - CHECK(ssol_scene_attach_sun(scene, sun), RES_OK); + CHK(ssp_rng_create(&allocator, &ssp_rng_threefry, &rng) == RES_OK); + CHK(ssol_spectrum_create(dev, &spectrum) == RES_OK); + CHK(ssol_spectrum_setup(spectrum, get_wlen, 3, NULL) == RES_OK); + CHK(ssol_sun_create_directional(dev, &sun) == RES_OK); + CHK(ssol_sun_set_direction(sun, d3(dir, 1, 0, -1)) == RES_OK); + CHK(ssol_sun_set_spectrum(sun, spectrum) == RES_OK); + CHK(ssol_sun_set_dni(sun, 1000) == RES_OK); + CHK(ssol_scene_create(dev, &scene) == RES_OK); + CHK(ssol_scene_attach_sun(scene, sun) == RES_OK); /* create scene content */ - CHECK(ssol_shape_create_mesh(dev, &square), RES_OK); + CHK(ssol_shape_create_mesh(dev, &square) == RES_OK); attribs[0].usage = SSOL_POSITION; attribs[0].get = get_position; - CHECK(ssol_mesh_setup(square, SQUARE_NTRIS__, get_ids, - SQUARE_NVERTS__, attribs, 1, (void*) &SQUARE_DESC__), RES_OK); + CHK(ssol_mesh_setup(square, SQUARE_NTRIS__, get_ids, + SQUARE_NVERTS__, attribs, 1, (void*) &SQUARE_DESC__) == RES_OK); - CHECK(ssol_shape_create_mesh(dev, &rect), RES_OK); + CHK(ssol_shape_create_mesh(dev, &rect) == RES_OK); attribs[0].usage = SSOL_POSITION; attribs[0].get = get_position; - CHECK(ssol_mesh_setup(rect, RECT_NTRIS__, get_ids, - RECT_NVERTS__, attribs, 1, (void*) &RECT_DESC__), RES_OK); + CHK(ssol_mesh_setup(rect, RECT_NTRIS__, get_ids, + RECT_NVERTS__, attribs, 1, (void*) &RECT_DESC__) == RES_OK); - CHECK(ssol_shape_create_punched_surface(dev, &quad_square), RES_OK); + CHK(ssol_shape_create_punched_surface(dev, &quad_square) == RES_OK); carving.get = get_polygon_vertices; carving.operation = SSOL_AND; carving.nb_vertices = POLY_NVERTS__; @@ -137,94 +137,94 @@ main(int argc, char** argv) punched.nb_carvings = 1; punched.quadric = &quadric; punched.carvings = &carving; - CHECK(ssol_punched_surface_setup(quad_square, &punched), RES_OK); + CHK(ssol_punched_surface_setup(quad_square, &punched) == RES_OK); - CHECK(ssol_material_create_mirror(dev, &m_mtl), RES_OK); + CHK(ssol_material_create_mirror(dev, &m_mtl) == RES_OK); shader.normal = get_shader_normal; shader.reflectivity = get_shader_reflectivity; shader.roughness = get_shader_roughness; - CHECK(ssol_mirror_setup(m_mtl, &shader), RES_OK); - CHECK(ssol_material_create_virtual(dev, &v_mtl), RES_OK); - - CHECK(ssol_object_create(dev, &m_object), RES_OK); - CHECK(ssol_object_add_shaded_shape(m_object, rect, m_mtl, m_mtl), RES_OK); - CHECK(ssol_object_instantiate(m_object, &heliostat1), RES_OK); - CHECK(ssol_object_instantiate(m_object, &heliostat2), RES_OK); - CHECK(ssol_instance_set_receiver(heliostat1, SSOL_FRONT, 0), RES_OK); - CHECK(ssol_instance_set_receiver(heliostat2, SSOL_FRONT, 0), RES_OK); + CHK(ssol_mirror_setup(m_mtl, &shader, SSOL_MICROFACET_BECKMANN) == RES_OK); + CHK(ssol_material_create_virtual(dev, &v_mtl) == RES_OK); + + CHK(ssol_object_create(dev, &m_object) == RES_OK); + CHK(ssol_object_add_shaded_shape(m_object, rect, m_mtl, m_mtl) == RES_OK); + CHK(ssol_object_instantiate(m_object, &heliostat1) == RES_OK); + CHK(ssol_object_instantiate(m_object, &heliostat2) == RES_OK); + CHK(ssol_instance_set_receiver(heliostat1, SSOL_FRONT, 0) == RES_OK); + CHK(ssol_instance_set_receiver(heliostat2, SSOL_FRONT, 0) == RES_OK); transform3[9] = -0.5; /* -0.5 offset along X axis */ - CHECK(ssol_instance_set_transform(heliostat1, transform3), RES_OK); + CHK(ssol_instance_set_transform(heliostat1, transform3) == RES_OK); transform3[9] = +0.5; /* +0.5 offset along X axis */ - CHECK(ssol_instance_set_transform(heliostat2, transform3), RES_OK); - CHECK(ssol_scene_attach_instance(scene, heliostat1), RES_OK); - CHECK(ssol_scene_attach_instance(scene, heliostat2), RES_OK); - - CHECK(ssol_object_create(dev, &s_object), RES_OK); - CHECK(ssol_object_add_shaded_shape(s_object, quad_square, m_mtl, m_mtl), RES_OK); - CHECK(ssol_object_instantiate(s_object, &secondary), RES_OK); - CHECK(ssol_instance_set_receiver(secondary, SSOL_FRONT, 0), RES_OK); - CHECK(ssol_instance_set_transform(secondary, transform1), RES_OK); - CHECK(ssol_instance_sample(secondary, 0), RES_OK); - CHECK(ssol_scene_attach_instance(scene, secondary), RES_OK); - - CHECK(ssol_object_create(dev, &t_object), RES_OK); - CHECK(ssol_object_add_shaded_shape(t_object, square, v_mtl, v_mtl), RES_OK); - CHECK(ssol_object_instantiate(t_object, &target), RES_OK); - CHECK(ssol_instance_set_transform(target, transform2), RES_OK); - CHECK(ssol_instance_set_receiver(target, SSOL_FRONT, 0), RES_OK); - CHECK(ssol_instance_sample(target, 0), RES_OK); - CHECK(ssol_scene_attach_instance(scene, target), RES_OK); + CHK(ssol_instance_set_transform(heliostat2, transform3) == RES_OK); + CHK(ssol_scene_attach_instance(scene, heliostat1) == RES_OK); + CHK(ssol_scene_attach_instance(scene, heliostat2) == RES_OK); + + CHK(ssol_object_create(dev, &s_object) == RES_OK); + CHK(ssol_object_add_shaded_shape(s_object, quad_square, m_mtl, m_mtl) == RES_OK); + CHK(ssol_object_instantiate(s_object, &secondary) == RES_OK); + CHK(ssol_instance_set_receiver(secondary, SSOL_FRONT, 0) == RES_OK); + CHK(ssol_instance_set_transform(secondary, transform1) == RES_OK); + CHK(ssol_instance_sample(secondary, 0) == RES_OK); + CHK(ssol_scene_attach_instance(scene, secondary) == RES_OK); + + CHK(ssol_object_create(dev, &t_object) == RES_OK); + CHK(ssol_object_add_shaded_shape(t_object, square, v_mtl, v_mtl) == RES_OK); + CHK(ssol_object_instantiate(t_object, &target) == RES_OK); + CHK(ssol_instance_set_transform(target, transform2) == RES_OK); + CHK(ssol_instance_set_receiver(target, SSOL_FRONT, 0) == RES_OK); + CHK(ssol_instance_sample(target, 0) == RES_OK); + CHK(ssol_scene_attach_instance(scene, target) == RES_OK); #define N__ 10000 #define GET_MC_RCV ssol_estimator_get_mc_receiver - CHECK(ssol_solve(scene, rng, N__, 0, NULL, &estimator), RES_OK); - CHECK(ssol_estimator_get_realisation_count(estimator, &count), RES_OK); - CHECK(count, N__); + CHK(ssol_solve(scene, rng, N__, 0, NULL, &estimator) == RES_OK); + CHK(ssol_estimator_get_realisation_count(estimator, &count) == RES_OK); + CHK(count == N__); #define COS cos(PI / 4) #define DNI_cos (1000 * COS) m = 4 * DNI_cos; #define SQR(x) ((x)*(x)) std = 0; - CHECK(ssol_estimator_get_mc_global(estimator, &mc_global), RES_OK); + CHK(ssol_estimator_get_mc_global(estimator, &mc_global) == RES_OK); printf("Shadows = %g +/- %g\n", mc_global.shadowed.E, mc_global.shadowed.SE); printf("Missing = %g +/- %g\n", mc_global.missing.E, mc_global.missing.SE); printf("Cos = %g +/- %g\n", mc_global.cos_factor.E, mc_global.cos_factor.SE); - CHECK(eq_eps(mc_global.shadowed.E, 0, 1e-4), 1); - CHECK(eq_eps(mc_global.missing.E, 4 * DNI_cos, 1e-4), 1); /* nothing absorbed */ - CHECK(eq_eps(mc_global.cos_factor.E, COS, 1e-4), 1); - CHECK(GET_MC_RCV(estimator, heliostat1, SSOL_BACK, &mc_rcv), RES_BAD_ARG); - CHECK(GET_MC_RCV(estimator, secondary, SSOL_FRONT, &mc_rcv), RES_OK); + CHK(eq_eps(mc_global.shadowed.E, 0, 1e-4) == 1); + CHK(eq_eps(mc_global.missing.E, 4 * DNI_cos, 1e-4) == 1); /* nothing absorbed */ + CHK(eq_eps(mc_global.cos_factor.E, COS, 1e-4) == 1); + CHK(GET_MC_RCV(estimator, heliostat1, SSOL_BACK, &mc_rcv) == RES_BAD_ARG); + CHK(GET_MC_RCV(estimator, secondary, SSOL_FRONT, &mc_rcv) == RES_OK); printf("Ir(secondary) = %g +/- %g\n", mc_rcv.incoming_flux.E, mc_rcv.incoming_flux.SE); - CHECK(GET_MC_RCV(estimator, target, SSOL_FRONT, &mc_rcv), RES_OK); + CHK(GET_MC_RCV(estimator, target, SSOL_FRONT, &mc_rcv) == RES_OK); printf("Ir(target) = %g +/- %g\n", mc_rcv.incoming_flux.E, mc_rcv.incoming_flux.SE); - CHECK(eq_eps(mc_rcv.incoming_flux.E, m, 1e-8), 1); - CHECK(eq_eps(mc_rcv.incoming_flux.SE, std, 1e-4), 1); + CHK(eq_eps(mc_rcv.incoming_flux.E, m, 1e-8) == 1); + CHK(eq_eps(mc_rcv.incoming_flux.SE, std, 1e-4) == 1); /* Free data */ - CHECK(ssol_instance_ref_put(heliostat1), RES_OK); - CHECK(ssol_instance_ref_put(heliostat2), RES_OK); - CHECK(ssol_instance_ref_put(secondary), RES_OK); - CHECK(ssol_instance_ref_put(target), RES_OK); - CHECK(ssol_object_ref_put(m_object), RES_OK); - CHECK(ssol_object_ref_put(s_object), RES_OK); - CHECK(ssol_object_ref_put(t_object), RES_OK); - CHECK(ssol_shape_ref_put(square), RES_OK); - CHECK(ssol_shape_ref_put(rect), RES_OK); - CHECK(ssol_shape_ref_put(quad_square), RES_OK); - CHECK(ssol_material_ref_put(m_mtl), RES_OK); - CHECK(ssol_material_ref_put(v_mtl), RES_OK); - CHECK(ssol_device_ref_put(dev), RES_OK); - CHECK(ssol_estimator_ref_put(estimator), RES_OK); - CHECK(ssol_scene_ref_put(scene), RES_OK); - CHECK(ssp_rng_ref_put(rng), RES_OK); - CHECK(ssol_spectrum_ref_put(spectrum), RES_OK); - CHECK(ssol_sun_ref_put(sun), RES_OK); + CHK(ssol_instance_ref_put(heliostat1) == RES_OK); + CHK(ssol_instance_ref_put(heliostat2) == RES_OK); + CHK(ssol_instance_ref_put(secondary) == RES_OK); + CHK(ssol_instance_ref_put(target) == RES_OK); + CHK(ssol_object_ref_put(m_object) == RES_OK); + CHK(ssol_object_ref_put(s_object) == RES_OK); + CHK(ssol_object_ref_put(t_object) == RES_OK); + CHK(ssol_shape_ref_put(square) == RES_OK); + CHK(ssol_shape_ref_put(rect) == RES_OK); + CHK(ssol_shape_ref_put(quad_square) == RES_OK); + CHK(ssol_material_ref_put(m_mtl) == RES_OK); + CHK(ssol_material_ref_put(v_mtl) == RES_OK); + CHK(ssol_device_ref_put(dev) == RES_OK); + CHK(ssol_estimator_ref_put(estimator) == RES_OK); + CHK(ssol_scene_ref_put(scene) == RES_OK); + CHK(ssp_rng_ref_put(rng) == RES_OK); + CHK(ssol_spectrum_ref_put(spectrum) == RES_OK); + CHK(ssol_sun_ref_put(sun) == RES_OK); check_memory_allocator(&allocator); mem_shutdown_proxy_allocator(&allocator); - CHECK(mem_allocated_size(), 0); + CHK(mem_allocated_size() == 0); return 0; } diff --git a/src/test_ssol_solver2b.c b/src/test_ssol_solver2b.c @@ -42,7 +42,7 @@ get_wlen(const size_t i, double* wlen, double* data, void* ctx) { double wavelengths[3] = { 1, 2, 3 }; double intensities[3] = { 1, 0.8, 1 }; - CHECK(i < 3, 1); + CHK(i < 3); (void)ctx; *wlen = wavelengths[i]; *data = intensities[i]; @@ -100,28 +100,28 @@ main(int argc, char** argv) mem_init_proxy_allocator(&allocator, &mem_default_allocator); - CHECK(ssol_device_create - (NULL, &allocator, SSOL_NTHREADS_DEFAULT, 0, &dev), RES_OK); + CHK(ssol_device_create + (NULL, &allocator, SSOL_NTHREADS_DEFAULT, 0, &dev) == RES_OK); - CHECK(ssp_rng_create(&allocator, &ssp_rng_threefry, &rng), RES_OK); - CHECK(ssol_spectrum_create(dev, &spectrum), RES_OK); - CHECK(ssol_spectrum_setup(spectrum, get_wlen, 3, NULL), RES_OK); - CHECK(ssol_sun_create_directional(dev, &sun), RES_OK); - CHECK(ssol_sun_set_direction(sun, d3(dir, 1, 0, -1)), RES_OK); - CHECK(ssol_sun_set_spectrum(sun, spectrum), RES_OK); - CHECK(ssol_sun_set_dni(sun, 1000), RES_OK); - CHECK(ssol_scene_create(dev, &scene), RES_OK); - CHECK(ssol_scene_attach_sun(scene, sun), RES_OK); + CHK(ssp_rng_create(&allocator, &ssp_rng_threefry, &rng) == RES_OK); + CHK(ssol_spectrum_create(dev, &spectrum) == RES_OK); + CHK(ssol_spectrum_setup(spectrum, get_wlen, 3, NULL) == RES_OK); + CHK(ssol_sun_create_directional(dev, &sun) == RES_OK); + CHK(ssol_sun_set_direction(sun, d3(dir, 1, 0, -1)) == RES_OK); + CHK(ssol_sun_set_spectrum(sun, spectrum) == RES_OK); + CHK(ssol_sun_set_dni(sun, 1000) == RES_OK); + CHK(ssol_scene_create(dev, &scene) == RES_OK); + CHK(ssol_scene_attach_sun(scene, sun) == RES_OK); /* Create scene content */ - CHECK(ssol_shape_create_mesh(dev, &rect), RES_OK); + CHK(ssol_shape_create_mesh(dev, &rect) == RES_OK); attribs[0].usage = SSOL_POSITION; attribs[0].get = get_position; - CHECK(ssol_mesh_setup(rect, RECT_NTRIS__, get_ids, - RECT_NVERTS__, attribs, 1, (void*) &RECT_DESC__), RES_OK); + CHK(ssol_mesh_setup(rect, RECT_NTRIS__, get_ids, + RECT_NVERTS__, attribs, 1, (void*) &RECT_DESC__) == RES_OK); - CHECK(ssol_shape_create_punched_surface(dev, &quad_rect), RES_OK); + CHK(ssol_shape_create_punched_surface(dev, &quad_rect) == RES_OK); carving.get = get_polygon_vertices; carving.operation = SSOL_AND; carving.nb_vertices = RECT_POLY_NVERTS__; @@ -130,9 +130,9 @@ main(int argc, char** argv) punched.nb_carvings = 1; punched.quadric = &quadric; punched.carvings = &carving; - CHECK(ssol_punched_surface_setup(quad_rect, &punched), RES_OK); + CHK(ssol_punched_surface_setup(quad_rect, &punched) == RES_OK); - CHECK(ssol_shape_create_punched_surface(dev, &quad_square), RES_OK); + CHK(ssol_shape_create_punched_surface(dev, &quad_square) == RES_OK); carving.get = get_polygon_vertices; carving.operation = SSOL_AND; carving.nb_vertices = SQUARE_POLY_NVERTS__; @@ -141,92 +141,92 @@ main(int argc, char** argv) punched.nb_carvings = 1; punched.quadric = &quadric; punched.carvings = &carving; - CHECK(ssol_punched_surface_setup(quad_square, &punched), RES_OK); + CHK(ssol_punched_surface_setup(quad_square, &punched) == RES_OK); - CHECK(ssol_material_create_mirror(dev, &m_mtl), RES_OK); + CHK(ssol_material_create_mirror(dev, &m_mtl) == RES_OK); shader.normal = get_shader_normal; shader.reflectivity = get_shader_reflectivity; shader.roughness = get_shader_roughness; - CHECK(ssol_mirror_setup(m_mtl, &shader), RES_OK); - CHECK(ssol_material_create_virtual(dev, &v_mtl), RES_OK); - - CHECK(ssol_object_create(dev, &m_object), RES_OK); - CHECK(ssol_object_add_shaded_shape(m_object, quad_rect, m_mtl, m_mtl), RES_OK); - CHECK(ssol_object_instantiate(m_object, &heliostat1), RES_OK); - CHECK(ssol_object_instantiate(m_object, &heliostat2), RES_OK); - CHECK(ssol_instance_set_receiver(heliostat1, SSOL_FRONT, 0), RES_OK); - CHECK(ssol_instance_set_receiver(heliostat2, SSOL_FRONT, 0), RES_OK); + CHK(ssol_mirror_setup(m_mtl, &shader, SSOL_MICROFACET_BECKMANN) == RES_OK); + CHK(ssol_material_create_virtual(dev, &v_mtl) == RES_OK); + + CHK(ssol_object_create(dev, &m_object) == RES_OK); + CHK(ssol_object_add_shaded_shape(m_object, quad_rect, m_mtl, m_mtl) == RES_OK); + CHK(ssol_object_instantiate(m_object, &heliostat1) == RES_OK); + CHK(ssol_object_instantiate(m_object, &heliostat2) == RES_OK); + CHK(ssol_instance_set_receiver(heliostat1, SSOL_FRONT, 0) == RES_OK); + CHK(ssol_instance_set_receiver(heliostat2, SSOL_FRONT, 0) == RES_OK); transform3[9] = -0.5; /* -0.5 offset along X axis */ - CHECK(ssol_instance_set_transform(heliostat1, transform3), RES_OK); + CHK(ssol_instance_set_transform(heliostat1, transform3) == RES_OK); transform3[9] = +0.5; /* +0.5 offset along X axis */ - CHECK(ssol_instance_set_transform(heliostat2, transform3), RES_OK); - CHECK(ssol_scene_attach_instance(scene, heliostat1), RES_OK); - CHECK(ssol_scene_attach_instance(scene, heliostat2), RES_OK); - - CHECK(ssol_object_create(dev, &s_object), RES_OK); - CHECK(ssol_object_add_shaded_shape(s_object, quad_square, m_mtl, m_mtl), RES_OK); - CHECK(ssol_object_instantiate(s_object, &secondary), RES_OK); - CHECK(ssol_instance_set_receiver(secondary, SSOL_FRONT, 0), RES_OK); - CHECK(ssol_instance_set_transform(secondary, transform1), RES_OK); - CHECK(ssol_instance_sample(secondary, 0), RES_OK); - CHECK(ssol_scene_attach_instance(scene, secondary), RES_OK); - - CHECK(ssol_object_create(dev, &t_object), RES_OK); - CHECK(ssol_object_add_shaded_shape(t_object, rect, v_mtl, v_mtl), RES_OK); - CHECK(ssol_object_instantiate(t_object, &target), RES_OK); - CHECK(ssol_instance_set_transform(target, transform2), RES_OK); - CHECK(ssol_instance_set_receiver(target, SSOL_FRONT, 0), RES_OK); - CHECK(ssol_instance_sample(target, 0), RES_OK); - CHECK(ssol_scene_attach_instance(scene, target), RES_OK); + CHK(ssol_instance_set_transform(heliostat2, transform3) == RES_OK); + CHK(ssol_scene_attach_instance(scene, heliostat1) == RES_OK); + CHK(ssol_scene_attach_instance(scene, heliostat2) == RES_OK); + + CHK(ssol_object_create(dev, &s_object) == RES_OK); + CHK(ssol_object_add_shaded_shape(s_object, quad_square, m_mtl, m_mtl) == RES_OK); + CHK(ssol_object_instantiate(s_object, &secondary) == RES_OK); + CHK(ssol_instance_set_receiver(secondary, SSOL_FRONT, 0) == RES_OK); + CHK(ssol_instance_set_transform(secondary, transform1) == RES_OK); + CHK(ssol_instance_sample(secondary, 0) == RES_OK); + CHK(ssol_scene_attach_instance(scene, secondary) == RES_OK); + + CHK(ssol_object_create(dev, &t_object) == RES_OK); + CHK(ssol_object_add_shaded_shape(t_object, rect, v_mtl, v_mtl) == RES_OK); + CHK(ssol_object_instantiate(t_object, &target) == RES_OK); + CHK(ssol_instance_set_transform(target, transform2) == RES_OK); + CHK(ssol_instance_set_receiver(target, SSOL_FRONT, 0) == RES_OK); + CHK(ssol_instance_sample(target, 0) == RES_OK); + CHK(ssol_scene_attach_instance(scene, target) == RES_OK); #define N__ 50000 - CHECK(ssol_solve(scene, rng, N__, 0, NULL, &estimator), RES_OK); - CHECK(ssol_estimator_get_realisation_count(estimator, &count), RES_OK); - CHECK(count, N__); + CHK(ssol_solve(scene, rng, N__, 0, NULL, &estimator) == RES_OK); + CHK(ssol_estimator_get_realisation_count(estimator, &count) == RES_OK); + CHK(count == N__); #define COS cos(PI / 4) #define DNI_cos (1000 * COS) m = 2 * DNI_cos; #define SQR(x) ((x)*(x)) std = sqrt((SQR(4 * DNI_cos) / 2 - SQR(2 * DNI_cos)) / (double)count); - CHECK(ssol_estimator_get_mc_global(estimator, &mc_global), RES_OK); + CHK(ssol_estimator_get_mc_global(estimator, &mc_global) == RES_OK); printf("Shadows = %g +/- %g\n", mc_global.shadowed.E, mc_global.shadowed.SE); printf("Missing = %g +/- %g\n", mc_global.missing.E, mc_global.missing.SE); printf("Cos = %g +/- %g\n", mc_global.cos_factor.E, mc_global.cos_factor.SE); - CHECK(eq_eps(mc_global.shadowed.E, 0, 1e-4), 1); - CHECK(eq_eps(mc_global.missing.E, 4 * DNI_cos, 1e-4), 1); /* nothing absorbed */ - CHECK(eq_eps(mc_global.cos_factor.E, COS, 1e-4), 1); - CHECK(ssol_estimator_get_mc_receiver - (estimator, target, SSOL_FRONT, &mc_rcv), RES_OK); + CHK(eq_eps(mc_global.shadowed.E, 0, 1e-4) == 1); + CHK(eq_eps(mc_global.missing.E, 4 * DNI_cos, 1e-4) == 1); /* nothing absorbed */ + CHK(eq_eps(mc_global.cos_factor.E, COS, 1e-4) == 1); + CHK(ssol_estimator_get_mc_receiver + (estimator, target, SSOL_FRONT, &mc_rcv) == RES_OK); printf("Ir(target) = %g +/- %g\n", mc_rcv.incoming_flux.E, mc_rcv.incoming_flux.SE); - CHECK(eq_eps(mc_rcv.incoming_flux.E, m, 2 * std), 1); - CHECK(eq_eps(mc_rcv.incoming_flux.SE, std, 1e-3), 1); - CHECK(ssol_estimator_get_failed_count(estimator, &count), RES_OK); - CHECK(count, 0); + CHK(eq_eps(mc_rcv.incoming_flux.E, m, 2 * std) == 1); + CHK(eq_eps(mc_rcv.incoming_flux.SE, std, 1e-3) == 1); + CHK(ssol_estimator_get_failed_count(estimator, &count) == RES_OK); + CHK(count == 0); /* Free data */ - CHECK(ssol_instance_ref_put(heliostat1), RES_OK); - CHECK(ssol_instance_ref_put(heliostat2), RES_OK); - CHECK(ssol_instance_ref_put(secondary), RES_OK); - CHECK(ssol_instance_ref_put(target), RES_OK); - CHECK(ssol_object_ref_put(m_object), RES_OK); - CHECK(ssol_object_ref_put(s_object), RES_OK); - CHECK(ssol_object_ref_put(t_object), RES_OK); - CHECK(ssol_shape_ref_put(rect), RES_OK); - CHECK(ssol_shape_ref_put(quad_rect), RES_OK); - CHECK(ssol_shape_ref_put(quad_square), RES_OK); - CHECK(ssol_material_ref_put(m_mtl), RES_OK); - CHECK(ssol_material_ref_put(v_mtl), RES_OK); - CHECK(ssol_estimator_ref_put(estimator), RES_OK); - CHECK(ssol_device_ref_put(dev), RES_OK); - CHECK(ssol_scene_ref_put(scene), RES_OK); - CHECK(ssp_rng_ref_put(rng), RES_OK); - CHECK(ssol_spectrum_ref_put(spectrum), RES_OK); - CHECK(ssol_sun_ref_put(sun), RES_OK); + CHK(ssol_instance_ref_put(heliostat1) == RES_OK); + CHK(ssol_instance_ref_put(heliostat2) == RES_OK); + CHK(ssol_instance_ref_put(secondary) == RES_OK); + CHK(ssol_instance_ref_put(target) == RES_OK); + CHK(ssol_object_ref_put(m_object) == RES_OK); + CHK(ssol_object_ref_put(s_object) == RES_OK); + CHK(ssol_object_ref_put(t_object) == RES_OK); + CHK(ssol_shape_ref_put(rect) == RES_OK); + CHK(ssol_shape_ref_put(quad_rect) == RES_OK); + CHK(ssol_shape_ref_put(quad_square) == RES_OK); + CHK(ssol_material_ref_put(m_mtl) == RES_OK); + CHK(ssol_material_ref_put(v_mtl) == RES_OK); + CHK(ssol_estimator_ref_put(estimator) == RES_OK); + CHK(ssol_device_ref_put(dev) == RES_OK); + CHK(ssol_scene_ref_put(scene) == RES_OK); + CHK(ssp_rng_ref_put(rng) == RES_OK); + CHK(ssol_spectrum_ref_put(spectrum) == RES_OK); + CHK(ssol_sun_ref_put(sun) == RES_OK); check_memory_allocator(&allocator); mem_shutdown_proxy_allocator(&allocator); - CHECK(mem_allocated_size(), 0); + CHK(mem_allocated_size() == 0); return 0; } diff --git a/src/test_ssol_solver3.c b/src/test_ssol_solver3.c @@ -37,7 +37,7 @@ get_wlen(const size_t i, double* wlen, double* data, void* ctx) { double wavelengths[3] = { 1, 2, 3 }; double intensities[3] = { 1, 0.8, 1 }; - CHECK(i < 3, 1); + CHK(i < 3); (void)ctx; *wlen = wavelengths[i]; *data = intensities[i]; @@ -81,28 +81,28 @@ main(int argc, char** argv) mem_init_proxy_allocator(&allocator, &mem_default_allocator); - CHECK(ssol_device_create - (NULL, &allocator, SSOL_NTHREADS_DEFAULT, 0, &dev), RES_OK); + CHK(ssol_device_create + (NULL, &allocator, SSOL_NTHREADS_DEFAULT, 0, &dev) == RES_OK); - CHECK(ssp_rng_create(&allocator, &ssp_rng_threefry, &rng), RES_OK); - CHECK(ssol_spectrum_create(dev, &spectrum), RES_OK); - CHECK(ssol_spectrum_setup(spectrum, get_wlen, 3, NULL), RES_OK); - CHECK(ssol_sun_create_directional(dev, &sun), RES_OK); - CHECK(ssol_sun_set_direction(sun, d3(dir, 1, 0, -1)), RES_OK); - CHECK(ssol_sun_set_spectrum(sun, spectrum), RES_OK); - CHECK(ssol_sun_set_dni(sun, 1000), RES_OK); - CHECK(ssol_scene_create(dev, &scene), RES_OK); - CHECK(ssol_scene_attach_sun(scene, sun), RES_OK); + CHK(ssp_rng_create(&allocator, &ssp_rng_threefry, &rng) == RES_OK); + CHK(ssol_spectrum_create(dev, &spectrum) == RES_OK); + CHK(ssol_spectrum_setup(spectrum, get_wlen, 3, NULL) == RES_OK); + CHK(ssol_sun_create_directional(dev, &sun) == RES_OK); + CHK(ssol_sun_set_direction(sun, d3(dir, 1, 0, -1)) == RES_OK); + CHK(ssol_sun_set_spectrum(sun, spectrum) == RES_OK); + CHK(ssol_sun_set_dni(sun, 1000) == RES_OK); + CHK(ssol_scene_create(dev, &scene) == RES_OK); + CHK(ssol_scene_attach_sun(scene, sun) == RES_OK); /* Create scene content */ - CHECK(ssol_shape_create_mesh(dev, &square), RES_OK); + CHK(ssol_shape_create_mesh(dev, &square) == RES_OK); attribs[0].usage = SSOL_POSITION; attribs[0].get = get_position; - CHECK(ssol_mesh_setup(square, SQUARE_NTRIS__, get_ids, - SQUARE_NVERTS__, attribs, 1, (void*) &SQUARE_DESC__), RES_OK); + CHK(ssol_mesh_setup(square, SQUARE_NTRIS__, get_ids, + SQUARE_NVERTS__, attribs, 1, (void*) &SQUARE_DESC__) == RES_OK); - CHECK(ssol_shape_create_punched_surface(dev, &quad_square), RES_OK); + CHK(ssol_shape_create_punched_surface(dev, &quad_square) == RES_OK); carving.get = get_polygon_vertices; carving.operation = SSOL_AND; carving.nb_vertices = POLY_NVERTS__; @@ -111,75 +111,75 @@ main(int argc, char** argv) punched.nb_carvings = 1; punched.quadric = &quadric; punched.carvings = &carving; - CHECK(ssol_punched_surface_setup(quad_square, &punched), RES_OK); + CHK(ssol_punched_surface_setup(quad_square, &punched) == RES_OK); - CHECK(ssol_material_create_mirror(dev, &m_mtl), RES_OK); + CHK(ssol_material_create_mirror(dev, &m_mtl) == RES_OK); shader.normal = get_shader_normal; shader.reflectivity = get_shader_reflectivity; shader.roughness = get_shader_roughness; - CHECK(ssol_mirror_setup(m_mtl, &shader), RES_OK); - CHECK(ssol_material_create_virtual(dev, &v_mtl), RES_OK); - - CHECK(ssol_object_create(dev, &m_object), RES_OK); - CHECK(ssol_object_add_shaded_shape(m_object, quad_square, m_mtl, m_mtl), RES_OK); - CHECK(ssol_object_instantiate(m_object, &heliostat), RES_OK); - CHECK(ssol_instance_set_receiver(heliostat, SSOL_FRONT, 0), RES_OK); - CHECK(ssol_scene_attach_instance(scene, heliostat), RES_OK); - - CHECK(ssol_object_create(dev, &t_object), RES_OK); - CHECK(ssol_object_add_shaded_shape(t_object, square, v_mtl, v_mtl), RES_OK); - CHECK(ssol_object_instantiate(t_object, &target), RES_OK); - CHECK(ssol_instance_set_transform(target, transform), RES_OK); - CHECK(ssol_instance_set_receiver(target, SSOL_FRONT, 0), RES_OK); - CHECK(ssol_instance_sample(target, 0), RES_OK); - CHECK(ssol_scene_attach_instance(scene, target), RES_OK); + CHK(ssol_mirror_setup(m_mtl, &shader, SSOL_MICROFACET_BECKMANN) == RES_OK); + CHK(ssol_material_create_virtual(dev, &v_mtl) == RES_OK); + + CHK(ssol_object_create(dev, &m_object) == RES_OK); + CHK(ssol_object_add_shaded_shape(m_object, quad_square, m_mtl, m_mtl) == RES_OK); + CHK(ssol_object_instantiate(m_object, &heliostat) == RES_OK); + CHK(ssol_instance_set_receiver(heliostat, SSOL_FRONT, 0) == RES_OK); + CHK(ssol_scene_attach_instance(scene, heliostat) == RES_OK); + + CHK(ssol_object_create(dev, &t_object) == RES_OK); + CHK(ssol_object_add_shaded_shape(t_object, square, v_mtl, v_mtl) == RES_OK); + CHK(ssol_object_instantiate(t_object, &target) == RES_OK); + CHK(ssol_instance_set_transform(target, transform) == RES_OK); + CHK(ssol_instance_set_receiver(target, SSOL_FRONT, 0) == RES_OK); + CHK(ssol_instance_sample(target, 0) == RES_OK); + CHK(ssol_scene_attach_instance(scene, target) == RES_OK); #define N__ 20000 - CHECK(ssol_solve(scene, rng, N__, 0, NULL, &estimator), RES_OK); - CHECK(ssol_estimator_get_realisation_count(estimator, &count), RES_OK); - CHECK(count, N__); + CHK(ssol_solve(scene, rng, N__, 0, NULL, &estimator) == RES_OK); + CHK(ssol_estimator_get_realisation_count(estimator, &count) == RES_OK); + CHK(count == N__); #define COS cos(PI / 4) #define DNI_cos (1000 * COS) m = 4 * DNI_cos; #define SQR(x) ((x)*(x)) std = sqrt((SQR(400*DNI_cos) / 100 - SQR(4*DNI_cos)) / (double)count); - CHECK(ssol_estimator_get_mc_global(estimator, &mc_global), RES_OK); + CHK(ssol_estimator_get_mc_global(estimator, &mc_global) == RES_OK); printf("Shadows = %g +/- %g\n", mc_global.shadowed.E, mc_global.shadowed.SE); printf("Missing = %g +/- %g\n", mc_global.missing.E, mc_global.missing.SE); printf("Cos = %g +/- %g\n", mc_global.cos_factor.E, mc_global.cos_factor.SE); - CHECK(eq_eps(mc_global.shadowed.E, 0, 1e-4), 1); - CHECK(eq_eps(mc_global.missing.E, 400 * DNI_cos, 1e-4), 1); /* nothing absorbed */ - CHECK(eq_eps(mc_global.cos_factor.E, COS, 1e-4), 1); - CHECK(ssol_estimator_get_mc_receiver - (estimator, target, SSOL_FRONT, &mc_rcv), RES_OK); + CHK(eq_eps(mc_global.shadowed.E, 0, 1e-4) == 1); + CHK(eq_eps(mc_global.missing.E, 400 * DNI_cos, 1e-4) == 1); /* nothing absorbed */ + CHK(eq_eps(mc_global.cos_factor.E, COS, 1e-4) == 1); + CHK(ssol_estimator_get_mc_receiver + (estimator, target, SSOL_FRONT, &mc_rcv) == RES_OK); printf("Ir(target) = %g +/- %g\n", mc_rcv.incoming_flux.E, mc_rcv.incoming_flux.SE); - CHECK(eq_eps(mc_rcv.incoming_flux.E, m, 2 * std), 1); - CHECK(eq_eps(mc_rcv.incoming_flux.SE, std, 10), 1); - CHECK(ssol_estimator_get_failed_count(estimator, &count), RES_OK); - CHECK(count, 0); - CHECK(ssol_instance_get_area(heliostat, &area), RES_OK); - CHECK(eq_eps(area, 400, DBL_EPSILON), 1); + CHK(eq_eps(mc_rcv.incoming_flux.E, m, 2 * std) == 1); + CHK(eq_eps(mc_rcv.incoming_flux.SE, std, 10) == 1); + CHK(ssol_estimator_get_failed_count(estimator, &count) == RES_OK); + CHK(count == 0); + CHK(ssol_instance_get_area(heliostat, &area) == RES_OK); + CHK(eq_eps(area, 400, DBL_EPSILON) == 1); /* Free data */ - CHECK(ssol_instance_ref_put(heliostat), RES_OK); - CHECK(ssol_instance_ref_put(target), RES_OK); - CHECK(ssol_object_ref_put(m_object), RES_OK); - CHECK(ssol_object_ref_put(t_object), RES_OK); - CHECK(ssol_shape_ref_put(square), RES_OK); - CHECK(ssol_shape_ref_put(quad_square), RES_OK); - CHECK(ssol_material_ref_put(m_mtl), RES_OK); - CHECK(ssol_material_ref_put(v_mtl), RES_OK); - CHECK(ssol_device_ref_put(dev), RES_OK); - CHECK(ssol_estimator_ref_put(estimator), RES_OK); - CHECK(ssol_scene_ref_put(scene), RES_OK); - CHECK(ssp_rng_ref_put(rng), RES_OK); - CHECK(ssol_spectrum_ref_put(spectrum), RES_OK); - CHECK(ssol_sun_ref_put(sun), RES_OK); + CHK(ssol_instance_ref_put(heliostat) == RES_OK); + CHK(ssol_instance_ref_put(target) == RES_OK); + CHK(ssol_object_ref_put(m_object) == RES_OK); + CHK(ssol_object_ref_put(t_object) == RES_OK); + CHK(ssol_shape_ref_put(square) == RES_OK); + CHK(ssol_shape_ref_put(quad_square) == RES_OK); + CHK(ssol_material_ref_put(m_mtl) == RES_OK); + CHK(ssol_material_ref_put(v_mtl) == RES_OK); + CHK(ssol_device_ref_put(dev) == RES_OK); + CHK(ssol_estimator_ref_put(estimator) == RES_OK); + CHK(ssol_scene_ref_put(scene) == RES_OK); + CHK(ssp_rng_ref_put(rng) == RES_OK); + CHK(ssol_spectrum_ref_put(spectrum) == RES_OK); + CHK(ssol_sun_ref_put(sun) == RES_OK); check_memory_allocator(&allocator); mem_shutdown_proxy_allocator(&allocator); - CHECK(mem_allocated_size(), 0); + CHK(mem_allocated_size() == 0); return 0; } diff --git a/src/test_ssol_solver4.c b/src/test_ssol_solver4.c @@ -37,7 +37,7 @@ get_wlen(const size_t i, double* wlen, double* data, void* ctx) { double wavelengths[3] = { 1, 2, 3 }; double intensities[3] = { 1, 0.8, 1 }; - CHECK(i < 3, 1); + CHK(i < 3); (void)ctx; *wlen = wavelengths[i]; *data = intensities[i]; @@ -82,28 +82,28 @@ main(int argc, char** argv) mem_init_proxy_allocator(&allocator, &mem_default_allocator); - CHECK(ssol_device_create - (NULL, &allocator, SSOL_NTHREADS_DEFAULT, 0, &dev), RES_OK); + CHK(ssol_device_create + (NULL, &allocator, SSOL_NTHREADS_DEFAULT, 0, &dev) == RES_OK); - CHECK(ssp_rng_create(&allocator, &ssp_rng_threefry, &rng), RES_OK); - CHECK(ssol_spectrum_create(dev, &spectrum), RES_OK); - CHECK(ssol_spectrum_setup(spectrum, get_wlen, 3, NULL), RES_OK); - CHECK(ssol_sun_create_directional(dev, &sun), RES_OK); - CHECK(ssol_sun_set_direction(sun, d3(dir, 0, 0, -1)), RES_OK); - CHECK(ssol_sun_set_spectrum(sun, spectrum), RES_OK); - CHECK(ssol_sun_set_dni(sun, 1000), RES_OK); - CHECK(ssol_scene_create(dev, &scene), RES_OK); - CHECK(ssol_scene_attach_sun(scene, sun), RES_OK); + CHK(ssp_rng_create(&allocator, &ssp_rng_threefry, &rng) == RES_OK); + CHK(ssol_spectrum_create(dev, &spectrum) == RES_OK); + CHK(ssol_spectrum_setup(spectrum, get_wlen, 3, NULL) == RES_OK); + CHK(ssol_sun_create_directional(dev, &sun) == RES_OK); + CHK(ssol_sun_set_direction(sun, d3(dir, 0, 0, -1)) == RES_OK); + CHK(ssol_sun_set_spectrum(sun, spectrum) == RES_OK); + CHK(ssol_sun_set_dni(sun, 1000) == RES_OK); + CHK(ssol_scene_create(dev, &scene) == RES_OK); + CHK(ssol_scene_attach_sun(scene, sun) == RES_OK); /* Create scene content */ - CHECK(ssol_shape_create_mesh(dev, &square), RES_OK); + CHK(ssol_shape_create_mesh(dev, &square) == RES_OK); attribs[0].usage = SSOL_POSITION; attribs[0].get = get_position; - CHECK(ssol_mesh_setup(square, SQUARE_NTRIS__, get_ids, - SQUARE_NVERTS__, attribs, 1, (void*) &SQUARE_DESC__), RES_OK); + CHK(ssol_mesh_setup(square, SQUARE_NTRIS__, get_ids, + SQUARE_NVERTS__, attribs, 1, (void*) &SQUARE_DESC__) == RES_OK); - CHECK(ssol_shape_create_punched_surface(dev, &quad_square), RES_OK); + CHK(ssol_shape_create_punched_surface(dev, &quad_square) == RES_OK); carving.get = get_polygon_vertices; carving.operation = SSOL_AND; carving.nb_vertices = POLY_NVERTS__; @@ -114,82 +114,82 @@ main(int argc, char** argv) punched.nb_carvings = 1; punched.quadric = &quadric; punched.carvings = &carving; - CHECK(ssol_punched_surface_setup(quad_square, &punched), RES_OK); + CHK(ssol_punched_surface_setup(quad_square, &punched) == RES_OK); - CHECK(ssol_material_create_mirror(dev, &m_mtl), RES_OK); + CHK(ssol_material_create_mirror(dev, &m_mtl) == RES_OK); shader.normal = get_shader_normal; shader.reflectivity = get_shader_reflectivity; shader.roughness = get_shader_roughness; - CHECK(ssol_mirror_setup(m_mtl, &shader), RES_OK); - CHECK(ssol_material_create_virtual(dev, &v_mtl), RES_OK); - - CHECK(ssol_object_create(dev, &m_object), RES_OK); - CHECK(ssol_object_add_shaded_shape(m_object, quad_square, m_mtl, m_mtl), RES_OK); - CHECK(ssol_object_instantiate(m_object, &heliostat), RES_OK); - CHECK(ssol_scene_attach_instance(scene, heliostat), RES_OK); - - CHECK(ssol_object_create(dev, &t_object), RES_OK); - CHECK(ssol_object_add_shaded_shape(t_object, square, v_mtl, v_mtl), RES_OK); - CHECK(ssol_object_instantiate(t_object, &target1), RES_OK); - CHECK(ssol_instance_set_transform(target1, transform), RES_OK); - CHECK(ssol_instance_set_receiver(target1, SSOL_FRONT, 0), RES_OK); - CHECK(ssol_instance_sample(target1, 0), RES_OK); - CHECK(ssol_scene_attach_instance(scene, target1), RES_OK); - CHECK(ssol_object_instantiate(t_object, &target2), RES_OK); + CHK(ssol_mirror_setup(m_mtl, &shader, SSOL_MICROFACET_BECKMANN) == RES_OK); + CHK(ssol_material_create_virtual(dev, &v_mtl) == RES_OK); + + CHK(ssol_object_create(dev, &m_object) == RES_OK); + CHK(ssol_object_add_shaded_shape(m_object, quad_square, m_mtl, m_mtl) == RES_OK); + CHK(ssol_object_instantiate(m_object, &heliostat) == RES_OK); + CHK(ssol_scene_attach_instance(scene, heliostat) == RES_OK); + + CHK(ssol_object_create(dev, &t_object) == RES_OK); + CHK(ssol_object_add_shaded_shape(t_object, square, v_mtl, v_mtl) == RES_OK); + CHK(ssol_object_instantiate(t_object, &target1) == RES_OK); + CHK(ssol_instance_set_transform(target1, transform) == RES_OK); + CHK(ssol_instance_set_receiver(target1, SSOL_FRONT, 0) == RES_OK); + CHK(ssol_instance_sample(target1, 0) == RES_OK); + CHK(ssol_scene_attach_instance(scene, target1) == RES_OK); + CHK(ssol_object_instantiate(t_object, &target2) == RES_OK); transform[11] += 1.e-4; - CHECK(ssol_instance_set_transform(target2, transform), RES_OK); - CHECK(ssol_instance_set_receiver(target2, SSOL_FRONT, 0), RES_OK); - CHECK(ssol_instance_sample(target2, 0), RES_OK); - CHECK(ssol_scene_attach_instance(scene, target2), RES_OK); + CHK(ssol_instance_set_transform(target2, transform) == RES_OK); + CHK(ssol_instance_set_receiver(target2, SSOL_FRONT, 0) == RES_OK); + CHK(ssol_instance_sample(target2, 0) == RES_OK); + CHK(ssol_scene_attach_instance(scene, target2) == RES_OK); #define N__ 100000 #define GET_MC_RCV ssol_estimator_get_mc_receiver - CHECK(ssol_solve(scene, rng, N__, 0, NULL, &estimator), RES_OK); - CHECK(ssol_estimator_get_realisation_count(estimator, &count), RES_OK); - CHECK(count, N__); + CHK(ssol_solve(scene, rng, N__, 0, NULL, &estimator) == RES_OK); + CHK(ssol_estimator_get_realisation_count(estimator, &count) == RES_OK); + CHK(count == N__); #define COS cos(0) #define DNI_cos (1000 * COS) m1 = 400 * DNI_cos; std1 = 0; m2 = m1; std2 = std1; - CHECK(ssol_estimator_get_mc_global(estimator, &mc_global), RES_OK); + CHK(ssol_estimator_get_mc_global(estimator, &mc_global) == RES_OK); PRINT_GLOBAL(mc_global); - CHECK(eq_eps(mc_global.shadowed.E, 0, 1e-4), 1); - CHECK(eq_eps(mc_global.missing.E, 400 * DNI_cos, 1e-2), 1); /* virtual => 100 % missing */ - CHECK(GET_MC_RCV(estimator, target1, SSOL_FRONT, &mc_rcv), RES_OK); + CHK(eq_eps(mc_global.shadowed.E, 0, 1e-4) == 1); + CHK(eq_eps(mc_global.missing.E, 400 * DNI_cos, 1e-2) == 1); /* virtual => 100 % missing */ + CHK(GET_MC_RCV(estimator, target1, SSOL_FRONT, &mc_rcv) == RES_OK); printf("Ir(target1) = %g +/- %g\n", mc_rcv.incoming_flux.E, mc_rcv.incoming_flux.SE); - CHECK(eq_eps(mc_rcv.incoming_flux.E, m1, 1e-2), 1); - CHECK(eq_eps(mc_rcv.incoming_flux.SE, std1, 1e-2), 1); - CHECK(GET_MC_RCV(estimator, target2, SSOL_FRONT, &mc_rcv), RES_OK); + CHK(eq_eps(mc_rcv.incoming_flux.E, m1, 1e-2) == 1); + CHK(eq_eps(mc_rcv.incoming_flux.SE, std1, 1e-2) == 1); + CHK(GET_MC_RCV(estimator, target2, SSOL_FRONT, &mc_rcv) == RES_OK); printf("Ir(target2) = %g +/- %g\n", mc_rcv.incoming_flux.E, mc_rcv.incoming_flux.SE); - CHECK(eq_eps(mc_rcv.incoming_flux.E, m2, 1e-2), 1); - CHECK(eq_eps(mc_rcv.incoming_flux.SE, std2, 1e-2), 1); - CHECK(ssol_estimator_get_failed_count(estimator, &count), RES_OK); - CHECK(count, 0); + CHK(eq_eps(mc_rcv.incoming_flux.E, m2, 1e-2) == 1); + CHK(eq_eps(mc_rcv.incoming_flux.SE, std2, 1e-2) == 1); + CHK(ssol_estimator_get_failed_count(estimator, &count) == RES_OK); + CHK(count == 0); /* Free data */ - CHECK(ssol_instance_ref_put(heliostat), RES_OK); - CHECK(ssol_instance_ref_put(target1), RES_OK); - CHECK(ssol_instance_ref_put(target2), RES_OK); - CHECK(ssol_object_ref_put(m_object), RES_OK); - CHECK(ssol_object_ref_put(t_object), RES_OK); - CHECK(ssol_shape_ref_put(square), RES_OK); - CHECK(ssol_shape_ref_put(quad_square), RES_OK); - CHECK(ssol_material_ref_put(m_mtl), RES_OK); - CHECK(ssol_material_ref_put(v_mtl), RES_OK); - CHECK(ssol_estimator_ref_put(estimator), RES_OK); - CHECK(ssol_device_ref_put(dev), RES_OK); - CHECK(ssol_scene_ref_put(scene), RES_OK); - CHECK(ssp_rng_ref_put(rng), RES_OK); - CHECK(ssol_spectrum_ref_put(spectrum), RES_OK); - CHECK(ssol_sun_ref_put(sun), RES_OK); + CHK(ssol_instance_ref_put(heliostat) == RES_OK); + CHK(ssol_instance_ref_put(target1) == RES_OK); + CHK(ssol_instance_ref_put(target2) == RES_OK); + CHK(ssol_object_ref_put(m_object) == RES_OK); + CHK(ssol_object_ref_put(t_object) == RES_OK); + CHK(ssol_shape_ref_put(square) == RES_OK); + CHK(ssol_shape_ref_put(quad_square) == RES_OK); + CHK(ssol_material_ref_put(m_mtl) == RES_OK); + CHK(ssol_material_ref_put(v_mtl) == RES_OK); + CHK(ssol_estimator_ref_put(estimator) == RES_OK); + CHK(ssol_device_ref_put(dev) == RES_OK); + CHK(ssol_scene_ref_put(scene) == RES_OK); + CHK(ssp_rng_ref_put(rng) == RES_OK); + CHK(ssol_spectrum_ref_put(spectrum) == RES_OK); + CHK(ssol_sun_ref_put(sun) == RES_OK); check_memory_allocator(&allocator); mem_shutdown_proxy_allocator(&allocator); - CHECK(mem_allocated_size(), 0); + CHK(mem_allocated_size() == 0); return 0; } diff --git a/src/test_ssol_solver5.c b/src/test_ssol_solver5.c @@ -37,7 +37,7 @@ get_wlen(const size_t i, double* wlen, double* data, void* ctx) { double wavelengths[3] = { 1, 2, 3 }; double intensities[3] = { 1, 0.8, 1 }; - CHECK(i < 3, 1); + CHK(i < 3); (void)ctx; *wlen = wavelengths[i]; *data = intensities[i]; @@ -81,28 +81,28 @@ main(int argc, char** argv) mem_init_proxy_allocator(&allocator, &mem_default_allocator); - CHECK(ssol_device_create - (NULL, &allocator, SSOL_NTHREADS_DEFAULT, 0, &dev), RES_OK); + CHK(ssol_device_create + (NULL, &allocator, SSOL_NTHREADS_DEFAULT, 0, &dev) == RES_OK); - CHECK(ssp_rng_create(&allocator, &ssp_rng_threefry, &rng), RES_OK); - CHECK(ssol_spectrum_create(dev, &spectrum), RES_OK); - CHECK(ssol_spectrum_setup(spectrum, get_wlen, 3, NULL), RES_OK); - CHECK(ssol_sun_create_directional(dev, &sun), RES_OK); - CHECK(ssol_sun_set_direction(sun, d3(dir, 0, 0, -1)), RES_OK); - CHECK(ssol_sun_set_spectrum(sun, spectrum), RES_OK); - CHECK(ssol_sun_set_dni(sun, 1000), RES_OK); - CHECK(ssol_scene_create(dev, &scene), RES_OK); - CHECK(ssol_scene_attach_sun(scene, sun), RES_OK); + CHK(ssp_rng_create(&allocator, &ssp_rng_threefry, &rng) == RES_OK); + CHK(ssol_spectrum_create(dev, &spectrum) == RES_OK); + CHK(ssol_spectrum_setup(spectrum, get_wlen, 3, NULL) == RES_OK); + CHK(ssol_sun_create_directional(dev, &sun) == RES_OK); + CHK(ssol_sun_set_direction(sun, d3(dir, 0, 0, -1)) == RES_OK); + CHK(ssol_sun_set_spectrum(sun, spectrum) == RES_OK); + CHK(ssol_sun_set_dni(sun, 1000) == RES_OK); + CHK(ssol_scene_create(dev, &scene) == RES_OK); + CHK(ssol_scene_attach_sun(scene, sun) == RES_OK); /* Create scene content */ - CHECK(ssol_shape_create_mesh(dev, &rect), RES_OK); + CHK(ssol_shape_create_mesh(dev, &rect) == RES_OK); attribs[0].usage = SSOL_POSITION; attribs[0].get = get_position; - CHECK(ssol_mesh_setup(rect, RECT_NTRIS__, get_ids, - RECT_NVERTS__, attribs, 1, (void*) &RECT_DESC__), RES_OK); + CHK(ssol_mesh_setup(rect, RECT_NTRIS__, get_ids, + RECT_NVERTS__, attribs, 1, (void*) &RECT_DESC__) == RES_OK); - CHECK(ssol_shape_create_punched_surface(dev, &quad_square), RES_OK); + CHK(ssol_shape_create_punched_surface(dev, &quad_square) == RES_OK); carving.get = get_polygon_vertices; carving.operation = SSOL_AND; carving.nb_vertices = POLY_NVERTS__; @@ -112,70 +112,70 @@ main(int argc, char** argv) punched.nb_carvings = 1; punched.quadric = &quadric; punched.carvings = &carving; - CHECK(ssol_punched_surface_setup(quad_square, &punched), RES_OK); + CHK(ssol_punched_surface_setup(quad_square, &punched) == RES_OK); - CHECK(ssol_material_create_mirror(dev, &m_mtl), RES_OK); + CHK(ssol_material_create_mirror(dev, &m_mtl) == RES_OK); shader.normal = get_shader_normal; shader.reflectivity = get_shader_reflectivity; shader.roughness = get_shader_roughness; - CHECK(ssol_mirror_setup(m_mtl, &shader), RES_OK); - CHECK(ssol_material_create_virtual(dev, &v_mtl), RES_OK); - - CHECK(ssol_object_create(dev, &m_object), RES_OK); - CHECK(ssol_object_add_shaded_shape(m_object, quad_square, m_mtl, m_mtl), RES_OK); - CHECK(ssol_object_instantiate(m_object, &heliostat), RES_OK); - CHECK(ssol_scene_attach_instance(scene, heliostat), RES_OK); - - CHECK(ssol_object_create(dev, &t_object), RES_OK); - CHECK(ssol_object_add_shaded_shape(t_object, rect, v_mtl, v_mtl), RES_OK); - CHECK(ssol_object_instantiate(t_object, &target), RES_OK); - CHECK(ssol_instance_set_transform(target, transform), RES_OK); - CHECK(ssol_instance_set_receiver(target, SSOL_FRONT, 0), RES_OK); - CHECK(ssol_instance_sample(target, 0), RES_OK); - CHECK(ssol_scene_attach_instance(scene, target), RES_OK); + CHK(ssol_mirror_setup(m_mtl, &shader, SSOL_MICROFACET_BECKMANN) == RES_OK); + CHK(ssol_material_create_virtual(dev, &v_mtl) == RES_OK); + + CHK(ssol_object_create(dev, &m_object) == RES_OK); + CHK(ssol_object_add_shaded_shape(m_object, quad_square, m_mtl, m_mtl) == RES_OK); + CHK(ssol_object_instantiate(m_object, &heliostat) == RES_OK); + CHK(ssol_scene_attach_instance(scene, heliostat) == RES_OK); + + CHK(ssol_object_create(dev, &t_object) == RES_OK); + CHK(ssol_object_add_shaded_shape(t_object, rect, v_mtl, v_mtl) == RES_OK); + CHK(ssol_object_instantiate(t_object, &target) == RES_OK); + CHK(ssol_instance_set_transform(target, transform) == RES_OK); + CHK(ssol_instance_set_receiver(target, SSOL_FRONT, 0) == RES_OK); + CHK(ssol_instance_sample(target, 0) == RES_OK); + CHK(ssol_scene_attach_instance(scene, target) == RES_OK); #define N__ 10000 - CHECK(ssol_solve(scene, rng, N__, 0, NULL, &estimator), RES_OK); - CHECK(ssol_estimator_get_realisation_count(estimator, &count), RES_OK); - CHECK(count, N__); + CHK(ssol_solve(scene, rng, N__, 0, NULL, &estimator) == RES_OK); + CHK(ssol_estimator_get_realisation_count(estimator, &count) == RES_OK); + CHK(count == N__); #define COS cos(0) #define DNI_cos (1000 * COS) m = 400 * DNI_cos; std = 0; - CHECK(ssol_estimator_get_mc_global(estimator, &mc_global), RES_OK); + CHK(ssol_estimator_get_mc_global(estimator, &mc_global) == RES_OK); printf("Shadows = %g +/- %g\n", mc_global.shadowed.E, mc_global.shadowed.SE); printf("Missing = %g +/- %g\n", mc_global.missing.E, mc_global.missing.SE); printf("Cos = %g +/- %g\n", mc_global.cos_factor.E, mc_global.cos_factor.SE); - CHECK(eq_eps(mc_global.shadowed.E, 0, 1e-4), 1); - CHECK(eq_eps(mc_global.missing.E, 400 * DNI_cos, 1e-4), 1); /* nothing absorbed */ - CHECK(ssol_estimator_get_mc_receiver - (estimator, target, SSOL_FRONT, &mc_rcv), RES_OK); + CHK(eq_eps(mc_global.shadowed.E, 0, 1e-4) == 1); + CHK(eq_eps(mc_global.missing.E, 400 * DNI_cos, 1e-4) == 1); /* nothing absorbed */ + CHK(ssol_estimator_get_mc_receiver + (estimator, target, SSOL_FRONT, &mc_rcv) == RES_OK); printf("Ir(target) = %g +/- %g\n", mc_rcv.incoming_flux.E, mc_rcv.incoming_flux.SE); - CHECK(eq_eps(mc_rcv.incoming_flux.E, m, 1e-8), 1); - CHECK(eq_eps(mc_rcv.incoming_flux.SE, std, 1e-4), 1); - CHECK(ssol_estimator_get_failed_count(estimator, &count), RES_OK); - CHECK(count, 0); + CHK(eq_eps(mc_rcv.incoming_flux.E, m, 1e-8) == 1); + CHK(eq_eps(mc_rcv.incoming_flux.SE, std, 1e-4) == 1); + CHK(ssol_estimator_get_failed_count(estimator, &count) == RES_OK); + CHK(count == 0); /* Free data */ - CHECK(ssol_instance_ref_put(heliostat), RES_OK); - CHECK(ssol_instance_ref_put(target), RES_OK); - CHECK(ssol_object_ref_put(m_object), RES_OK); - CHECK(ssol_object_ref_put(t_object), RES_OK); - CHECK(ssol_shape_ref_put(rect), RES_OK); - CHECK(ssol_shape_ref_put(quad_square), RES_OK); - CHECK(ssol_estimator_ref_put(estimator), RES_OK); - CHECK(ssol_material_ref_put(m_mtl), RES_OK); - CHECK(ssol_material_ref_put(v_mtl), RES_OK); - CHECK(ssol_device_ref_put(dev), RES_OK); - CHECK(ssol_scene_ref_put(scene), RES_OK); - CHECK(ssp_rng_ref_put(rng), RES_OK); - CHECK(ssol_spectrum_ref_put(spectrum), RES_OK); - CHECK(ssol_sun_ref_put(sun), RES_OK); + CHK(ssol_instance_ref_put(heliostat) == RES_OK); + CHK(ssol_instance_ref_put(target) == RES_OK); + CHK(ssol_object_ref_put(m_object) == RES_OK); + CHK(ssol_object_ref_put(t_object) == RES_OK); + CHK(ssol_shape_ref_put(rect) == RES_OK); + CHK(ssol_shape_ref_put(quad_square) == RES_OK); + CHK(ssol_estimator_ref_put(estimator) == RES_OK); + CHK(ssol_material_ref_put(m_mtl) == RES_OK); + CHK(ssol_material_ref_put(v_mtl) == RES_OK); + CHK(ssol_device_ref_put(dev) == RES_OK); + CHK(ssol_scene_ref_put(scene) == RES_OK); + CHK(ssp_rng_ref_put(rng) == RES_OK); + CHK(ssol_spectrum_ref_put(spectrum) == RES_OK); + CHK(ssol_sun_ref_put(sun) == RES_OK); check_memory_allocator(&allocator); mem_shutdown_proxy_allocator(&allocator); - CHECK(mem_allocated_size(), 0); + CHK(mem_allocated_size() == 0); return 0; } diff --git a/src/test_ssol_solver6.c b/src/test_ssol_solver6.c @@ -39,7 +39,7 @@ get_wlen(const size_t i, double* wlen, double* data, void* ctx) { double wavelengths[3] = { 1, 2, 3 }; double intensities[3] = { 1, 0.8, 1 }; - CHECK(i < 3, 1); + CHK(i < 3); (void)ctx; *wlen = wavelengths[i]; *data = intensities[i]; @@ -83,28 +83,28 @@ main(int argc, char** argv) mem_init_proxy_allocator(&allocator, &mem_default_allocator); - CHECK(ssol_device_create - (NULL, &allocator, SSOL_NTHREADS_DEFAULT, 0, &dev), RES_OK); + CHK(ssol_device_create + (NULL, &allocator, SSOL_NTHREADS_DEFAULT, 0, &dev) == RES_OK); - CHECK(ssp_rng_create(&allocator, &ssp_rng_threefry, &rng), RES_OK); - CHECK(ssol_spectrum_create(dev, &spectrum), RES_OK); - CHECK(ssol_spectrum_setup(spectrum, get_wlen, 3, NULL), RES_OK); - CHECK(ssol_sun_create_directional(dev, &sun), RES_OK); - CHECK(ssol_sun_set_direction(sun, d3(dir, 0, 0, -1)), RES_OK); - CHECK(ssol_sun_set_spectrum(sun, spectrum), RES_OK); - CHECK(ssol_sun_set_dni(sun, 1000), RES_OK); - CHECK(ssol_scene_create(dev, &scene), RES_OK); - CHECK(ssol_scene_attach_sun(scene, sun), RES_OK); + CHK(ssp_rng_create(&allocator, &ssp_rng_threefry, &rng) == RES_OK); + CHK(ssol_spectrum_create(dev, &spectrum) == RES_OK); + CHK(ssol_spectrum_setup(spectrum, get_wlen, 3, NULL) == RES_OK); + CHK(ssol_sun_create_directional(dev, &sun) == RES_OK); + CHK(ssol_sun_set_direction(sun, d3(dir, 0, 0, -1)) == RES_OK); + CHK(ssol_sun_set_spectrum(sun, spectrum) == RES_OK); + CHK(ssol_sun_set_dni(sun, 1000) == RES_OK); + CHK(ssol_scene_create(dev, &scene) == RES_OK); + CHK(ssol_scene_attach_sun(scene, sun) == RES_OK); /* Create scene content */ - CHECK(ssol_shape_create_mesh(dev, &square), RES_OK); + CHK(ssol_shape_create_mesh(dev, &square) == RES_OK); attribs[0].usage = SSOL_POSITION; attribs[0].get = get_position; - CHECK(ssol_mesh_setup(square, SQUARE_NTRIS__, get_ids, - SQUARE_NVERTS__, attribs, 1, (void*) &SQUARE_DESC__), RES_OK); + CHK(ssol_mesh_setup(square, SQUARE_NTRIS__, get_ids, + SQUARE_NVERTS__, attribs, 1, (void*) &SQUARE_DESC__) == RES_OK); - CHECK(ssol_shape_create_punched_surface(dev, &quad_square), RES_OK); + CHK(ssol_shape_create_punched_surface(dev, &quad_square) == RES_OK); carving.get = get_polygon_vertices; carving.operation = SSOL_AND; carving.nb_vertices = POLY_NVERTS__; @@ -113,111 +113,111 @@ main(int argc, char** argv) punched.nb_carvings = 1; punched.quadric = &quadric; punched.carvings = &carving; - CHECK(ssol_punched_surface_setup(quad_square, &punched), RES_OK); + CHK(ssol_punched_surface_setup(quad_square, &punched) == RES_OK); - CHECK(ssol_material_create_mirror(dev, &m_mtl), RES_OK); + CHK(ssol_material_create_mirror(dev, &m_mtl) == RES_OK); m_shader.normal = get_shader_normal; m_shader.reflectivity = get_shader_reflectivity; m_shader.roughness = get_shader_roughness; - CHECK(ssol_mirror_setup(m_mtl, &m_shader), RES_OK); - CHECK(ssol_material_create_matte(dev, &bck_mtl), RES_OK); + CHK(ssol_mirror_setup(m_mtl, &m_shader, SSOL_MICROFACET_BECKMANN) == RES_OK); + CHK(ssol_material_create_matte(dev, &bck_mtl) == RES_OK); bck_shader.normal = get_shader_normal; bck_shader.reflectivity = get_shader_reflectivity_2; - CHECK(ssol_matte_setup(bck_mtl, &bck_shader), RES_OK); - CHECK(ssol_material_create_virtual(dev, &v_mtl), RES_OK); + CHK(ssol_matte_setup(bck_mtl, &bck_shader) == RES_OK); + CHK(ssol_material_create_virtual(dev, &v_mtl) == RES_OK); /* 1st reflector */ - CHECK(ssol_object_create(dev, &m_object1), RES_OK); - CHECK(ssol_object_add_shaded_shape(m_object1, quad_square, m_mtl, m_mtl), RES_OK); - CHECK(ssol_object_instantiate(m_object1, &heliostat1), RES_OK); - CHECK(ssol_scene_attach_instance(scene, heliostat1), RES_OK); + CHK(ssol_object_create(dev, &m_object1) == RES_OK); + CHK(ssol_object_add_shaded_shape(m_object1, quad_square, m_mtl, m_mtl) == RES_OK); + CHK(ssol_object_instantiate(m_object1, &heliostat1) == RES_OK); + CHK(ssol_scene_attach_instance(scene, heliostat1) == RES_OK); d33_rotation_pitch(transform, PI); /* flip faces: invert normal */ d3_splat(transform + 9, 0); transform[9] = -25; - CHECK(ssol_instance_set_transform(heliostat1, transform), RES_OK); + CHK(ssol_instance_set_transform(heliostat1, transform) == RES_OK); /* 2nd reflector */ - CHECK(ssol_object_create(dev, &m_object2), RES_OK); - CHECK(ssol_object_add_shaded_shape(m_object2, quad_square, m_mtl, m_mtl), RES_OK); - CHECK(ssol_object_instantiate(m_object2, &heliostat2), RES_OK); - CHECK(ssol_scene_attach_instance(scene, heliostat2), RES_OK); + CHK(ssol_object_create(dev, &m_object2) == RES_OK); + CHK(ssol_object_add_shaded_shape(m_object2, quad_square, m_mtl, m_mtl) == RES_OK); + CHK(ssol_object_instantiate(m_object2, &heliostat2) == RES_OK); + CHK(ssol_scene_attach_instance(scene, heliostat2) == RES_OK); d33_rotation_pitch(transform, PI); /* flip faces: invert normal */ d3_splat(transform + 9, 0); transform[9] = +25; - CHECK(ssol_instance_set_transform(heliostat2, transform), RES_OK); + CHK(ssol_instance_set_transform(heliostat2, transform) == RES_OK); /* 1st target */ - CHECK(ssol_object_create(dev, &t_object1), RES_OK); - CHECK(ssol_object_add_shaded_shape(t_object1, square, bck_mtl, v_mtl), RES_OK); - CHECK(ssol_object_instantiate(t_object1, &target1), RES_OK); - CHECK(ssol_instance_set_transform(target1, transform), RES_OK); - CHECK(ssol_instance_set_receiver(target1, SSOL_FRONT, 0), RES_OK); - CHECK(ssol_instance_sample(target1, 0), RES_OK); - CHECK(ssol_scene_attach_instance(scene, target1), RES_OK); + CHK(ssol_object_create(dev, &t_object1) == RES_OK); + CHK(ssol_object_add_shaded_shape(t_object1, square, bck_mtl, v_mtl) == RES_OK); + CHK(ssol_object_instantiate(t_object1, &target1) == RES_OK); + CHK(ssol_instance_set_transform(target1, transform) == RES_OK); + CHK(ssol_instance_set_receiver(target1, SSOL_FRONT, 0) == RES_OK); + CHK(ssol_instance_sample(target1, 0) == RES_OK); + CHK(ssol_scene_attach_instance(scene, target1) == RES_OK); d33_rotation_pitch(transform, PI); /* flip faces: invert normal */ d3_splat(transform + 9, 0); transform[9] = -25; transform[11] = 10; - CHECK(ssol_instance_set_transform(target1, transform), RES_OK); + CHK(ssol_instance_set_transform(target1, transform) == RES_OK); /* 2nd target */ - CHECK(ssol_object_create(dev, &t_object2), RES_OK); - CHECK(ssol_object_add_shaded_shape(t_object2, square, bck_mtl, v_mtl), RES_OK); - CHECK(ssol_object_instantiate(t_object2, &target2), RES_OK); - CHECK(ssol_instance_set_transform(target2, transform), RES_OK); - CHECK(ssol_instance_set_receiver(target2, SSOL_BACK, 0), RES_OK); - CHECK(ssol_instance_sample(target2, 0), RES_OK); - CHECK(ssol_scene_attach_instance(scene, target2), RES_OK); + CHK(ssol_object_create(dev, &t_object2) == RES_OK); + CHK(ssol_object_add_shaded_shape(t_object2, square, bck_mtl, v_mtl) == RES_OK); + CHK(ssol_object_instantiate(t_object2, &target2) == RES_OK); + CHK(ssol_instance_set_transform(target2, transform) == RES_OK); + CHK(ssol_instance_set_receiver(target2, SSOL_BACK, 0) == RES_OK); + CHK(ssol_instance_sample(target2, 0) == RES_OK); + CHK(ssol_scene_attach_instance(scene, target2) == RES_OK); d33_set_identity(transform); d3_splat(transform + 9, 0); transform[9] = +25; transform[11] = 10; - CHECK(ssol_instance_set_transform(target2, transform), RES_OK); + CHK(ssol_instance_set_transform(target2, transform) == RES_OK); #define N__ 10000 #define GET_MC_RCV ssol_estimator_get_mc_receiver - CHECK(ssol_solve(scene, rng, N__, 0, NULL, &estimator), RES_OK); - CHECK(ssol_estimator_get_mc_global(estimator, &mc_global), RES_OK); + CHK(ssol_solve(scene, rng, N__, 0, NULL, &estimator) == RES_OK); + CHK(ssol_estimator_get_mc_global(estimator, &mc_global) == RES_OK); PRINT_GLOBAL(mc_global); - CHECK(eq_eps(mc_global.shadowed.E, 100000, 2 * 100000/sqrt(N__)), 1); - CHECK(eq_eps(mc_global.missing.E, 0, 0), 1); + CHK(eq_eps(mc_global.shadowed.E, 100000, 2 * 100000/sqrt(N__)) == 1); + CHK(eq_eps(mc_global.missing.E, 0, 0) == 1); - CHECK(GET_MC_RCV(estimator, target1, SSOL_FRONT, &mc_rcv), RES_OK); + CHK(GET_MC_RCV(estimator, target1, SSOL_FRONT, &mc_rcv) == RES_OK); printf("Ir(target1) = %g +/- %g\n", mc_rcv.incoming_flux.E, mc_rcv.incoming_flux.SE); - CHECK(eq_eps(mc_rcv.incoming_flux.E, 100000, 2*100000/sqrt(N__)), 1); - CHECK(mc_rcv.incoming_flux.E, mc_rcv.absorbed_flux.E); + CHK(eq_eps(mc_rcv.incoming_flux.E, 100000, 2*100000/sqrt(N__)) == 1); + CHK(mc_rcv.incoming_flux.E == mc_rcv.absorbed_flux.E); - CHECK(GET_MC_RCV(estimator, target2, SSOL_BACK, &mc_rcv), RES_OK); + CHK(GET_MC_RCV(estimator, target2, SSOL_BACK, &mc_rcv) == RES_OK); printf("Ir(target2) = %g +/- %g\n", mc_rcv.incoming_flux.E, mc_rcv.incoming_flux.SE); - CHECK(eq_eps(mc_rcv.incoming_flux.E, 0, 1), 1); - CHECK(mc_rcv.incoming_flux.E, mc_rcv.absorbed_flux.E); + CHK(eq_eps(mc_rcv.incoming_flux.E, 0, 1) == 1); + CHK(mc_rcv.incoming_flux.E == mc_rcv.absorbed_flux.E); /* Free data */ - CHECK(ssol_instance_ref_put(heliostat1), RES_OK); - CHECK(ssol_instance_ref_put(target1), RES_OK); - CHECK(ssol_object_ref_put(m_object1), RES_OK); - CHECK(ssol_object_ref_put(t_object1), RES_OK); - CHECK(ssol_instance_ref_put(heliostat2), RES_OK); - CHECK(ssol_instance_ref_put(target2), RES_OK); - CHECK(ssol_object_ref_put(m_object2), RES_OK); - CHECK(ssol_object_ref_put(t_object2), RES_OK); - CHECK(ssol_shape_ref_put(square), RES_OK); - CHECK(ssol_shape_ref_put(quad_square), RES_OK); - CHECK(ssol_material_ref_put(m_mtl), RES_OK); - CHECK(ssol_material_ref_put(bck_mtl), RES_OK); - CHECK(ssol_material_ref_put(v_mtl), RES_OK); - CHECK(ssol_device_ref_put(dev), RES_OK); - CHECK(ssol_estimator_ref_put(estimator), RES_OK); - CHECK(ssol_scene_ref_put(scene), RES_OK); - CHECK(ssp_rng_ref_put(rng), RES_OK); - CHECK(ssol_spectrum_ref_put(spectrum), RES_OK); - CHECK(ssol_sun_ref_put(sun), RES_OK); + CHK(ssol_instance_ref_put(heliostat1) == RES_OK); + CHK(ssol_instance_ref_put(target1) == RES_OK); + CHK(ssol_object_ref_put(m_object1) == RES_OK); + CHK(ssol_object_ref_put(t_object1) == RES_OK); + CHK(ssol_instance_ref_put(heliostat2) == RES_OK); + CHK(ssol_instance_ref_put(target2) == RES_OK); + CHK(ssol_object_ref_put(m_object2) == RES_OK); + CHK(ssol_object_ref_put(t_object2) == RES_OK); + CHK(ssol_shape_ref_put(square) == RES_OK); + CHK(ssol_shape_ref_put(quad_square) == RES_OK); + CHK(ssol_material_ref_put(m_mtl) == RES_OK); + CHK(ssol_material_ref_put(bck_mtl) == RES_OK); + CHK(ssol_material_ref_put(v_mtl) == RES_OK); + CHK(ssol_device_ref_put(dev) == RES_OK); + CHK(ssol_estimator_ref_put(estimator) == RES_OK); + CHK(ssol_scene_ref_put(scene) == RES_OK); + CHK(ssp_rng_ref_put(rng) == RES_OK); + CHK(ssol_spectrum_ref_put(spectrum) == RES_OK); + CHK(ssol_sun_ref_put(sun) == RES_OK); check_memory_allocator(&allocator); mem_shutdown_proxy_allocator(&allocator); - CHECK(mem_allocated_size(), 0); + CHK(mem_allocated_size() == 0); return 0; } diff --git a/src/test_ssol_solver7.c b/src/test_ssol_solver7.c @@ -53,7 +53,7 @@ get_wlen(const size_t i, double* wlen, double* data, void* ctx) { double wavelengths[3] = { 1, 2, 3 }; double intensities[3] = { 1, 0.8, 1 }; - CHECK(i < 3, 1); + CHK(i < 3); (void)ctx; *wlen = wavelengths[i]; *data = intensities[i]; @@ -100,139 +100,138 @@ main(int argc, char** argv) mem_init_proxy_allocator(&allocator, &mem_default_allocator); - CHECK(ssol_device_create - (NULL, &allocator, 1, 0, &dev), RES_OK); + CHK(ssol_device_create(NULL, &allocator, 1, 0, &dev) == RES_OK); - CHECK(ssp_rng_create(&allocator, &ssp_rng_threefry, &rng), RES_OK); - CHECK(ssol_spectrum_create(dev, &spectrum), RES_OK); - CHECK(ssol_spectrum_setup(spectrum, get_wlen, 3, NULL), RES_OK); - CHECK(ssol_sun_create_directional(dev, &sun), RES_OK); - CHECK(ssol_sun_set_direction(sun, d3(dir, 1, 0, -1)), RES_OK); - CHECK(ssol_sun_set_spectrum(sun, spectrum), RES_OK); - CHECK(ssol_sun_set_dni(sun, 1000), RES_OK); - CHECK(ssol_scene_create(dev, &scene), RES_OK); - CHECK(ssol_scene_attach_sun(scene, sun), RES_OK); + CHK(ssp_rng_create(&allocator, &ssp_rng_threefry, &rng) == RES_OK); + CHK(ssol_spectrum_create(dev, &spectrum) == RES_OK); + CHK(ssol_spectrum_setup(spectrum, get_wlen, 3, NULL) == RES_OK); + CHK(ssol_sun_create_directional(dev, &sun) == RES_OK); + CHK(ssol_sun_set_direction(sun, d3(dir, 1, 0, -1)) == RES_OK); + CHK(ssol_sun_set_spectrum(sun, spectrum) == RES_OK); + CHK(ssol_sun_set_dni(sun, 1000) == RES_OK); + CHK(ssol_scene_create(dev, &scene) == RES_OK); + CHK(ssol_scene_attach_sun(scene, sun) == RES_OK); /* create scene content */ - CHECK(ssol_shape_create_mesh(dev, &square), RES_OK); + CHK(ssol_shape_create_mesh(dev, &square) == RES_OK); attribs[0].usage = SSOL_POSITION; attribs[0].get = get_position; - CHECK(ssol_mesh_setup(square, TARGET_NTRIS__, get_ids, - TARGET_NVERTS__, attribs, 1, (void*) &TARGET_DESC__), RES_OK); + CHK(ssol_mesh_setup(square, TARGET_NTRIS__, get_ids, + TARGET_NVERTS__, attribs, 1, (void*) &TARGET_DESC__) == RES_OK); - CHECK(ssol_material_create_mirror(dev, &m_mtl), RES_OK); + CHK(ssol_material_create_mirror(dev, &m_mtl) == RES_OK); m_shader.normal = get_shader_normal; m_shader.reflectivity = get_shader_reflectivity; m_shader.roughness = get_shader_roughness; - CHECK(ssol_mirror_setup(m_mtl, &m_shader), RES_OK); - CHECK(ssol_material_create_matte(dev, &bck_mtl), RES_OK); + CHK(ssol_mirror_setup(m_mtl, &m_shader, SSOL_MICROFACET_BECKMANN) == RES_OK); + CHK(ssol_material_create_matte(dev, &bck_mtl) == RES_OK); bck_shader.normal = get_shader_normal; bck_shader.reflectivity = get_shader_reflectivity_2; - CHECK(ssol_matte_setup(bck_mtl, &bck_shader), RES_OK); - CHECK(ssol_material_create_virtual(dev, &v_mtl), RES_OK); + CHK(ssol_matte_setup(bck_mtl, &bck_shader) == RES_OK); + CHK(ssol_material_create_virtual(dev, &v_mtl) == RES_OK); carving1.get = get_polygon_vertices; carving1.operation = SSOL_AND; carving1.nb_vertices = HELIOSTAT_NVERTS__; carving1.context = &HELIOSTAT_EDGES__; - CHECK(ssol_shape_create_punched_surface(dev, &quad_square1), RES_OK); + CHK(ssol_shape_create_punched_surface(dev, &quad_square1) == RES_OK); quadric1.type = SSOL_QUADRIC_PARABOL; quadric1.data.parabol.focal = 10 * sqrt(2) * H; punched1.nb_carvings = 1; punched1.quadric = &quadric1; punched1.carvings = &carving1; - CHECK(ssol_punched_surface_setup(quad_square1, &punched1), RES_OK); - CHECK(ssol_object_create(dev, &m_object1), RES_OK); - CHECK(ssol_object_add_shaded_shape(m_object1, quad_square1, m_mtl, m_mtl), RES_OK); - CHECK(ssol_object_instantiate(m_object1, &heliostat), RES_OK); - CHECK(ssol_scene_attach_instance(scene, heliostat), RES_OK); + CHK(ssol_punched_surface_setup(quad_square1, &punched1) == RES_OK); + CHK(ssol_object_create(dev, &m_object1) == RES_OK); + CHK(ssol_object_add_shaded_shape(m_object1, quad_square1, m_mtl, m_mtl) == RES_OK); + CHK(ssol_object_instantiate(m_object1, &heliostat) == RES_OK); + CHK(ssol_scene_attach_instance(scene, heliostat) == RES_OK); d33_rotation_yaw(transform, -0.25 * PI); d3_splat(transform + 9, 0); transform[9] = 10 * H; /* target the img focal point of the hyperbol */ - CHECK(ssol_instance_set_transform(heliostat, transform), RES_OK); + CHK(ssol_instance_set_transform(heliostat, transform) == RES_OK); carving2.get = get_polygon_vertices; carving2.operation = SSOL_AND; carving2.nb_vertices = HYPERBOL_NVERTS__; carving2.context = &HYPERBOL_EDGES__; - CHECK(ssol_shape_create_punched_surface(dev, &quad_square2), RES_OK); + CHK(ssol_shape_create_punched_surface(dev, &quad_square2) == RES_OK); quadric2.type = SSOL_QUADRIC_HYPERBOL; quadric2.data.hyperbol.real_focal = 9 * H; quadric2.data.hyperbol.img_focal = 1 * H; punched2.nb_carvings = 1; punched2.quadric = &quadric2; punched2.carvings = &carving2; - CHECK(ssol_punched_surface_setup(quad_square2, &punched2), RES_OK); - CHECK(ssol_object_create(dev, &m_object2), RES_OK); - CHECK(ssol_object_add_shaded_shape(m_object2, quad_square2, m_mtl, v_mtl), RES_OK); - CHECK(ssol_object_instantiate(m_object2, &secondary), RES_OK); - CHECK(ssol_scene_attach_instance(scene, secondary), RES_OK); + CHK(ssol_punched_surface_setup(quad_square2, &punched2) == RES_OK); + CHK(ssol_object_create(dev, &m_object2) == RES_OK); + CHK(ssol_object_add_shaded_shape(m_object2, quad_square2, m_mtl, v_mtl) == RES_OK); + CHK(ssol_object_instantiate(m_object2, &secondary) == RES_OK); + CHK(ssol_scene_attach_instance(scene, secondary) == RES_OK); d33_set_identity(transform); d3_splat(transform + 9, 0); transform[11] = 9 * H; - CHECK(ssol_instance_set_transform(secondary, transform), RES_OK); - CHECK(ssol_instance_sample(secondary, 0), RES_OK); - - CHECK(ssol_object_create(dev, &t_object), RES_OK); - CHECK(ssol_object_add_shaded_shape(t_object, square, bck_mtl, v_mtl), RES_OK); - CHECK(ssol_object_instantiate(t_object, &target), RES_OK); - CHECK(ssol_instance_set_receiver(target, SSOL_FRONT, 0), RES_OK); - CHECK(ssol_instance_sample(target, 0), RES_OK); - CHECK(ssol_scene_attach_instance(scene, target), RES_OK); + CHK(ssol_instance_set_transform(secondary, transform) == RES_OK); + CHK(ssol_instance_sample(secondary, 0) == RES_OK); + + CHK(ssol_object_create(dev, &t_object) == RES_OK); + CHK(ssol_object_add_shaded_shape(t_object, square, bck_mtl, v_mtl) == RES_OK); + CHK(ssol_object_instantiate(t_object, &target) == RES_OK); + CHK(ssol_instance_set_receiver(target, SSOL_FRONT, 0) == RES_OK); + CHK(ssol_instance_sample(target, 0) == RES_OK); + CHK(ssol_scene_attach_instance(scene, target) == RES_OK); d33_set_identity(transform); d3_splat(transform + 9, 0); - CHECK(ssol_instance_set_transform(target, transform), RES_OK); + CHK(ssol_instance_set_transform(target, transform) == RES_OK); #define N__ 10000 #define DNI_cos (1000 * cos(0)) #define TOTAL (HELIOSTAT_SZ * HELIOSTAT_SZ * DNI_cos) #define GET_MC_RCV ssol_estimator_get_mc_receiver - CHECK(ssol_solve(scene, rng, N__, 0, NULL, &estimator), RES_OK); + CHK(ssol_solve(scene, rng, N__, 0, NULL, &estimator) == RES_OK); - CHECK(ssol_estimator_get_mc_global(estimator, &mc_global), RES_OK); - CHECK(ssol_estimator_get_sampled_area(estimator, &area), RES_OK); + CHK(ssol_estimator_get_mc_global(estimator, &mc_global) == RES_OK); + CHK(ssol_estimator_get_sampled_area(estimator, &area) == RES_OK); printf("Total = %g\n", area * DNI_cos); - CHECK(eq_eps(area * DNI_cos, TOTAL, TOTAL * 1e-4), 1); + CHK(eq_eps(area * DNI_cos, TOTAL, TOTAL * 1e-4) == 1); PRINT_GLOBAL(mc_global); - CHECK(GET_MC_RCV(estimator, target, SSOL_FRONT, &mc_rcv), RES_OK); + CHK(GET_MC_RCV(estimator, target, SSOL_FRONT, &mc_rcv) == RES_OK); printf("Abs(target1) = %g +/- %g\n", mc_rcv.absorbed_flux.E, mc_rcv.absorbed_flux.SE); printf("Ir(target1) = %g +/- %g\n", mc_rcv.incoming_flux.E, mc_rcv.incoming_flux.SE); - CHECK(eq_eps(mc_rcv.incoming_flux.E, TOTAL, TOTAL * 1e-4), 1); - CHECK(eq_eps(mc_rcv.absorbed_flux.E, - (1 - REFLECTIVITY) * TOTAL, (1 - REFLECTIVITY) *TOTAL * 1e-4), 1); - CHECK(eq_eps(mc_rcv.incoming_flux.SE, 0, 1e-2), 1); + CHK(eq_eps(mc_rcv.incoming_flux.E, TOTAL, TOTAL * 1e-4)); + CHK(eq_eps(mc_rcv.absorbed_flux.E, + (1 - REFLECTIVITY) * TOTAL, (1 - REFLECTIVITY) *TOTAL * 1e-4)); + CHK(eq_eps(mc_rcv.incoming_flux.SE, 0, 1e-2) == 1); /* Free data */ - CHECK(ssol_instance_ref_put(heliostat), RES_OK); - CHECK(ssol_instance_ref_put(secondary), RES_OK); - CHECK(ssol_instance_ref_put(target), RES_OK); - CHECK(ssol_object_ref_put(m_object1), RES_OK); - CHECK(ssol_object_ref_put(m_object2), RES_OK); - CHECK(ssol_object_ref_put(t_object), RES_OK); - CHECK(ssol_shape_ref_put(square), RES_OK); - CHECK(ssol_shape_ref_put(quad_square1), RES_OK); - CHECK(ssol_shape_ref_put(quad_square2), RES_OK); - CHECK(ssol_material_ref_put(m_mtl), RES_OK); - CHECK(ssol_material_ref_put(bck_mtl), RES_OK); - CHECK(ssol_material_ref_put(v_mtl), RES_OK); - CHECK(ssol_estimator_ref_put(estimator), RES_OK); - CHECK(ssol_device_ref_put(dev), RES_OK); - CHECK(ssol_scene_ref_put(scene), RES_OK); - CHECK(ssp_rng_ref_put(rng), RES_OK); - CHECK(ssol_spectrum_ref_put(spectrum), RES_OK); - CHECK(ssol_sun_ref_put(sun), RES_OK); + CHK(ssol_instance_ref_put(heliostat) == RES_OK); + CHK(ssol_instance_ref_put(secondary) == RES_OK); + CHK(ssol_instance_ref_put(target) == RES_OK); + CHK(ssol_object_ref_put(m_object1) == RES_OK); + CHK(ssol_object_ref_put(m_object2) == RES_OK); + CHK(ssol_object_ref_put(t_object) == RES_OK); + CHK(ssol_shape_ref_put(square) == RES_OK); + CHK(ssol_shape_ref_put(quad_square1) == RES_OK); + CHK(ssol_shape_ref_put(quad_square2) == RES_OK); + CHK(ssol_material_ref_put(m_mtl) == RES_OK); + CHK(ssol_material_ref_put(bck_mtl) == RES_OK); + CHK(ssol_material_ref_put(v_mtl) == RES_OK); + CHK(ssol_estimator_ref_put(estimator) == RES_OK); + CHK(ssol_device_ref_put(dev) == RES_OK); + CHK(ssol_scene_ref_put(scene) == RES_OK); + CHK(ssp_rng_ref_put(rng) == RES_OK); + CHK(ssol_spectrum_ref_put(spectrum) == RES_OK); + CHK(ssol_sun_ref_put(sun) == RES_OK); check_memory_allocator(&allocator); mem_shutdown_proxy_allocator(&allocator); - CHECK(mem_allocated_size(), 0); + CHK(mem_allocated_size() == 0); return 0; } diff --git a/src/test_ssol_solver8.c b/src/test_ssol_solver8.c @@ -41,7 +41,7 @@ get_wlen(const size_t i, double* wlen, double* data, void* ctx) { double wavelengths[3] = { 1, 2, 3 }; double intensities[3] = { 1, 0.8, 1 }; - CHECK(i < 3, 1); + CHK(i < 3); (void) ctx; *wlen = wavelengths[i]; *data = intensities[i]; @@ -83,29 +83,29 @@ main(int argc, char** argv) mem_init_proxy_allocator(&allocator, &mem_default_allocator); - CHECK(ssol_device_create - (NULL, &allocator, SSOL_NTHREADS_DEFAULT, 0, &dev), RES_OK); + CHK(ssol_device_create + (NULL, &allocator, SSOL_NTHREADS_DEFAULT, 0, &dev) == RES_OK); #define DNI 1000 - CHECK(ssp_rng_create(&allocator, &ssp_rng_threefry, &rng), RES_OK); - CHECK(ssol_spectrum_create(dev, &spectrum), RES_OK); - CHECK(ssol_spectrum_setup(spectrum, get_wlen, 3, NULL), RES_OK); - CHECK(ssol_sun_create_directional(dev, &sun), RES_OK); - CHECK(ssol_sun_set_direction(sun, d3(dir, 0, 1, -1)), RES_OK); - CHECK(ssol_sun_set_spectrum(sun, spectrum), RES_OK); - CHECK(ssol_sun_set_dni(sun, DNI), RES_OK); - CHECK(ssol_scene_create(dev, &scene), RES_OK); - CHECK(ssol_scene_attach_sun(scene, sun), RES_OK); + CHK(ssp_rng_create(&allocator, &ssp_rng_threefry, &rng) == RES_OK); + CHK(ssol_spectrum_create(dev, &spectrum) == RES_OK); + CHK(ssol_spectrum_setup(spectrum, get_wlen, 3, NULL) == RES_OK); + CHK(ssol_sun_create_directional(dev, &sun) == RES_OK); + CHK(ssol_sun_set_direction(sun, d3(dir, 0, 1, -1)) == RES_OK); + CHK(ssol_sun_set_spectrum(sun, spectrum) == RES_OK); + CHK(ssol_sun_set_dni(sun, DNI) == RES_OK); + CHK(ssol_scene_create(dev, &scene) == RES_OK); + CHK(ssol_scene_attach_sun(scene, sun) == RES_OK); /* Create scene content */ - CHECK(ssol_shape_create_mesh(dev, &square), RES_OK); + CHK(ssol_shape_create_mesh(dev, &square) == RES_OK); attribs[0].usage = SSOL_POSITION; attribs[0].get = get_position; - CHECK(ssol_mesh_setup(square, TARGET_NTRIS__, get_ids, - TARGET_NVERTS__, attribs, 1, (void*) &TARGET_DESC__), RES_OK); + CHK(ssol_mesh_setup(square, TARGET_NTRIS__, get_ids, + TARGET_NVERTS__, attribs, 1, (void*) &TARGET_DESC__) == RES_OK); - CHECK(ssol_shape_create_punched_surface(dev, &quad_square), RES_OK); + CHK(ssol_shape_create_punched_surface(dev, &quad_square) == RES_OK); carving.get = get_polygon_vertices; carving.operation = SSOL_AND; carving.nb_vertices = POLY_NVERTS__; @@ -115,68 +115,68 @@ main(int argc, char** argv) punched.nb_carvings = 1; punched.quadric = &quadric; punched.carvings = &carving; - CHECK(ssol_punched_surface_setup(quad_square, &punched), RES_OK); + CHK(ssol_punched_surface_setup(quad_square, &punched) == RES_OK); - CHECK(ssol_material_create_mirror(dev, &m_mtl), RES_OK); + CHK(ssol_material_create_mirror(dev, &m_mtl) == RES_OK); shader.normal = get_shader_normal; shader.reflectivity = get_shader_reflectivity; shader.roughness = get_shader_roughness; - CHECK(ssol_mirror_setup(m_mtl, &shader), RES_OK); - CHECK(ssol_material_create_virtual(dev, &v_mtl), RES_OK); - - CHECK(ssol_object_create(dev, &m_object), RES_OK); - CHECK(ssol_object_add_shaded_shape(m_object, quad_square, m_mtl, m_mtl), RES_OK); - CHECK(ssol_object_instantiate(m_object, &heliostat), RES_OK); - CHECK(ssol_scene_attach_instance(scene, heliostat), RES_OK); - - CHECK(ssol_object_create(dev, &t_object), RES_OK); - CHECK(ssol_object_add_shaded_shape(t_object, square, v_mtl, v_mtl), RES_OK); - CHECK(ssol_object_instantiate(t_object, &target), RES_OK); - CHECK(ssol_instance_set_transform(target, transform), RES_OK); - CHECK(ssol_instance_set_receiver(target, SSOL_FRONT, 0), RES_OK); - CHECK(ssol_instance_sample(target, 0), RES_OK); - CHECK(ssol_scene_attach_instance(scene, target), RES_OK); + CHK(ssol_mirror_setup(m_mtl, &shader, SSOL_MICROFACET_BECKMANN) == RES_OK); + CHK(ssol_material_create_virtual(dev, &v_mtl) == RES_OK); + + CHK(ssol_object_create(dev, &m_object) == RES_OK); + CHK(ssol_object_add_shaded_shape(m_object, quad_square, m_mtl, m_mtl) == RES_OK); + CHK(ssol_object_instantiate(m_object, &heliostat) == RES_OK); + CHK(ssol_scene_attach_instance(scene, heliostat) == RES_OK); + + CHK(ssol_object_create(dev, &t_object) == RES_OK); + CHK(ssol_object_add_shaded_shape(t_object, square, v_mtl, v_mtl) == RES_OK); + CHK(ssol_object_instantiate(t_object, &target) == RES_OK); + CHK(ssol_instance_set_transform(target, transform) == RES_OK); + CHK(ssol_instance_set_receiver(target, SSOL_FRONT, 0) == RES_OK); + CHK(ssol_instance_sample(target, 0) == RES_OK); + CHK(ssol_scene_attach_instance(scene, target) == RES_OK); #define N__ 100000 #define GET_MC_RCV ssol_estimator_get_mc_receiver - CHECK(ssol_solve(scene, rng, N__, 0, NULL, &estimator), RES_OK); - CHECK(ssol_estimator_get_realisation_count(estimator, &count), RES_OK); - CHECK(count, N__); - CHECK(ssol_estimator_get_failed_count(estimator, &count), RES_OK); - CHECK(count, 0); + CHK(ssol_solve(scene, rng, N__, 0, NULL, &estimator) == RES_OK); + CHK(ssol_estimator_get_realisation_count(estimator, &count) == RES_OK); + CHK(count == N__); + CHK(ssol_estimator_get_failed_count(estimator, &count) == RES_OK); + CHK(count == 0); #define S (sqrt(2) * X_SZ * Y_SZ) - CHECK(ssol_estimator_get_mc_global(estimator, &mc_global), RES_OK); + CHK(ssol_estimator_get_mc_global(estimator, &mc_global) == RES_OK); printf("Cos = %g +/- %g\n", mc_global.cos_factor.E, mc_global.cos_factor.SE); printf("Shadows = %g +/- %g\n", mc_global.shadowed.E, mc_global.shadowed.SE); printf("Missing = %g +/- %g\n", mc_global.missing.E, mc_global.missing.SE); - CHECK(eq_eps(mc_global.shadowed.E, 0, 1e-4), 1); - CHECK(eq_eps(mc_global.missing.E, S * DNI, - 3 * mc_global.missing.SE), 1); /* nothing absorbed */ - CHECK(GET_MC_RCV(estimator, target, SSOL_FRONT, &mc_rcv), RES_OK); + CHK(eq_eps(mc_global.shadowed.E, 0, 1e-4) == 1); + CHK(eq_eps(mc_global.missing.E, S * DNI, + 3 * mc_global.missing.SE)); /* nothing absorbed */ + CHK(GET_MC_RCV(estimator, target, SSOL_FRONT, &mc_rcv) == RES_OK); printf("Ir(target1) = %g +/- %g\n", mc_rcv.incoming_flux.E, mc_rcv.incoming_flux.SE); - CHECK(eq_eps(mc_rcv.incoming_flux.E, S * DNI, - 2 * mc_rcv.incoming_flux.SE), 1); + CHK(eq_eps(mc_rcv.incoming_flux.E, S * DNI, + 2 * mc_rcv.incoming_flux.SE)); /* Free data */ - CHECK(ssol_instance_ref_put(heliostat), RES_OK); - CHECK(ssol_instance_ref_put(target), RES_OK); - CHECK(ssol_object_ref_put(m_object), RES_OK); - CHECK(ssol_object_ref_put(t_object), RES_OK); - CHECK(ssol_shape_ref_put(square), RES_OK); - CHECK(ssol_shape_ref_put(quad_square), RES_OK); - CHECK(ssol_material_ref_put(m_mtl), RES_OK); - CHECK(ssol_material_ref_put(v_mtl), RES_OK); - CHECK(ssol_estimator_ref_put(estimator), RES_OK); - CHECK(ssol_device_ref_put(dev), RES_OK); - CHECK(ssol_scene_ref_put(scene), RES_OK); - CHECK(ssp_rng_ref_put(rng), RES_OK); - CHECK(ssol_spectrum_ref_put(spectrum), RES_OK); - CHECK(ssol_sun_ref_put(sun), RES_OK); + CHK(ssol_instance_ref_put(heliostat) == RES_OK); + CHK(ssol_instance_ref_put(target) == RES_OK); + CHK(ssol_object_ref_put(m_object) == RES_OK); + CHK(ssol_object_ref_put(t_object) == RES_OK); + CHK(ssol_shape_ref_put(square) == RES_OK); + CHK(ssol_shape_ref_put(quad_square) == RES_OK); + CHK(ssol_material_ref_put(m_mtl) == RES_OK); + CHK(ssol_material_ref_put(v_mtl) == RES_OK); + CHK(ssol_estimator_ref_put(estimator) == RES_OK); + CHK(ssol_device_ref_put(dev) == RES_OK); + CHK(ssol_scene_ref_put(scene) == RES_OK); + CHK(ssp_rng_ref_put(rng) == RES_OK); + CHK(ssol_spectrum_ref_put(spectrum) == RES_OK); + CHK(ssol_sun_ref_put(sun) == RES_OK); check_memory_allocator(&allocator); mem_shutdown_proxy_allocator(&allocator); - CHECK(mem_allocated_size(), 0); + CHK(mem_allocated_size() == 0); return 0; } diff --git a/src/test_ssol_solver9.c b/src/test_ssol_solver9.c @@ -46,7 +46,7 @@ get_wlen(const size_t i, double* wlen, double* data, void* ctx) { double wavelengths[3] = { 1, 2, 3 }; double intensities[3] = { 1, 0.8, 1 }; - CHECK(i < 3, 1); + CHK(i < 3); (void) ctx; *wlen = wavelengths[i]; *data = intensities[i]; @@ -85,92 +85,92 @@ main(int argc, char** argv) mem_init_proxy_allocator(&allocator, &mem_default_allocator); - CHECK(ssol_device_create - (NULL, &allocator, SSOL_NTHREADS_DEFAULT, 0, &dev), RES_OK); + CHK(ssol_device_create + (NULL, &allocator, SSOL_NTHREADS_DEFAULT, 0, &dev) == RES_OK); #define DNI 1000 - CHECK(ssp_rng_create(&allocator, &ssp_rng_threefry, &rng), RES_OK); - CHECK(ssol_spectrum_create(dev, &spectrum), RES_OK); - CHECK(ssol_spectrum_setup(spectrum, get_wlen, 3, NULL), RES_OK); - CHECK(ssol_sun_create_directional(dev, &sun), RES_OK); - CHECK(ssol_sun_set_direction(sun, d3(dir, 0, 0, -1)), RES_OK); - CHECK(ssol_sun_set_spectrum(sun, spectrum), RES_OK); - CHECK(ssol_sun_set_dni(sun, DNI), RES_OK); - CHECK(ssol_scene_create(dev, &scene), RES_OK); - CHECK(ssol_scene_attach_sun(scene, sun), RES_OK); + CHK(ssp_rng_create(&allocator, &ssp_rng_threefry, &rng) == RES_OK); + CHK(ssol_spectrum_create(dev, &spectrum) == RES_OK); + CHK(ssol_spectrum_setup(spectrum, get_wlen, 3, NULL) == RES_OK); + CHK(ssol_sun_create_directional(dev, &sun) == RES_OK); + CHK(ssol_sun_set_direction(sun, d3(dir, 0, 0, -1)) == RES_OK); + CHK(ssol_sun_set_spectrum(sun, spectrum) == RES_OK); + CHK(ssol_sun_set_dni(sun, DNI) == RES_OK); + CHK(ssol_scene_create(dev, &scene) == RES_OK); + CHK(ssol_scene_attach_sun(scene, sun) == RES_OK); /* Create scene content */ - CHECK(ssol_shape_create_mesh(dev, &square), RES_OK); + CHK(ssol_shape_create_mesh(dev, &square) == RES_OK); attribs[0].usage = SSOL_POSITION; attribs[0].get = get_position; - CHECK(ssol_mesh_setup(square, TARGET_NTRIS__, get_ids, - TARGET_NVERTS__, attribs, 1, (void*) &TARGET_DESC__), RES_OK); + CHK(ssol_mesh_setup(square, TARGET_NTRIS__, get_ids, + TARGET_NVERTS__, attribs, 1, (void*) &TARGET_DESC__) == RES_OK); - CHECK(ssol_shape_create_mesh(dev, &cube), RES_OK); - CHECK(ssol_mesh_setup(cube, CUBE_NTRIS__, get_ids, - CUBE_NVERTS__, attribs, 1, (void*) &CUBE_DESC__), RES_OK); + CHK(ssol_shape_create_mesh(dev, &cube) == RES_OK); + CHK(ssol_mesh_setup(cube, CUBE_NTRIS__, get_ids, + CUBE_NVERTS__, attribs, 1, (void*) &CUBE_DESC__) == RES_OK); - CHECK(ssol_material_create_mirror(dev, &m_mtl), RES_OK); + CHK(ssol_material_create_mirror(dev, &m_mtl) == RES_OK); shader.normal = get_shader_normal; shader.reflectivity = get_shader_reflectivity; shader.roughness = get_shader_roughness; - CHECK(ssol_mirror_setup(m_mtl, &shader), RES_OK); - CHECK(ssol_material_create_virtual(dev, &v_mtl), RES_OK); - - CHECK(ssol_object_create(dev, &m_object), RES_OK); - CHECK(ssol_object_add_shaded_shape(m_object, cube, m_mtl, m_mtl), RES_OK); - CHECK(ssol_object_instantiate(m_object, &heliostat), RES_OK); - CHECK(ssol_scene_attach_instance(scene, heliostat), RES_OK); - - CHECK(ssol_object_create(dev, &t_object), RES_OK); - CHECK(ssol_object_add_shaded_shape(t_object, square, v_mtl, v_mtl), RES_OK); - CHECK(ssol_object_instantiate(t_object, &target), RES_OK); - CHECK(ssol_instance_set_transform(target, transform), RES_OK); - CHECK(ssol_instance_set_receiver(target, SSOL_FRONT, 0), RES_OK); - CHECK(ssol_instance_sample(target, 0), RES_OK); - CHECK(ssol_scene_attach_instance(scene, target), RES_OK); + CHK(ssol_mirror_setup(m_mtl, &shader, SSOL_MICROFACET_BECKMANN) == RES_OK); + CHK(ssol_material_create_virtual(dev, &v_mtl) == RES_OK); + + CHK(ssol_object_create(dev, &m_object) == RES_OK); + CHK(ssol_object_add_shaded_shape(m_object, cube, m_mtl, m_mtl) == RES_OK); + CHK(ssol_object_instantiate(m_object, &heliostat) == RES_OK); + CHK(ssol_scene_attach_instance(scene, heliostat) == RES_OK); + + CHK(ssol_object_create(dev, &t_object) == RES_OK); + CHK(ssol_object_add_shaded_shape(t_object, square, v_mtl, v_mtl) == RES_OK); + CHK(ssol_object_instantiate(t_object, &target) == RES_OK); + CHK(ssol_instance_set_transform(target, transform) == RES_OK); + CHK(ssol_instance_set_receiver(target, SSOL_FRONT, 0) == RES_OK); + CHK(ssol_instance_sample(target, 0) == RES_OK); + CHK(ssol_scene_attach_instance(scene, target) == RES_OK); #define N__ 100000 #define GET_MC_RCV ssol_estimator_get_mc_receiver - CHECK(ssol_solve(scene, rng, N__, 0, NULL, &estimator), RES_OK); - CHECK(ssol_estimator_get_realisation_count(estimator, &count), RES_OK); - CHECK(count, N__); - CHECK(ssol_estimator_get_failed_count(estimator, &count), RES_OK); - CHECK(count, 0); + CHK(ssol_solve(scene, rng, N__, 0, NULL, &estimator) == RES_OK); + CHK(ssol_estimator_get_realisation_count(estimator, &count) == RES_OK); + CHK(count == N__); + CHK(ssol_estimator_get_failed_count(estimator, &count) == RES_OK); + CHK(count == 0); #define DNI_TGT_S (DNI * TGT_X * TGT_Y) #define DNI_S (DNI * SZ * SZ) - CHECK(ssol_estimator_get_mc_global(estimator, &mc_global), RES_OK); + CHK(ssol_estimator_get_mc_global(estimator, &mc_global) == RES_OK); PRINT_GLOBAL(mc_global); - CHECK(eq_eps(mc_global.cos_factor.E, 1./3., 3 * mc_global.cos_factor.SE), 1); - CHECK(eq_eps(mc_global.shadowed.E, DNI_S, 3 * mc_global.shadowed.SE), 1); - CHECK(eq_eps(mc_global.missing.E, MMAX(DNI_S, DNI_TGT_S), - 3 * mc_global.missing.SE), 1); - CHECK(GET_MC_RCV(estimator, target, SSOL_FRONT, &mc_rcv), RES_OK); + CHK(eq_eps(mc_global.cos_factor.E, 1./3., 3 * mc_global.cos_factor.SE)); + CHK(eq_eps(mc_global.shadowed.E, DNI_S, 3 * mc_global.shadowed.SE)); + CHK(eq_eps(mc_global.missing.E, MMAX(DNI_S, DNI_TGT_S), + 3 * mc_global.missing.SE)); + CHK(GET_MC_RCV(estimator, target, SSOL_FRONT, &mc_rcv) == RES_OK); printf("Ir(target1) = %g +/- %g\n", mc_rcv.incoming_flux.E, mc_rcv.incoming_flux.SE); - CHECK(eq_eps(mc_rcv.incoming_flux.E, MMIN(DNI_S, DNI_TGT_S), - 3 * mc_rcv.incoming_flux.SE), 1); + CHK(eq_eps(mc_rcv.incoming_flux.E, MMIN(DNI_S, DNI_TGT_S), + 3 * mc_rcv.incoming_flux.SE)); /* Free data */ - CHECK(ssol_instance_ref_put(heliostat), RES_OK); - CHECK(ssol_instance_ref_put(target), RES_OK); - CHECK(ssol_object_ref_put(m_object), RES_OK); - CHECK(ssol_object_ref_put(t_object), RES_OK); - CHECK(ssol_shape_ref_put(square), RES_OK); - CHECK(ssol_shape_ref_put(cube), RES_OK); - CHECK(ssol_material_ref_put(m_mtl), RES_OK); - CHECK(ssol_material_ref_put(v_mtl), RES_OK); - CHECK(ssol_estimator_ref_put(estimator), RES_OK); - CHECK(ssol_device_ref_put(dev), RES_OK); - CHECK(ssol_scene_ref_put(scene), RES_OK); - CHECK(ssp_rng_ref_put(rng), RES_OK); - CHECK(ssol_spectrum_ref_put(spectrum), RES_OK); - CHECK(ssol_sun_ref_put(sun), RES_OK); + CHK(ssol_instance_ref_put(heliostat) == RES_OK); + CHK(ssol_instance_ref_put(target) == RES_OK); + CHK(ssol_object_ref_put(m_object) == RES_OK); + CHK(ssol_object_ref_put(t_object) == RES_OK); + CHK(ssol_shape_ref_put(square) == RES_OK); + CHK(ssol_shape_ref_put(cube) == RES_OK); + CHK(ssol_material_ref_put(m_mtl) == RES_OK); + CHK(ssol_material_ref_put(v_mtl) == RES_OK); + CHK(ssol_estimator_ref_put(estimator) == RES_OK); + CHK(ssol_device_ref_put(dev) == RES_OK); + CHK(ssol_scene_ref_put(scene) == RES_OK); + CHK(ssp_rng_ref_put(rng) == RES_OK); + CHK(ssol_spectrum_ref_put(spectrum) == RES_OK); + CHK(ssol_sun_ref_put(sun) == RES_OK); check_memory_allocator(&allocator); mem_shutdown_proxy_allocator(&allocator); - CHECK(mem_allocated_size(), 0); + CHK(mem_allocated_size() == 0); return 0; } diff --git a/src/test_ssol_spectrum.c b/src/test_ssol_spectrum.c @@ -27,10 +27,10 @@ static void get_wlen(const size_t i, double* wlen, double* data, void* ctx) { struct spectrum_desc* desc = ctx; - CHECK(i < 3, 1); - NCHECK(wlen, NULL); - NCHECK(data, NULL); - NCHECK(ctx, NULL); + CHK(i < 3); + CHK(wlen != NULL); + CHK(data != NULL); + CHK(ctx != NULL); *wlen = desc->wavelengths[i]; *data = desc->data[i]; ++wlens_count; @@ -47,18 +47,18 @@ main(int argc, char** argv) mem_init_proxy_allocator(&allocator, &mem_default_allocator); - CHECK(ssol_device_create - (NULL, &allocator, SSOL_NTHREADS_DEFAULT, 0, &dev), RES_OK); + CHK(ssol_device_create + (NULL, &allocator, SSOL_NTHREADS_DEFAULT, 0, &dev) == RES_OK); - CHECK(ssol_spectrum_create(NULL, &spectrum), RES_BAD_ARG); - CHECK(ssol_spectrum_create(dev, NULL), RES_BAD_ARG); - CHECK(ssol_spectrum_create(dev, &spectrum), RES_OK); + CHK(ssol_spectrum_create(NULL, &spectrum) == RES_BAD_ARG); + CHK(ssol_spectrum_create(dev, NULL) == RES_BAD_ARG); + CHK(ssol_spectrum_create(dev, &spectrum) == RES_OK); - CHECK(ssol_spectrum_ref_get(NULL), RES_BAD_ARG); - CHECK(ssol_spectrum_ref_get(spectrum), RES_OK); + CHK(ssol_spectrum_ref_get(NULL) == RES_BAD_ARG); + CHK(ssol_spectrum_ref_get(spectrum) == RES_OK); - CHECK(ssol_spectrum_ref_put(NULL), RES_BAD_ARG); - CHECK(ssol_spectrum_ref_put(spectrum), RES_OK); + CHK(ssol_spectrum_ref_put(NULL) == RES_BAD_ARG); + CHK(ssol_spectrum_ref_put(spectrum) == RES_OK); desc.wavelengths[0] = 10; desc.wavelengths[1] = 20; @@ -67,32 +67,32 @@ main(int argc, char** argv) desc.data[1] = 2.1; desc.data[2] = 1.5; - CHECK(ssol_spectrum_setup(NULL, NULL, 0, &desc), RES_BAD_ARG); - CHECK(ssol_spectrum_setup(spectrum, NULL, 0, &desc), RES_BAD_ARG); - CHECK(ssol_spectrum_setup(NULL, get_wlen, 0, &desc), RES_BAD_ARG); - CHECK(ssol_spectrum_setup(spectrum, get_wlen, 0, &desc), RES_BAD_ARG); - CHECK(ssol_spectrum_setup(NULL, NULL, 3, &desc), RES_BAD_ARG); - CHECK(ssol_spectrum_setup(spectrum, NULL, 3, &desc), RES_BAD_ARG); - CHECK(ssol_spectrum_setup(NULL, get_wlen, 3, &desc), RES_BAD_ARG); - CHECK(wlens_count, 0); - CHECK(ssol_spectrum_setup(spectrum, get_wlen, 3, &desc), RES_OK); - CHECK(wlens_count, 3); - CHECK(ssol_spectrum_setup(spectrum, get_wlen, 3, &desc), RES_OK); + CHK(ssol_spectrum_setup(NULL, NULL, 0, &desc) == RES_BAD_ARG); + CHK(ssol_spectrum_setup(spectrum, NULL, 0, &desc) == RES_BAD_ARG); + CHK(ssol_spectrum_setup(NULL, get_wlen, 0, &desc) == RES_BAD_ARG); + CHK(ssol_spectrum_setup(spectrum, get_wlen, 0, &desc) == RES_BAD_ARG); + CHK(ssol_spectrum_setup(NULL, NULL, 3, &desc) == RES_BAD_ARG); + CHK(ssol_spectrum_setup(spectrum, NULL, 3, &desc) == RES_BAD_ARG); + CHK(ssol_spectrum_setup(NULL, get_wlen, 3, &desc) == RES_BAD_ARG); + CHK(wlens_count == 0); + CHK(ssol_spectrum_setup(spectrum, get_wlen, 3, &desc) == RES_OK); + CHK(wlens_count == 3); + CHK(ssol_spectrum_setup(spectrum, get_wlen, 3, &desc) == RES_OK); desc.wavelengths[1] = 30; - CHECK(ssol_spectrum_setup(spectrum, get_wlen, 3, &desc), RES_BAD_ARG); + CHK(ssol_spectrum_setup(spectrum, get_wlen, 3, &desc) == RES_BAD_ARG); desc.wavelengths[1] = 20; desc.data[1] = -2.1; - CHECK(ssol_spectrum_setup(spectrum, get_wlen, 3, &desc), RES_BAD_ARG); + CHK(ssol_spectrum_setup(spectrum, get_wlen, 3, &desc) == RES_BAD_ARG); - CHECK(ssol_spectrum_ref_put(spectrum), RES_OK); + CHK(ssol_spectrum_ref_put(spectrum) == RES_OK); - CHECK(ssol_device_ref_put(dev), RES_OK); + CHK(ssol_device_ref_put(dev) == RES_OK); check_memory_allocator(&allocator); mem_shutdown_proxy_allocator(&allocator); - CHECK(mem_allocated_size(), 0); + CHK(mem_allocated_size() == 0); return 0; } diff --git a/src/test_ssol_sun.c b/src/test_ssol_sun.c @@ -34,166 +34,233 @@ main(int argc, char** argv) mem_init_proxy_allocator(&allocator, &mem_default_allocator); - CHECK(ssol_device_create - (NULL, &allocator, SSOL_NTHREADS_DEFAULT, 0, &dev), RES_OK); - - CHECK(ssol_spectrum_create(dev, &spectrum), RES_OK); - CHECK(ssol_spectrum_create(dev, &spectrum2), RES_OK); - - CHECK(ssol_sun_create_directional(NULL, &sun), RES_BAD_ARG); - CHECK(ssol_sun_create_directional(dev, NULL), RES_BAD_ARG); - CHECK(ssol_sun_create_directional(dev, &sun), RES_OK); - - CHECK(ssol_sun_ref_get(NULL), RES_BAD_ARG); - CHECK(ssol_sun_ref_get(sun), RES_OK); - - CHECK(ssol_sun_ref_put(NULL), RES_BAD_ARG); - CHECK(ssol_sun_ref_put(sun), RES_OK); - - CHECK(ssol_sun_set_spectrum(NULL, spectrum), RES_BAD_ARG); - CHECK(ssol_sun_set_spectrum(sun, NULL), RES_BAD_ARG); - CHECK(ssol_sun_set_spectrum(sun, spectrum), RES_OK); - CHECK(ssol_sun_set_spectrum(sun, spectrum), RES_OK); - - 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_direction(sun, dir), RES_OK); - - CHECK(ssol_sun_get_direction(NULL, tmp), RES_BAD_ARG); - CHECK(ssol_sun_get_direction(sun, NULL), RES_BAD_ARG); - CHECK(ssol_sun_get_direction(sun, tmp), RES_OK); - CHECK(d3_eq(dir, tmp), 1); - - CHECK(ssol_sun_set_dni(NULL, 1000), RES_BAD_ARG); - CHECK(ssol_sun_set_dni(sun, 0), RES_BAD_ARG); - CHECK(ssol_sun_set_dni(sun, 1000), RES_OK); - CHECK(ssol_sun_set_dni(sun, 1000), RES_OK); - - CHECK(ssol_sun_get_dni(NULL, &dni), RES_BAD_ARG); - CHECK(ssol_sun_get_dni(sun, NULL), RES_BAD_ARG); - CHECK(ssol_sun_get_dni(sun, &dni), RES_OK); - CHECK(dni, 1000); - - CHECK(ssol_sun_pillbox_set_half_angle(NULL, 0.1), RES_BAD_ARG); - CHECK(ssol_sun_pillbox_set_half_angle(sun, -0.1), RES_BAD_ARG); - CHECK(ssol_sun_pillbox_set_half_angle(sun, 999), RES_BAD_ARG); - CHECK(ssol_sun_pillbox_set_half_angle(sun, 0.1), RES_BAD_ARG); - - CHECK(ssol_sun_set_buie_param(NULL, 0.1), RES_BAD_ARG); - CHECK(ssol_sun_set_buie_param(sun, -0.1), RES_BAD_ARG); - CHECK(ssol_sun_set_buie_param(sun, 999), RES_BAD_ARG); - CHECK(ssol_sun_set_buie_param(sun, 0.1), RES_BAD_ARG); - - CHECK(ssol_sun_ref_put(sun), RES_OK); - - CHECK(ssol_sun_create_pillbox(NULL, &sun), RES_BAD_ARG); - CHECK(ssol_sun_create_pillbox(dev, NULL), RES_BAD_ARG); - CHECK(ssol_sun_create_pillbox(dev, &sun), RES_OK); - - CHECK(ssol_sun_ref_get(NULL), RES_BAD_ARG); - CHECK(ssol_sun_ref_get(sun), RES_OK); - - CHECK(ssol_sun_ref_put(NULL), RES_BAD_ARG); - CHECK(ssol_sun_ref_put(sun), RES_OK); - - CHECK(ssol_sun_set_spectrum(NULL, spectrum), RES_BAD_ARG); - CHECK(ssol_sun_set_spectrum(sun, NULL), RES_BAD_ARG); - CHECK(ssol_sun_set_spectrum(sun, spectrum), RES_OK); - CHECK(ssol_sun_set_spectrum(sun, spectrum2), RES_OK); - CHECK(ssol_sun_set_spectrum(sun, spectrum2), RES_OK); - - 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_direction(sun, dir), RES_OK); - - CHECK(ssol_sun_get_direction(NULL, tmp), RES_BAD_ARG); - CHECK(ssol_sun_get_direction(sun, NULL), RES_BAD_ARG); - CHECK(ssol_sun_get_direction(sun, tmp), RES_OK); - CHECK(d3_eq(dir, tmp), 1); - - CHECK(ssol_sun_set_dni(NULL, 1000), RES_BAD_ARG); - CHECK(ssol_sun_set_dni(sun, 0), RES_BAD_ARG); - CHECK(ssol_sun_set_dni(sun, 1000), RES_OK); - CHECK(ssol_sun_set_dni(sun, 1000), RES_OK); - - CHECK(ssol_sun_get_dni(NULL, &dni), RES_BAD_ARG); - CHECK(ssol_sun_get_dni(sun, NULL), RES_BAD_ARG); - CHECK(ssol_sun_get_dni(sun, &dni), RES_OK); - CHECK(dni, 1000); - - CHECK(ssol_sun_pillbox_set_half_angle(NULL, 0.1), RES_BAD_ARG); - CHECK(ssol_sun_pillbox_set_half_angle(sun, -0.1), RES_BAD_ARG); - CHECK(ssol_sun_pillbox_set_half_angle(sun, 999), RES_BAD_ARG); - CHECK(ssol_sun_pillbox_set_half_angle(sun, 0.1), RES_OK); - CHECK(ssol_sun_pillbox_set_half_angle(sun, 0.1), RES_OK); - - CHECK(ssol_sun_set_buie_param(NULL, 0.1), RES_BAD_ARG); - CHECK(ssol_sun_set_buie_param(sun, -0.1), RES_BAD_ARG); - CHECK(ssol_sun_set_buie_param(sun, 999), RES_BAD_ARG); - CHECK(ssol_sun_set_buie_param(sun, 0.1), RES_BAD_ARG); - - CHECK(ssol_sun_ref_put(sun), RES_OK); - - CHECK(ssol_sun_create_buie(NULL, &sun), RES_BAD_ARG); - CHECK(ssol_sun_create_buie(dev, NULL), RES_BAD_ARG); - CHECK(ssol_sun_create_buie(dev, &sun), RES_OK); - - CHECK(ssol_sun_ref_get(NULL), RES_BAD_ARG); - CHECK(ssol_sun_ref_get(sun), RES_OK); - - CHECK(ssol_sun_ref_put(NULL), RES_BAD_ARG); - CHECK(ssol_sun_ref_put(sun), RES_OK); - - CHECK(ssol_sun_set_spectrum(NULL, spectrum), RES_BAD_ARG); - CHECK(ssol_sun_set_spectrum(sun, NULL), RES_BAD_ARG); - CHECK(ssol_sun_set_spectrum(sun, spectrum), RES_OK); - CHECK(ssol_sun_set_spectrum(sun, spectrum), RES_OK); - - 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_direction(sun, dir), RES_OK); - - CHECK(ssol_sun_get_direction(NULL, tmp), RES_BAD_ARG); - CHECK(ssol_sun_get_direction(sun, NULL), RES_BAD_ARG); - CHECK(ssol_sun_get_direction(sun, tmp), RES_OK); - CHECK(d3_eq(dir, tmp), 1); - - CHECK(ssol_sun_set_dni(NULL, 1000), RES_BAD_ARG); - CHECK(ssol_sun_set_dni(sun, 0), RES_BAD_ARG); - CHECK(ssol_sun_set_dni(sun, 1000), RES_OK); - CHECK(ssol_sun_set_dni(sun, 1000), RES_OK); - - CHECK(ssol_sun_get_dni(NULL, &dni), RES_BAD_ARG); - CHECK(ssol_sun_get_dni(sun, NULL), RES_BAD_ARG); - CHECK(ssol_sun_get_dni(sun, &dni), RES_OK); - CHECK(dni, 1000); - - CHECK(ssol_sun_pillbox_set_half_angle(NULL, 0.1), RES_BAD_ARG); - CHECK(ssol_sun_pillbox_set_half_angle(sun, -0.1), RES_BAD_ARG); - CHECK(ssol_sun_pillbox_set_half_angle(sun, 999), RES_BAD_ARG); - CHECK(ssol_sun_pillbox_set_half_angle(sun, 0.1), RES_BAD_ARG); - - CHECK(ssol_sun_set_buie_param(NULL, 0.1), RES_BAD_ARG); - CHECK(ssol_sun_set_buie_param(sun, -0.1), RES_BAD_ARG); - CHECK(ssol_sun_set_buie_param(sun, 999), RES_BAD_ARG); - CHECK(ssol_sun_set_buie_param(sun, 0.1), RES_OK); - CHECK(ssol_sun_set_buie_param(sun, 0.1), RES_OK); - - CHECK(ssol_sun_ref_put(sun), RES_OK); - - CHECK(ssol_spectrum_ref_put(spectrum), RES_OK); - CHECK(ssol_spectrum_ref_put(spectrum2), RES_OK); - CHECK(ssol_device_ref_put(dev), RES_OK); + CHK(ssol_device_create + (NULL, &allocator, SSOL_NTHREADS_DEFAULT, 0, &dev) == RES_OK); + + CHK(ssol_spectrum_create(dev, &spectrum) == RES_OK); + CHK(ssol_spectrum_create(dev, &spectrum2) == RES_OK); + + CHK(ssol_sun_create_directional(NULL, &sun) == RES_BAD_ARG); + CHK(ssol_sun_create_directional(dev, NULL) == RES_BAD_ARG); + CHK(ssol_sun_create_directional(dev, &sun) == RES_OK); + + CHK(ssol_sun_ref_get(NULL) == RES_BAD_ARG); + CHK(ssol_sun_ref_get(sun) == RES_OK); + + CHK(ssol_sun_ref_put(NULL) == RES_BAD_ARG); + CHK(ssol_sun_ref_put(sun) == RES_OK); + + CHK(ssol_sun_set_spectrum(NULL, spectrum) == RES_BAD_ARG); + CHK(ssol_sun_set_spectrum(sun, NULL) == RES_BAD_ARG); + CHK(ssol_sun_set_spectrum(sun, spectrum) == RES_OK); + CHK(ssol_sun_set_spectrum(sun, spectrum) == RES_OK); + + CHK(ssol_sun_set_direction(NULL, dir) == RES_BAD_ARG); + CHK(ssol_sun_set_direction(sun, NULL) == RES_BAD_ARG); + CHK(ssol_sun_set_direction(sun, dir0) == RES_BAD_ARG); + CHK(ssol_sun_set_direction(sun, dir) == RES_OK); + CHK(ssol_sun_set_direction(sun, dir) == RES_OK); + + CHK(ssol_sun_get_direction(NULL, tmp) == RES_BAD_ARG); + CHK(ssol_sun_get_direction(sun, NULL) == RES_BAD_ARG); + CHK(ssol_sun_get_direction(sun, tmp) == RES_OK); + CHK(d3_eq(dir, tmp) == 1); + + CHK(ssol_sun_set_dni(NULL, 1000) == RES_BAD_ARG); + CHK(ssol_sun_set_dni(sun, 0) == RES_BAD_ARG); + CHK(ssol_sun_set_dni(sun, 1000) == RES_OK); + CHK(ssol_sun_set_dni(sun, 1000) == RES_OK); + + CHK(ssol_sun_get_dni(NULL, &dni) == RES_BAD_ARG); + CHK(ssol_sun_get_dni(sun, NULL) == RES_BAD_ARG); + CHK(ssol_sun_get_dni(sun, &dni) == RES_OK); + CHK(dni == 1000); + + CHK(ssol_sun_pillbox_set_half_angle(NULL, 0.1) == RES_BAD_ARG); + CHK(ssol_sun_pillbox_set_half_angle(sun, -0.1) == RES_BAD_ARG); + CHK(ssol_sun_pillbox_set_half_angle(sun, 999) == RES_BAD_ARG); + CHK(ssol_sun_pillbox_set_half_angle(sun, 0.1) == RES_BAD_ARG); + + CHK(ssol_sun_gaussian_set_std_dev(NULL, 0.1) == RES_BAD_ARG); + CHK(ssol_sun_gaussian_set_std_dev(sun, -0.1) == RES_BAD_ARG); + CHK(ssol_sun_gaussian_set_std_dev(sun, 0.1) == RES_BAD_ARG); + + CHK(ssol_sun_set_buie_param(NULL, 0.1) == RES_BAD_ARG); + CHK(ssol_sun_set_buie_param(sun, -0.1) == RES_BAD_ARG); + CHK(ssol_sun_set_buie_param(sun, 999) == RES_BAD_ARG); + CHK(ssol_sun_set_buie_param(sun, 0.1) == RES_BAD_ARG); + + CHK(ssol_sun_ref_put(sun) == RES_OK); + + CHK(ssol_sun_create_pillbox(NULL, &sun) == RES_BAD_ARG); + CHK(ssol_sun_create_pillbox(dev, NULL) == RES_BAD_ARG); + CHK(ssol_sun_create_pillbox(dev, &sun) == RES_OK); + + CHK(ssol_sun_ref_get(NULL) == RES_BAD_ARG); + CHK(ssol_sun_ref_get(sun) == RES_OK); + + CHK(ssol_sun_ref_put(NULL) == RES_BAD_ARG); + CHK(ssol_sun_ref_put(sun) == RES_OK); + + CHK(ssol_sun_set_spectrum(NULL, spectrum) == RES_BAD_ARG); + CHK(ssol_sun_set_spectrum(sun, NULL) == RES_BAD_ARG); + CHK(ssol_sun_set_spectrum(sun, spectrum) == RES_OK); + CHK(ssol_sun_set_spectrum(sun, spectrum2) == RES_OK); + CHK(ssol_sun_set_spectrum(sun, spectrum2) == RES_OK); + + CHK(ssol_sun_set_direction(NULL, dir) == RES_BAD_ARG); + CHK(ssol_sun_set_direction(sun, NULL) == RES_BAD_ARG); + CHK(ssol_sun_set_direction(sun, dir0) == RES_BAD_ARG); + CHK(ssol_sun_set_direction(sun, dir) == RES_OK); + CHK(ssol_sun_set_direction(sun, dir) == RES_OK); + + CHK(ssol_sun_get_direction(NULL, tmp) == RES_BAD_ARG); + CHK(ssol_sun_get_direction(sun, NULL) == RES_BAD_ARG); + CHK(ssol_sun_get_direction(sun, tmp) == RES_OK); + CHK(d3_eq(dir, tmp) == 1); + + CHK(ssol_sun_set_dni(NULL, 1000) == RES_BAD_ARG); + CHK(ssol_sun_set_dni(sun, 0) == RES_BAD_ARG); + CHK(ssol_sun_set_dni(sun, 1000) == RES_OK); + CHK(ssol_sun_set_dni(sun, 1000) == RES_OK); + + CHK(ssol_sun_get_dni(NULL, &dni) == RES_BAD_ARG); + CHK(ssol_sun_get_dni(sun, NULL) == RES_BAD_ARG); + CHK(ssol_sun_get_dni(sun, &dni) == RES_OK); + CHK(dni == 1000); + + CHK(ssol_sun_pillbox_set_half_angle(NULL, 0.1) == RES_BAD_ARG); + CHK(ssol_sun_pillbox_set_half_angle(sun, -0.1) == RES_BAD_ARG); + CHK(ssol_sun_pillbox_set_half_angle(sun, 999) == RES_BAD_ARG); + CHK(ssol_sun_pillbox_set_half_angle(sun, 0.1) == RES_OK); + CHK(ssol_sun_pillbox_set_half_angle(sun, 0.1) == RES_OK); + + CHK(ssol_sun_gaussian_set_std_dev(NULL, 0.1) == RES_BAD_ARG); + CHK(ssol_sun_gaussian_set_std_dev(sun, -0.1) == RES_BAD_ARG); + CHK(ssol_sun_gaussian_set_std_dev(sun, 0.1) == RES_BAD_ARG); + + CHK(ssol_sun_set_buie_param(NULL, 0.1) == RES_BAD_ARG); + CHK(ssol_sun_set_buie_param(sun, -0.1) == RES_BAD_ARG); + CHK(ssol_sun_set_buie_param(sun, 999) == RES_BAD_ARG); + CHK(ssol_sun_set_buie_param(sun, 0.1) == RES_BAD_ARG); + + CHK(ssol_sun_ref_put(sun) == RES_OK); + + CHK(ssol_sun_create_gaussian(NULL, &sun) == RES_BAD_ARG); + CHK(ssol_sun_create_gaussian(dev, NULL) == RES_BAD_ARG); + CHK(ssol_sun_create_gaussian(dev, &sun) == RES_OK); + + CHK(ssol_sun_ref_get(NULL) == RES_BAD_ARG); + CHK(ssol_sun_ref_get(sun) == RES_OK); + + CHK(ssol_sun_ref_put(NULL) == RES_BAD_ARG); + CHK(ssol_sun_ref_put(sun) == RES_OK); + + CHK(ssol_sun_set_spectrum(NULL, spectrum) == RES_BAD_ARG); + CHK(ssol_sun_set_spectrum(sun, NULL) == RES_BAD_ARG); + CHK(ssol_sun_set_spectrum(sun, spectrum) == RES_OK); + CHK(ssol_sun_set_spectrum(sun, spectrum2) == RES_OK); + CHK(ssol_sun_set_spectrum(sun, spectrum2) == RES_OK); + + CHK(ssol_sun_set_direction(NULL, dir) == RES_BAD_ARG); + CHK(ssol_sun_set_direction(sun, NULL) == RES_BAD_ARG); + CHK(ssol_sun_set_direction(sun, dir0) == RES_BAD_ARG); + CHK(ssol_sun_set_direction(sun, dir) == RES_OK); + CHK(ssol_sun_set_direction(sun, dir) == RES_OK); + + CHK(ssol_sun_get_direction(NULL, tmp) == RES_BAD_ARG); + CHK(ssol_sun_get_direction(sun, NULL) == RES_BAD_ARG); + CHK(ssol_sun_get_direction(sun, tmp) == RES_OK); + CHK(d3_eq(dir, tmp) == 1); + + CHK(ssol_sun_set_dni(NULL, 1000) == RES_BAD_ARG); + CHK(ssol_sun_set_dni(sun, 0) == RES_BAD_ARG); + CHK(ssol_sun_set_dni(sun, 1000) == RES_OK); + CHK(ssol_sun_set_dni(sun, 1000) == RES_OK); + + CHK(ssol_sun_get_dni(NULL, &dni) == RES_BAD_ARG); + CHK(ssol_sun_get_dni(sun, NULL) == RES_BAD_ARG); + CHK(ssol_sun_get_dni(sun, &dni) == RES_OK); + CHK(dni == 1000); + + CHK(ssol_sun_pillbox_set_half_angle(NULL, 0.1) == RES_BAD_ARG); + CHK(ssol_sun_pillbox_set_half_angle(sun, -0.1) == RES_BAD_ARG); + CHK(ssol_sun_pillbox_set_half_angle(sun, 999) == RES_BAD_ARG); + CHK(ssol_sun_pillbox_set_half_angle(sun, 0.1) == RES_BAD_ARG); + CHK(ssol_sun_pillbox_set_half_angle(sun, 0.1) == RES_BAD_ARG); + + CHK(ssol_sun_gaussian_set_std_dev(NULL, 0.1) == RES_BAD_ARG); + CHK(ssol_sun_gaussian_set_std_dev(sun, -0.1) == RES_BAD_ARG); + CHK(ssol_sun_gaussian_set_std_dev(sun, 0.1) == RES_OK); + CHK(ssol_sun_gaussian_set_std_dev(sun, 0.1) == RES_OK); + + CHK(ssol_sun_set_buie_param(NULL, 0.1) == RES_BAD_ARG); + CHK(ssol_sun_set_buie_param(sun, -0.1) == RES_BAD_ARG); + CHK(ssol_sun_set_buie_param(sun, 999) == RES_BAD_ARG); + CHK(ssol_sun_set_buie_param(sun, 0.1) == RES_BAD_ARG); + + CHK(ssol_sun_ref_put(sun) == RES_OK); + + CHK(ssol_sun_create_buie(NULL, &sun) == RES_BAD_ARG); + CHK(ssol_sun_create_buie(dev, NULL) == RES_BAD_ARG); + CHK(ssol_sun_create_buie(dev, &sun) == RES_OK); + + CHK(ssol_sun_ref_get(NULL) == RES_BAD_ARG); + CHK(ssol_sun_ref_get(sun) == RES_OK); + + CHK(ssol_sun_ref_put(NULL) == RES_BAD_ARG); + CHK(ssol_sun_ref_put(sun) == RES_OK); + + CHK(ssol_sun_set_spectrum(NULL, spectrum) == RES_BAD_ARG); + CHK(ssol_sun_set_spectrum(sun, NULL) == RES_BAD_ARG); + CHK(ssol_sun_set_spectrum(sun, spectrum) == RES_OK); + CHK(ssol_sun_set_spectrum(sun, spectrum) == RES_OK); + + CHK(ssol_sun_set_direction(NULL, dir) == RES_BAD_ARG); + CHK(ssol_sun_set_direction(sun, NULL) == RES_BAD_ARG); + CHK(ssol_sun_set_direction(sun, dir0) == RES_BAD_ARG); + CHK(ssol_sun_set_direction(sun, dir) == RES_OK); + CHK(ssol_sun_set_direction(sun, dir) == RES_OK); + + CHK(ssol_sun_get_direction(NULL, tmp) == RES_BAD_ARG); + CHK(ssol_sun_get_direction(sun, NULL) == RES_BAD_ARG); + CHK(ssol_sun_get_direction(sun, tmp) == RES_OK); + CHK(d3_eq(dir, tmp) == 1); + + CHK(ssol_sun_set_dni(NULL, 1000) == RES_BAD_ARG); + CHK(ssol_sun_set_dni(sun, 0) == RES_BAD_ARG); + CHK(ssol_sun_set_dni(sun, 1000) == RES_OK); + CHK(ssol_sun_set_dni(sun, 1000) == RES_OK); + + CHK(ssol_sun_get_dni(NULL, &dni) == RES_BAD_ARG); + CHK(ssol_sun_get_dni(sun, NULL) == RES_BAD_ARG); + CHK(ssol_sun_get_dni(sun, &dni) == RES_OK); + CHK(dni == 1000); + + CHK(ssol_sun_pillbox_set_half_angle(NULL, 0.1) == RES_BAD_ARG); + CHK(ssol_sun_pillbox_set_half_angle(sun, -0.1) == RES_BAD_ARG); + CHK(ssol_sun_pillbox_set_half_angle(sun, 999) == RES_BAD_ARG); + CHK(ssol_sun_pillbox_set_half_angle(sun, 0.1) == RES_BAD_ARG); + + CHK(ssol_sun_gaussian_set_std_dev(NULL, 0.1) == RES_BAD_ARG); + CHK(ssol_sun_gaussian_set_std_dev(sun, -0.1) == RES_BAD_ARG); + CHK(ssol_sun_gaussian_set_std_dev(sun, 0.1) == RES_BAD_ARG); + + CHK(ssol_sun_set_buie_param(NULL, 0.1) == RES_BAD_ARG); + CHK(ssol_sun_set_buie_param(sun, -0.1) == RES_BAD_ARG); + CHK(ssol_sun_set_buie_param(sun, 999) == RES_BAD_ARG); + CHK(ssol_sun_set_buie_param(sun, 0.1) == RES_OK); + CHK(ssol_sun_set_buie_param(sun, 0.1) == RES_OK); + + CHK(ssol_sun_ref_put(sun) == RES_OK); + + CHK(ssol_spectrum_ref_put(spectrum) == RES_OK); + CHK(ssol_spectrum_ref_put(spectrum2) == RES_OK); + CHK(ssol_device_ref_put(dev) == RES_OK); check_memory_allocator(&allocator); mem_shutdown_proxy_allocator(&allocator); - CHECK(mem_allocated_size(), 0); + CHK(mem_allocated_size() == 0); return 0; }