commit b3ead38f781671a746209ece4088070d41709a84
parent cc65cf5d2561666768ee2eb862c084e91868c766
Author: Christophe Coustet <christophe.coustet@meso-star.com>
Date: Fri, 3 Feb 2023 16:19:05 +0100
Improve tests
Diffstat:
5 files changed, 323 insertions(+), 319 deletions(-)
diff --git a/src/test_scpr_clip.c b/src/test_scpr_clip.c
@@ -31,17 +31,17 @@ dump_obj(FILE* stream, const struct scpr_mesh* mesh)
CHK(stream != NULL);
CHK(mesh != NULL);
- CHK(scpr_mesh_get_vertices_count(mesh, &n) == RES_OK);
+ OK(scpr_mesh_get_vertices_count(mesh, &n));
FOR_EACH(i, 0, n) {
double pos[2];
- CHK(scpr_mesh_get_position(mesh, i, pos) == RES_OK);
+ OK(scpr_mesh_get_position(mesh, i, pos));
fprintf(stream, "v %g %g 0\n", SPLIT2(pos));
}
- CHK(scpr_mesh_get_triangles_count(mesh, &n) == RES_OK);
+ OK(scpr_mesh_get_triangles_count(mesh, &n));
FOR_EACH(i, 0, n) {
size_t ids[3];
- CHK(scpr_mesh_get_indices(mesh, i, ids) == RES_OK);
+ OK(scpr_mesh_get_indices(mesh, i, ids));
fprintf(stream, "f %lu %lu %lu\n",
(unsigned long)(ids[0] + 1),
(unsigned long)(ids[1] + 1),
@@ -73,39 +73,38 @@ test_triangle
pctx.coords = clip_pos;
pctx.nverts = nverts;
pctx.ncomps = ncomps;
- CHK(scpr_polygon_create(allocator, &poly) == RES_OK);
- CHK(scpr_polygon_setup_indexed_vertices(poly, ncomps, pget_nverts, pget_pos, &pctx)
- == RES_OK);
+ OK(scpr_polygon_create(allocator, &poly));
+ OK(scpr_polygon_setup_indexed_vertices(poly, ncomps, pget_nverts, pget_pos, &pctx));
/* Check out-of-range */
mctx.coords = triangle_pos2;
mctx.nverts = 3;
mctx.indices = triangle_ids;
mctx.ntris = 1;
- CHK(scpr_mesh_setup_indexed_vertices
- (mesh, mctx.ntris, mget_ids, 3, mget_pos, &mctx) == RES_BAD_ARG);
+ BAD(scpr_mesh_setup_indexed_vertices
+ (mesh, mctx.ntris, mget_ids, 3, mget_pos, &mctx));
mctx.coords = triangle_pos1;
- CHK(scpr_mesh_setup_indexed_vertices
- (mesh, mctx.ntris, mget_ids, 3, mget_pos, &mctx) == RES_OK);
-
- CHK(scpr_mesh_clip(NULL, SCPR_OPERATIONS_COUNT__, NULL) == RES_BAD_ARG);
- CHK(scpr_mesh_clip(mesh, SCPR_OPERATIONS_COUNT__, NULL) == RES_BAD_ARG);
- CHK(scpr_mesh_clip(NULL, SCPR_OPERATIONS_COUNT__, poly) == RES_BAD_ARG);
- CHK(scpr_mesh_clip(mesh, SCPR_OPERATIONS_COUNT__, poly) == RES_BAD_ARG);
- CHK(scpr_mesh_clip(NULL, SCPR_SUB, NULL) == RES_BAD_ARG);
- CHK(scpr_mesh_clip(mesh, SCPR_SUB, NULL) == RES_BAD_ARG);
- CHK(scpr_mesh_clip(NULL, SCPR_SUB, poly) == RES_BAD_ARG);
- CHK(scpr_mesh_clip(mesh, SCPR_SUB, poly) == RES_OK);
+ OK(scpr_mesh_setup_indexed_vertices
+ (mesh, mctx.ntris, mget_ids, 3, mget_pos, &mctx));
+
+ BAD(scpr_mesh_clip(NULL, SCPR_OPERATIONS_COUNT__, NULL));
+ BAD(scpr_mesh_clip(mesh, SCPR_OPERATIONS_COUNT__, NULL));
+ BAD(scpr_mesh_clip(NULL, SCPR_OPERATIONS_COUNT__, poly));
+ BAD(scpr_mesh_clip(mesh, SCPR_OPERATIONS_COUNT__, poly));
+ BAD(scpr_mesh_clip(NULL, SCPR_SUB, NULL));
+ BAD(scpr_mesh_clip(mesh, SCPR_SUB, NULL));
+ BAD(scpr_mesh_clip(NULL, SCPR_SUB, poly));
+ OK(scpr_mesh_clip(mesh, SCPR_SUB, poly));
/*dump_obj(stdout, mesh);*/
- CHK(scpr_mesh_get_triangles_count(mesh, &ntris) == RES_OK);
+ OK(scpr_mesh_get_triangles_count(mesh, &ntris));
CHK(ntris == 3);
MEM_RM(allocator, *clip_pos);
MEM_RM(allocator, clip_pos);
- CHK(scpr_polygon_ref_put(poly) == RES_OK);
+ OK(scpr_polygon_ref_put(poly));
}
static void
@@ -130,24 +129,23 @@ test_quad
pctx.coords = clip_pos;
pctx.nverts = nverts;
pctx.ncomps = ncomps;
- CHK(scpr_polygon_create(allocator, &poly) == RES_OK);
- CHK(scpr_polygon_setup_indexed_vertices(poly, ncomps, pget_nverts, pget_pos, &pctx)
- == RES_OK);
+ OK(scpr_polygon_create(allocator, &poly));
+ OK(scpr_polygon_setup_indexed_vertices(poly, ncomps, pget_nverts, pget_pos, &pctx));
mctx.coords = quad_pos;
mctx.nverts = sizeof(quad_pos)/(2*sizeof(double));
mctx.indices = quad_ids;
mctx.ntris = sizeof(quad_ids)/(3*sizeof(size_t));
- CHK(scpr_mesh_setup_indexed_vertices
- (mesh, mctx.ntris, mget_ids, mctx.nverts, mget_pos, &mctx) == RES_OK);
+ OK(scpr_mesh_setup_indexed_vertices
+ (mesh, mctx.ntris, mget_ids, mctx.nverts, mget_pos, &mctx));
- CHK(scpr_mesh_clip(mesh, SCPR_AND, poly) == RES_OK);
+ OK(scpr_mesh_clip(mesh, SCPR_AND, poly));
/*dump_obj(stdout, mesh);*/
MEM_RM(allocator, *clip_pos);
MEM_RM(allocator, clip_pos);
- CHK(scpr_polygon_ref_put(poly) == RES_OK);
+ OK(scpr_polygon_ref_put(poly));
}
static void
@@ -222,18 +220,17 @@ test_disk
pctx.coords = clip_pos;
pctx.nverts = nverts;
pctx.ncomps = ncomps;
- CHK(scpr_polygon_create(allocator, &poly) == RES_OK);
- CHK(scpr_polygon_setup_indexed_vertices(poly, ncomps, pget_nverts, pget_pos, &pctx)
- == RES_OK);
+ OK(scpr_polygon_create(allocator, &poly));
+ OK(scpr_polygon_setup_indexed_vertices(poly, ncomps, pget_nverts, pget_pos, &pctx));
mctx.coords = pos;
mctx.nverts = sa_size(pos)/2;
mctx.indices = ids;
mctx.ntris = sa_size(ids)/3;
- CHK(scpr_mesh_setup_indexed_vertices
- (mesh, mctx.ntris, mget_ids, mctx.nverts, mget_pos, &mctx) == RES_OK);
+ OK(scpr_mesh_setup_indexed_vertices
+ (mesh, mctx.ntris, mget_ids, mctx.nverts, mget_pos, &mctx));
- CHK(scpr_mesh_clip(mesh, SCPR_SUB, poly) == RES_OK);
+ OK(scpr_mesh_clip(mesh, SCPR_SUB, poly));
dump_obj(stdout, mesh);
@@ -241,7 +238,7 @@ test_disk
MEM_RM(allocator, clip_pos);
sa_release(pos);
sa_release(ids);
- CHK(scpr_polygon_ref_put(poly) == RES_OK);
+ OK(scpr_polygon_ref_put(poly));
}
int
@@ -253,13 +250,13 @@ main(int argc, char** argv)
mem_init_proxy_allocator(&allocator, &mem_default_allocator);
- CHK(scpr_mesh_create(&allocator, &mesh) == RES_OK);
+ OK(scpr_mesh_create(&allocator, &mesh));
test_triangle(&allocator, mesh);
test_quad(&allocator, mesh);
test_disk(&allocator, mesh);
- CHK(scpr_mesh_ref_put(mesh) == RES_OK);
+ OK(scpr_mesh_ref_put(mesh));
check_memory_allocator(&allocator);
mem_shutdown_proxy_allocator(&allocator);
diff --git a/src/test_scpr_mesh.c b/src/test_scpr_mesh.c
@@ -55,17 +55,17 @@ main(int argc, char** argv)
mem_init_proxy_allocator(&allocator, &mem_default_allocator);
- CHK(scpr_mesh_create(NULL, NULL) == RES_BAD_ARG);
- CHK(scpr_mesh_create(&allocator, NULL) == RES_BAD_ARG);
- CHK(scpr_mesh_create(NULL, &mesh) == RES_OK);
+ BAD(scpr_mesh_create(NULL, NULL));
+ BAD(scpr_mesh_create(&allocator, NULL));
+ OK(scpr_mesh_create(NULL, &mesh));
- CHK(scpr_mesh_ref_get(NULL) == RES_BAD_ARG);
- CHK(scpr_mesh_ref_get(mesh) == RES_OK);
- CHK(scpr_mesh_ref_put(NULL) == RES_BAD_ARG);
- CHK(scpr_mesh_ref_put(mesh) == RES_OK);
- CHK(scpr_mesh_ref_put(mesh) == RES_OK);
+ BAD(scpr_mesh_ref_get(NULL));
+ OK(scpr_mesh_ref_get(mesh));
+ BAD(scpr_mesh_ref_put(NULL));
+ OK(scpr_mesh_ref_put(mesh));
+ OK(scpr_mesh_ref_put(mesh));
- CHK(scpr_mesh_create(&allocator, &mesh) == RES_OK);
+ OK(scpr_mesh_create(&allocator, &mesh));
ctx.coords = coords;
ctx.nverts = nverts;
@@ -73,122 +73,121 @@ main(int argc, char** argv)
ctx.ntris = ntris;
#define SETUP scpr_mesh_setup_indexed_vertices
- CHK(SETUP(NULL, 0, NULL, 0, NULL, NULL) == RES_BAD_ARG);
- CHK(SETUP(mesh, 0, NULL, 0, NULL, NULL) == RES_BAD_ARG);
- CHK(SETUP(NULL, ntris, NULL, 0, NULL, NULL) == RES_BAD_ARG);
- CHK(SETUP(mesh, ntris, NULL, 0, NULL, NULL) == RES_BAD_ARG);
- CHK(SETUP(NULL, 0, mget_ids, 0, NULL, NULL) == RES_BAD_ARG);
- CHK(SETUP(mesh, 0, mget_ids, 0, NULL, NULL) == RES_BAD_ARG);
- CHK(SETUP(NULL, ntris, mget_ids, 0, NULL, NULL) == RES_BAD_ARG);
- CHK(SETUP(mesh, ntris, mget_ids, 0, NULL, NULL) == RES_BAD_ARG);
- CHK(SETUP(NULL, 0, NULL, nverts, NULL, NULL) == RES_BAD_ARG);
- CHK(SETUP(mesh, 0, NULL, nverts, NULL, NULL) == RES_BAD_ARG);
- CHK(SETUP(NULL, ntris, NULL, nverts, NULL, NULL) == RES_BAD_ARG);
- CHK(SETUP(mesh, ntris, NULL, nverts, NULL, NULL) == RES_BAD_ARG);
- CHK(SETUP(NULL, 0, mget_ids, nverts, NULL, NULL) == RES_BAD_ARG);
- CHK(SETUP(mesh, 0, mget_ids, nverts, NULL, NULL) == RES_BAD_ARG);
- CHK(SETUP(NULL, ntris, mget_ids, nverts, NULL, NULL) == RES_BAD_ARG);
- CHK(SETUP(mesh, ntris, mget_ids, nverts, NULL, NULL) == RES_BAD_ARG);
- CHK(SETUP(NULL, 0, NULL, 0, mget_pos, NULL) == RES_BAD_ARG);
- CHK(SETUP(mesh, 0, NULL, 0, mget_pos, NULL) == RES_BAD_ARG);
- CHK(SETUP(NULL, ntris, NULL, 0, mget_pos, NULL) == RES_BAD_ARG);
- CHK(SETUP(mesh, ntris, NULL, 0, mget_pos, NULL) == RES_BAD_ARG);
- CHK(SETUP(NULL, 0, mget_ids, 0, mget_pos, NULL) == RES_BAD_ARG);
- CHK(SETUP(mesh, 0, mget_ids, 0, mget_pos, NULL) == RES_BAD_ARG);
- CHK(SETUP(NULL, ntris, mget_ids, 0, mget_pos, NULL) == RES_BAD_ARG);
- CHK(SETUP(mesh, ntris, mget_ids, 0, mget_pos, NULL) == RES_BAD_ARG);
- CHK(SETUP(NULL, 0, NULL, nverts, mget_pos, NULL) == RES_BAD_ARG);
- CHK(SETUP(mesh, 0, NULL, nverts, mget_pos, NULL) == RES_BAD_ARG);
- CHK(SETUP(NULL, ntris, NULL, nverts, mget_pos, NULL) == RES_BAD_ARG);
- CHK(SETUP(mesh, ntris, NULL, nverts, mget_pos, NULL) == RES_BAD_ARG);
- CHK(SETUP(NULL, 0, mget_ids, nverts, mget_pos, NULL) == RES_BAD_ARG);
- CHK(SETUP(mesh, 0, mget_ids, nverts, mget_pos, NULL) == RES_BAD_ARG);
- CHK(SETUP(NULL, ntris, mget_ids, nverts, mget_pos, NULL) == RES_BAD_ARG);
- CHK(SETUP(mesh, ntris, mget_ids, nverts, mget_pos, NULL) == RES_BAD_ARG);
- CHK(SETUP(NULL, 0, NULL, 0, NULL, &ctx) == RES_BAD_ARG);
- CHK(SETUP(mesh, 0, NULL, 0, NULL, &ctx) == RES_BAD_ARG);
- CHK(SETUP(NULL, ntris, NULL, 0, NULL, &ctx) == RES_BAD_ARG);
- CHK(SETUP(mesh, ntris, NULL, 0, NULL, &ctx) == RES_BAD_ARG);
- CHK(SETUP(NULL, 0, mget_ids, 0, NULL, &ctx) == RES_BAD_ARG);
- CHK(SETUP(mesh, 0, mget_ids, 0, NULL, &ctx) == RES_BAD_ARG);
- CHK(SETUP(NULL, ntris, mget_ids, 0, NULL, &ctx) == RES_BAD_ARG);
- CHK(SETUP(mesh, ntris, mget_ids, 0, NULL, &ctx) == RES_BAD_ARG);
- CHK(SETUP(NULL, 0, NULL, nverts, NULL, &ctx) == RES_BAD_ARG);
- CHK(SETUP(mesh, 0, NULL, nverts, NULL, &ctx) == RES_BAD_ARG);
- CHK(SETUP(NULL, ntris, NULL, nverts, NULL, &ctx) == RES_BAD_ARG);
- CHK(SETUP(mesh, ntris, NULL, nverts, NULL, &ctx) == RES_BAD_ARG);
- CHK(SETUP(NULL, 0, mget_ids, nverts, NULL, &ctx) == RES_BAD_ARG);
- CHK(SETUP(mesh, 0, mget_ids, nverts, NULL, &ctx) == RES_BAD_ARG);
- CHK(SETUP(NULL, ntris, mget_ids, nverts, NULL, &ctx) == RES_BAD_ARG);
- CHK(SETUP(mesh, ntris, mget_ids, nverts, NULL, &ctx) == RES_BAD_ARG);
- CHK(SETUP(NULL, 0, NULL, 0, mget_pos, &ctx) == RES_BAD_ARG);
- CHK(SETUP(mesh, 0, NULL, 0, mget_pos, &ctx) == RES_BAD_ARG);
- CHK(SETUP(NULL, ntris, NULL, 0, mget_pos, &ctx) == RES_BAD_ARG);
- CHK(SETUP(mesh, ntris, NULL, 0, mget_pos, &ctx) == RES_BAD_ARG);
- CHK(SETUP(NULL, 0, mget_ids, 0, mget_pos, &ctx) == RES_BAD_ARG);
- CHK(SETUP(mesh, 0, mget_ids, 0, mget_pos, &ctx) == RES_BAD_ARG);
- CHK(SETUP(NULL, ntris, mget_ids, 0, mget_pos, &ctx) == RES_BAD_ARG);
- CHK(SETUP(mesh, ntris, mget_ids, 0, mget_pos, &ctx) == RES_BAD_ARG);
- CHK(SETUP(NULL, 0, NULL, nverts, mget_pos, &ctx) == RES_BAD_ARG);
- CHK(SETUP(mesh, 0, NULL, nverts, mget_pos, &ctx) == RES_BAD_ARG);
- CHK(SETUP(NULL, ntris, NULL, nverts, mget_pos, &ctx) == RES_BAD_ARG);
- CHK(SETUP(mesh, ntris, NULL, nverts, mget_pos, &ctx) == RES_BAD_ARG);
- CHK(SETUP(NULL, 0, mget_ids, nverts, mget_pos, &ctx) == RES_BAD_ARG);
- CHK(SETUP(mesh, 0, mget_ids, nverts, mget_pos, &ctx) == RES_BAD_ARG);
- CHK(SETUP(NULL, ntris, mget_ids, nverts, mget_pos, &ctx) == RES_BAD_ARG);
- CHK(SETUP(mesh, ntris, mget_ids, nverts, mget_pos, &ctx) == RES_OK);
+ BAD(SETUP(NULL, 0, NULL, 0, NULL, NULL));
+ BAD(SETUP(mesh, 0, NULL, 0, NULL, NULL));
+ BAD(SETUP(NULL, ntris, NULL, 0, NULL, NULL));
+ BAD(SETUP(mesh, ntris, NULL, 0, NULL, NULL));
+ BAD(SETUP(NULL, 0, mget_ids, 0, NULL, NULL));
+ BAD(SETUP(mesh, 0, mget_ids, 0, NULL, NULL));
+ BAD(SETUP(NULL, ntris, mget_ids, 0, NULL, NULL));
+ BAD(SETUP(mesh, ntris, mget_ids, 0, NULL, NULL));
+ BAD(SETUP(NULL, 0, NULL, nverts, NULL, NULL));
+ BAD(SETUP(mesh, 0, NULL, nverts, NULL, NULL));
+ BAD(SETUP(NULL, ntris, NULL, nverts, NULL, NULL));
+ BAD(SETUP(mesh, ntris, NULL, nverts, NULL, NULL));
+ BAD(SETUP(NULL, 0, mget_ids, nverts, NULL, NULL));
+ BAD(SETUP(mesh, 0, mget_ids, nverts, NULL, NULL));
+ BAD(SETUP(NULL, ntris, mget_ids, nverts, NULL, NULL));
+ BAD(SETUP(mesh, ntris, mget_ids, nverts, NULL, NULL));
+ BAD(SETUP(NULL, 0, NULL, 0, mget_pos, NULL));
+ BAD(SETUP(mesh, 0, NULL, 0, mget_pos, NULL));
+ BAD(SETUP(NULL, ntris, NULL, 0, mget_pos, NULL));
+ BAD(SETUP(mesh, ntris, NULL, 0, mget_pos, NULL));
+ BAD(SETUP(NULL, 0, mget_ids, 0, mget_pos, NULL));
+ BAD(SETUP(mesh, 0, mget_ids, 0, mget_pos, NULL));
+ BAD(SETUP(NULL, ntris, mget_ids, 0, mget_pos, NULL));
+ BAD(SETUP(mesh, ntris, mget_ids, 0, mget_pos, NULL));
+ BAD(SETUP(NULL, 0, NULL, nverts, mget_pos, NULL));
+ BAD(SETUP(mesh, 0, NULL, nverts, mget_pos, NULL));
+ BAD(SETUP(NULL, ntris, NULL, nverts, mget_pos, NULL));
+ BAD(SETUP(mesh, ntris, NULL, nverts, mget_pos, NULL));
+ BAD(SETUP(NULL, 0, mget_ids, nverts, mget_pos, NULL));
+ BAD(SETUP(mesh, 0, mget_ids, nverts, mget_pos, NULL));
+ BAD(SETUP(NULL, ntris, mget_ids, nverts, mget_pos, NULL));
+ BAD(SETUP(mesh, ntris, mget_ids, nverts, mget_pos, NULL));
+ BAD(SETUP(NULL, 0, NULL, 0, NULL, &ctx));
+ BAD(SETUP(mesh, 0, NULL, 0, NULL, &ctx));
+ BAD(SETUP(NULL, ntris, NULL, 0, NULL, &ctx));
+ BAD(SETUP(mesh, ntris, NULL, 0, NULL, &ctx));
+ BAD(SETUP(NULL, 0, mget_ids, 0, NULL, &ctx));
+ BAD(SETUP(mesh, 0, mget_ids, 0, NULL, &ctx));
+ BAD(SETUP(NULL, ntris, mget_ids, 0, NULL, &ctx));
+ BAD(SETUP(mesh, ntris, mget_ids, 0, NULL, &ctx));
+ BAD(SETUP(NULL, 0, NULL, nverts, NULL, &ctx));
+ BAD(SETUP(mesh, 0, NULL, nverts, NULL, &ctx));
+ BAD(SETUP(NULL, ntris, NULL, nverts, NULL, &ctx));
+ BAD(SETUP(mesh, ntris, NULL, nverts, NULL, &ctx));
+ BAD(SETUP(NULL, 0, mget_ids, nverts, NULL, &ctx));
+ BAD(SETUP(mesh, 0, mget_ids, nverts, NULL, &ctx));
+ BAD(SETUP(NULL, ntris, mget_ids, nverts, NULL, &ctx));
+ BAD(SETUP(mesh, ntris, mget_ids, nverts, NULL, &ctx));
+ BAD(SETUP(NULL, 0, NULL, 0, mget_pos, &ctx));
+ BAD(SETUP(mesh, 0, NULL, 0, mget_pos, &ctx));
+ BAD(SETUP(NULL, ntris, NULL, 0, mget_pos, &ctx));
+ BAD(SETUP(mesh, ntris, NULL, 0, mget_pos, &ctx));
+ BAD(SETUP(NULL, 0, mget_ids, 0, mget_pos, &ctx));
+ BAD(SETUP(mesh, 0, mget_ids, 0, mget_pos, &ctx));
+ BAD(SETUP(NULL, ntris, mget_ids, 0, mget_pos, &ctx));
+ BAD(SETUP(mesh, ntris, mget_ids, 0, mget_pos, &ctx));
+ BAD(SETUP(NULL, 0, NULL, nverts, mget_pos, &ctx));
+ BAD(SETUP(mesh, 0, NULL, nverts, mget_pos, &ctx));
+ BAD(SETUP(NULL, ntris, NULL, nverts, mget_pos, &ctx));
+ BAD(SETUP(mesh, ntris, NULL, nverts, mget_pos, &ctx));
+ BAD(SETUP(NULL, 0, mget_ids, nverts, mget_pos, &ctx));
+ BAD(SETUP(mesh, 0, mget_ids, nverts, mget_pos, &ctx));
+ BAD(SETUP(NULL, ntris, mget_ids, nverts, mget_pos, &ctx));
+ OK(SETUP(mesh, ntris, mget_ids, nverts, mget_pos, &ctx));
ctx.indices = indices_bad;
- CHK(SETUP(mesh, 1, mget_ids, nverts, mget_pos, &ctx) == RES_BAD_ARG);
+ BAD(SETUP(mesh, 1, mget_ids, nverts, mget_pos, &ctx));
#undef SETUP
- CHK(scpr_mesh_get_triangles_count(NULL, NULL) == RES_BAD_ARG);
- CHK(scpr_mesh_get_triangles_count(mesh, NULL) == RES_BAD_ARG);
- CHK(scpr_mesh_get_triangles_count(NULL, &n) == RES_BAD_ARG);
- CHK(scpr_mesh_get_triangles_count(mesh, &n) == RES_OK);
+ BAD(scpr_mesh_get_triangles_count(NULL, NULL));
+ BAD(scpr_mesh_get_triangles_count(mesh, NULL));
+ BAD(scpr_mesh_get_triangles_count(NULL, &n));
+ OK(scpr_mesh_get_triangles_count(mesh, &n));
CHK(n == 0);
- CHK(scpr_mesh_get_vertices_count(NULL, NULL) == RES_BAD_ARG);
- CHK(scpr_mesh_get_vertices_count(mesh, NULL) == RES_BAD_ARG);
- CHK(scpr_mesh_get_vertices_count(NULL, &n) == RES_BAD_ARG);
- CHK(scpr_mesh_get_vertices_count(mesh, &n) == RES_OK);
+ BAD(scpr_mesh_get_vertices_count(NULL, NULL));
+ BAD(scpr_mesh_get_vertices_count(mesh, NULL));
+ BAD(scpr_mesh_get_vertices_count(NULL, &n));
+ OK(scpr_mesh_get_vertices_count(mesh, &n));
CHK(n == 0);
ctx.indices = indices;
- CHK(scpr_mesh_setup_indexed_vertices
- (mesh, ntris, mget_ids, nverts, mget_pos, &ctx) == RES_OK);
- CHK(scpr_mesh_get_triangles_count(mesh, &n) == RES_OK);
+ OK(scpr_mesh_setup_indexed_vertices(mesh, ntris, mget_ids, nverts, mget_pos, &ctx));
+ OK(scpr_mesh_get_triangles_count(mesh, &n));
CHK(n == ntris);
- CHK(scpr_mesh_get_vertices_count(mesh, &n) == RES_OK);
+ OK(scpr_mesh_get_vertices_count(mesh, &n));
CHK(n == nverts);
- CHK(scpr_mesh_get_indices(NULL, ntris, NULL) == RES_BAD_ARG);
- CHK(scpr_mesh_get_indices(mesh, ntris, NULL) == RES_BAD_ARG);
- CHK(scpr_mesh_get_indices(NULL, 0, NULL) == RES_BAD_ARG);
- CHK(scpr_mesh_get_indices(mesh, 0, NULL) == RES_BAD_ARG);
- CHK(scpr_mesh_get_indices(NULL, ntris, ids) == RES_BAD_ARG);
- CHK(scpr_mesh_get_indices(mesh, ntris, ids) == RES_BAD_ARG);
- CHK(scpr_mesh_get_indices(NULL, 0, ids) == RES_BAD_ARG);
+ BAD(scpr_mesh_get_indices(NULL, ntris, NULL));
+ BAD(scpr_mesh_get_indices(mesh, ntris, NULL));
+ BAD(scpr_mesh_get_indices(NULL, 0, NULL));
+ BAD(scpr_mesh_get_indices(mesh, 0, NULL));
+ BAD(scpr_mesh_get_indices(NULL, ntris, ids));
+ BAD(scpr_mesh_get_indices(mesh, ntris, ids));
+ BAD(scpr_mesh_get_indices(NULL, 0, ids));
FOR_EACH(i, 0, ntris) {
- CHK(scpr_mesh_get_indices(mesh, i, ids) == RES_OK);
+ OK(scpr_mesh_get_indices(mesh, i, ids));
CHK(ids[0] == indices[i*3+0]);
CHK(ids[1] == indices[i*3+1]);
CHK(ids[2] == indices[i*3+2]);
}
- CHK(scpr_mesh_get_position(NULL, nverts, NULL) == RES_BAD_ARG);
- CHK(scpr_mesh_get_position(mesh, nverts, NULL) == RES_BAD_ARG);
- CHK(scpr_mesh_get_position(NULL, 0, NULL) == RES_BAD_ARG);
- CHK(scpr_mesh_get_position(mesh, 0, NULL) == RES_BAD_ARG);
- CHK(scpr_mesh_get_position(NULL, nverts, pos) == RES_BAD_ARG);
- CHK(scpr_mesh_get_position(mesh, nverts, pos) == RES_BAD_ARG);
- CHK(scpr_mesh_get_position(NULL, 0, pos) == RES_BAD_ARG);
+ BAD(scpr_mesh_get_position(NULL, nverts, NULL));
+ BAD(scpr_mesh_get_position(mesh, nverts, NULL));
+ BAD(scpr_mesh_get_position(NULL, 0, NULL));
+ BAD(scpr_mesh_get_position(mesh, 0, NULL));
+ BAD(scpr_mesh_get_position(NULL, nverts, pos));
+ BAD(scpr_mesh_get_position(mesh, nverts, pos));
+ CHK(scpr_mesh_get_position(NULL, 0, pos));
FOR_EACH(i, 0, nverts) {
- CHK(scpr_mesh_get_position(mesh, i, pos) == RES_OK);
+ OK(scpr_mesh_get_position(mesh, i, pos));
CHK(pos[0] == coords[i*2+0]);
CHK(pos[1] == coords[i*2+1]);
}
- CHK(scpr_mesh_ref_put(mesh) == RES_OK);
+ OK(scpr_mesh_ref_put(mesh));
check_memory_allocator(&allocator);
mem_shutdown_proxy_allocator(&allocator);
diff --git a/src/test_scpr_offset.c b/src/test_scpr_offset.c
@@ -47,12 +47,6 @@ test_single(void)
1.0, 2305843009213,
0.0, 1.0
};
- const double coords3[] = {
- 9223372036855, 0.0,
- 0.0, 1.0,
- 1.0, 2305843009214,
- 1.0, 0.0
- };
double** coords;
size_t nverts[] = { 4 };
size_t ncomps = 1;
@@ -68,52 +62,54 @@ test_single(void)
*coords = (double*)MEM_CALLOC(&allocator, nverts[0], 2*sizeof(**coords));
memcpy(*coords, coords0, 2*nverts[0]*sizeof(**coords));
- CHK(scpr_polygon_create(&allocator, &polygon) == RES_OK);
- CHK(scpr_polygon_create(&allocator, &expected) == RES_OK);
+ OK(scpr_polygon_create(&allocator, &polygon));
+ OK(scpr_polygon_create(&allocator, &expected));
ctx.coords = coords;
ctx.nverts = nverts;
ctx.ncomps = ncomps;
- CHK(scpr_polygon_setup_indexed_vertices(polygon, ncomps, pget_nverts, pget_pos, &ctx)
- == RES_OK);
- CHK(scpr_polygon_setup_indexed_vertices(expected, ncomps, pget_nverts, pget_pos, &ctx)
- == RES_OK);
+ OK(scpr_polygon_setup_indexed_vertices(polygon, ncomps, pget_nverts, pget_pos, &ctx));
+ OK(scpr_polygon_setup_indexed_vertices(expected, ncomps, pget_nverts, pget_pos, &ctx));
/* Offset 0 = unchanged */
- CHK(scpr_offset_polygon(polygon, 0, SCPR_JOIN_MITER) == RES_OK);
- CHK(scpr_polygon_eq(polygon, expected, &eq) == RES_OK);
+ OK(scpr_offset_polygon(polygon, 0, SCPR_JOIN_MITER));
+ OK(scpr_polygon_eq(polygon, expected, &eq));
CHK(eq);
CHK(check_stability(polygon));
/* Offset 1 */
memcpy(*coords, coords1, 2*nverts[0]*sizeof(**coords));
- CHK(scpr_polygon_setup_indexed_vertices(expected, ncomps, pget_nverts, pget_pos, &ctx)
- == RES_OK);
+ OK(scpr_polygon_setup_indexed_vertices(expected, ncomps, pget_nverts, pget_pos, &ctx));
- CHK(scpr_offset_polygon(polygon, 1, SCPR_JOIN_MITER) == RES_OK);
- CHK(scpr_polygon_eq(polygon, expected, &eq) == RES_OK);
+ OK(scpr_offset_polygon(polygon, 1, SCPR_JOIN_MITER));
+ OK(scpr_polygon_eq(polygon, expected, &eq));
CHK(eq);
CHK(check_stability(polygon));
/* Offset -1: back to original polygon */
memcpy(*coords, coords0, 2*nverts[0]*sizeof(**coords));
- CHK(scpr_polygon_setup_indexed_vertices(expected, ncomps, pget_nverts, pget_pos, &ctx)
- == RES_OK);
+ OK(scpr_polygon_setup_indexed_vertices(expected, ncomps, pget_nverts, pget_pos, &ctx));
- CHK(scpr_offset_polygon(polygon, -1, SCPR_JOIN_MITER) == RES_OK);
- CHK(scpr_polygon_eq(polygon, expected, &eq) == RES_OK);
+ OK(scpr_offset_polygon(polygon, -1, SCPR_JOIN_MITER));
+ OK(scpr_polygon_eq(polygon, expected, &eq));
+ CHK(eq);
+ CHK(check_stability(polygon));
+
+ /* Non representable offset: truncation will ensure stability */
+ OK(scpr_offset_polygon(polygon, 0.123456789, SCPR_JOIN_MITER));
+ OK(scpr_offset_polygon(expected, 0.123457, SCPR_JOIN_MITER));
+ OK(scpr_polygon_eq(polygon, expected, &eq));
CHK(eq);
CHK(check_stability(polygon));
/* Offset -5: empty polygon */
ncomps = 0;
ctx.ncomps = ncomps;
- CHK(scpr_polygon_setup_indexed_vertices(expected, ncomps, pget_nverts, pget_pos, &ctx)
- == RES_OK);
+ OK(scpr_polygon_setup_indexed_vertices(expected, ncomps, pget_nverts, pget_pos, &ctx));
- CHK(scpr_offset_polygon(polygon, -5, SCPR_JOIN_MITER) == RES_OK);
- CHK(scpr_polygon_eq(polygon, expected, &eq) == RES_OK);
+ OK(scpr_offset_polygon(polygon, -5, SCPR_JOIN_MITER));
+ OK(scpr_polygon_eq(polygon, expected, &eq));
CHK(eq);
CHK(check_stability(polygon));
@@ -123,33 +119,29 @@ test_single(void)
ncomps = 1;
ctx.ncomps = ncomps;
- CHK(scpr_polygon_setup_indexed_vertices(polygon, ncomps, pget_nverts, pget_pos, &ctx)
- == RES_OK);
- CHK(scpr_polygon_setup_indexed_vertices(expected, ncomps, pget_nverts, pget_pos, &ctx)
- == RES_OK);
+ OK(scpr_polygon_setup_indexed_vertices(polygon, ncomps, pget_nverts, pget_pos, &ctx));
+ OK(scpr_polygon_setup_indexed_vertices(expected, ncomps, pget_nverts, pget_pos, &ctx));
/* Offset 0 = unchanged */
- CHK(scpr_offset_polygon(polygon, 0, SCPR_JOIN_MITER) == RES_OK);
- CHK(scpr_polygon_eq(polygon, expected, &eq) == RES_OK);
+ OK(scpr_offset_polygon(polygon, 0, SCPR_JOIN_MITER));
+ OK(scpr_polygon_eq(polygon, expected, &eq));
CHK(eq);
CHK(check_stability(polygon));
/* Check non-effect of CW/CCW */
memcpy(*coords, coords2_reverse, 2*nverts[0]*sizeof(**coords));
- CHK(scpr_polygon_setup_indexed_vertices(expected, ncomps, pget_nverts, pget_pos, &ctx)
- == RES_OK);
- CHK(scpr_polygon_eq(polygon, expected, &eq) == RES_OK);
+ OK(scpr_polygon_setup_indexed_vertices(polygon, ncomps, pget_nverts, pget_pos, &ctx));
+ OK(scpr_offset_polygon(polygon, 0, SCPR_JOIN_MITER));
+ OK(scpr_polygon_eq(polygon, expected, &eq));
CHK(eq);
CHK(check_stability(polygon));
- /* Check out of range */
- memcpy(*coords, coords3, 2*nverts[0]*sizeof(**coords));
- CHK(scpr_polygon_setup_indexed_vertices(polygon, ncomps, pget_nverts, pget_pos, &ctx)
- == RES_BAD_ARG);
+ /* Check out of range after offset being detected */
+ BAD(scpr_offset_polygon(polygon, 1, SCPR_JOIN_MITER));
/* Cleanup */
- CHK(scpr_polygon_ref_put(polygon) == RES_OK);
- CHK(scpr_polygon_ref_put(expected) == RES_OK);
+ OK(scpr_polygon_ref_put(polygon));
+ OK(scpr_polygon_ref_put(expected));
MEM_RM(&allocator, *coords);
MEM_RM(&allocator, coords);
@@ -209,66 +201,60 @@ test_double(void)
memcpy(*coords, coords0, 2*nverts[0]*sizeof(**coords));
memcpy(*(coords+1), coords1, 2*nverts[1]*sizeof(**coords));
- CHK(scpr_polygon_create(&allocator, &polygon) == RES_OK);
- CHK(scpr_polygon_create(&allocator, &expected) == RES_OK);
+ OK(scpr_polygon_create(&allocator, &polygon));
+ OK(scpr_polygon_create(&allocator, &expected));
ctx.coords = coords;
ctx.nverts = nverts;
ctx.ncomps = ncomps;
- CHK(scpr_polygon_setup_indexed_vertices(polygon, ncomps, pget_nverts, pget_pos, &ctx)
- == RES_OK);
- CHK(scpr_polygon_setup_indexed_vertices(expected, ncomps, pget_nverts, pget_pos, &ctx)
- == RES_OK);
+ OK(scpr_polygon_setup_indexed_vertices(polygon, ncomps, pget_nverts, pget_pos, &ctx));
+ OK(scpr_polygon_setup_indexed_vertices(expected, ncomps, pget_nverts, pget_pos, &ctx));
/* Offset 0 = unchanged */
- CHK(scpr_offset_polygon(polygon, 0, SCPR_JOIN_MITER) == RES_OK);
- CHK(scpr_polygon_eq(polygon, expected, &eq) == RES_OK);
+ OK(scpr_offset_polygon(polygon, 0, SCPR_JOIN_MITER));
+ OK(scpr_polygon_eq(polygon, expected, &eq));
CHK(eq);
/* Offset 1 */
memcpy(*coords, coords2, 2*nverts[0]*sizeof(**coords));
memcpy(*(coords+1), coords3, 2*nverts[1]*sizeof(**coords));
- CHK(scpr_polygon_setup_indexed_vertices(expected, ncomps, pget_nverts, pget_pos, &ctx)
- == RES_OK);
+ OK(scpr_polygon_setup_indexed_vertices(expected, ncomps, pget_nverts, pget_pos, &ctx));
- CHK(scpr_offset_polygon(polygon, 1, SCPR_JOIN_MITER) == RES_OK);
- CHK(scpr_polygon_eq(polygon, expected, &eq) == RES_OK);
+ OK(scpr_offset_polygon(polygon, 1, SCPR_JOIN_MITER));
+ OK(scpr_polygon_eq(polygon, expected, &eq));
CHK(eq);
/* Offset -1: back to original polygon */
memcpy(*coords, coords0, 2*nverts[0]*sizeof(**coords));
memcpy(*(coords+1), coords1, 2*nverts[1]*sizeof(**coords));
- CHK(scpr_polygon_setup_indexed_vertices(expected, ncomps, pget_nverts, pget_pos, &ctx)
- == RES_OK);
+ OK(scpr_polygon_setup_indexed_vertices(expected, ncomps, pget_nverts, pget_pos, &ctx));
- CHK(scpr_offset_polygon(polygon, -1, SCPR_JOIN_MITER) == RES_OK);
- CHK(scpr_polygon_eq(polygon, expected, &eq) == RES_OK);
+ OK(scpr_offset_polygon(polygon, -1, SCPR_JOIN_MITER));
+ OK(scpr_polygon_eq(polygon, expected, &eq));
CHK(eq);
/* Offset 4.5: the 2 squares merge */
ncomps = 1;
ctx.ncomps = ncomps;
memcpy(*coords, coords4, 2*nverts[0]*sizeof(**coords));
- CHK(scpr_polygon_setup_indexed_vertices(expected, ncomps, pget_nverts, pget_pos, &ctx)
- == RES_OK);
+ OK(scpr_polygon_setup_indexed_vertices(expected, ncomps, pget_nverts, pget_pos, &ctx));
- CHK(scpr_offset_polygon(polygon, 4.5, SCPR_JOIN_MITER) == RES_OK);
- CHK(scpr_polygon_eq(polygon, expected, &eq) == RES_OK);
+ OK(scpr_offset_polygon(polygon, 4.5, SCPR_JOIN_MITER));
+ OK(scpr_polygon_eq(polygon, expected, &eq));
CHK(eq);
/* Offset -5: empty polygon */
ncomps = 0;
ctx.ncomps = ncomps;
- CHK(scpr_polygon_setup_indexed_vertices(expected, ncomps, pget_nverts, pget_pos, &ctx)
- == RES_OK);
+ OK(scpr_polygon_setup_indexed_vertices(expected, ncomps, pget_nverts, pget_pos, &ctx));
- CHK(scpr_offset_polygon(polygon, -5, SCPR_JOIN_MITER) == RES_OK);
- CHK(scpr_polygon_eq(polygon, expected, &eq) == RES_OK);
+ OK(scpr_offset_polygon(polygon, -5, SCPR_JOIN_MITER));
+ OK(scpr_polygon_eq(polygon, expected, &eq));
CHK(eq);
- CHK(scpr_polygon_ref_put(polygon) == RES_OK);
- CHK(scpr_polygon_ref_put(expected) == RES_OK);
+ OK(scpr_polygon_ref_put(polygon));
+ OK(scpr_polygon_ref_put(expected));
MEM_RM(&allocator, *coords);
MEM_RM(&allocator, *(coords+1));
@@ -329,52 +315,47 @@ test_internal(void)
memcpy(*coords, coords0, 2*nverts[0]*sizeof(**coords));
memcpy(*(coords+1), coords1, 2*nverts[1]*sizeof(**coords));
- CHK(scpr_polygon_create(&allocator, &polygon) == RES_OK);
- CHK(scpr_polygon_create(&allocator, &expected) == RES_OK);
+ OK(scpr_polygon_create(&allocator, &polygon));
+ OK(scpr_polygon_create(&allocator, &expected));
ctx.coords = coords;
ctx.nverts = nverts;
ctx.ncomps = ncomps;
- CHK(scpr_polygon_setup_indexed_vertices(polygon, ncomps, pget_nverts, pget_pos, &ctx)
- == RES_OK);
- CHK(scpr_polygon_setup_indexed_vertices(expected, ncomps, pget_nverts, pget_pos, &ctx)
- == RES_OK);
+ OK(scpr_polygon_setup_indexed_vertices(polygon, ncomps, pget_nverts, pget_pos, &ctx));
+ OK(scpr_polygon_setup_indexed_vertices(expected, ncomps, pget_nverts, pget_pos, &ctx));
/* Offset 0 = unchanged */
- CHK(scpr_offset_polygon(polygon, 0, SCPR_JOIN_MITER) == RES_OK);
- CHK(scpr_polygon_eq(polygon, expected, &eq) == RES_OK);
+ OK(scpr_offset_polygon(polygon, 0, SCPR_JOIN_MITER));
+ OK(scpr_polygon_eq(polygon, expected, &eq));
CHK(eq);
/* Offset -1 */
memcpy(*coords, coords3, 2*nverts[0]*sizeof(**coords));
memcpy(*(coords+1), coords2, 2*nverts[1]*sizeof(**coords));
- CHK(scpr_polygon_setup_indexed_vertices(expected, ncomps, pget_nverts, pget_pos, &ctx)
- == RES_OK);
+ OK(scpr_polygon_setup_indexed_vertices(expected, ncomps, pget_nverts, pget_pos, &ctx));
- CHK(scpr_offset_polygon(polygon, -1, SCPR_JOIN_MITER) == RES_OK);
- CHK(scpr_polygon_eq(polygon, expected, &eq) == RES_OK);
+ OK(scpr_offset_polygon(polygon, -1, SCPR_JOIN_MITER));
+ OK(scpr_polygon_eq(polygon, expected, &eq));
CHK(eq);
/* Offset 1: back to original polygon */
memcpy(*coords, coords0, 2*nverts[0]*sizeof(**coords));
memcpy(*(coords+1), coords1, 2*nverts[1]*sizeof(**coords));
- CHK(scpr_polygon_setup_indexed_vertices(expected, ncomps, pget_nverts, pget_pos, &ctx)
- == RES_OK);
+ OK(scpr_polygon_setup_indexed_vertices(expected, ncomps, pget_nverts, pget_pos, &ctx));
- CHK(scpr_offset_polygon(polygon, 1, SCPR_JOIN_MITER) == RES_OK);
- CHK(scpr_polygon_eq(polygon, expected, &eq) == RES_OK);
+ OK(scpr_offset_polygon(polygon, 1, SCPR_JOIN_MITER));
+ OK(scpr_polygon_eq(polygon, expected, &eq));
CHK(eq);
/* Offset 5: internal path disappears */
ncomps = 1;
ctx.ncomps = ncomps;
memcpy(*coords, coords4, 2*nverts[0]*sizeof(**coords));
- CHK(scpr_polygon_setup_indexed_vertices(expected, ncomps, pget_nverts, pget_pos, &ctx)
- == RES_OK);
+ OK(scpr_polygon_setup_indexed_vertices(expected, ncomps, pget_nverts, pget_pos, &ctx));
- CHK(scpr_offset_polygon(polygon, 5, SCPR_JOIN_MITER) == RES_OK);
- CHK(scpr_polygon_eq(polygon, expected, &eq) == RES_OK);
+ OK(scpr_offset_polygon(polygon, 5, SCPR_JOIN_MITER));
+ OK(scpr_polygon_eq(polygon, expected, &eq));
CHK(eq);
/* From the original polygon, offset -2.5: empty polygon */
@@ -382,20 +363,18 @@ test_internal(void)
ctx.ncomps = ncomps;
memcpy(*coords, coords0, 2*nverts[0]*sizeof(**coords));
memcpy(*(coords+1), coords1, 2*nverts[1]*sizeof(**coords));
- CHK(scpr_polygon_setup_indexed_vertices(polygon, ncomps, pget_nverts, pget_pos, &ctx)
- == RES_OK);
+ OK(scpr_polygon_setup_indexed_vertices(polygon, ncomps, pget_nverts, pget_pos, &ctx));
ncomps = 0;
ctx.ncomps = ncomps;
- CHK(scpr_polygon_setup_indexed_vertices(expected, ncomps, pget_nverts, pget_pos, &ctx)
- == RES_OK);
+ OK(scpr_polygon_setup_indexed_vertices(expected, ncomps, pget_nverts, pget_pos, &ctx));
- CHK(scpr_offset_polygon(polygon, -2.5, SCPR_JOIN_MITER) == RES_OK);
- CHK(scpr_polygon_eq(polygon, expected, &eq) == RES_OK);
+ OK(scpr_offset_polygon(polygon, -2.5, SCPR_JOIN_MITER));
+ OK(scpr_polygon_eq(polygon, expected, &eq));
CHK(eq);
- CHK(scpr_polygon_ref_put(polygon) == RES_OK);
- CHK(scpr_polygon_ref_put(expected) == RES_OK);
+ OK(scpr_polygon_ref_put(polygon));
+ OK(scpr_polygon_ref_put(expected));
MEM_RM(&allocator, *coords);
MEM_RM(&allocator, *(coords+1));
diff --git a/src/test_scpr_polygon.c b/src/test_scpr_polygon.c
@@ -26,17 +26,28 @@ main(int argc, char** argv)
{
double coords0[] = {
0.0, 0.0,
- 0.0, 0.5,
- 0.0, 1.0,
0.5, 0.0,
- 0.5, 0.5,
- 0.5, 1.0,
1.0, 0.0,
- 1.0, 0.5,
- 1.0, 1.0
+ 1.0, 1.0,
+ 1.0, 1.0,
+ 0.0, 1.0
+ };
+ double coords0_reduced[] = {
+ 0.0, 0.0,
+ 1.0, 0.0,
+ 1.0, 1.0,
+ 0.0, 1.0
+ };
+ const double coords1[] = {
+ 0.0, 0.0,
+ 0.5, 0.0,
+ 0.0, 1.0,
+ 1.0, 1.0,
+ 1.0, 2305843009214,
+ 1.0, 0.0
};
double** coords;
- size_t nverts[] = { 9 };
+ size_t nverts[] = { 6 };
size_t ncomps = 1;
double pos[2];
size_t i, c, n;
@@ -53,21 +64,21 @@ main(int argc, char** argv)
*coords = (double*)MEM_CALLOC(&allocator, nverts[0], 2*sizeof(**coords));
memcpy(*coords, coords0, 2*nverts[0]*sizeof(**coords));
- CHK(scpr_polygon_create(NULL, NULL) == RES_BAD_ARG);
- CHK(scpr_polygon_create(&allocator, NULL) == RES_BAD_ARG);
- CHK(scpr_polygon_create(NULL, &polygon) == RES_OK);
- CHK(scpr_polygon_create(NULL, ©) == RES_OK);
- CHK(scpr_polygon_ref_put(copy) == RES_OK);
+ BAD(scpr_polygon_create(NULL, NULL));
+ BAD(scpr_polygon_create(&allocator, NULL));
+ OK(scpr_polygon_create(NULL, &polygon));
+ OK(scpr_polygon_create(NULL, ©));
+ OK(scpr_polygon_ref_put(copy));
- CHK(scpr_polygon_ref_get(NULL) == RES_BAD_ARG);
- CHK(scpr_polygon_ref_get(polygon) == RES_OK);
- CHK(scpr_polygon_ref_put(NULL) == RES_BAD_ARG);
- CHK(scpr_polygon_ref_put(polygon) == RES_OK);
- CHK(scpr_polygon_ref_put(polygon) == RES_OK);
+ BAD(scpr_polygon_ref_get(NULL));
+ OK(scpr_polygon_ref_get(polygon));
+ BAD(scpr_polygon_ref_put(NULL));
+ OK(scpr_polygon_ref_put(polygon));
+ OK(scpr_polygon_ref_put(polygon));
- CHK(scpr_polygon_create(&allocator, &polygon) == RES_OK);
+ OK(scpr_polygon_create(&allocator, &polygon));
- CHK(scpr_polygon_get_components_count(polygon, &n) == RES_OK);
+ OK(scpr_polygon_get_components_count(polygon, &n));
CHK(n == 0);
ctx.coords = coords;
@@ -75,79 +86,96 @@ main(int argc, char** argv)
ctx.ncomps = ncomps;
#define SETUP scpr_polygon_setup_indexed_vertices
- CHK(SETUP(NULL, ncomps, NULL, NULL, NULL) == RES_BAD_ARG);
- CHK(SETUP(polygon, ncomps, NULL, NULL, NULL) == RES_BAD_ARG);
- CHK(SETUP(NULL, ncomps, pget_nverts, NULL, NULL) == RES_BAD_ARG);
- CHK(SETUP(polygon, ncomps, pget_nverts, NULL, NULL) == RES_BAD_ARG);
- CHK(SETUP(NULL, ncomps, NULL, pget_pos, NULL) == RES_BAD_ARG);
- CHK(SETUP(polygon, ncomps, NULL, pget_pos, NULL) == RES_BAD_ARG);
- CHK(SETUP(NULL, ncomps, pget_nverts, pget_pos, NULL) == RES_BAD_ARG);
- CHK(SETUP(polygon, ncomps, pget_nverts, pget_pos, NULL) == RES_BAD_ARG);
- CHK(SETUP(NULL, ncomps, NULL, NULL, &ctx) == RES_BAD_ARG);
- CHK(SETUP(polygon, ncomps, NULL, NULL, &ctx) == RES_BAD_ARG);
- CHK(SETUP(NULL, ncomps, pget_nverts, NULL, &ctx) == RES_BAD_ARG);
- CHK(SETUP(polygon, ncomps, pget_nverts, NULL, &ctx) == RES_BAD_ARG);
- CHK(SETUP(NULL, ncomps, NULL, pget_pos, &ctx) == RES_BAD_ARG);
- CHK(SETUP(polygon, ncomps, NULL, pget_pos, &ctx) == RES_BAD_ARG);
- CHK(SETUP(NULL, ncomps, pget_nverts, pget_pos, &ctx) == RES_BAD_ARG);
- CHK(SETUP(polygon, ncomps, pget_nverts, pget_pos, &ctx) == RES_OK);
+ BAD(SETUP(NULL, ncomps, NULL, NULL, NULL));
+ BAD(SETUP(polygon, ncomps, NULL, NULL, NULL));
+ BAD(SETUP(NULL, ncomps, pget_nverts, NULL, NULL));
+ BAD(SETUP(polygon, ncomps, pget_nverts, NULL, NULL));
+ BAD(SETUP(NULL, ncomps, NULL, pget_pos, NULL));
+ BAD(SETUP(polygon, ncomps, NULL, pget_pos, NULL));
+ BAD(SETUP(NULL, ncomps, pget_nverts, pget_pos, NULL));
+ BAD(SETUP(polygon, ncomps, pget_nverts, pget_pos, NULL));
+ BAD(SETUP(NULL, ncomps, NULL, NULL, &ctx));
+ BAD(SETUP(polygon, ncomps, NULL, NULL, &ctx));
+ BAD(SETUP(NULL, ncomps, pget_nverts, NULL, &ctx));
+ BAD(SETUP(polygon, ncomps, pget_nverts, NULL, &ctx));
+ BAD(SETUP(NULL, ncomps, NULL, pget_pos, &ctx));
+ BAD(SETUP(polygon, ncomps, NULL, pget_pos, &ctx));
+ BAD(SETUP(NULL, ncomps, pget_nverts, pget_pos, &ctx));
+ /* Check out of range data being detected at setup */
+ memcpy(*coords, coords1, 2*nverts[0]*sizeof(**coords));
+ BAD(SETUP(polygon, ncomps, pget_nverts, pget_pos, &ctx));
+ /* Check polygon was simplified to 4 vertices */
+ memcpy(*coords, coords0, 2*nverts[0]*sizeof(**coords));
+ OK(SETUP(polygon, ncomps, pget_nverts, pget_pos, &ctx));
+ OK(scpr_polygon_get_vertices_count(polygon, 0, &n));
+ CHK(n == sizeof(coords0_reduced)/(2*sizeof(*coords0_reduced)));
#undef SETUP
- CHK(scpr_polygon_get_components_count(NULL, NULL) == RES_BAD_ARG);
- CHK(scpr_polygon_get_components_count(polygon, NULL) == RES_BAD_ARG);
- CHK(scpr_polygon_get_components_count(NULL, &n) == RES_BAD_ARG);
- CHK(scpr_polygon_get_components_count(polygon, &n) == RES_OK);
+ BAD(scpr_polygon_get_components_count(NULL, NULL));
+ BAD(scpr_polygon_get_components_count(polygon, NULL));
+ BAD(scpr_polygon_get_components_count(NULL, &n));
+ OK(scpr_polygon_get_components_count(polygon, &n));
CHK(n == ncomps);
- CHK(scpr_polygon_get_vertices_count(NULL, ncomps, NULL) == RES_BAD_ARG);
- CHK(scpr_polygon_get_vertices_count(polygon, ncomps, NULL) == RES_BAD_ARG);
- CHK(scpr_polygon_get_vertices_count(NULL, 0, NULL) == RES_BAD_ARG);
- CHK(scpr_polygon_get_vertices_count(polygon, 0, NULL) == RES_BAD_ARG);
- CHK(scpr_polygon_get_vertices_count(NULL, ncomps, &n) == RES_BAD_ARG);
- CHK(scpr_polygon_get_vertices_count(polygon, ncomps, &n) == RES_BAD_ARG);
- CHK(scpr_polygon_get_vertices_count(NULL, 0, &n) == RES_BAD_ARG);
- CHK(scpr_polygon_get_vertices_count(polygon, 0, &n) == RES_OK);
- CHK(n == nverts[0]);
-
- CHK(scpr_polygon_eq(NULL, NULL, NULL) == RES_BAD_ARG);
- CHK(scpr_polygon_eq(polygon, NULL, NULL) == RES_BAD_ARG);
- CHK(scpr_polygon_eq(NULL, polygon, NULL) == RES_BAD_ARG);
- CHK(scpr_polygon_eq(polygon, polygon, NULL) == RES_BAD_ARG);
- CHK(scpr_polygon_eq(NULL, NULL, &eq) == RES_BAD_ARG);
- CHK(scpr_polygon_eq(polygon, NULL, &eq) == RES_BAD_ARG);
- CHK(scpr_polygon_eq(polygon, 0, &eq) == RES_BAD_ARG);
- CHK(scpr_polygon_eq(polygon, polygon, &eq) == RES_OK);
+ BAD(scpr_polygon_get_vertices_count(NULL, ncomps, NULL));
+ BAD(scpr_polygon_get_vertices_count(polygon, ncomps, NULL));
+ BAD(scpr_polygon_get_vertices_count(NULL, 0, NULL));
+ BAD(scpr_polygon_get_vertices_count(polygon, 0, NULL));
+ BAD(scpr_polygon_get_vertices_count(NULL, ncomps, &n));
+ BAD(scpr_polygon_get_vertices_count(polygon, ncomps, &n));
+ BAD(scpr_polygon_get_vertices_count(NULL, 0, &n));
+ OK(scpr_polygon_get_vertices_count(polygon, 0, &n));
+
+ BAD(scpr_polygon_eq(NULL, NULL, NULL));
+ BAD(scpr_polygon_eq(polygon, NULL, NULL));
+ BAD(scpr_polygon_eq(NULL, polygon, NULL));
+ BAD(scpr_polygon_eq(polygon, polygon, NULL));
+ BAD(scpr_polygon_eq(NULL, NULL, &eq));
+ BAD(scpr_polygon_eq(polygon, NULL, &eq));
+ BAD(scpr_polygon_eq(polygon, 0, &eq));
+ OK(scpr_polygon_eq(polygon, polygon, &eq));
CHK(eq);
- CHK(scpr_polygon_get_position(NULL, ncomps, nverts[0], pos) == RES_BAD_ARG);
- CHK(scpr_polygon_get_position(NULL, ncomps, nverts[0], pos) == RES_BAD_ARG);
- CHK(scpr_polygon_get_position(NULL, ncomps, nverts[0], pos) == RES_BAD_ARG);
- CHK(scpr_polygon_get_position(NULL, ncomps, nverts[0], pos) == RES_BAD_ARG);
- CHK(scpr_polygon_get_position(NULL, ncomps, nverts[0], pos) == RES_BAD_ARG);
- CHK(scpr_polygon_get_position(NULL, ncomps, nverts[0], pos) == RES_BAD_ARG);
- CHK(scpr_polygon_get_position(NULL, ncomps, nverts[0], pos) == RES_BAD_ARG);
+ BAD(scpr_polygon_get_position(NULL, ncomps, nverts[0], NULL));
+ BAD(scpr_polygon_get_position(NULL, ncomps, nverts[0], pos));
+ BAD(scpr_polygon_get_position(NULL, ncomps, 0, NULL));
+ BAD(scpr_polygon_get_position(NULL, ncomps, 0, pos));
+ BAD(scpr_polygon_get_position(NULL, 0, nverts[0], NULL));
+ BAD(scpr_polygon_get_position(NULL, 0, nverts[0], pos));
+ BAD(scpr_polygon_get_position(NULL, 0, 0, NULL));
+ BAD(scpr_polygon_get_position(NULL, 0, 0, pos));
+ BAD(scpr_polygon_get_position(polygon, ncomps, nverts[0], NULL));
+ BAD(scpr_polygon_get_position(polygon, ncomps, nverts[0], pos));
+ BAD(scpr_polygon_get_position(polygon, ncomps, 0, NULL));
+ BAD(scpr_polygon_get_position(polygon, ncomps, 0, pos));
+ BAD(scpr_polygon_get_position(polygon, 0, nverts[0], NULL));
+ BAD(scpr_polygon_get_position(polygon, 0, nverts[0], pos));
+ BAD(scpr_polygon_get_position(polygon, 0, 0, NULL));
+ memcpy(*coords, coords0_reduced, sizeof(coords0_reduced));
FOR_EACH(c, 0, ncomps) {
- FOR_EACH(i, 0, nverts[c]) {
- CHK(scpr_polygon_get_position(polygon, c, i, pos) == RES_OK);
+ size_t count;
+ OK(scpr_polygon_get_vertices_count(polygon, c, &count));
+ FOR_EACH(i, 0, count) {
+ OK(scpr_polygon_get_position(polygon, c, i, pos));
CHK(pos[0] == coords[c][i*2+0]);
CHK(pos[1] == coords[c][i*2+1]);
}
}
- CHK(scpr_polygon_create_copy(NULL, NULL, NULL) == RES_BAD_ARG);
- CHK(scpr_polygon_create_copy(NULL, NULL, ©) == RES_BAD_ARG);
- CHK(scpr_polygon_create_copy(NULL, polygon, NULL) == RES_BAD_ARG);
- CHK(scpr_polygon_create_copy(NULL, polygon, ©) == RES_OK);
- CHK(scpr_polygon_eq(polygon, copy, &eq) == RES_OK);
+ BAD(scpr_polygon_create_copy(NULL, NULL, NULL));
+ BAD(scpr_polygon_create_copy(NULL, NULL, ©));
+ BAD(scpr_polygon_create_copy(NULL, polygon, NULL));
+ OK(scpr_polygon_create_copy(NULL, polygon, ©));
+ OK(scpr_polygon_eq(polygon, copy, &eq));
CHK(eq);
- CHK(scpr_offset_polygon(NULL, 0, SCPR_JOIN_TYPES_COUNT__) == RES_BAD_ARG);
- CHK(scpr_offset_polygon(polygon, 0, SCPR_JOIN_TYPES_COUNT__) == RES_BAD_ARG);
- CHK(scpr_offset_polygon(NULL, 0, SCPR_JOIN_MITER) == RES_BAD_ARG);
- CHK(scpr_offset_polygon(polygon, 0, SCPR_JOIN_MITER) == RES_OK);
+ BAD(scpr_offset_polygon(NULL, 0, SCPR_JOIN_TYPES_COUNT__));
+ BAD(scpr_offset_polygon(polygon, 0, SCPR_JOIN_TYPES_COUNT__));
+ BAD(scpr_offset_polygon(NULL, 0, SCPR_JOIN_MITER));
+ OK(scpr_offset_polygon(polygon, 0, SCPR_JOIN_MITER));
- CHK(scpr_polygon_ref_put(polygon) == RES_OK);
- CHK(scpr_polygon_ref_put(copy) == RES_OK);
+ OK(scpr_polygon_ref_put(polygon));
+ OK(scpr_polygon_ref_put(copy));
MEM_RM(&allocator, *coords);
MEM_RM(&allocator, coords);
diff --git a/src/test_scpr_utils.h b/src/test_scpr_utils.h
@@ -23,6 +23,10 @@
#include <stdio.h>
#include <math.h>
+#define ERR(Expr) { if((res = (Expr)) != RES_OK) goto error; } (void)0
+#define BAD(Expr) CHK((Expr) == RES_BAD_ARG);
+#define OK(Expr) CHK((Expr) == RES_OK);
+
struct polygon_context {
double** coords;
size_t* nverts;
@@ -104,17 +108,14 @@ check_stability
size_t i, j, ccount, vcount;
ASSERT(polygon);
- res = scpr_polygon_get_components_count(polygon, &ccount);
- if(res != RES_OK) goto error;
+ ERR(scpr_polygon_get_components_count(polygon, &ccount));
for(i = 0; i < ccount; i++) {
- res = scpr_polygon_get_vertices_count(polygon, i, &vcount);
- if(res != RES_OK) goto error;
+ ERR(scpr_polygon_get_vertices_count(polygon, i, &vcount));
for(j = 0; j < vcount; j++) {
double pt[2], tmp[2];
int64_t tmp2[2];
- res = scpr_polygon_get_position(polygon, i, j, pt);
- if(res != RES_OK) goto error;
+ ERR(scpr_polygon_get_position(polygon, i, j, pt));
tmp2[0] = llround(pt[0] * scale);
tmp2[1] = llround(pt[1] * scale);
tmp[0] = (double)tmp2[0] / scale;