commit 89ecb45a6e8ce09b855a14125911db46a467c7f6
parent f968ffa8cdb1c097cb5ae8335a69ea1c7f0fb307
Author: Christophe Coustet <christophe.coustet@meso-star.com>
Date: Tue, 7 Jan 2020 16:38:04 +0100
BugFix: getter accessing wrong enclosure
Diffstat:
2 files changed, 2 insertions(+), 207 deletions(-)
diff --git a/src/senc_descriptor.c b/src/senc_descriptor.c
@@ -60,7 +60,7 @@ senc_scene_get_enclosure_count_by_medium
return RES_BAD_ARG;
ASSERT(darray_enc_ids_array_size_get(&scn->analyze.enc_ids_array_by_medium)
== 1 + scn->next_medium_idx);
- m_idx = (imed == SENC_UNDEFINED_MEDIUM) ? scn->next_medium_idx : imed;
+ m_idx = (imed == SENC_UNDEFINED_MEDIUM) ? 0 : imed + 1;
enc_ids = darray_enc_ids_array_cdata_get(&scn->analyze.enc_ids_array_by_medium)
+ m_idx;
tmp = darray_enc_id_size_get(enc_ids);
@@ -100,7 +100,7 @@ senc_scene_get_enclosure_by_medium
return RES_BAD_ARG;
ASSERT(darray_enc_ids_array_size_get(&scn->analyze.enc_ids_array_by_medium)
== 1 + scn->next_medium_idx);
- m_idx = (imed == SENC_UNDEFINED_MEDIUM) ? scn->next_medium_idx : imed;
+ m_idx = (imed == SENC_UNDEFINED_MEDIUM) ? 0 : imed + 1;
enc_ids =
darray_enc_ids_array_cdata_get(&scn->analyze.enc_ids_array_by_medium) + m_idx;
if(idx >= darray_enc_id_size_get(enc_ids)) return RES_BAD_ARG;
diff --git a/src/test_senc_add_n_merge.c b/src/test_senc_add_n_merge.c
@@ -1,205 +0,0 @@
-/* Copyright (C) |Meso|Star> 2016-2018 (contact@meso-star.com)
-*
-* 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 "senc.h"
-#include "test_senc_utils.h"
-
-/* Manage add_geometry behaviour */
-struct add_geom_ctx {
- unsigned add_cpt, merge_cpt;
- res_T add_res, merge_res;
-};
-
-static res_T
-add_trg
- (const unsigned global_id,
- const unsigned iseg,
- void* context)
-{
- struct context* ctx = context;
- struct add_geom_ctx* add_geom_ctx;
- ASSERT(ctx); (void)global_id; (void)iseg;
- add_geom_ctx = ctx->custom;
- if(add_geom_ctx->add_res == RES_OK) ++add_geom_ctx->add_cpt;
- return add_geom_ctx->add_res;
-}
-
-static res_T
-merge_trg
- (const unsigned global_id,
- const unsigned iseg,
- const int reversed_segment,
- const unsigned triangle_media[2],
- const unsigned merge_media[2],
- void* context)
-{
- struct context* ctx = context;
- struct add_geom_ctx* add_geom_ctx;
- ASSERT(ctx && triangle_media && merge_media);
- (void)global_id; (void)iseg; (void)reversed_segment; (void)triangle_media; (void)merge_media;
- add_geom_ctx = ctx->custom;
- if(add_geom_ctx->merge_res == RES_OK) ++add_geom_ctx->merge_cpt;
- return add_geom_ctx->merge_res;
-}
-
-int
-main(int argc, char** argv)
-{
- struct mem_allocator allocator;
- struct senc_device* dev = NULL;
- struct senc_scene* scn = NULL;
- struct context ctx = CONTEXT_NULL__;
- unsigned i;
- struct add_geom_ctx add_geom_ctx;
- unsigned media[12];
- const int conv = SENC_CONVENTION_NORMAL_FRONT | SENC_CONVENTION_NORMAL_INSIDE;
- const unsigned media_count = sizeof(media) / sizeof(*media);
- (void)argc; (void)argv;
-
- OK(mem_init_proxy_allocator(&allocator, &mem_default_allocator));
- OK(senc_device_create(NULL, &allocator, SENC_NTHREADS_DEFAULT, 1, &dev));
- OK(senc_scene_create(dev, conv, &scn));
-
- /* A 3D cube.
- * 2 enclosures (inside, outside) sharing the same triangles,
- * but opposite sides */
- ctx.positions = box_vertices;
- ctx.indices = box_indices;
- ctx.scale = 1;
- ctx.reverse_vrtx = 0;
- ctx.reverse_med = 0;
- d3(ctx.offset, 0, 0, 0);
- ctx.front_media = media;
- ctx.back_media = medium1;
- ctx.custom = &add_geom_ctx;
-
- add_geom_ctx.add_cpt = add_geom_ctx.merge_cpt = 0;
- add_geom_ctx.add_res = add_geom_ctx.merge_res = RES_OK;
-
- /* Geometry with no media information on both sides */
- for (i = 0; i < media_count; i++) media[i] = SENC_UNDEFINED_MEDIUM;
- ctx.front_media = media;
- ctx.back_media = media;
-
- /* If add fails, add geometry fails the same way */
- add_geom_ctx.add_res = RES_BAD_ARG;
- BA(senc_scene_add_geometry(scn, ntriangles, get_indices, NULL,
- nvertices, get_position, add_trg, merge_trg, &ctx));
- CHK(add_geom_ctx.add_cpt == 0);
- add_geom_ctx.add_res = RES_MEM_ERR;
- CHK(senc_scene_add_geometry(scn, ntriangles, get_indices, NULL,
- nvertices, get_position, add_trg, merge_trg, &ctx) == RES_MEM_ERR);
- CHK(add_geom_ctx.add_cpt == 0);
-
- /* Successful add geometry with add callback */
- add_geom_ctx.add_res = RES_OK;
- OK(senc_scene_add_geometry(scn, ntriangles, get_indices, NULL,
- nvertices, get_position, add_trg, merge_trg, &ctx));
- CHK(add_geom_ctx.add_cpt == media_count);
- CHK(add_geom_ctx.merge_cpt == 0);
-
- /* Clear scene */
- SENC(scene_ref_put(scn));
- OK(senc_scene_create(dev, conv, &scn));
-
- /* Successful add geometry without add callback */
- add_geom_ctx.add_cpt = 0;
- OK(senc_scene_add_geometry(scn, ntriangles, get_indices, NULL,
- nvertices, get_position, NULL, merge_trg, &ctx));
- CHK(add_geom_ctx.add_cpt == 0);
- CHK(add_geom_ctx.merge_cpt == 0);
-
- /* If merge fails, add geometry fails the same way */
- add_geom_ctx.merge_res = RES_BAD_ARG;
- BA(senc_scene_add_geometry(scn, ntriangles, get_indices, NULL,
- nvertices, get_position, add_trg, merge_trg, &ctx));
- CHK(add_geom_ctx.merge_cpt == 0);
- add_geom_ctx.merge_res = RES_MEM_ERR;
- CHK(senc_scene_add_geometry(scn, ntriangles, get_indices, NULL,
- nvertices, get_position, add_trg, merge_trg, &ctx) == RES_MEM_ERR);
- CHK(add_geom_ctx.merge_cpt == 0);
-
- /* Successful add geometry without merge callback */
- OK(senc_scene_add_geometry(scn, ntriangles, get_indices, NULL,
- nvertices, get_position, add_trg, NULL, &ctx));
- CHK(add_geom_ctx.merge_cpt == 0);
-
- /* Successful add geometry with merge callback */
- add_geom_ctx.merge_res = RES_OK;
- OK(senc_scene_add_geometry(scn, ntriangles, get_indices, NULL,
- nvertices, get_position, add_trg, merge_trg, &ctx));
- CHK(add_geom_ctx.merge_cpt == media_count);
- add_geom_ctx.merge_cpt = 0;
-
- /* Geometry with media information on both sides */
- ctx.front_media = medium0;
- ctx.back_media = medium1;
-
- /* Clear scene */
- SENC(scene_ref_put(scn));
- OK(senc_scene_create(dev, conv, &scn));
-
- /* Successful add geometry with add callback */
- add_geom_ctx.add_res = RES_OK;
- OK(senc_scene_add_geometry(scn, ntriangles, get_indices, NULL,
- nvertices, get_position, add_trg, merge_trg, &ctx));
- CHK(add_geom_ctx.add_cpt == media_count);
- CHK(add_geom_ctx.merge_cpt == 0);
- add_geom_ctx.add_cpt = 0;
-
- /* Clear scene */
- SENC(scene_ref_put(scn));
- OK(senc_scene_create(dev, conv, &scn));
-
- /* Successful add geometry with add callback */
- add_geom_ctx.add_res = RES_OK;
- OK(senc_scene_add_geometry(scn, ntriangles, get_indices, NULL,
- nvertices, get_position, add_trg, merge_trg, &ctx));
- CHK(add_geom_ctx.add_cpt == media_count);
- CHK(add_geom_ctx.merge_cpt == 0);
- add_geom_ctx.add_cpt = 0;
-
- /* Successful add geometry with merge callback */
- add_geom_ctx.merge_res = RES_OK;
- OK(senc_scene_add_geometry(scn, ntriangles, get_indices, NULL,
- nvertices, get_position, add_trg, merge_trg, &ctx));
- CHK(add_geom_ctx.merge_cpt == media_count);
- add_geom_ctx.merge_cpt = 0;
-
- /* Geometry with incompatible media information on both sides */
- ctx.front_media = medium1;
- ctx.back_media = medium0;
-
- /* Unsuccessful add geometry without merge callback */
- OK(senc_scene_add_geometry(scn, ntriangles, get_indices, NULL,
- nvertices, get_position, add_trg, NULL, &ctx));
- CHK(add_geom_ctx.merge_cpt == 0);
-
- /* Successful add geometry with merge callback */
- add_geom_ctx.merge_res = RES_OK;
- OK(senc_scene_add_geometry(scn, ntriangles, get_indices, NULL,
- nvertices, get_position, add_trg, merge_trg, &ctx));
- CHK(add_geom_ctx.merge_cpt == media_count);
- add_geom_ctx.merge_cpt = 0;
-
- SENC(scene_ref_put(scn));
- SENC(device_ref_put(dev));
-
- check_memory_allocator(&allocator);
- mem_shutdown_proxy_allocator(&allocator);
- CHK(mem_allocated_size() == 0);
-
- return 0;
-}