commit 910365e0b8a4c16b5a21aad3fce9f027f81ee104
parent 0150e13b08c8cc08169c8fde75ebed2b1ca55d41
Author: Christophe Coustet <christophe.coustet@meso-star.com>
Date: Tue, 2 Sep 2025 10:29:28 +0200
Completion of test_api
A lot of API calls where just untested. They now have complete arg test.
Some of the more complicated stuff have now more complex tests,
including return value tests.
Diffstat:
| M | src/test_api.c | | | 1517 | ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------- |
1 file changed, 1387 insertions(+), 130 deletions(-)
diff --git a/src/test_api.c b/src/test_api.c
@@ -20,12 +20,25 @@
#include <rsys/rsys.h>
#include <rsys/str.h>
#include <rsys/math.h>
+#include <rsys/double3.h>
#include <rsys/mem_allocator.h>
#include <rsys/dynamic_array_double.h>
#include <stdlib.h>
#include <stdio.h>
+#define STRINGIZE(x) STRINGIZE2(x)
+#define STRINGIZE2(x) #x
+#define LINE_STRING STRINGIZE(__LINE__)
+
+static void
+dummy_release
+ (void* data)
+{
+ (void) data;
+ return;
+}
+
static void
get_position
(const size_t ivert, double pos[2], void* data)
@@ -41,9 +54,14 @@ int
main(int argc, char* argv[])
{
res_T res = RES_OK;
- double p1[3] = {0, 0, 0};
- double p2[3] = {0.25, 0.25, 0.8};
- double d1[3] = {1, 1, 1};
+ const double p1[3] = {0, 0, 0};
+ const double p2[3] = {0.25, 0.25, 0.8};
+ const double p3[3] = {0.85, 0, 0};
+ const double p4[3] = {1, 0, 0};
+ const double d0[3] = {0.1, 0.1, 0.1};
+ const double d1[3] = {1, 1, 1};
+ const double d2[3] = {1, 1, 0};
+ const double s[3] = {1, 1, 1};
double coord[] = {0, 1.6, 0.5, 0.9, 0.8, 0.6};
struct scad_geometry* geom1 = NULL;
struct scad_geometry* geom2 = NULL;
@@ -55,250 +73,1489 @@ main(int argc, char* argv[])
struct mem_allocator allocator;
struct darray_double trg;
struct scad_options options = SCAD_DEFAULT_OPTIONS;
- const char* name;
+ const char *name, *name2;
+ double m, tmp[3], tmp2[3];
+ double affine[16] = { 1, 0, 0, 0.25, 0, 1, 0, 0.25, 0, 0, 1, 0.8, 0, 0, 0, 1 };
size_t i, c;
+ int e;
+ void* data;
(void)argc; (void)argv;
OK(mem_init_proxy_allocator(&allocator, &mem_default_allocator));
/* cannot call any API function before a successful call to scad_initialize */
+ geom1 = geom2 = geom =
+ (struct scad_geometry*)1; /* To allow tests go past arg!=NULL */
BAD(scad_finalize());
- BAD(scad_set_options(NULL));
- BAD(scad_synchronize());
+ BAD(scad_set_options(&options));
+ BAD(scad_get_options(&options));
+ BAD(scad_scene_count(&c));
BAD(scad_scene_clear());
- BAD(scad_add_rectangle(p1, d1, &geom));
+ BAD(scad_scene_write("test.step"));
+ BAD(scad_scene_mesh());
+ BAD(scad_add_rectangle(p1, d2, &geom));
BAD(scad_add_disk(p1, 1, &geom));
BAD(scad_add_polygon(get_position, coord, 0, 3, &geom));
BAD(scad_add_box(p1, d1, &geom));
BAD(scad_add_cylinder(p1, d1, 2, 1, &geom));
BAD(scad_add_sphere(p1, 1, &geom));
- BAD(scad_step_import("test.step", NULL, &geom_array, &c));
- BAD(scad_scene_mesh());
+ BAD(scad_add_cone(p1, d1, 1, 1, 2*PI, &geom));
+ BAD(scad_add_torus(p1, 1, 1, 2*PI, NULL, &geom));
+ BAD(scad_geometry_dilate(geom1, p1, p1, &geom));
+ BAD(scad_geometry_translate(geom1, p1, &geom));
+ BAD(scad_geometry_rotate(geom1, p1, p1, 2, &geom));
+ BAD(scad_geometry_extrude(geom1, p1, &geom));
+ BAD(scad_geometry_explode(NULL, geom1, &geom_array, &c));
+ BAD(scad_geometry_ref_get(geom1));
+ BAD(scad_geometry_ref_put(geom1));
+ BAD(scad_geometry_get_count(geom1, NULL));
+ BAD(scad_geometry_is_empty(geom1, &e));
+ BAD(scad_geometry_set_custom_data(geom1, NULL, NULL));
+ BAD(scad_geometry_get_custom_data(geom1, (void*)&trg));
+ BAD(scad_geometry_set_name(geom1, name));
+ BAD(scad_geometry_get_name(geom1, &name));
+ BAD(scad_geometries_swap(&geom1, &geom2, 1, 0));
+ BAD(scad_geometry_get_mass(geom1, &m));
+ BAD(scad_geometry_get_centerofmass(geom1, tmp));
+ BAD(scad_geometry_get_closest_point(geom1, p1, tmp, &m, NULL));
+ BAD(scad_geometry_get_normal(geom1, tmp, tmp, &geom));
+ BAD(scad_geometry_get_bounding_box(geom1, tmp, tmp));
+ BAD(scad_geometry_equal(geom1, geom2, &e));
+ BAD(scad_geometry_is_included(geom1, &geom2, 1, &e));
+ BAD(scad_geometries_collect(&geom1, 1, &geom2));
+ BAD(scad_geometries_fuse(&geom1, 1, &geom2, 1, &geom));
+ BAD(scad_geometries_cut(&geom1, 1, &geom2, 1, &geom));
+ BAD(scad_geometries_intersect(&geom1, 1, &geom2, 1, &geom));
+ BAD(scad_geometries_partition(&geom1, 1, 0, &geom));
+ BAD(scad_geometries_common_boundaries(NULL, &geom1, 1, &geom2, 1, &geom_array, &c));
+ BAD(scad_geometries_boundary(NULL, &geom1, 1, &geom_array, &c));
+ BAD(scad_geometry_copy(geom1, &geom2));
+ BAD(scad_geometry_set_visibility(geom1, 0, 0));
+ BAD(scad_geometries_set_periodic(&geom1, 1, &geom2, 1, affine));
+ BAD(scad_geometries_set_mesh_size_modifier(&geom1, 1, SCAD_ABSOLUTE_SIZE, 1));
+ BAD(scad_geometries_set_mesh_algorithm(&geom1, 1, SCAD_QUASI_STRUCTURED));
+ BAD(scad_geometries_clear_mesh(&geom1, 1));
+ BAD(scad_step_import("prefix", "test.step", &geom_array, &c));
+ BAD(scad_stl_export(geom1, "test.stl", SCAD_KEEP_NORMALS_UNCHANGED, 0));
+ BAD(scad_stl_export_partial(geom1, &geom1, 1, "test.stl",
+ SCAD_KEEP_NORMALS_UNCHANGED, 0));
+ BAD(scad_stl_export_split(geom1, "test.stl", SCAD_KEEP_NORMALS_UNCHANGED, 0));
+ BAD(scad_stl_get_data(geom1, &trg));
+ BAD(scad_stl_get_data_partial(geom1, &geom2, 1, &trg));
+ BAD(scad_stl_data_write(&trg, "test.stl", SCAD_KEEP_NORMALS_UNCHANGED, 0));
BAD(scad_run_ui());
- BAD(scad_geometry_get_name(geom, &name));
+ BAD(scad_synchronize());
+ CHK(SIZE_MAX == scad_get_dimtag_refcount(3, 0));
+ BAD(scad_dump_geometry(geom));
+ BAD(scad_dump_geometries());
/* cannot call any API function after a successful call to scad_finalize */
OK(scad_initialize(NULL, &allocator, 3));
OK(scad_finalize());
BAD(scad_finalize());
- BAD(scad_set_options(NULL));
- BAD(scad_synchronize());
+ BAD(scad_set_options(&options));
+ BAD(scad_get_options(&options));
+ BAD(scad_scene_count(&c));
BAD(scad_scene_clear());
- BAD(scad_add_rectangle(p1, d1, &geom));
+ BAD(scad_scene_write("test.step"));
+ BAD(scad_scene_mesh());
+ BAD(scad_add_rectangle(p1, d2, &geom));
BAD(scad_add_disk(p1, 1, &geom));
BAD(scad_add_polygon(get_position, coord, 0, 3, &geom));
BAD(scad_add_box(p1, d1, &geom));
BAD(scad_add_cylinder(p1, d1, 2, 1, &geom));
BAD(scad_add_sphere(p1, 1, &geom));
- BAD(scad_step_import("test.step", NULL, &geom_array, &c));
- BAD(scad_scene_mesh());
+ BAD(scad_add_cone(p1, d1, 1, 1, 2*PI, &geom));
+ BAD(scad_add_torus(p1, 1, 1, 2*PI, NULL, &geom));
+ BAD(scad_geometry_dilate(geom1, p1, p1, &geom));
+ BAD(scad_geometry_translate(geom1, p1, &geom));
+ BAD(scad_geometry_rotate(geom1, p1, p1, 2, &geom));
+ BAD(scad_geometry_extrude(geom1, p1, &geom));
+ BAD(scad_geometry_explode(NULL, geom1, &geom_array, &c));
+ BAD(scad_geometry_ref_get(geom1));
+ BAD(scad_geometry_ref_put(geom1));
+ BAD(scad_geometry_get_count(geom1, NULL));
+ BAD(scad_geometry_is_empty(geom1, &e));
+ BAD(scad_geometry_set_custom_data(geom1, NULL, NULL));
+ BAD(scad_geometry_get_custom_data(geom1, (void*)&trg));
+ BAD(scad_geometry_set_name(geom1, name));
+ BAD(scad_geometry_get_name(geom1, &name));
+ BAD(scad_geometries_swap(&geom1, &geom2, 1, 0));
+ BAD(scad_geometry_get_mass(geom1, &m));
+ BAD(scad_geometry_get_centerofmass(geom1, tmp));
+ BAD(scad_geometry_get_closest_point(geom1, tmp, tmp, &m, NULL));
+ BAD(scad_geometry_get_normal(geom1, tmp, tmp, &geom));
+ BAD(scad_geometry_get_bounding_box(geom1, tmp, tmp));
+ BAD(scad_geometry_equal(geom1, geom2, &e));
+ BAD(scad_geometry_is_included(geom1, &geom2, 1, &e));
+ BAD(scad_geometries_collect(&geom1, 1, &geom2));
+ BAD(scad_geometries_fuse(&geom1, 1, &geom2, 1, &geom));
+ BAD(scad_geometries_cut(&geom1, 1, &geom2, 1, &geom));
+ BAD(scad_geometries_intersect(&geom1, 1, &geom2, 1, &geom));
+ BAD(scad_geometries_partition(&geom1, 1, 0, &geom));
+ BAD(scad_geometries_common_boundaries(NULL, &geom1, 1, &geom2, 1, &geom_array, &c));
+ BAD(scad_geometries_boundary(NULL, &geom1, 1, &geom_array, &c));
+ BAD(scad_geometry_copy(geom1, &geom2));
+ BAD(scad_geometry_set_visibility(geom1, 0, 0));
+ BAD(scad_geometries_set_periodic(&geom1, 1, &geom2, 1, affine));
+ BAD(scad_geometries_set_mesh_size_modifier(&geom1, 1, SCAD_ABSOLUTE_SIZE, 1));
+ BAD(scad_geometries_set_mesh_algorithm(&geom1, 1, SCAD_QUASI_STRUCTURED));
+ BAD(scad_geometries_clear_mesh(&geom1, 1));
+ BAD(scad_step_import("prefix", "test.step", &geom_array, &c));
+ BAD(scad_stl_export(geom1, "test.stl", SCAD_KEEP_NORMALS_UNCHANGED, 0));
+ BAD(scad_stl_export_partial(geom1, &geom1, 1, "test.stl",
+ SCAD_KEEP_NORMALS_UNCHANGED, 0));
+ BAD(scad_stl_export_split(geom1, "test.stl", SCAD_KEEP_NORMALS_UNCHANGED, 0));
+ BAD(scad_stl_get_data(geom1, &trg));
+ BAD(scad_stl_get_data_partial(geom1, &geom2, 1, &trg));
+ BAD(scad_stl_data_write(&trg, "test.stl", SCAD_KEEP_NORMALS_UNCHANGED, 0));
BAD(scad_run_ui());
- BAD(scad_geometry_get_name(geom, &name));
+ BAD(scad_synchronize());
+ CHK(SIZE_MAX == scad_get_dimtag_refcount(3, 0));
+ BAD(scad_dump_geometry(geom));
+ BAD(scad_dump_geometries());
BAD(scad_initialize(NULL, &allocator, 4));
BAD(scad_initialize(NULL, &allocator, -1));
-
OK(scad_initialize(NULL, &allocator, 3));
+ OK(scad_scene_count(&c));
+ CHK(c == 0);
+
OK(scad_set_options(NULL));
OK(scad_set_options(&options));
- OK(scad_add_sphere(p1, .1, &geom1));
- OK(scad_add_sphere(p2, .2, &geom2));
- geoms[0] = geom1;
- geoms[1] = geom2;
+ OK(scad_scene_count(&c));
+ CHK(c == 0);
- OK(scad_add_sphere(p1, .1, &geom));
- BAD(scad_geometry_ref_get(NULL));
- OK(scad_geometry_ref_get(geom));
- BAD(scad_geometry_ref_put(NULL));
- OK(scad_geometry_ref_put(geom));
+ BAD(scad_get_options(NULL));
+ OK(scad_get_options(&options));
+
+ OK(scad_scene_count(&c));
+ CHK(c == 0);
+
+ BAD(scad_scene_count(NULL));
+ OK(scad_scene_count(&c));
+ CHK(c == 0);
+ OK(scad_add_rectangle(p1, d2, &geom));
+ OK(scad_scene_count(&c));
+ CHK(c == 1);
OK(scad_geometry_ref_put(geom));
- BAD(scad_geometry_get_count(NULL, &c));
- BAD(scad_geometry_get_count(geom1, NULL));
- OK(scad_geometry_get_count(geom1, &c));
+ OK(scad_scene_count(&c));
+ CHK(c == 0);
- BAD(scad_add_rectangle(NULL, d1, &geom));
+ BAD(scad_scene_write(NULL));
+ ERR(scad_scene_write(""));
+ ERR(scad_scene_write("/tmp/test.bad"));
+ OK(scad_scene_write("/tmp/test"LINE_STRING".step"));
+
+ OK(scad_scene_count(&c));
+ CHK(c == 0);
+
+ BAD(scad_add_rectangle(NULL, NULL, NULL));
+ BAD(scad_add_rectangle(NULL, NULL, &geom));
+ BAD(scad_add_rectangle(NULL, d1, NULL));
+ BAD(scad_add_rectangle(p1, NULL, NULL));
+ BAD(scad_add_rectangle(NULL, d2, &geom));
BAD(scad_add_rectangle(p1, NULL, &geom));
- BAD(scad_add_rectangle(p1, d1, NULL));
- OK(scad_add_rectangle(p1, d1, &geom));
+ BAD(scad_add_rectangle(p1, d2, NULL));
+ OK(scad_add_rectangle(p1, d2, &geom));
OK(scad_geometry_ref_put(geom));
+ OK(scad_scene_count(&c));
+ CHK(c == 0);
+
+ BAD(scad_add_disk(NULL, -1, NULL));
+ BAD(scad_add_disk(NULL, -1, &geom));
+ BAD(scad_add_disk(NULL, 1, NULL));
+ BAD(scad_add_disk(p1, -1, NULL));
BAD(scad_add_disk(NULL, 1, &geom));
- BAD(scad_add_disk(p1, 0, &geom));
+ BAD(scad_add_disk(p1, -1, &geom));
BAD(scad_add_disk(p1, 1, NULL));
OK(scad_add_disk(p1, 1, &geom));
OK(scad_geometry_ref_put(geom));
+ OK(scad_scene_count(&c));
+ CHK(c == 0);
+
+ BAD(scad_add_polygon(NULL, coord, 0, 0, NULL));
+ BAD(scad_add_polygon(get_position, coord, 0, 0, NULL));
+ BAD(scad_add_polygon(NULL, coord, 0, 3, NULL));
+ BAD(scad_add_polygon(NULL, coord, 0, 0, &poly));
BAD(scad_add_polygon(NULL, coord, 0, 3, &poly));
- BAD(scad_add_polygon(get_position, coord, 0, 2, &poly));
- BAD(scad_add_polygon(get_position, coord, 0, 2, &poly));
+ BAD(scad_add_polygon(get_position, coord, 0, 0, &poly));
BAD(scad_add_polygon(get_position, coord, 0, 3, NULL));
OK(scad_add_polygon(get_position, coord, 0, 3, &poly));
+ OK(scad_geometry_ref_put(poly));
+
+ OK(scad_scene_count(&c));
+ CHK(c == 0);
+ BAD(scad_add_box(NULL, NULL, NULL));
+ BAD(scad_add_box(NULL, NULL, &geom));
+ BAD(scad_add_box(NULL, d1, NULL));
+ BAD(scad_add_box(p1, NULL, NULL));
BAD(scad_add_box(NULL, d1, &geom));
BAD(scad_add_box(p1, NULL, &geom));
BAD(scad_add_box(p1, d1, NULL));
OK(scad_add_box(p1, d1, &geom));
OK(scad_geometry_ref_put(geom));
- BAD(scad_add_cylinder(NULL, d1, 2, 1, &geom));
- BAD(scad_add_cylinder(p1, NULL, 2, 1, &geom));
- BAD(scad_add_cylinder(p1, d1, 0, 1, &geom));
- BAD(scad_add_cylinder(p1, d1, 2, -1, &geom));
- BAD(scad_add_cylinder(p1, d1, 2, 3*PI, &geom));
- BAD(scad_add_cylinder(p1, d1, 2, 1, NULL));
- OK(scad_add_cylinder(p1, d1, 2, 1, &geom));
+ OK(scad_scene_count(&c));
+ CHK(c == 0);
+
+ BAD(scad_add_cylinder(NULL, NULL, -1, -1, NULL));
+ BAD(scad_add_cylinder(NULL, NULL, -1, -1, &geom));
+ BAD(scad_add_cylinder(NULL, NULL, -1, 1, NULL));
+ BAD(scad_add_cylinder(NULL, NULL, 1, -1, NULL));
+ BAD(scad_add_cylinder(NULL, d1, -1, -1, NULL));
+ BAD(scad_add_cylinder(p1, NULL, -1, -1, NULL));
+ BAD(scad_add_cylinder(NULL, NULL, -1, 1, &geom));
+ BAD(scad_add_cylinder(NULL, NULL, 1, -1, &geom));
+ BAD(scad_add_cylinder(NULL, d1, -1, -1, &geom));
+ BAD(scad_add_cylinder(p1, NULL, -1, -1, &geom));
+ BAD(scad_add_cylinder(NULL, NULL, 1, 1, NULL));
+ BAD(scad_add_cylinder(NULL, d1, -1, 1, NULL));
+ BAD(scad_add_cylinder(p1, NULL, -1, 1, NULL));
+ BAD(scad_add_cylinder(NULL, d1, 1, -1, NULL));
+ BAD(scad_add_cylinder(p1, NULL, 1, -1, NULL));
+ BAD(scad_add_cylinder(p1, d1, -1, -1, NULL));
+ BAD(scad_add_cylinder(NULL, NULL, 1, 1, &geom));
+ BAD(scad_add_cylinder(NULL, d1, -1, 1, &geom));
+ BAD(scad_add_cylinder(p1, NULL, -1, 1, &geom));
+ BAD(scad_add_cylinder(NULL, d1, 1, -1, &geom));
+ BAD(scad_add_cylinder(p1, NULL, 1, -1, &geom));
+ BAD(scad_add_cylinder(p1, d1, -1, -1, &geom));
+ BAD(scad_add_cylinder(NULL, d1, 1, 1, NULL));
+ BAD(scad_add_cylinder(p1, NULL, 1, 1, NULL));
+ BAD(scad_add_cylinder(p1, d1, -1, 1, NULL));
+ BAD(scad_add_cylinder(p1, d1, 1, -1, NULL));
+ BAD(scad_add_cylinder(NULL, d1, 1, 1, &geom));
+ BAD(scad_add_cylinder(p1, NULL, 1, 1, &geom));
+ BAD(scad_add_cylinder(p1, d1, -1, 1, &geom));
+ BAD(scad_add_cylinder(p1, d1, 1, 3*PI, &geom));
+ BAD(scad_add_cylinder(p1, d1, 1, 1, NULL));
+ OK(scad_add_cylinder(p1, d1, 1, 1, &geom));
OK(scad_geometry_ref_put(geom));
+ OK(scad_scene_count(&c));
+ CHK(c == 0);
+
+ BAD(scad_add_sphere(NULL, -1, NULL));
+ BAD(scad_add_sphere(NULL, -1, &geom));
+ BAD(scad_add_sphere(NULL, 1, NULL));
+ BAD(scad_add_sphere(p1, -1, NULL));
BAD(scad_add_sphere(NULL, 1, &geom));
BAD(scad_add_sphere(p1, 0, &geom));
BAD(scad_add_sphere(p1, 1, NULL));
OK(scad_add_sphere(p1, 1, &geom));
OK(scad_geometry_ref_put(geom));
- /* BAD(scad_geometries_fuse(NULL, NULL, 0, geoms, 2, &geom)); */
- BAD(scad_geometries_fuse(geoms, 2, NULL, 0, &geom));
- BAD(scad_geometries_fuse(NULL, 1, &geom2, 1, &geom));
+
+
+
+ OK(scad_scene_count(&c));
+ CHK(c == 0);
+
+ BAD(scad_add_cone(NULL, NULL, -1, -1, -1, NULL));
+ BAD(scad_add_cone(NULL, NULL, -1, -1, -1, &geom));
+ BAD(scad_add_cone(NULL, NULL, -1, -1, 2*PI, NULL));
+ BAD(scad_add_cone(NULL, NULL, -1, -1, 2*PI, &geom));
+ BAD(scad_add_cone(NULL, NULL, -1, 1, -1, NULL));
+ BAD(scad_add_cone(NULL, NULL, -1, 1, -1, &geom));
+ BAD(scad_add_cone(NULL, NULL, -1, 1, 2*PI, NULL));
+ BAD(scad_add_cone(NULL, NULL, -1, 1, 2*PI, &geom));
+ BAD(scad_add_cone(NULL, NULL, 0, -1, -1, NULL));
+ BAD(scad_add_cone(NULL, NULL, 0, -1, -1, &geom));
+ BAD(scad_add_cone(NULL, NULL, 0, -1, 2*PI, NULL));
+ BAD(scad_add_cone(NULL, NULL, 0, -1, 2*PI, &geom));
+ BAD(scad_add_cone(NULL, NULL, 0, 1, -1, NULL));
+ BAD(scad_add_cone(NULL, NULL, 0, 1, -1, &geom));
+ BAD(scad_add_cone(NULL, NULL, 0, 1, 2*PI, NULL));
+ BAD(scad_add_cone(NULL, NULL, 0, 1, 2*PI, &geom));
+ BAD(scad_add_cone(NULL, d1, -1, -1, -1, NULL));
+ BAD(scad_add_cone(NULL, d1, -1, -1, -1, &geom));
+ BAD(scad_add_cone(NULL, d1, -1, -1, 2*PI, NULL));
+ BAD(scad_add_cone(NULL, d1, -1, -1, 2*PI, &geom));
+ BAD(scad_add_cone(NULL, d1, -1, 1, -1, NULL));
+ BAD(scad_add_cone(NULL, d1, -1, 1, -1, &geom));
+ BAD(scad_add_cone(NULL, d1, -1, 1, 2*PI, NULL));
+ BAD(scad_add_cone(NULL, d1, -1, 1, 2*PI, &geom));
+ BAD(scad_add_cone(NULL, d1, 0, -1, -1, NULL));
+ BAD(scad_add_cone(NULL, d1, 0, -1, -1, &geom));
+ BAD(scad_add_cone(NULL, d1, 0, -1, 2*PI, NULL));
+ BAD(scad_add_cone(NULL, d1, 0, -1, 2*PI, &geom));
+ BAD(scad_add_cone(NULL, d1, 0, 1, -1, NULL));
+ BAD(scad_add_cone(NULL, d1, 0, 1, -1, &geom));
+ BAD(scad_add_cone(NULL, d1, 0, 1, 2*PI, NULL));
+ BAD(scad_add_cone(NULL, d1, 0, 1, 2*PI, &geom));
+ BAD(scad_add_cone(p1, NULL, -1, -1, -1, NULL));
+ BAD(scad_add_cone(p1, NULL, -1, -1, -1, &geom));
+ BAD(scad_add_cone(p1, NULL, -1, -1, 2*PI, NULL));
+ BAD(scad_add_cone(p1, NULL, -1, -1, 2*PI, &geom));
+ BAD(scad_add_cone(p1, NULL, -1, 1, -1, NULL));
+ BAD(scad_add_cone(p1, NULL, -1, 1, -1, &geom));
+ BAD(scad_add_cone(p1, NULL, -1, 1, 2*PI, NULL));
+ BAD(scad_add_cone(p1, NULL, -1, 1, 2*PI, &geom));
+ BAD(scad_add_cone(p1, NULL, 0, -1, -1, NULL));
+ BAD(scad_add_cone(p1, NULL, 0, -1, -1, &geom));
+ BAD(scad_add_cone(p1, NULL, 0, -1, 2*PI, NULL));
+ BAD(scad_add_cone(p1, NULL, 0, -1, 2*PI, &geom));
+ BAD(scad_add_cone(p1, NULL, 0, 1, -1, NULL));
+ BAD(scad_add_cone(p1, NULL, 0, 1, -1, &geom));
+ BAD(scad_add_cone(p1, NULL, 0, 1, 2*PI, NULL));
+ BAD(scad_add_cone(p1, NULL, 0, 1, 2*PI, &geom));
+ BAD(scad_add_cone(p1, d1, -1, -1, -1, NULL));
+ BAD(scad_add_cone(p1, d1, -1, -1, -1, &geom));
+ BAD(scad_add_cone(p1, d1, -1, -1, 2*PI, NULL));
+ BAD(scad_add_cone(p1, d1, -1, -1, 2*PI, &geom));
+ BAD(scad_add_cone(p1, d1, -1, 1, -1, NULL));
+ BAD(scad_add_cone(p1, d1, -1, 1, -1, &geom));
+ BAD(scad_add_cone(p1, d1, -1, 1, 2*PI, NULL));
+ BAD(scad_add_cone(p1, d1, -1, 1, 2*PI, &geom));
+ BAD(scad_add_cone(p1, d1, 0, -1, -1, NULL));
+ BAD(scad_add_cone(p1, d1, 0, -1, -1, &geom));
+ BAD(scad_add_cone(p1, d1, 0, -1, 2*PI, NULL));
+ BAD(scad_add_cone(p1, d1, 0, -1, 2*PI, &geom));
+ BAD(scad_add_cone(p1, d1, 0, 1, -1, NULL));
+ BAD(scad_add_cone(p1, d1, 0, 1, -1, &geom));
+ BAD(scad_add_cone(p1, d1, 0, 1, 2*PI, NULL));
+ OK(scad_add_cone(p1, d1, 0, 1, 2*PI, &geom));
+ OK(scad_geometry_ref_put(geom));
+ BAD(scad_add_cone(p1, d1, 1, 1, 2*PI, &geom)); /* r1 == r2 */
+
+ OK(scad_scene_count(&c));
+ CHK(c == 0);
+
+ BAD(scad_add_torus(NULL, 0, 0, -1, NULL, NULL));
+ BAD(scad_add_torus(NULL, 0, 0, -1, NULL, &geom));
+ BAD(scad_add_torus(NULL, 0, 0, -1, d1, NULL));
+ BAD(scad_add_torus(NULL, 0, 0, -1, d1, &geom));
+ BAD(scad_add_torus(NULL, 0, 0, 2*PI, NULL, NULL));
+ BAD(scad_add_torus(NULL, 0, 0, 2*PI, NULL, &geom));
+ BAD(scad_add_torus(NULL, 0, 0, 2*PI, d1, NULL));
+ BAD(scad_add_torus(NULL, 0, 0, 2*PI, d1, &geom));
+ BAD(scad_add_torus(NULL, 0, 1, -1, NULL, NULL));
+ BAD(scad_add_torus(NULL, 0, 1, -1, NULL, &geom));
+ BAD(scad_add_torus(NULL, 0, 1, -1, d1, NULL));
+ BAD(scad_add_torus(NULL, 0, 1, -1, d1, &geom));
+ BAD(scad_add_torus(NULL, 0, 1, 2*PI, NULL, NULL));
+ BAD(scad_add_torus(NULL, 0, 1, 2*PI, NULL, &geom));
+ BAD(scad_add_torus(NULL, 0, 1, 2*PI, d1, NULL));
+ BAD(scad_add_torus(NULL, 0, 1, 2*PI, d1, &geom));
+ BAD(scad_add_torus(NULL, 1, 0, -1, NULL, NULL));
+ BAD(scad_add_torus(NULL, 1, 0, -1, NULL, &geom));
+ BAD(scad_add_torus(NULL, 1, 0, -1, d1, NULL));
+ BAD(scad_add_torus(NULL, 1, 0, -1, d1, &geom));
+ BAD(scad_add_torus(NULL, 1, 0, 2*PI, NULL, NULL));
+ BAD(scad_add_torus(NULL, 1, 0, 2*PI, NULL, &geom));
+ BAD(scad_add_torus(NULL, 1, 0, 2*PI, d1, NULL));
+ BAD(scad_add_torus(NULL, 1, 0, 2*PI, d1, &geom));
+ BAD(scad_add_torus(NULL, 1, 1, -1, NULL, NULL));
+ BAD(scad_add_torus(NULL, 1, 1, -1, NULL, &geom));
+ BAD(scad_add_torus(NULL, 1, 1, -1, d1, NULL));
+ BAD(scad_add_torus(NULL, 1, 1, -1, d1, &geom));
+ BAD(scad_add_torus(NULL, 1, 1, 2*PI, NULL, NULL));
+ BAD(scad_add_torus(NULL, 1, 1, 2*PI, NULL, &geom));
+ BAD(scad_add_torus(NULL, 1, 1, 2*PI, d1, NULL));
+ BAD(scad_add_torus(NULL, 1, 1, 2*PI, d1, &geom));
+ BAD(scad_add_torus(p1, 0, 0, -1, NULL, NULL));
+ BAD(scad_add_torus(p1, 0, 0, -1, NULL, &geom));
+ BAD(scad_add_torus(p1, 0, 0, -1, d1, NULL));
+ BAD(scad_add_torus(p1, 0, 0, -1, d1, &geom));
+ BAD(scad_add_torus(p1, 0, 0, 2*PI, NULL, NULL));
+ BAD(scad_add_torus(p1, 0, 0, 2*PI, NULL, &geom));
+ BAD(scad_add_torus(p1, 0, 0, 2*PI, d1, NULL));
+ BAD(scad_add_torus(p1, 0, 0, 2*PI, d1, &geom));
+ BAD(scad_add_torus(p1, 0, 1, -1, NULL, NULL));
+ BAD(scad_add_torus(p1, 0, 1, -1, NULL, &geom));
+ BAD(scad_add_torus(p1, 0, 1, -1, d1, NULL));
+ BAD(scad_add_torus(p1, 0, 1, -1, d1, &geom));
+ BAD(scad_add_torus(p1, 0, 1, 2*PI, NULL, NULL));
+ BAD(scad_add_torus(p1, 0, 1, 2*PI, NULL, &geom));
+ BAD(scad_add_torus(p1, 0, 1, 2*PI, d1, NULL));
+ BAD(scad_add_torus(p1, 0, 1, 2*PI, d1, &geom));
+ BAD(scad_add_torus(p1, 1, 0, -1, NULL, NULL));
+ BAD(scad_add_torus(p1, 1, 0, -1, NULL, &geom));
+ BAD(scad_add_torus(p1, 1, 0, -1, d1, NULL));
+ BAD(scad_add_torus(p1, 1, 0, -1, d1, &geom));
+ BAD(scad_add_torus(p1, 1, 0, 2*PI, NULL, NULL));
+ BAD(scad_add_torus(p1, 1, 0, 2*PI, NULL, &geom));
+ BAD(scad_add_torus(p1, 1, 0, 2*PI, d1, NULL));
+ BAD(scad_add_torus(p1, 1, 0, 2*PI, d1, &geom));
+ BAD(scad_add_torus(p1, 1, 1, -1, NULL, NULL));
+ BAD(scad_add_torus(p1, 1, 1, -1, NULL, &geom));
+ BAD(scad_add_torus(p1, 1, 1, -1, d1, NULL));
+ BAD(scad_add_torus(p1, 1, 1, -1, d1, &geom));
+ BAD(scad_add_torus(p1, 1, 1, 2*PI, NULL, NULL));
+ OK(scad_add_torus(p1, 1, 1, 2*PI, NULL, &geom));
+ OK(scad_geometry_ref_put(geom));
+ BAD(scad_add_torus(p1, 1, 1, 2*PI, d1, NULL));
+ OK(scad_add_torus(p1, 1, 1, 2*PI, d1, &geom));
+ OK(scad_geometry_ref_put(geom));
+
+ OK(scad_scene_count(&c));
+ CHK(c == 0);
+
+ OK(scad_add_sphere(p1, 1, &geom1));
+ BAD(scad_geometry_dilate(NULL, NULL, NULL, NULL));
+ BAD(scad_geometry_dilate(NULL, NULL, NULL, &geom));
+ BAD(scad_geometry_dilate(NULL, NULL, s, NULL));
+ BAD(scad_geometry_dilate(NULL, p1, NULL, NULL));
+ BAD(scad_geometry_dilate(geom1, NULL, NULL, NULL));
+ BAD(scad_geometry_dilate(NULL, NULL, s, &geom));
+ BAD(scad_geometry_dilate(NULL, p1, NULL, &geom));
+ BAD(scad_geometry_dilate(geom1, NULL, NULL, &geom));
+ BAD(scad_geometry_dilate(NULL, p1, s, NULL));
+ BAD(scad_geometry_dilate(geom1, NULL, s, NULL));
+ BAD(scad_geometry_dilate(NULL, p1, s, &geom));
+ BAD(scad_geometry_dilate(geom1, NULL, p1, &geom));
+ BAD(scad_geometry_dilate(geom1, p1, NULL, &geom));
+ BAD(scad_geometry_dilate(geom1, p1, s, NULL));
+ OK(scad_geometry_dilate(geom1, p1, s, &geom));
+ OK(scad_geometry_ref_put(geom1));
+ OK(scad_geometry_ref_put(geom));
+
+ OK(scad_scene_count(&c));
+ CHK(c == 0);
+
+ OK(scad_add_sphere(p1, 1, &geom1));
+ BAD(scad_geometry_translate(NULL, NULL, NULL));
+ BAD(scad_geometry_translate(NULL, NULL, &geom));
+ BAD(scad_geometry_translate(NULL, d1, NULL));
+ BAD(scad_geometry_translate(geom1, NULL, NULL));
+ BAD(scad_geometry_translate(NULL, d1, &geom));
+ BAD(scad_geometry_translate(geom1, NULL, &geom));
+ BAD(scad_geometry_translate(geom1, d1, NULL));
+ OK(scad_geometry_translate(geom1, d1, &geom));
+ OK(scad_geometry_ref_put(geom1));
+ OK(scad_geometry_ref_put(geom));
+
+ OK(scad_scene_count(&c));
+ CHK(c == 0);
+
+ OK(scad_add_sphere(p1, 1, &geom1));
+ BAD(scad_geometry_rotate(NULL, NULL, NULL, 1, NULL));
+ BAD(scad_geometry_rotate(NULL, NULL, NULL, 1, &geom));
+ BAD(scad_geometry_rotate(NULL, NULL, d1, 1, NULL));
+ BAD(scad_geometry_rotate(NULL, p1, NULL, 1, NULL));
+ BAD(scad_geometry_rotate(geom1, NULL, NULL, 1, NULL));
+ BAD(scad_geometry_rotate(NULL, NULL, d1, 1, &geom));
+ BAD(scad_geometry_rotate(NULL, p1, NULL, 1, &geom));
+ BAD(scad_geometry_rotate(geom1, NULL, NULL, 1, &geom));
+ BAD(scad_geometry_rotate(NULL, p1, d1, 1, NULL));
+ BAD(scad_geometry_rotate(geom1, NULL, d1, 1, NULL));
+ BAD(scad_geometry_rotate(geom1, p1, NULL, 1, NULL));
+ BAD(scad_geometry_rotate(NULL, p1, d1, 1, &geom));
+ BAD(scad_geometry_rotate(geom1, NULL, d1, 1, &geom));
+ BAD(scad_geometry_rotate(geom1, p1, NULL, 1, &geom));
+ BAD(scad_geometry_rotate(geom1, p1, d1, 1, NULL));
+ OK(scad_geometry_rotate(geom1, p1, d1, 1, &geom));
+ OK(scad_geometry_ref_put(geom1));
+ OK(scad_geometry_ref_put(geom));
+
+ OK(scad_scene_count(&c));
+ CHK(c == 0);
+
+ OK(scad_add_polygon(get_position, coord, 0, 3, &poly));
+ BAD(scad_geometry_extrude(NULL, NULL, NULL));
+ BAD(scad_geometry_extrude(NULL, NULL, &geom));
+ BAD(scad_geometry_extrude(NULL, d1, NULL));
+ BAD(scad_geometry_extrude(poly, NULL, NULL));
+ BAD(scad_geometry_extrude(NULL, d1, &geom));
+ BAD(scad_geometry_extrude(poly, NULL, &geom));
+ BAD(scad_geometry_extrude(poly, d1, NULL));
+ OK(scad_geometry_extrude(poly, d1, &geom));
+ OK(scad_geometry_ref_put(poly));
+ OK(scad_geometry_ref_put(geom));
+
+ OK(scad_scene_count(&c));
+ CHK(c == 0);
+
+ OK(scad_add_polygon(get_position, coord, 0, 3, geoms+0));
+ OK(scad_geometry_translate(geoms[0], d1, geoms+1));
+ OK(scad_geometries_collect(geoms, 2, &poly));
+ OK(scad_geometry_ref_put(geoms[0]));
+ OK(scad_geometry_ref_put(geoms[1]));
+ OK(scad_geometry_extrude(poly, d1, &geom));
+ OK(scad_geometry_ref_put(poly));
+ OK(scad_geometry_ref_put(geom));
+
+ OK(scad_scene_count(&c));
+ CHK(c == 0);
+
+ OK(scad_add_sphere(p1, 1, &geom));
+ BAD(scad_geometry_extrude(geom, d1, &geom2));
+ OK(scad_geometry_ref_put(geom));
+
+ OK(scad_scene_count(&c));
+ CHK(c == 0);
+
+ OK(scad_add_sphere(p1, 1, geoms+0));
+ OK(scad_add_sphere(p2, 2, geoms+1));
+ OK(scad_geometries_collect(geoms, 2, &geom));
+ OK(scad_geometry_ref_put(geoms[0]));
+ OK(scad_geometry_ref_put(geoms[1]));
+ BAD(scad_geometry_explode(NULL, NULL, NULL, NULL));
+ BAD(scad_geometry_explode(NULL, NULL, NULL, &c));
+ BAD(scad_geometry_explode(NULL, NULL, &geom_array, NULL));
+ BAD(scad_geometry_explode(NULL, geom, NULL, NULL));
+ BAD(scad_geometry_explode(NULL, NULL, &geom_array, &c));
+ BAD(scad_geometry_explode(NULL, geom, NULL, &c));
+ BAD(scad_geometry_explode(NULL, geom, &geom_array, NULL));
+ OK(scad_geometry_explode(NULL, geom, &geom_array, &c));
+ OK(scad_geometry_ref_put(geom));
+ CHK(c == 2);
+ OK(scad_geometry_ref_put(geom_array[0]));
+ OK(scad_geometry_ref_put(geom_array[1]));
+ MEM_RM(&allocator, geom_array);
+
+ OK(scad_scene_count(&c));
+ CHK(c == 0);
+
+ OK(scad_add_sphere(p1, 1, &geom));
+ BAD(scad_geometry_ref_get(NULL));
+ OK(scad_geometry_ref_get(geom));
+ BAD(scad_geometry_ref_put(NULL));
+ OK(scad_geometry_ref_put(geom));
+ OK(scad_geometry_ref_put(geom));
+
+ OK(scad_scene_count(&c));
+ CHK(c == 0);
+
+ BAD(scad_geometry_get_count(NULL, &c));
+ BAD(scad_geometry_get_count(geom, NULL));
+ OK(scad_add_sphere(p1, 1, &geom));
+ OK(scad_geometry_get_count(geom, &c));
+ CHK(c == 1);
+ OK(scad_geometry_ref_put(geom));
+
+ OK(scad_scene_count(&c));
+ CHK(c == 0);
+
+ OK(scad_add_sphere(p1, 0.1, &geom));
+ OK(scad_add_sphere(p3, 0.1, &geom1));
+ OK(scad_geometries_intersect(&geom, 1, &geom1, 1, &geom2));
+ BAD(scad_geometry_is_empty(NULL, &e));
+ BAD(scad_geometry_is_empty(geom, NULL));
+ OK(scad_geometry_is_empty(geom, &e));
+ CHK(e == 0);
+ OK(scad_geometry_is_empty(geom2, &e));
+ CHK(e == 1);
+ OK(scad_geometry_ref_put(geom));
+ OK(scad_geometry_ref_put(geom1));
+ OK(scad_geometry_ref_put(geom2));
+
+ OK(scad_scene_count(&c));
+ CHK(c == 0);
+
+ OK(scad_add_sphere(p1, 1, &geom));
+ BAD(scad_geometry_set_custom_data(NULL, NULL, NULL));
+ OK(scad_geometry_set_custom_data(geom, NULL, NULL));
+ OK(scad_geometry_set_custom_data(geom, NULL, (void*)&e));
+ OK(scad_geometry_set_custom_data(geom, dummy_release, NULL));
+ OK(scad_geometry_set_custom_data(geom, dummy_release, (void*)&e));
+ OK(scad_geometry_ref_put(geom));
+
+ OK(scad_scene_count(&c));
+ CHK(c == 0);
+
+ OK(scad_add_sphere(p1, 1, &geom));
+ BAD(scad_geometry_get_custom_data(NULL, NULL));
+ BAD(scad_geometry_get_custom_data(geom, NULL));
+ OK(scad_geometry_get_custom_data(geom, &data));
+ CHK(data == NULL); /* NULL when unset */
+ OK(scad_geometry_set_custom_data(geom, NULL, (void*)&c));
+ OK(scad_geometry_get_custom_data(geom, &data));
+ CHK(data == (void*)&c);
+ OK(scad_geometry_set_custom_data(geom, NULL, NULL));
+ OK(scad_geometry_get_custom_data(geom, &data));
+ CHK(data == NULL);
+ OK(scad_geometry_set_custom_data(geom, dummy_release, (void*)&c));
+ OK(scad_geometry_get_custom_data(geom, &data));
+ CHK(data == (void*)&c);
+ OK(scad_geometry_ref_put(geom));
+
+ OK(scad_scene_count(&c));
+ CHK(c == 0);
+
+ OK(scad_add_sphere(p1, 1, &geom1));
+ OK(scad_add_sphere(p2, 2, &geom2));
+ BAD(scad_geometry_set_name(NULL, NULL));
+ OK(scad_geometry_set_name(geom1, "sphere 1"));
+ OK(scad_geometry_set_name(geom1, "sphere 1")); /* Same geometry: OK */
+ name = "sphere 2";
+ OK(scad_geometry_set_name(geom2, name));
+ BAD(scad_geometry_set_name(geom2, "sphere 1")); /* Name already in use */
+ OK(scad_geometry_get_name(geom2, &name2));
+ CHK(0 == strcmp(name, name2)); /* Name was left unchanged */
+ OK(scad_geometry_ref_put(geom1));
+ OK(scad_geometry_ref_put(geom2));
+
+ OK(scad_scene_count(&c));
+ CHK(c == 0);
+ OK(scad_add_sphere(p1, 1, &geom));
+ BAD(scad_geometry_get_name(NULL, &name));
+ BAD(scad_geometry_get_name(geom, NULL));
+ OK(scad_geometry_get_name(geom, &name));
+ CHK(name == NULL);
+ name = "sphere 1";
+ OK(scad_geometry_set_name(geom, name));
+ OK(scad_geometry_get_name(geom, &name2));
+ CHK(0 == strcmp(name, name2));
+ OK(scad_geometry_set_name(geom, NULL));
+ OK(scad_geometry_get_name(geom, &name));
+ CHK(name == NULL);
+ OK(scad_geometry_ref_put(geom));
+
+ OK(scad_scene_count(&c));
+ CHK(c == 0);
+
+ OK(scad_add_sphere(p1, 1, &geom1));
+ OK(scad_add_sphere(p2, 2, &geom2));
+ /* Sharing content */
+ OK(scad_geometries_collect(&geom1, 1, geoms+0));
+ OK(scad_geometries_collect(&geom2, 1, geoms+1));
+ OK(scad_geometry_set_name(geom1, "sphere 1"));
+ OK(scad_geometry_set_name(geom2, "sphere 2"));
+ BAD(scad_geometries_swap(NULL, NULL, 0, 0));
+ BAD(scad_geometries_swap(NULL, NULL, 0, SCAD_SWAP_GEOMETRY));
+ BAD(scad_geometries_swap(NULL, NULL, 1, 0));
+ BAD(scad_geometries_swap(NULL, &geom2, 0, 0));
+ BAD(scad_geometries_swap(&geom1, NULL, 0, 0));
+ BAD(scad_geometries_swap(NULL, NULL, 1, SCAD_SWAP_GEOMETRY));
+ BAD(scad_geometries_swap(NULL, &geom2, 0, SCAD_SWAP_GEOMETRY));
+ BAD(scad_geometries_swap(&geom1, NULL, 0, SCAD_SWAP_GEOMETRY));
+ BAD(scad_geometries_swap(NULL, &geom2, 1, 0));
+ BAD(scad_geometries_swap(&geom1, NULL, 1, 0));
+ BAD(scad_geometries_swap(&geom1, &geom2, 0, 0));
+ BAD(scad_geometries_swap(NULL, &geom2, 1, SCAD_SWAP_GEOMETRY));
+ BAD(scad_geometries_swap(&geom1, NULL, 1, SCAD_SWAP_GEOMETRY));
+ BAD(scad_geometries_swap(&geom1, &geom2, 0, SCAD_SWAP_GEOMETRY));
+ BAD(scad_geometries_swap(&geom1, &geom2, 1, 0));
+ OK(scad_geometries_swap(&geom1, &geom2, 1, SCAD_SWAP_GEOMETRY));
+ /* Names not swapped */
+ OK(scad_geometry_get_name(geom1, &name));
+ OK(scad_geometry_get_name(geom2, &name2));
+ CHK(0 == strcmp(name, "sphere 1"));
+ CHK(0 == strcmp(name2, "sphere 2"));
+ /* Geometries swaped */
+ OK(scad_geometry_equal(geom1, geoms[1], &e));
+ CHK(e);
+ OK(scad_geometry_equal(geom2, geoms[0], &e));
+ CHK(e);
+ OK(scad_geometries_swap(&geom1, &geom2, 1, SCAD_SWAP_NAME));
+ /* Names swapped */
+ OK(scad_geometry_get_name(geom1, &name));
+ OK(scad_geometry_get_name(geom2, &name2));
+ CHK(0 == strcmp(name, "sphere 2"));
+ CHK(0 == strcmp(name2, "sphere 1"));
+ /* Geometries not swaped */
+ OK(scad_geometry_equal(geom1, geoms[1], &e));
+ CHK(e);
+ OK(scad_geometry_equal(geom2, geoms[0], &e));
+ CHK(e);
+ OK(scad_geometry_ref_put(geom1));
+ OK(scad_geometry_ref_put(geom2));
+ OK(scad_geometry_ref_put(geoms[0]));
+ OK(scad_geometry_ref_put(geoms[1]));
+
+ OK(scad_scene_count(&c));
+ CHK(c == 0);
+
+ OK(scad_add_rectangle(p1, d2, &geom1));
+ BAD(scad_geometry_get_mass(NULL, NULL));
+ BAD(scad_geometry_get_mass(NULL, &m));
+ BAD(scad_geometry_get_mass(geom1, NULL));
+ OK(scad_geometry_get_mass(geom1, &m));
+ CHK(eq_eps(m, 1, 1e-6)); /* Mass of 2D object is its surface */
+ OK(scad_geometry_ref_put(geom1));
+
+ OK(scad_scene_count(&c));
+ CHK(c == 0);
+
+ OK(scad_add_sphere(p1, 1, &geom1));
+ OK(scad_geometry_get_mass(geom1, &m));
+ CHK(eq_eps(m, PI*4/3, 1e-6)); /* Mass of 3D object is its volume */
+ OK(scad_geometry_ref_put(geom1));
+
+ OK(scad_scene_count(&c));
+ CHK(c == 0);
+
+ OK(scad_add_rectangle(p1, d2, &geom1));
+ d3_add(tmp2, p1, d3_muld(tmp2, d2, 0.5));
+ BAD(scad_geometry_get_centerofmass(NULL, NULL));
+ BAD(scad_geometry_get_centerofmass(NULL, tmp));
+ BAD(scad_geometry_get_centerofmass(geom1, NULL));
+ OK(scad_geometry_get_centerofmass(geom1, tmp));
+ CHK(d3_eq_eps(tmp, tmp2, 1e-6));
+ OK(scad_geometry_ref_put(geom1));
+
+ OK(scad_scene_count(&c));
+ CHK(c == 0);
+
+ OK(scad_add_rectangle(p1, d2, geoms+0));
+ OK(scad_add_rectangle(p2, d2, geoms+1));
+ d3_add(tmp2, d3_muld(tmp2, d3_add(tmp2, p1, p2), 0.5), d3_muld(tmp, d2, 0.5));
+ OK(scad_geometries_collect(geoms, 2, &geom1));
+ OK(scad_geometry_get_centerofmass(geom1, tmp));
+ CHK(d3_eq_eps(tmp, tmp2, 1e-6));
+ OK(scad_geometry_ref_put(geom1));
+ OK(scad_geometry_ref_put(geoms[0]));
+ OK(scad_geometry_ref_put(geoms[1]));
+
+ OK(scad_scene_count(&c));
+ CHK(c == 0);
+
+ OK(scad_add_sphere(p1, 1, &geom1));
+ OK(scad_geometry_get_centerofmass(geom1, tmp));
+ CHK(d3_eq_eps(tmp, p1, 1e-6));
+ OK(scad_geometry_ref_put(geom1));
+
+ OK(scad_scene_count(&c));
+ CHK(c == 0);
+
+ OK(scad_add_sphere(p1, 1, geoms+0));
+ OK(scad_add_sphere(p2, 1, geoms+1));
+ OK(scad_geometries_collect(geoms, 2, &geom1));
+ d3_muld(tmp2, d3_add(tmp2, p1, p2), 0.5);
+ OK(scad_geometry_get_centerofmass(geom1, tmp));
+ CHK(d3_eq_eps(tmp, tmp2, 1e-6));
+ OK(scad_geometry_ref_put(geom1));
+ OK(scad_geometry_ref_put(geoms[0]));
+ OK(scad_geometry_ref_put(geoms[1]));
+
+ OK(scad_scene_count(&c));
+ CHK(c == 0);
+
+ OK(scad_add_rectangle(p1, d2, &geom1));
+ BAD(scad_geometry_get_closest_point(NULL, NULL, NULL, NULL, NULL));
+ BAD(scad_geometry_get_closest_point(NULL, NULL, NULL, &m, NULL));
+ BAD(scad_geometry_get_closest_point(NULL, NULL, tmp, NULL, NULL));
+ BAD(scad_geometry_get_closest_point(NULL, p3, NULL, NULL, NULL));
+ BAD(scad_geometry_get_closest_point(geom1, NULL, NULL, NULL, NULL));
+ BAD(scad_geometry_get_closest_point(NULL, NULL, tmp, &m, NULL));
+ BAD(scad_geometry_get_closest_point(NULL, p3, NULL, &m, NULL));
+ BAD(scad_geometry_get_closest_point(geom1, NULL, NULL, &m, NULL));
+ BAD(scad_geometry_get_closest_point(NULL, p3, tmp, NULL, NULL));
+ BAD(scad_geometry_get_closest_point(geom1, NULL, tmp, NULL, NULL));
+ BAD(scad_geometry_get_closest_point(geom1, p3, NULL, NULL, NULL));
+ BAD(scad_geometry_get_closest_point(geom1, p3, tmp, NULL, NULL));
+ BAD(scad_geometry_get_closest_point(geom1, p3, NULL, &m, NULL));
+ BAD(scad_geometry_get_closest_point(geom1, NULL, tmp, &m, NULL));
+ BAD(scad_geometry_get_closest_point(NULL, p3, tmp, &m, NULL));
+ OK(scad_geometry_get_closest_point(geom1, p3, tmp, &m, NULL));
+ OK(scad_geometry_get_closest_point(geom1, p3, tmp, &m, &geom));
+ CHK(d3_eq_eps(tmp, p3, 1e-6));
+ CHK(eq_eps(m, 0, 1e-6));
+ OK(scad_geometry_ref_put(geom1));
+ OK(scad_geometry_ref_put(geom));
+
+ OK(scad_scene_count(&c));
+ CHK(c == 0);
+
+ OK(scad_add_sphere(p1, 1, &geom1));
+ d3_normalize(tmp, p2);
+ d3_muld(tmp2, tmp, 0.9999);
+ OK(scad_geometry_get_closest_point(geom1, tmp2, tmp, &m, NULL));
+ OK(scad_geometry_get_closest_point(geom1, tmp2, tmp, &m, &geom));
+ CHK(d3_eq_eps(tmp2, tmp, 1e-3));
+ CHK(eq_eps(m, d3_len(d3_sub(tmp, tmp2, tmp)), 1e-6));
+ OK(scad_geometry_ref_put(geom1));
+ OK(scad_geometry_ref_put(geom));
+
+ OK(scad_scene_count(&c));
+ CHK(c == 0);
+
+ OK(scad_add_rectangle(p1, d2, &geom1));
+ BAD(scad_geometry_get_normal(NULL, NULL, NULL, NULL));
+ BAD(scad_geometry_get_normal(NULL, NULL, tmp, NULL));
+ BAD(scad_geometry_get_normal(NULL, p3, NULL, NULL));
+ BAD(scad_geometry_get_normal(geom1, NULL, NULL, NULL));
+ BAD(scad_geometry_get_normal(NULL, p3, tmp, NULL));
+ BAD(scad_geometry_get_normal(geom1, NULL, tmp, NULL));
+ BAD(scad_geometry_get_normal(geom1, p3, NULL, NULL));
+ d3(tmp2, 0.3, 0.3, 0);
+ OK(scad_geometry_get_normal(geom1, tmp2, tmp, NULL));
+ OK(scad_geometry_get_normal(geom1, tmp2, tmp, &geom));
+ d3(tmp2, 0, 0, 1);
+ CHK(d3_eq_eps(tmp, tmp2, 1e-6));
+ OK(scad_geometry_ref_put(geom1));
+ OK(scad_geometry_ref_put(geom));
+
+ OK(scad_scene_count(&c));
+ CHK(c == 0);
+
+ OK(scad_add_sphere(p1, 1, &geom1));
+ d3_normalize(tmp2, p2);
+ OK(scad_geometry_get_normal(geom1, tmp2, tmp, NULL));
+ OK(scad_geometry_get_normal(geom1, tmp2, tmp, &geom));
+ CHK(d3_eq_eps(tmp, tmp2, 1e-6));
+ OK(scad_geometry_ref_put(geom1));
+ OK(scad_geometry_ref_put(geom));
+
+ OK(scad_scene_count(&c));
+ CHK(c == 0);
+
+ OK(scad_add_sphere(p1, 1, &geom));
+ BAD(scad_geometry_get_bounding_box(NULL, NULL, NULL));
+ BAD(scad_geometry_get_bounding_box(NULL, NULL, tmp2));
+ BAD(scad_geometry_get_bounding_box(NULL, tmp, NULL));
+ BAD(scad_geometry_get_bounding_box(geom, NULL, NULL));
+ BAD(scad_geometry_get_bounding_box(NULL, tmp, tmp2));
+ BAD(scad_geometry_get_bounding_box(geom, NULL, tmp2));
+ BAD(scad_geometry_get_bounding_box(geom, tmp, NULL));
+ OK(scad_geometry_get_bounding_box(geom, tmp, tmp2));
+ CHK(d3_eq_eps(d3_muld(tmp, tmp, -1), tmp2, 1e-6));
+ d3(tmp, 1,1,1);
+ CHK(d3_eq_eps(tmp, tmp2, 1e-6));
+ OK(scad_geometry_ref_put(geom));
+
+ OK(scad_scene_count(&c));
+ CHK(c == 0);
+
+ OK(scad_add_sphere(p1, 1, &geom));
+ OK(scad_geometries_collect(&geom, 1, &geom2));
+ BAD(scad_geometry_equal(NULL, NULL, NULL));
+ BAD(scad_geometry_equal(NULL, NULL, &e));
+ BAD(scad_geometry_equal(NULL, geom2, NULL));
+ BAD(scad_geometry_equal(geom, NULL, NULL));
+ BAD(scad_geometry_equal(NULL, geom2, &e));
+ BAD(scad_geometry_equal(geom, NULL, &e));
+ BAD(scad_geometry_equal(geom, geom2, NULL));
+ OK(scad_geometry_equal(geom, geom2, &e));
+ CHK(e == 1);
+ OK(scad_geometry_ref_put(geom2));
+ OK(scad_add_sphere(p1, 1, &geom2));
+ OK(scad_geometry_equal(geom, geom2, &e));
+ CHK(e == 0);
+ OK(scad_geometry_ref_put(geom));
+ OK(scad_geometry_ref_put(geom2));
+
+ OK(scad_scene_count(&c));
+ CHK(c == 0);
+
+ OK(scad_add_sphere(p1, 1, &geom));
+ OK(scad_geometries_collect(&geom, 1, &geom2));
+ BAD(scad_geometry_is_included(NULL, NULL, 0, NULL));
+ BAD(scad_geometry_is_included(NULL, NULL, 0, &e));
+ BAD(scad_geometry_is_included(NULL, NULL, 1, NULL));
+ BAD(scad_geometry_is_included(NULL, &geom2, 0, NULL));
+ BAD(scad_geometry_is_included(geom, NULL, 0, NULL));
+ BAD(scad_geometry_is_included(NULL, NULL, 1, &e));
+ BAD(scad_geometry_is_included(NULL, &geom2, 0, &e));
+ BAD(scad_geometry_is_included(geom, NULL, 0, &e));
+ BAD(scad_geometry_is_included(NULL, &geom2, 1, NULL));
+ BAD(scad_geometry_is_included(geom, NULL, 1, NULL));
+ BAD(scad_geometry_is_included(geom, &geom2, 0, NULL));
+ BAD(scad_geometry_is_included(geom, &geom2, 1, NULL));
+ BAD(scad_geometry_is_included(geom, &geom2, 0, &e));
+ BAD(scad_geometry_is_included(geom, NULL, 1, &e));
+ BAD(scad_geometry_is_included(NULL, &geom2, 1, &e));
+ OK(scad_geometry_is_included(geom, &geom2, 1, &e));
+ CHK(e == 1);
+ OK(scad_geometry_ref_put(geom2));
+ OK(scad_add_sphere(p1, 1, &geom2));
+ OK(scad_geometry_is_included(geom, &geom2, 1, &e));
+ CHK(e == 0);
+ OK(scad_geometry_ref_put(geom));
+ OK(scad_geometry_ref_put(geom2));
+
+ OK(scad_scene_count(&c));
+ CHK(c == 0);
+
+ OK(scad_add_sphere(p1, 1, &geom));
+ BAD(scad_geometries_collect(NULL, 0, NULL));
+ BAD(scad_geometries_collect(NULL, 0, &geom2));
+ BAD(scad_geometries_collect(NULL, 1, NULL));
+ BAD(scad_geometries_collect(&geom, 0, NULL));
+ BAD(scad_geometries_collect(NULL, 1, &geom2));
+ BAD(scad_geometries_collect(&geom, 0, &geom2));
+ BAD(scad_geometries_collect(&geom, 1, NULL));
+ OK(scad_geometries_collect(&geom, 1, &geom2));
+ OK(scad_geometry_ref_put(geom));
+ OK(scad_geometry_ref_put(geom2));
+
+ OK(scad_scene_count(&c));
+ CHK(c == 0);
+
+ OK(scad_add_box(p1, d0, &geom1));
+ OK(scad_add_box(p2, d0, &geom2));
+ BAD(scad_geometries_fuse(NULL, 0, NULL, 0, NULL));
+ BAD(scad_geometries_fuse(NULL, 0, NULL, 0, &geom));
+ BAD(scad_geometries_fuse(NULL, 0, NULL, 1, NULL));
+ BAD(scad_geometries_fuse(NULL, 0, &geom2, 0, NULL));
+ BAD(scad_geometries_fuse(NULL, 1, NULL, 0, NULL));
+ BAD(scad_geometries_fuse(&geom1, 0, NULL, 0, NULL));
+ BAD(scad_geometries_fuse(NULL, 0, NULL, 1, &geom));
+ BAD(scad_geometries_fuse(NULL, 0, &geom2, 0, &geom));
+ BAD(scad_geometries_fuse(NULL, 1, NULL, 0, &geom));
+ BAD(scad_geometries_fuse(&geom1, 0, NULL, 0, &geom));
+ BAD(scad_geometries_fuse(NULL, 0, &geom2, 1, NULL));
+ BAD(scad_geometries_fuse(NULL, 1, NULL, 1, NULL));
+ BAD(scad_geometries_fuse(&geom1, 0, NULL, 1, NULL));
+ BAD(scad_geometries_fuse(NULL, 1, &geom2, 0, NULL));
+ BAD(scad_geometries_fuse(&geom1, 0, &geom2, 0, NULL));
+ BAD(scad_geometries_fuse(&geom1, 1, NULL, 0, NULL));
+ BAD(scad_geometries_fuse(NULL, 0, &geom2, 1, &geom));
+ BAD(scad_geometries_fuse(NULL, 1, NULL, 1, &geom));
+ BAD(scad_geometries_fuse(&geom1, 0, NULL, 1, &geom));
+ BAD(scad_geometries_fuse(NULL, 1, &geom2, 0, &geom));
+ BAD(scad_geometries_fuse(&geom, 0, &geom2, 0, &geom));
+ BAD(scad_geometries_fuse(&geom, 1, NULL, 0, &geom));
+ BAD(scad_geometries_fuse(NULL, 1, &geom2, 1, NULL));
+ BAD(scad_geometries_fuse(&geom, 0, &geom2, 1, NULL));
BAD(scad_geometries_fuse(&geom1, 1, NULL, 1, &geom));
+ BAD(scad_geometries_fuse(&geom, 1, &geom2, 0, NULL));
BAD(scad_geometries_fuse(&geom1, 1, &geom2, 1, NULL));
- OK(scad_geometries_fuse(&geom1, 1, &geom2, 1, &geom));
+ BAD(scad_geometries_fuse(&geom1, 1, &geom2, 0, &geom));
+ BAD(scad_geometries_fuse(&geom1, 1, NULL, 1, &geom));
+ BAD(scad_geometries_fuse(&geom1, 0, &geom2, 1, &geom));
+ BAD(scad_geometries_fuse(NULL, 1, &geom2, 1, &geom));
+ OK(scad_geometries_fuse(&geom1, 1, &geom2, 1, &geom)); /* disjoint geometries */
+ OK(scad_geometry_get_count(geom, &c));
+ CHK(c == 2);
+ OK(scad_geometry_ref_put(geom1));
+ OK(scad_geometry_ref_put(geom2));
OK(scad_geometry_ref_put(geom));
- /* BAD(scad_geometries_cut(NULL, NULL, 0, geoms, 2, &geom)); */
- BAD(scad_geometries_cut(geoms, 2, NULL, 0, &geom));
- BAD(scad_geometries_cut(NULL, 1, &geom2, 1, &geom));
+ OK(scad_scene_count(&c));
+ CHK(c == 0);
+
+ OK(scad_add_box(p1, d1, &geom1));
+ OK(scad_add_box(p2, d1, &geom2));
+ OK(scad_geometries_fuse(&geom1, 1, &geom2, 1, &geom)); /* non-disjoint geometries */
+ OK(scad_geometry_get_count(geom, &c));
+ CHK(c == 1);
+ OK(scad_geometry_ref_put(geom1));
+ OK(scad_geometry_ref_put(geom2));
+ OK(scad_geometry_ref_put(geom));
+
+ OK(scad_scene_count(&c));
+ CHK(c == 0);
+
+ OK(scad_add_box(p1, d0, &geom1));
+ OK(scad_add_box(p2, d0, &geom2));
+ BAD(scad_geometries_cut(NULL, 0, NULL, 0, &geom));
+ BAD(scad_geometries_cut(NULL, 0, NULL, 1, NULL));
+ BAD(scad_geometries_cut(NULL, 0, &geom2, 0, NULL));
+ BAD(scad_geometries_cut(NULL, 1, NULL, 0, NULL));
+ BAD(scad_geometries_cut(&geom1, 0, NULL, 0, NULL));
+ BAD(scad_geometries_cut(NULL, 0, NULL, 1, &geom));
+ BAD(scad_geometries_cut(NULL, 0, &geom2, 0, &geom));
+ BAD(scad_geometries_cut(NULL, 1, NULL, 0, &geom));
+ BAD(scad_geometries_cut(&geom1, 0, NULL, 0, &geom));
+ BAD(scad_geometries_cut(NULL, 0, &geom2, 1, NULL));
+ BAD(scad_geometries_cut(NULL, 1, NULL, 1, NULL));
+ BAD(scad_geometries_cut(&geom1, 0, NULL, 1, NULL));
+ BAD(scad_geometries_cut(NULL, 1, &geom2, 0, NULL));
+ BAD(scad_geometries_cut(&geom1, 0, &geom2, 0, NULL));
+ BAD(scad_geometries_cut(&geom1, 1, NULL, 0, NULL));
+ BAD(scad_geometries_cut(NULL, 0, &geom2, 1, &geom));
+ BAD(scad_geometries_cut(NULL, 1, NULL, 1, &geom));
+ BAD(scad_geometries_cut(&geom1, 0, NULL, 1, &geom));
+ BAD(scad_geometries_cut(NULL, 1, &geom2, 0, &geom));
+ BAD(scad_geometries_cut(&geom, 0, &geom2, 0, &geom));
+ BAD(scad_geometries_cut(&geom, 1, NULL, 0, &geom));
+ BAD(scad_geometries_cut(NULL, 1, &geom2, 1, NULL));
+ BAD(scad_geometries_cut(&geom, 0, &geom2, 1, NULL));
BAD(scad_geometries_cut(&geom1, 1, NULL, 1, &geom));
+ BAD(scad_geometries_cut(&geom, 1, &geom2, 0, NULL));
BAD(scad_geometries_cut(&geom1, 1, &geom2, 1, NULL));
- OK(scad_geometries_cut(&geom1, 1, &geom2, 1, &geom));
+ BAD(scad_geometries_cut(&geom1, 1, &geom2, 0, &geom));
+ BAD(scad_geometries_cut(&geom1, 1, NULL, 1, &geom));
+ BAD(scad_geometries_cut(&geom1, 0, &geom2, 1, &geom));
+ BAD(scad_geometries_cut(NULL, 1, &geom2, 1, &geom));
+ OK(scad_geometries_cut(&geom1, 1, &geom2, 1, &geom)); /* disjoint geometries */
+ OK(scad_geometry_is_empty(geom, &e));
+ CHK(e == 0);
+ OK(scad_geometry_ref_put(geom1));
+ OK(scad_geometry_ref_put(geom2));
OK(scad_geometry_ref_put(geom));
- /* BAD(scad_geometries_intersect(NULL, NULL, 0, geoms, 2, &geom)); */
- BAD(scad_geometries_intersect(geoms, 2, NULL, 0, &geom));
- BAD(scad_geometries_intersect(NULL, 1, &geom2, 1, &geom));
+ OK(scad_scene_count(&c));
+ CHK(c == 0);
+
+ OK(scad_add_box(p1, d1, &geom1));
+ OK(scad_add_box(p2, d1, &geom2));
+ OK(scad_geometries_cut(&geom1, 1, &geom2, 1, &geom)); /* non-disjoint geometries */
+ OK(scad_geometry_is_empty(geom, &e));
+ CHK(e == 0);
+ OK(scad_geometry_ref_put(geom1));
+ OK(scad_geometry_ref_put(geom2));
+ OK(scad_geometry_ref_put(geom));
+
+ OK(scad_scene_count(&c));
+ CHK(c == 0);
+
+ OK(scad_add_box(p1, d1, &geom1));
+ OK(scad_geometries_cut(&geom1, 1, &geom1, 1, &geom));
+ OK(scad_geometry_is_empty(geom, &e));
+ CHK(e == 1);
+ OK(scad_geometry_ref_put(geom1));
+ OK(scad_geometry_ref_put(geom));
+
+ OK(scad_scene_count(&c));
+ CHK(c == 0);
+
+ OK(scad_add_sphere(p1, 1, &geom1));
+ OK(scad_geometries_cut(&geom1, 1, &geom1, 1, &geom));
+ OK(scad_geometry_is_empty(geom, &e));
+ CHK(e == 1);
+ OK(scad_geometry_ref_put(geom1));
+ OK(scad_geometry_ref_put(geom));
+
+ OK(scad_scene_count(&c));
+ CHK(c == 0);
+
+ OK(scad_add_box(p1, d0, &geom1));
+ OK(scad_add_box(p2, d0, &geom2));
+ BAD(scad_geometries_intersect(NULL, 0, NULL, 0, &geom));
+ BAD(scad_geometries_intersect(NULL, 0, NULL, 1, NULL));
+ BAD(scad_geometries_intersect(NULL, 0, &geom2, 0, NULL));
+ BAD(scad_geometries_intersect(NULL, 1, NULL, 0, NULL));
+ BAD(scad_geometries_intersect(&geom1, 0, NULL, 0, NULL));
+ BAD(scad_geometries_intersect(NULL, 0, NULL, 1, &geom));
+ BAD(scad_geometries_intersect(NULL, 0, &geom2, 0, &geom));
+ BAD(scad_geometries_intersect(NULL, 1, NULL, 0, &geom));
+ BAD(scad_geometries_intersect(&geom1, 0, NULL, 0, &geom));
+ BAD(scad_geometries_intersect(NULL, 0, &geom2, 1, NULL));
+ BAD(scad_geometries_intersect(NULL, 1, NULL, 1, NULL));
+ BAD(scad_geometries_intersect(&geom1, 0, NULL, 1, NULL));
+ BAD(scad_geometries_intersect(NULL, 1, &geom2, 0, NULL));
+ BAD(scad_geometries_intersect(&geom1, 0, &geom2, 0, NULL));
+ BAD(scad_geometries_intersect(&geom1, 1, NULL, 0, NULL));
+ BAD(scad_geometries_intersect(NULL, 0, &geom2, 1, &geom));
+ BAD(scad_geometries_intersect(NULL, 1, NULL, 1, &geom));
+ BAD(scad_geometries_intersect(&geom1, 0, NULL, 1, &geom));
+ BAD(scad_geometries_intersect(NULL, 1, &geom2, 0, &geom));
+ BAD(scad_geometries_intersect(&geom, 0, &geom2, 0, &geom));
+ BAD(scad_geometries_intersect(&geom, 1, NULL, 0, &geom));
+ BAD(scad_geometries_intersect(NULL, 1, &geom2, 1, NULL));
+ BAD(scad_geometries_intersect(&geom, 0, &geom2, 1, NULL));
BAD(scad_geometries_intersect(&geom1, 1, NULL, 1, &geom));
+ BAD(scad_geometries_intersect(&geom, 1, &geom2, 0, NULL));
BAD(scad_geometries_intersect(&geom1, 1, &geom2, 1, NULL));
+ BAD(scad_geometries_intersect(&geom1, 1, &geom2, 0, &geom));
+ BAD(scad_geometries_intersect(&geom1, 1, NULL, 1, &geom));
+ BAD(scad_geometries_intersect(&geom1, 0, &geom2, 1, &geom));
+ BAD(scad_geometries_intersect(NULL, 1, &geom2, 1, &geom));
+ OK(scad_geometries_intersect(&geom1, 1, &geom2, 1, &geom));
+ OK(scad_geometry_is_empty(geom, &e));
+ CHK(e == 1);
+ OK(scad_geometry_ref_put(geom1));
+ OK(scad_geometry_ref_put(geom2));
+ OK(scad_geometry_ref_put(geom));
+
+ OK(scad_scene_count(&c));
+ CHK(c == 0);
+
+ OK(scad_add_box(p1, d1, &geom1));
+ OK(scad_add_box(p2, d1, &geom2));
OK(scad_geometries_intersect(&geom1, 1, &geom2, 1, &geom));
+ OK(scad_geometry_is_empty(geom, &e));
+ CHK(e == 0);
+ OK(scad_geometry_ref_put(geom1));
+ OK(scad_geometry_ref_put(geom2));
OK(scad_geometry_ref_put(geom));
- /* BAD(scad_geometries_common_boundaries(NULL, NULL, 0, geoms, 2, &geom)); */
- BAD(scad_geometries_common_boundaries(NULL, geoms, 2, NULL, 0, &geom_array, &c));
- BAD(scad_geometries_common_boundaries(NULL, NULL, 1, &geom2, 1, &geom_array, &c));
- BAD(scad_geometries_common_boundaries(NULL, &geom1, 1, NULL, 1, &geom_array, &c));
- BAD(scad_geometries_common_boundaries(NULL, &geom1, 1, &geom2, 1, &geom_array, NULL));
- BAD(scad_geometries_common_boundaries(NULL, &geom1, 1, &geom2, 1, NULL, &c));
- OK(scad_geometries_common_boundaries(NULL, &geom1, 1, &geom2, 1, &geom_array, &c));
+ OK(scad_scene_count(&c));
+ CHK(c == 0);
+
+ OK(scad_add_sphere(p1, 0.1, &geom));
+ OK(scad_add_sphere(p3, 0.1, &geom1));
+ OK(scad_geometries_intersect(&geom, 1, &geom1, 1, &geom2));
+ OK(scad_geometry_is_empty(geom2, &e));
+ CHK(e == 1);
+ OK(scad_geometry_ref_put(geom));
+ OK(scad_geometry_ref_put(geom1));
+ OK(scad_geometry_ref_put(geom2));
+
+ OK(scad_add_box(p1, d0, geoms+0));
+ OK(scad_add_box(p2, d0, geoms+1));
+ BAD(scad_geometries_partition(NULL, 0, 9, NULL));
+ BAD(scad_geometries_partition(NULL, 0, 9, out_geoms));
+ BAD(scad_geometries_partition(NULL, 0, 0, NULL));
+ BAD(scad_geometries_partition(NULL, 2, 9, NULL));
+ BAD(scad_geometries_partition(geoms, 0, 9, NULL));
+ BAD(scad_geometries_partition(NULL, 0, 0, out_geoms));
+ BAD(scad_geometries_partition(NULL, 2, 9, out_geoms));
+ BAD(scad_geometries_partition(geoms, 0, 9, out_geoms));
+ BAD(scad_geometries_partition(NULL, 2, 0, NULL));
+ BAD(scad_geometries_partition(geoms, 0, 0, NULL));
+ BAD(scad_geometries_partition(geoms, 2, 9, NULL));
+ BAD(scad_geometries_partition(geoms, 2, 0, NULL));
+ BAD(scad_geometries_partition(geoms, 2, 9, out_geoms));
+ BAD(scad_geometries_partition(geoms, 0, 0, out_geoms));
+ BAD(scad_geometries_partition(NULL, 2, 0, out_geoms));
+ OK(scad_geometries_partition(geoms, 2, SCAD_ALLOW_OVERLAPPING, out_geoms));
+ OK(scad_geometry_equal(geoms[0], out_geoms[0], &e));
+ CHK(e == 1);
+ OK(scad_geometry_equal(geoms[1], out_geoms[1], &e));
+ CHK(e == 1);
+ OK(scad_geometry_ref_put(geoms[0]));
+ OK(scad_geometry_ref_put(geoms[1]));
+ OK(scad_geometry_ref_put(out_geoms[0]));
+ OK(scad_geometry_ref_put(out_geoms[1]));
+
+ OK(scad_scene_count(&c));
+ CHK(c == 0);
+
+ OK(scad_add_box(p1, d1, geoms+0));
+ OK(scad_add_box(p2, d1, geoms+1));
+ BAD(scad_geometries_partition(geoms, 2, SCAD_DUMP_ON_OVERLAPPING_ERROR, out_geoms));
+ OK(scad_geometries_partition(geoms, 2, SCAD_ALLOW_OVERLAPPING, out_geoms));
+ OK(scad_geometry_ref_put(geoms[0]));
+ OK(scad_geometry_ref_put(geoms[1]));
+ OK(scad_geometry_ref_put(out_geoms[0]));
+ OK(scad_geometry_ref_put(out_geoms[1]));
+
+ OK(scad_scene_count(&c));
+ CHK(c == 0);
+
+ OK(scad_add_sphere(p1, 0.1, &geoms[0]));
+ OK(scad_add_sphere(p3, 0.1, &geoms[1]));
+ OK(scad_geometries_partition(geoms, 2, SCAD_ALLOW_OVERLAPPING, out_geoms));
+ OK(scad_geometries_swap(geoms, out_geoms, 2, SCAD_SWAP_GEOMETRY));
+ OK(scad_geometry_ref_put(out_geoms[0]));
+ OK(scad_geometry_ref_put(out_geoms[1]));
+ BAD(scad_geometries_common_boundaries(NULL, geoms+0, 2, NULL, 0, &geom_array, &c));
+ BAD(scad_geometries_common_boundaries(NULL, NULL, 1, geoms+1, 1, &geom_array, &c));
+ BAD(scad_geometries_common_boundaries(NULL, geoms+0, 1, NULL, 1, &geom_array, &c));
+ BAD(scad_geometries_common_boundaries(NULL, geoms+0, 1, geoms+1, 1, &geom_array, NULL));
+ BAD(scad_geometries_common_boundaries(NULL, geoms+0, 1, geoms+1, 1, NULL, &c));
+ OK(scad_geometries_common_boundaries(NULL, geoms+0, 1, geoms+1, 1, &geom_array, &c));
+ CHK(c == 0);
+ MEM_RM(&allocator, geom_array);
+ OK(scad_geometry_ref_put(geoms[0]));
+ OK(scad_geometry_ref_put(geoms[1]));
+
+ OK(scad_scene_count(&c));
+ CHK(c == 0);
+
+ OK(scad_add_box(p1, d1, &geoms[0]));
+ OK(scad_add_box(p3, d1, &geoms[1]));
+ OK(scad_geometries_partition(geoms, 2, SCAD_ALLOW_OVERLAPPING, out_geoms));
+ OK(scad_geometries_swap(geoms, out_geoms, 2, SCAD_SWAP_GEOMETRY));
+ OK(scad_geometry_ref_put(out_geoms[0]));
+ OK(scad_geometry_ref_put(out_geoms[1]));
+ OK(scad_geometries_common_boundaries(NULL, geoms+0, 1, geoms+1, 1, &geom_array, &c));
+ CHK(c == 4);
for(i = 0; i < c; i++) {
OK(scad_geometry_ref_put(geom_array[i]));
}
MEM_RM(&allocator, geom_array);
+ OK(scad_geometry_ref_put(geoms[0]));
+ OK(scad_geometry_ref_put(geoms[1]));
- BAD(scad_geometries_partition(NULL, 2, 1, out_geoms));
- BAD(scad_geometries_partition(geoms, 0, 1, out_geoms));
- BAD(scad_geometries_partition(geoms, 2, 1, NULL));
- OK(scad_geometries_partition(geoms, 2, 1, out_geoms));
+ OK(scad_scene_count(&c));
+ CHK(c == 0);
+
+ OK(scad_add_box(p1, d1, &geoms[0]));
+ OK(scad_add_box(p4, d1, &geoms[1]));
+ OK(scad_geometries_partition(geoms, 2, SCAD_ALLOW_OVERLAPPING, out_geoms));
+ OK(scad_geometries_swap(geoms, out_geoms, 2, SCAD_SWAP_GEOMETRY));
OK(scad_geometry_ref_put(out_geoms[0]));
OK(scad_geometry_ref_put(out_geoms[1]));
+ OK(scad_geometries_common_boundaries(NULL, geoms+0, 1, geoms+1, 1, &geom_array, &c));
+ CHK(c == 1);
+ for(i = 0; i < c; i++) {
+ OK(scad_geometry_ref_put(geom_array[i]));
+ }
+ MEM_RM(&allocator, geom_array);
+ OK(scad_geometry_ref_put(geoms[0]));
+ OK(scad_geometry_ref_put(geoms[1]));
+ OK(scad_scene_count(&c));
+ CHK(c == 0);
+
+ OK(scad_add_sphere(p1, 0.1, &geom1));
+ BAD(scad_geometries_boundary(NULL, NULL, 0, NULL, NULL));
+ BAD(scad_geometries_boundary(NULL, NULL, 0, NULL, &c));
+ BAD(scad_geometries_boundary(NULL, NULL, 0, &geom_array, NULL));
+ BAD(scad_geometries_boundary(NULL, NULL, 1, NULL, NULL));
+ BAD(scad_geometries_boundary(NULL, &geom1, 0, NULL, NULL));
BAD(scad_geometries_boundary(NULL, NULL, 0, &geom_array, &c));
+ BAD(scad_geometries_boundary(NULL, NULL, 1, NULL, &c));
+ BAD(scad_geometries_boundary(NULL, &geom1, 0, NULL, &c));
+ BAD(scad_geometries_boundary(NULL, NULL, 1, &geom_array, NULL));
+ BAD(scad_geometries_boundary(NULL, &geom1, 0, &geom_array, NULL));
+ BAD(scad_geometries_boundary(NULL, &geom1, 1, NULL, NULL));
+ BAD(scad_geometries_boundary(NULL, &geom1, 1, &geom_array, NULL));
BAD(scad_geometries_boundary(NULL, &geom1, 1, NULL, &c));
- BAD(scad_geometries_boundary(NULL, NULL, 0, &geom_array, NULL));
+ BAD(scad_geometries_boundary(NULL, &geom1, 0, &geom_array, &c));
+ BAD(scad_geometries_boundary(NULL, NULL, 1, &geom_array, &c));
OK(scad_geometries_boundary(NULL, &geom1, 1, &geom_array, &c));
for(i = 0; i < c; i++) {
OK(scad_geometry_ref_put(geom_array[i]));
}
MEM_RM(&allocator, geom_array);
+ OK(scad_geometry_ref_put(geom1));
+
+ OK(scad_scene_count(&c));
+ CHK(c == 0);
+ OK(scad_add_sphere(p1, 0.1, &geom1));
BAD(scad_geometry_copy(NULL, &geom));
BAD(scad_geometry_copy(geom1, NULL));
- BAD(scad_geometry_copy(geom1, NULL)); /* Name already in use */
OK(scad_geometry_copy(geom1, &geom));
OK(scad_geometry_ref_put(geom));
+ OK(scad_geometry_ref_put(geom1));
- BAD(scad_geometry_set_name(NULL, NULL));
- OK(scad_geometry_set_name(geom1, "sphere 1"));
- BAD(scad_geometry_set_name(geom2, "sphere 1")); /* Name already in use */
- OK(scad_geometry_set_name(geom2, NULL));
+ OK(scad_scene_count(&c));
+ CHK(c == 0);
- BAD(scad_geometry_translate(NULL, NULL, NULL));
- BAD(scad_geometry_translate(NULL, NULL, &geom));
- BAD(scad_geometry_translate(NULL, d1, NULL));
- BAD(scad_geometry_translate(NULL, d1, &geom));
- BAD(scad_geometry_translate(geom1, NULL, NULL));
- BAD(scad_geometry_translate(geom1, NULL, &geom));
- BAD(scad_geometry_translate(geom1, d1, NULL));
- OK(scad_geometry_translate(geom1, d1, &geom));
+ OK(scad_add_sphere(p1, 0.1, &geom));
+ BAD(scad_geometry_set_visibility(NULL, 1, 1));
+ OK(scad_geometry_set_visibility(geom, 1, 1));
OK(scad_geometry_ref_put(geom));
- BAD(scad_geometry_rotate(NULL, NULL, NULL, 1, NULL));
- BAD(scad_geometry_rotate(NULL, NULL, NULL, 1, &geom));
- BAD(scad_geometry_rotate(NULL, NULL, d1, 1, NULL));
- BAD(scad_geometry_rotate(NULL, NULL, d1, 1, &geom));
- BAD(scad_geometry_rotate(NULL, p1, NULL, 1, NULL));
- BAD(scad_geometry_rotate(NULL, p1, NULL, 1, &geom));
- BAD(scad_geometry_rotate(NULL, p1, d1, 1, NULL));
- BAD(scad_geometry_rotate(NULL, p1, d1, 1, &geom));
- BAD(scad_geometry_rotate(geom1, NULL, NULL, 1, NULL));
- BAD(scad_geometry_rotate(geom1, NULL, NULL, 1, &geom));
- BAD(scad_geometry_rotate(geom1, NULL, d1, 1, NULL));
- BAD(scad_geometry_rotate(geom1, NULL, d1, 1, &geom));
- BAD(scad_geometry_rotate(geom1, p1, NULL, 1, NULL));
- BAD(scad_geometry_rotate(geom1, p1, NULL, 1, &geom));
- BAD(scad_geometry_rotate(geom1, p1, d1, 1, NULL));
- OK(scad_geometry_rotate(geom1, p1, d1, 1, &geom));
+ OK(scad_scene_count(&c));
+ CHK(c == 0);
- BAD(scad_geometry_extrude(NULL, d1, &geom));
- BAD(scad_geometry_extrude(poly, NULL, &geom));
- BAD(scad_geometry_extrude(poly, d1, NULL));
- OK(scad_geometry_extrude(poly, d1, &geom));
- OK(scad_geometry_ref_put(poly));
- OK(scad_geometry_ref_put(geom));
+ OK(scad_add_rectangle(p1, d2, &geom1));
+ OK(scad_add_rectangle(p2, d2, &geom2));
+ BAD(scad_geometries_set_periodic(NULL, 0, NULL, 0, NULL));
+ BAD(scad_geometries_set_periodic(NULL, 0, NULL, 1, NULL));
+ BAD(scad_geometries_set_periodic(NULL, 0, &geom2, 0, NULL));
+ BAD(scad_geometries_set_periodic(NULL, 1, NULL, 0, NULL));
+ BAD(scad_geometries_set_periodic(&geom1, 0, NULL, 0, NULL));
+ BAD(scad_geometries_set_periodic(NULL, 0, &geom2, 1, NULL));
+ BAD(scad_geometries_set_periodic(NULL, 1, NULL, 1, NULL));
+ BAD(scad_geometries_set_periodic(&geom1, 0, NULL, 1, NULL));
+ BAD(scad_geometries_set_periodic(NULL, 1, &geom2, 0, NULL));
+ BAD(scad_geometries_set_periodic(&geom1, 0, &geom2, 0, NULL));
+ BAD(scad_geometries_set_periodic(&geom1, 1, NULL, 0, NULL));
+ BAD(scad_geometries_set_periodic(&geom1, 1, &geom2, 0, NULL));
+ BAD(scad_geometries_set_periodic(&geom1, 1, NULL, 1, NULL));
+ BAD(scad_geometries_set_periodic(&geom1, 0, &geom2, 1, NULL));
+ BAD(scad_geometries_set_periodic(NULL, 1, &geom2, 1, NULL));
+ BAD(scad_geometries_set_periodic(&geom1, 1, &geom2, 1, NULL));
+ BAD(scad_geometries_set_periodic(NULL, 0, NULL, 0, affine));
+ BAD(scad_geometries_set_periodic(NULL, 0, NULL, 1, affine));
+ BAD(scad_geometries_set_periodic(NULL, 0, &geom2, 0, affine));
+ BAD(scad_geometries_set_periodic(NULL, 1, NULL, 0, affine));
+ BAD(scad_geometries_set_periodic(&geom1, 0, NULL, 0, affine));
+ BAD(scad_geometries_set_periodic(NULL, 0, &geom2, 1, affine));
+ BAD(scad_geometries_set_periodic(NULL, 1, NULL, 1, affine));
+ BAD(scad_geometries_set_periodic(&geom1, 0, NULL, 1, affine));
+ BAD(scad_geometries_set_periodic(NULL, 1, &geom2, 0, affine));
+ BAD(scad_geometries_set_periodic(&geom1, 0, &geom2, 0, affine));
+ BAD(scad_geometries_set_periodic(&geom1, 1, NULL, 0, affine));
+ BAD(scad_geometries_set_periodic(&geom1, 1, &geom2, 0, affine));
+ BAD(scad_geometries_set_periodic(&geom1, 1, NULL, 1, affine));
+ BAD(scad_geometries_set_periodic(&geom1, 0, &geom2, 1, affine));
+ BAD(scad_geometries_set_periodic(NULL, 1, &geom2, 1, affine));
+ OK(scad_geometries_set_periodic(&geom1, 1, &geom2, 1, affine));
+ OK(scad_geometry_ref_put(geom2));
+ OK(scad_add_rectangle(p4, d2, &geom2));
+ ERR(scad_geometries_set_periodic(&geom1, 1, &geom2, 1, affine));
+ OK(scad_geometry_ref_put(geom1));
+ OK(scad_geometry_ref_put(geom2));
- BAD(scad_scene_write(NULL));
- ERR(scad_scene_write(""));
- OK(scad_scene_write("/tmp/test.step"));
+ OK(scad_scene_count(&c));
+ CHK(c == 0);
+
+ OK(scad_add_sphere(p1, 0.1, &geom1));
+ BAD(scad_geometries_set_mesh_size_modifier(NULL, 0, 2, -1.5));
+ BAD(scad_geometries_set_mesh_size_modifier(NULL, 0, 2, 1.5));
+ BAD(scad_geometries_set_mesh_size_modifier(NULL, 0, SCAD_ABSOLUTE_SIZE, -1.5));
+ BAD(scad_geometries_set_mesh_size_modifier(NULL, 1, 2, -1.5));
+ BAD(scad_geometries_set_mesh_size_modifier(&geom1, 0, 2, -1.5));
+ BAD(scad_geometries_set_mesh_size_modifier(NULL, 0, SCAD_ABSOLUTE_SIZE, 1.5));
+ BAD(scad_geometries_set_mesh_size_modifier(NULL, 1, 2, 1.5));
+ BAD(scad_geometries_set_mesh_size_modifier(&geom1, 0, 2, 1.5));
+ BAD(scad_geometries_set_mesh_size_modifier(NULL, 1, SCAD_ABSOLUTE_SIZE, -1.5));
+ BAD(scad_geometries_set_mesh_size_modifier(&geom1, 0, SCAD_ABSOLUTE_SIZE, -1.5));
+ BAD(scad_geometries_set_mesh_size_modifier(&geom1, 1, 2, -1.5));
+ BAD(scad_geometries_set_mesh_size_modifier(&geom1, 1, SCAD_ABSOLUTE_SIZE, -1.5));
+ BAD(scad_geometries_set_mesh_size_modifier(&geom1, 1, 2, 1.5));
+ BAD(scad_geometries_set_mesh_size_modifier(&geom1, 0, SCAD_ABSOLUTE_SIZE, 1.5));
+ BAD(scad_geometries_set_mesh_size_modifier(NULL, 1, SCAD_ABSOLUTE_SIZE, 1.5));
+ OK(scad_geometries_set_mesh_size_modifier(&geom1, 1, SCAD_ABSOLUTE_SIZE, 1.5));
+ OK(scad_geometry_ref_put(geom1));
+
+ OK(scad_scene_count(&c));
+ CHK(c == 0);
+
+ OK(scad_add_sphere(p1, 0.1, &geom1));
+ BAD(scad_geometries_set_mesh_algorithm(NULL, 0, 0));
+ BAD(scad_geometries_set_mesh_algorithm(NULL, 0, SCAD_AUTOMATIC));
+ BAD(scad_geometries_set_mesh_algorithm(NULL, 1, 0));
+ BAD(scad_geometries_set_mesh_algorithm(&geom1, 0, 0));
+ BAD(scad_geometries_set_mesh_algorithm(NULL, 1, SCAD_AUTOMATIC));
+ BAD(scad_geometries_set_mesh_algorithm(&geom1, 0, SCAD_AUTOMATIC));
+ BAD(scad_geometries_set_mesh_algorithm(&geom1, 1, 0));
+ OK(scad_geometries_set_mesh_algorithm(&geom1, 1, SCAD_AUTOMATIC));
+ OK(scad_geometry_ref_put(geom1));
+
+ OK(scad_scene_count(&c));
+ CHK(c == 0);
+
+ OK(scad_add_sphere(p1, 0.1, &geom1));
+ BAD(scad_geometries_clear_mesh(NULL, 0));
+ BAD(scad_geometries_clear_mesh(NULL, 1));
+ BAD(scad_geometries_clear_mesh(&geom1, 0));
+ OK(scad_geometries_clear_mesh(&geom1, 1));
+ OK(scad_geometry_ref_put(geom1));
+
+ OK(scad_scene_count(&c));
+ CHK(c == 0);
- BAD(scad_step_import(NULL, "step", &geom_array, &c));
- BAD(scad_step_import("/tmp/test.step", "step", NULL, &c));
- BAD(scad_step_import("/tmp/test.step", "step", &geom_array, NULL));
- ERR(scad_step_import("dont_exist.step", "step", &geom_array, &c));
- OK(scad_step_import("/tmp/test.step", "step", &geom_array, &c));
+ OK(scad_add_box(p1, d1, &geoms[0]));
+ OK(scad_add_box(p4, d1, &geoms[1]));
+ name = "/tmp/test"LINE_STRING".step";
+ OK(scad_scene_write(name));
+ BAD(scad_step_import(NULL, NULL, NULL, NULL));
+ BAD(scad_step_import(NULL, NULL, NULL, &c));
+ BAD(scad_step_import(NULL, NULL, &geom_array, NULL));
+ BAD(scad_step_import(NULL, "/tmp/test.step", NULL, NULL));
+ BAD(scad_step_import(NULL, NULL, &geom_array, &c));
+ BAD(scad_step_import(NULL, "/tmp/test.step", NULL, &c));
+ BAD(scad_step_import(NULL, "/tmp/test.step", &geom_array, NULL));
+ ERR(scad_step_import(NULL, "dont_exist.step", &geom_array, &c));
+ OK(scad_step_import(NULL, name, &geom_array, &c));
+ CHK(c == 2);
+ for(i = 0; i < 2; i++) {
+ OK(scad_geometries_cut(geoms+i, 1, geom_array+i, 1, &geom));
+ OK(scad_geometry_is_empty(geom, &e));
+ OK(scad_geometry_ref_put(geom));
+ CHK(e == 1);
+ }
for(i = 0; i < c; i++) {
OK(scad_geometry_ref_put(geom_array[i]));
}
MEM_RM(&allocator, geom_array);
+ OK(scad_geometry_ref_put(geoms[0]));
+ OK(scad_geometry_ref_put(geoms[1]));
+
+ OK(scad_scene_count(&c));
+ CHK(c == 0);
+
+ OK(scad_add_box(p1, d1, &geom));
+ BAD(scad_stl_export(NULL, NULL, 9, 0));
+ BAD(scad_stl_export(NULL, NULL, SCAD_KEEP_NORMALS_UNCHANGED, 0));
+ BAD(scad_stl_export(geom, NULL, 9, 0));
+ BAD(scad_stl_export(geom, NULL, SCAD_KEEP_NORMALS_UNCHANGED, 0));
+ OK(scad_stl_export(geom, "/tmp/test"LINE_STRING, SCAD_FORCE_NORMALS_OUTWARD, 1));
+ OK(scad_geometry_set_name(geom, "name"));
+ BAD(scad_stl_export(NULL, NULL, 9, 0));
+ BAD(scad_stl_export(NULL, NULL, SCAD_KEEP_NORMALS_UNCHANGED, 0));
+ BAD(scad_stl_export(geom, NULL, 9, 0));
+ OK(scad_stl_export(geom, NULL, SCAD_KEEP_NORMALS_UNCHANGED, 0));
+ OK(scad_stl_export(geom, "/tmp/test"LINE_STRING, SCAD_FORCE_NORMALS_OUTWARD, 1));
+ OK(scad_geometry_ref_put(geom));
+
+ OK(scad_scene_count(&c));
+ CHK(c == 0);
+
+ OK(scad_add_box(p1, d1, &geoms[0]));
+ OK(scad_add_box(p4, d1, &geoms[1]));
+ OK(scad_geometries_collect(geoms, 2, &geom));
+ BAD(scad_stl_export_partial(NULL, geoms, 1, NULL, 9, 0));
+ BAD(scad_stl_export_partial(NULL, geoms, 1, NULL, SCAD_KEEP_NORMALS_UNCHANGED, 0));
+ BAD(scad_stl_export_partial(geom, geoms, 1, NULL, 9, 0));
+ BAD(scad_stl_export_partial(geom, geoms, 1, NULL, SCAD_FORCE_NORMALS_INWARD, 0));
+ OK(scad_stl_export_partial(geom, geoms, 1, "/tmp/test"LINE_STRING,
+ SCAD_FORCE_NORMALS_OUTWARD, 1));
+ OK(scad_geometry_set_name(geom, "name"));
+ BAD(scad_stl_export_partial(NULL, geoms, 1, NULL, 9, 0));
+ BAD(scad_stl_export_partial(NULL, geoms, 1, NULL, SCAD_KEEP_NORMALS_UNCHANGED, 0));
+ BAD(scad_stl_export_partial(geom, geoms, 1, NULL, 9, 0));
+ OK(scad_stl_export_partial(geom, geoms, 1, NULL, SCAD_FORCE_NORMALS_INWARD, 0));
+ OK(scad_stl_export_partial(geom, geoms, 1, "/tmp/test"LINE_STRING,
+ SCAD_FORCE_NORMALS_OUTWARD, 1));
+ OK(scad_stl_export_partial(geom, NULL, 0, "/tmp/test"LINE_STRING,
+ SCAD_FORCE_NORMALS_OUTWARD, 1));
+ OK(scad_geometry_ref_put(geom));
+ OK(scad_geometry_ref_put(geoms[0]));
+ OK(scad_geometry_ref_put(geoms[1]));
+ OK(scad_scene_count(&c));
+ CHK(c == 0);
+
+ OK(scad_add_box(p1, d1, &geom));
+ BAD(scad_stl_export_split(NULL, NULL, 9, 0));
+ BAD(scad_stl_export_split(NULL, NULL, SCAD_KEEP_NORMALS_UNCHANGED, 0));
+ BAD(scad_stl_export_split(geom, NULL, 9, 0));
+ BAD(scad_stl_export_split(geom, NULL, SCAD_KEEP_NORMALS_UNCHANGED, 0));
+ OK(scad_stl_export_split(geom, "/tmp/test"LINE_STRING, SCAD_FORCE_NORMALS_OUTWARD, 1));
+ OK(scad_geometry_set_name(geom, "name"));
+ BAD(scad_stl_export_split(NULL, NULL, 9, 0));
+ BAD(scad_stl_export_split(NULL, NULL, SCAD_KEEP_NORMALS_UNCHANGED, 0));
+ BAD(scad_stl_export_split(geom, NULL, 9, 0));
+ OK(scad_stl_export_split(geom, NULL, SCAD_KEEP_NORMALS_UNCHANGED, 0));
+ OK(scad_stl_export_split(geom, "/tmp/test"LINE_STRING, SCAD_FORCE_NORMALS_OUTWARD, 1));
+ OK(scad_geometry_ref_put(geom));
+
+ OK(scad_scene_count(&c));
+ CHK(c == 0);
+
+ OK(scad_add_box(p1, d1, &geom));
darray_double_init(&allocator, &trg);
+ options.Mesh.MeshSizeExtendFromBoundary = 0;
+ options.Mesh.MeshSizeFromPoints = 0;
+ OK(scad_set_options(&options));
+ OK(scad_geometries_set_mesh_algorithm(&geom, 1, SCAD_INITIAL_MESH_ONLY));
+ OK(scad_scene_mesh());
BAD(scad_stl_get_data(NULL, NULL));
- BAD(scad_stl_get_data(geom2, NULL));
- OK(scad_stl_get_data(geom2, &trg));
- BAD(scad_stl_data_write(NULL, NULL, SCAD_KEEP_NORMALS_UNCHANGED, 0));
- BAD(scad_stl_data_write(&trg, NULL, SCAD_KEEP_NORMALS_UNCHANGED, 0));
- BAD(scad_stl_data_write(NULL, "/tmp/test", SCAD_KEEP_NORMALS_UNCHANGED, 0));
- OK(scad_stl_data_write(&trg, "/tmp/test", SCAD_KEEP_NORMALS_UNCHANGED, 0));
- OK(scad_stl_data_write(&trg, "/tmp/test", SCAD_KEEP_NORMALS_UNCHANGED, 1));
+ BAD(scad_stl_get_data(NULL, &trg));
+ BAD(scad_stl_get_data(geom, NULL));
+ OK(scad_stl_get_data(geom, &trg));
+ CHK(12 * 9 == darray_double_size_get(&trg));
darray_double_release(&trg);
+ OK(scad_geometry_ref_put(geom));
- BAD(scad_stl_export(NULL, NULL, SCAD_KEEP_NORMALS_UNCHANGED, 0));
- BAD(scad_stl_export(geom2, NULL, SCAD_KEEP_NORMALS_UNCHANGED, 0)); /* geom2 has no name */
- OK(scad_stl_export(geom2, "/tmp/test", SCAD_KEEP_NORMALS_UNCHANGED, 0));
- OK(scad_stl_export(geom2, "/tmp/test", SCAD_FORCE_NORMALS_INWARD, 1));
- OK(scad_stl_export(geom1, NULL, SCAD_FORCE_NORMALS_OUTWARD, 1));
+ OK(scad_scene_count(&c));
+ CHK(c == 0);
- BAD(scad_stl_export_split(NULL, NULL, SCAD_KEEP_NORMALS_UNCHANGED, 0));
- BAD(scad_stl_export_split(geom2, NULL, SCAD_KEEP_NORMALS_UNCHANGED, 0)); /* geom2 has no name */
- OK(scad_stl_export_split(geom2, "/tmp/test", SCAD_KEEP_NORMALS_UNCHANGED, 0));
- OK(scad_stl_export_split(geom2, "/tmp/testb", SCAD_KEEP_NORMALS_UNCHANGED, 1));
- OK(scad_stl_export_split(geom1, NULL, SCAD_KEEP_NORMALS_UNCHANGED, 0));
- OK(scad_stl_export_split(geom1, "different_names", SCAD_KEEP_NORMALS_UNCHANGED, 1));
+ OK(scad_add_box(p1, d1, &geoms[0]));
+ OK(scad_add_box(p4, d1, &geoms[1]));
+ OK(scad_geometries_collect(geoms, 2, &geom));
+ darray_double_init(&allocator, &trg);
+ options.Mesh.MeshSizeExtendFromBoundary = 0;
+ options.Mesh.MeshSizeFromPoints = 0;
+ OK(scad_set_options(&options));
+ OK(scad_geometries_set_mesh_algorithm(geoms, 2, SCAD_INITIAL_MESH_ONLY));
+ OK(scad_scene_mesh());
+ BAD(scad_stl_get_data_partial(NULL, NULL, 0, NULL));
+ BAD(scad_stl_get_data_partial(NULL, NULL, 0, &trg));
+ BAD(scad_stl_get_data_partial(geom, NULL, 0, NULL));
+ OK(scad_stl_get_data_partial(geom, NULL, 0, &trg));
+ CHK(2 * 12 * 9 == darray_double_size_get(&trg));
+ darray_double_clear(&trg);
+ OK(scad_stl_get_data_partial(geom, geoms, 1, &trg));
+ CHK(12 * 9 == darray_double_size_get(&trg));
+ darray_double_clear(&trg);
+ OK(scad_stl_get_data_partial(geom, geoms, 2, &trg));
+ CHK(0 == darray_double_size_get(&trg));
+ darray_double_release(&trg);
+ OK(scad_geometry_ref_put(geom));
+ OK(scad_geometry_ref_put(geoms[0]));
+ OK(scad_geometry_ref_put(geoms[1]));
- BAD(scad_geometry_get_name(NULL, &name));
- BAD(scad_geometry_get_name(geom1, NULL));
- OK(scad_geometry_get_name(geom1, &name));
- OK(scad_geometry_get_name(geom2, &name));
+ OK(scad_scene_count(&c));
+ CHK(c == 0);
+
+ OK(scad_add_box(p1, d1, &geom));
+ darray_double_init(&allocator, &trg);
+ OK(scad_stl_get_data(geom, &trg));
+ BAD(scad_stl_data_write(NULL, NULL, 9, 0));
+ BAD(scad_stl_data_write(NULL, NULL, SCAD_KEEP_NORMALS_UNCHANGED, 0));
+ BAD(scad_stl_data_write(&trg, NULL, 9, 0));
+ BAD(scad_stl_data_write(&trg, NULL, SCAD_KEEP_NORMALS_UNCHANGED, 0));
+ OK(scad_stl_data_write(&trg, "/tmp/test"LINE_STRING, SCAD_FORCE_NORMALS_OUTWARD, 1));
+ CHK(0 == darray_double_size_get(&trg));
+ OK(scad_geometry_ref_put(geom));
+
+ OK(scad_scene_count(&c));
+ CHK(c == 0);
+
+ options.Misc.LogRefCounting = SCAD_LOG_DIMTAGS_ONLY_UNDELETED;
+ OK(scad_set_options(&options));
OK(scad_finalize());