summaryrefslogtreecommitdiff
path: root/src/test.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/test.c')
-rw-r--r--src/test.c101
1 files changed, 101 insertions, 0 deletions
diff --git a/src/test.c b/src/test.c
new file mode 100644
index 0000000..7c0389e
--- /dev/null
+++ b/src/test.c
@@ -0,0 +1,101 @@
+/*
+ * Copyright (C) 2018 Vito Caputo - <vcaputo@pengaru.com>
+ *
+ * This program is free software: you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 3 as published
+ * by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+
+#include <assert.h>
+#include <stdio.h>
+
+#include <ix3.h>
+
+typedef struct v3f_t {
+ float x, y, z;
+} v3f_t;
+
+typedef struct bb3f_t {
+ v3f_t min, max;
+} bb3f_t;
+
+
+ix3_search_status_t cb(void *cb_context, ix3_object_t *ix3_object, v3f_t *ix3_object_position, bb3f_t *ix3_object_aabb, void *object)
+{
+ fprintf(stderr, "found %p ix3_object=%p ix3_object_aabb=%f,%f,%f ... %f,%f,%f\n", cb_context, ix3_object,
+ ix3_object_aabb->min.x, ix3_object_aabb->min.y, ix3_object_aabb->min.z,
+ ix3_object_aabb->max.x, ix3_object_aabb->max.y, ix3_object_aabb->max.z);
+
+ return IX3_SEARCH_CONTINUE;
+}
+
+typedef struct object_t {
+ bb3f_t aabb;
+ ix3_object_t *ix;
+} object_t;
+
+int main(int argc, char *argv[])
+{
+ object_t objects[] = {
+ { .aabb = {{ -1.f, -1.f, -1.f }, { 1.f, 1.f, 1.f }} },
+ { .aabb = {{ -.2f, -.2f, -.2f }, { -.1f, -.1f, -.1f }} },
+ { .aabb = {{ -.2f, .2f, -.2f }, { -.1f, .3f, -.1f }} },
+ { .aabb = {{ .1f, .1f, .1f }, { .2f, .2f, .2f }} },
+ { .aabb = {{ -.2f, -.2f, -.2f }, { .1f, .1f, .1f }} },
+ { .aabb = {{ -.1f, -.1f, -.1f }, { .2f, .2f, .2f }} },
+ };
+
+ ix3_object_t *o, *j;
+ ix3_t *ix3;
+
+ ix3 = ix3_new(NULL, 2, 8);
+ if (!ix3) {
+ fprintf(stderr, "unable to create index\n");
+ return 1;
+ }
+
+ for (int i = 0; i < sizeof(objects) / sizeof(*objects); i++) {
+ objects[i].ix = ix3_object_new(ix3, NULL, NULL, &objects[i].aabb, &objects[i]);
+ if (!o) {
+ fprintf(stderr, "unable to insert object %i\n", i);
+ return 1;
+ }
+ }
+
+ for (int i = 0; i < sizeof(objects) / sizeof(*objects); i++) {
+ /* TODO: actually verify the expected objects are hit */
+ if (!ix3_search_by_point(ix3, &objects[i].aabb.min, cb, &objects[i])) {
+ fprintf(stderr, "unable to lookup object %i by min point\n", i);
+ return 1;
+ }
+
+ if (!ix3_search_by_point(ix3, &objects[i].aabb.max, cb, &objects[i])) {
+ fprintf(stderr, "unable to lookup object %i by max point\n", i);
+ return 1;
+ }
+ }
+
+ for (int i = 0; i < sizeof(objects) / sizeof(*objects); i++) {
+ /* TODO: actually verify the expected objects are hit */
+ if (!ix3_search_by_aabb(ix3, NULL, NULL, &objects[i].aabb, cb, &objects[i])) {
+ fprintf(stderr, "unable to lookup object %i by perfect aabb\n", i);
+ return 1;
+ }
+ }
+
+ for (int i = 0; i < sizeof(objects) / sizeof(*objects); i++)
+ ix3_object_free(ix3, objects[i].ix);
+
+ ix3_free(ix3);
+
+ return 0;
+}
© All Rights Reserved