star-enclosures-2d

Extract enclosures from 2D geometry
git clone git://git.meso-star.fr/star-enclosures-2d.git
Log | Files | Refs | README | LICENSE

commit 185b76b05ace10f04ee63d26318e1262fd2f04ad
parent 27c981786fa5969bbedd80fed0bed8cf33f97104
Author: Christophe Coustet <christophe.coustet@meso-star.com>
Date:   Tue, 10 Jul 2018 15:51:03 +0200

Check get_enclosure_[count_]by_medium API calls: failure!

Diffstat:
Msrc/senc2d.h | 4++--
Msrc/test_senc2d_square_behind_square.c | 29+++++++++++++++++++++++++++++
2 files changed, 31 insertions(+), 2 deletions(-)

diff --git a/src/senc2d.h b/src/senc2d.h @@ -173,7 +173,7 @@ senc2d_descriptor_get_enclosure_count SENC2D_API res_T senc2d_descriptor_get_enclosure_count_by_medium (const struct senc2d_descriptor* descriptor, - const unsigned medium, + const unsigned imed, unsigned* count); SENC2D_API res_T @@ -185,7 +185,7 @@ senc2d_descriptor_get_enclosure SENC2D_API res_T senc2d_descriptor_get_enclosure_by_medium (struct senc2d_descriptor* descriptor, - const unsigned medium, + const unsigned imed, const unsigned idx, struct senc2d_enclosure** enclosure); diff --git a/src/test_senc2d_square_behind_square.c b/src/test_senc2d_square_behind_square.c @@ -18,6 +18,31 @@ #include <rsys/double2.h> +void check_desc(struct senc2d_descriptor* desc) { + unsigned mcount, ecount, i; + CHK(senc2d_descriptor_get_max_medium(desc, &mcount) == RES_OK); + CHK(mcount == 2); + CHK(senc2d_descriptor_get_enclosure_count(desc, &ecount) == RES_OK); + FOR_EACH(i, 0, mcount) { + unsigned j, ecount_bym; + int found = 0; + senc2d_descriptor_get_enclosure_count_by_medium(desc, i, &ecount_bym); + FOR_EACH(j, 0, ecount_bym) { + struct senc2d_enclosure* enc; + struct senc2d_enclosure_header h; + unsigned c, k; + CHK(senc2d_descriptor_get_enclosure_by_medium(desc, i, j, &enc) == RES_OK); + CHK(senc2d_enclosure_get_header(enc, &h) == RES_OK); + found += (h.enclosed_medium == i); + CHK(senc2d_enclosure_ref_put(enc) == RES_OK); + } + ASSERT(found == ecount_bym); /* All the enclosures enclose medim i */ + ASSERT(ecount_bym); + ecount -= ecount_bym; + } + ASSERT(ecount == 0); +} + int main(int argc, char** argv) { @@ -58,10 +83,14 @@ main(int argc, char** argv) nvertices, get_position, &ctx) == RES_OK); CHK(senc2d_scene_analyze(scn, &desc) == RES_OK); + + check_desc(desc); /* Even further in +Y, even bigger */ d2(ctx.offset, -3, 30); ctx.scale = 7; + /* Front/back media have been exchanged: external enclosure shows 2 media + * analyze will fail */ ctx.front_media = medium1; ctx.back_media = medium0;