+void trap(void )
+{
+ exit(1);
+}
+
+static void validate_subtree(const struct quadtree *node)
+{
+ int i;
+
+ for (i = 0; i < 4; i++) {
+ if (!node->child[i])
+ continue;
+
+ if (node->child[i]->parent != node) {
+ printf("%s:%d Fatal! Tree inconsistency detected "
+ "at child %d in node %p\n",
+ __FUNCTION__, __LINE__, i, node);
+ trap();
+ }
+ if (node->parent) {
+ if (node->child[i] == node->parent) {
+ printf("%s:%d Fatal! Tree loop detected "
+ "at child %d in node %p\n",
+ __FUNCTION__, __LINE__, i, node);
+ trap();
+ }
+ }
+
+ validate_subtree(node->child[i]);
+ }
+}
+
+static void validate_tree(const struct quadtree *node)
+{
+ const struct quadtree *parent = quadtree_find_parent(node);
+
+ validate_subtree(parent);
+}
+