r3_tree_insert_path API changes

This commit is contained in:
c9s 2014-05-19 10:12:41 +08:00
parent df798bb106
commit 2084675423
5 changed files with 391 additions and 378 deletions

View file

@ -105,9 +105,16 @@ edge * r3_node_find_edge(node * n, char * pat);
void r3_node_append_edge(node *n, edge *child); void r3_node_append_edge(node *n, edge *child);
node * r3_tree_insert_path(node *tree, char *path, route * route, void * data); node * r3_tree_insert_path(node *tree, char *path, void * data);
node * r3_tree_insert_pathl(node *tree, char *path, int path_len, route * route, void * data); node * r3_tree_insert_pathl(node *tree, char *path, int path_len, void * data);
node * r3_tree_insert_route(node *tree, route * route, void * data);
/**
* The private API to insert a path
*/
node * _r3_tree_insert_pathl(node *tree, char *path, int path_len, route * route, void * data);
void r3_tree_dump(node * n, int level); void r3_tree_dump(node * n, int level);
@ -135,7 +142,6 @@ node * r3_edge_branch(edge *e, int dl);
void r3_edge_free(edge * edge); void r3_edge_free(edge * edge);
node * r3_tree_insert_route(node *tree, route * route, void * data);
match_entry * match_entry_createl(char * path, int path_len); match_entry * match_entry_createl(char * path, int path_len);

View file

@ -377,20 +377,26 @@ route * route_createl(char * path, int path_len) {
return info; return info;
} }
node * r3_tree_insert_route(node *tree, route * route, void * data) { node * r3_tree_insert_route(node *tree, route * route, void * data) {
return r3_tree_insert_pathl(tree, route->path, route->path_len, route, data); return _r3_tree_insert_pathl(tree, route->path, route->path_len, route, data);
} }
node * r3_tree_insert_path(node *tree, char *path, route * route, void * data) node * r3_tree_insert_path(node *tree, char *path, void * data)
{ {
return r3_tree_insert_pathl(tree, path, strlen(path) , route , data); return _r3_tree_insert_pathl(tree, path, strlen(path) , NULL , data);
}
node * r3_tree_insert_pathl(node *tree, char *path, int path_len, void * data)
{
return _r3_tree_insert_pathl(tree, path, path_len, NULL , data);
} }
/** /**
* Return the last inserted node. * Return the last inserted node.
*/ */
node * r3_tree_insert_pathl(node *tree, char *path, int path_len, route * route, void * data) node * _r3_tree_insert_pathl(node *tree, char *path, int path_len, route * route, void * data)
{ {
node * n = tree; node * n = tree;
edge * e = NULL; edge * e = NULL;
@ -436,7 +442,7 @@ node * r3_tree_insert_pathl(node *tree, char *path, int path_len, route * route,
r3_node_add_child(n, strndup(path, (int)(p - path)), child); r3_node_add_child(n, strndup(path, (int)(p - path)), child);
// and insert the rest part to the child // and insert the rest part to the child
return r3_tree_insert_pathl(child, p, path_len - (int)(p - path), route, data); return _r3_tree_insert_pathl(child, p, path_len - (int)(p - path), route, data);
} else { } else {
node * child = r3_tree_create(3); node * child = r3_tree_create(3);
r3_node_add_child(n, strndup(path, path_len) , child); r3_node_add_child(n, strndup(path, path_len) , child);
@ -457,7 +463,7 @@ node * r3_tree_insert_pathl(node *tree, char *path, int path_len, route * route,
// there are something more we can insert // there are something more we can insert
if ( subpath_len > 0 ) { if ( subpath_len > 0 ) {
return r3_tree_insert_pathl(e->child, subpath, subpath_len, route, data); return _r3_tree_insert_pathl(e->child, subpath, subpath_len, route, data);
} else { } else {
// no more path to insert // no more path to insert
e->child->endpoint++; // make it as an endpoint e->child->endpoint++; // make it as an endpoint
@ -479,7 +485,7 @@ node * r3_tree_insert_pathl(node *tree, char *path, int path_len, route * route,
char * s2 = path + prefix_len; char * s2 = path + prefix_len;
int s2_len = path_len - prefix_len; int s2_len = path_len - prefix_len;
r3_edge_branch(e, prefix_len); r3_edge_branch(e, prefix_len);
return r3_tree_insert_pathl(e->child, s2 , s2_len, route , data); return _r3_tree_insert_pathl(e->child, s2 , s2_len, route , data);
} else { } else {
printf("unexpected route."); printf("unexpected route.");
return NULL; return NULL;

View file

@ -315,3 +315,4 @@
1400414587,10903071.42 1400414587,10903071.42
1400415353,10705889.14 1400415353,10705889.14
1400415397,11505319.20 1400415397,11505319.20
1400465549,13249817.73

1 1400242718 5649455.80
315 1400414587 10903071.42
316 1400415353 10705889.14
317 1400415397 11505319.20
318 1400465549 13249817.73

View file

@ -18,13 +18,13 @@ START_TEST (test_gvc_render_dot)
{ {
node * n = r3_tree_create(1); node * n = r3_tree_create(1);
r3_tree_insert_path(n, "/foo/bar/baz", NULL, NULL); r3_tree_insert_path(n, "/foo/bar/baz", NULL);
r3_tree_insert_path(n, "/foo/bar/qux", NULL, NULL); r3_tree_insert_path(n, "/foo/bar/qux", NULL);
r3_tree_insert_path(n, "/foo/bar/quux", NULL, NULL); r3_tree_insert_path(n, "/foo/bar/quux", NULL);
r3_tree_insert_path(n, "/foo/bar/corge", NULL, NULL); r3_tree_insert_path(n, "/foo/bar/corge", NULL);
r3_tree_insert_path(n, "/foo/bar/grault", NULL, NULL); r3_tree_insert_path(n, "/foo/bar/grault", NULL);
r3_tree_insert_path(n, "/garply/grault/foo", NULL, NULL); r3_tree_insert_path(n, "/garply/grault/foo", NULL);
r3_tree_insert_path(n, "/garply/grault/bar", NULL, NULL); r3_tree_insert_path(n, "/garply/grault/bar", NULL);
r3_tree_compile(n); r3_tree_compile(n);
@ -39,13 +39,13 @@ START_TEST (test_gvc_render_file)
node * n = r3_tree_create(1); node * n = r3_tree_create(1);
r3_tree_insert_path(n, "/foo/bar/baz", NULL, NULL); r3_tree_insert_path(n, "/foo/bar/baz", NULL);
r3_tree_insert_path(n, "/foo/bar/qux", NULL, NULL); r3_tree_insert_path(n, "/foo/bar/qux", NULL);
r3_tree_insert_path(n, "/foo/bar/quux", NULL, NULL); r3_tree_insert_path(n, "/foo/bar/quux", NULL);
r3_tree_insert_path(n, "/foo/bar/corge", NULL, NULL); r3_tree_insert_path(n, "/foo/bar/corge", NULL);
r3_tree_insert_path(n, "/foo/bar/grault", NULL, NULL); r3_tree_insert_path(n, "/foo/bar/grault", NULL);
r3_tree_insert_path(n, "/garply/grault/foo", NULL, NULL); r3_tree_insert_path(n, "/garply/grault/foo", NULL);
r3_tree_insert_path(n, "/garply/grault/bar", NULL, NULL); r3_tree_insert_path(n, "/garply/grault/bar", NULL);
r3_tree_compile(n); r3_tree_compile(n);

View file

@ -56,9 +56,9 @@ START_TEST (test_compile)
node *m; node *m;
edge *e ; edge *e ;
r3_tree_insert_pathl(n, "/zoo", strlen("/zoo"), NULL, NULL); r3_tree_insert_path(n, "/zoo", NULL);
r3_tree_insert_pathl(n, "/foo", strlen("/foo"), NULL, NULL); r3_tree_insert_path(n, "/foo", NULL);
r3_tree_insert_pathl(n, "/bar", strlen("/bar"), NULL, NULL); r3_tree_insert_path(n, "/bar", NULL);
r3_tree_compile(n); r3_tree_compile(n);
fail_if( n->combined_pattern ); fail_if( n->combined_pattern );
fail_if( NULL == r3_node_find_edge_str(n, "/", strlen("/") ) ); fail_if( NULL == r3_node_find_edge_str(n, "/", strlen("/") ) );
@ -67,8 +67,8 @@ START_TEST (test_compile)
r3_tree_dump(n, 0); r3_tree_dump(n, 0);
#endif #endif
r3_tree_insert_pathl(n, "/foo/{id}", strlen("/foo/{id}"), NULL, NULL); r3_tree_insert_path(n, "/foo/{id}", NULL);
r3_tree_insert_pathl(n, "/{id}", strlen("/{id}"), NULL, NULL); r3_tree_insert_path(n, "/{id}", NULL);
r3_tree_compile(n); r3_tree_compile(n);
r3_tree_compile(n); // test double compile r3_tree_compile(n); // test double compile
#ifdef DEBUG #ifdef DEBUG
@ -167,7 +167,7 @@ START_TEST (test_pcre_patterns_insert)
// r3_tree_insert_path(n, "/foo-{user}-{id}", NULL, NULL); // r3_tree_insert_path(n, "/foo-{user}-{id}", NULL, NULL);
// r3_tree_dump(n, 0); // r3_tree_dump(n, 0);
r3_tree_insert_pathl(n, "/post/{handle:\\d+}-{id:\\d+}", strlen("/post/{handle:\\d+}-{id:\\d+}"), NULL, NULL); r3_tree_insert_path(n, "/post/{handle:\\d+}-{id:\\d+}", NULL);
r3_tree_compile(n); r3_tree_compile(n);
r3_tree_dump(n, 0); r3_tree_dump(n, 0);
@ -192,21 +192,21 @@ START_TEST (test_r3_tree_insert_pathl)
{ {
node * n = r3_tree_create(10); node * n = r3_tree_create(10);
r3_tree_insert_path(n, "/foo/bar", NULL, NULL); r3_tree_insert_path(n, "/foo/bar", NULL);
// r3_tree_dump(n, 0); // r3_tree_dump(n, 0);
r3_tree_insert_path(n, "/foo/zoo", NULL, NULL); r3_tree_insert_path(n, "/foo/zoo", NULL);
// r3_tree_dump(n, 0); // r3_tree_dump(n, 0);
r3_tree_insert_path(n, "/f/id" , NULL, NULL); r3_tree_insert_path(n, "/f/id" , NULL);
// r3_tree_dump(n, 0); // r3_tree_dump(n, 0);
r3_tree_insert_pathl(n, "/post/{id}", strlen("/post/{id}"), NULL, NULL); r3_tree_insert_path(n, "/post/{id}", NULL);
// r3_tree_dump(n, 0); // r3_tree_dump(n, 0);
r3_tree_insert_pathl(n, "/post/{handle}", strlen("/post/{handle}"), NULL, NULL); r3_tree_insert_path(n, "/post/{handle}", NULL);
r3_tree_insert_pathl(n, "/post/{handle}-{id}", strlen("/post/{handle}-{id}"), NULL, NULL); r3_tree_insert_path(n, "/post/{handle}-{id}", NULL);
r3_tree_compile(n); r3_tree_compile(n);
#ifdef DEBUG #ifdef DEBUG
@ -273,8 +273,8 @@ START_TEST(test_pcre_pattern_simple)
match_entry * entry; match_entry * entry;
entry = match_entry_createl( "/user/123" , strlen("/user/123") ); entry = match_entry_createl( "/user/123" , strlen("/user/123") );
node * n = r3_tree_create(10); node * n = r3_tree_create(10);
r3_tree_insert_pathl(n, "/user/{id:\\d+}", strlen("/user/{id:\\d+}"), NULL, NULL); r3_tree_insert_path(n, "/user/{id:\\d+}", NULL);
r3_tree_insert_pathl(n, "/user", strlen("/user"), NULL, NULL); r3_tree_insert_path(n, "/user", NULL);
r3_tree_compile(n); r3_tree_compile(n);
// r3_tree_dump(n, 0); // r3_tree_dump(n, 0);
node *matched; node *matched;
@ -302,10 +302,10 @@ START_TEST(test_pcre_pattern_more)
info("var2: %p\n", &var2); info("var2: %p\n", &var2);
info("var3: %p\n", &var3); info("var3: %p\n", &var3);
r3_tree_insert_pathl(n, "/user/{id:\\d+}", strlen("/user/{id:\\d+}"), NULL, &var1); r3_tree_insert_path(n, "/user/{id:\\d+}", &var1);
r3_tree_insert_pathl(n, "/user2/{id:\\d+}", strlen("/user2/{id:\\d+}"), NULL, &var2); r3_tree_insert_path(n, "/user2/{id:\\d+}", &var2);
r3_tree_insert_pathl(n, "/user3/{id:\\d{3}}", strlen("/user3/{id:\\d{3}}"), NULL, &var3); r3_tree_insert_path(n, "/user3/{id:\\d{3}}", &var3);
r3_tree_insert_pathl(n, "/user", strlen("/user"), NULL, &var0); r3_tree_insert_path(n, "/user", &var0);
r3_tree_compile(n); r3_tree_compile(n);
// r3_tree_dump(n, 0); // r3_tree_dump(n, 0);
node *matched; node *matched;
@ -377,342 +377,342 @@ START_TEST(benchmark_str)
int route_data = 999; int route_data = 999;
r3_tree_insert_path(n, "/foo/bar/baz", NULL, NULL); r3_tree_insert_path(n, "/foo/bar/baz", NULL);
r3_tree_insert_path(n, "/foo/bar/qux", NULL, NULL); r3_tree_insert_path(n, "/foo/bar/qux", NULL);
r3_tree_insert_path(n, "/foo/bar/quux", NULL, NULL); r3_tree_insert_path(n, "/foo/bar/quux", NULL);
r3_tree_insert_path(n, "/foo/bar/corge", NULL, NULL); r3_tree_insert_path(n, "/foo/bar/corge", NULL);
r3_tree_insert_path(n, "/foo/bar/grault", NULL, NULL); r3_tree_insert_path(n, "/foo/bar/grault", NULL);
r3_tree_insert_path(n, "/foo/bar/garply", NULL, NULL); r3_tree_insert_path(n, "/foo/bar/garply", NULL);
r3_tree_insert_path(n, "/foo/baz/bar", NULL, NULL); r3_tree_insert_path(n, "/foo/baz/bar", NULL);
r3_tree_insert_path(n, "/foo/baz/qux", NULL, NULL); r3_tree_insert_path(n, "/foo/baz/qux", NULL);
r3_tree_insert_path(n, "/foo/baz/quux", NULL, NULL); r3_tree_insert_path(n, "/foo/baz/quux", NULL);
r3_tree_insert_path(n, "/foo/baz/corge", NULL, NULL); r3_tree_insert_path(n, "/foo/baz/corge", NULL);
r3_tree_insert_path(n, "/foo/baz/grault", NULL, NULL); r3_tree_insert_path(n, "/foo/baz/grault", NULL);
r3_tree_insert_path(n, "/foo/baz/garply", NULL, NULL); r3_tree_insert_path(n, "/foo/baz/garply", NULL);
r3_tree_insert_path(n, "/foo/qux/bar", NULL, NULL); r3_tree_insert_path(n, "/foo/qux/bar", NULL);
r3_tree_insert_path(n, "/foo/qux/baz", NULL, NULL); r3_tree_insert_path(n, "/foo/qux/baz", NULL);
r3_tree_insert_path(n, "/foo/qux/quux", NULL, NULL); r3_tree_insert_path(n, "/foo/qux/quux", NULL);
r3_tree_insert_path(n, "/foo/qux/corge", NULL, NULL); r3_tree_insert_path(n, "/foo/qux/corge", NULL);
r3_tree_insert_path(n, "/foo/qux/grault", NULL, NULL); r3_tree_insert_path(n, "/foo/qux/grault", NULL);
r3_tree_insert_path(n, "/foo/qux/garply", NULL, NULL); r3_tree_insert_path(n, "/foo/qux/garply", NULL);
r3_tree_insert_path(n, "/foo/quux/bar", NULL, NULL); r3_tree_insert_path(n, "/foo/quux/bar", NULL);
r3_tree_insert_path(n, "/foo/quux/baz", NULL, NULL); r3_tree_insert_path(n, "/foo/quux/baz", NULL);
r3_tree_insert_path(n, "/foo/quux/qux", NULL, NULL); r3_tree_insert_path(n, "/foo/quux/qux", NULL);
r3_tree_insert_path(n, "/foo/quux/corge", NULL, NULL); r3_tree_insert_path(n, "/foo/quux/corge", NULL);
r3_tree_insert_path(n, "/foo/quux/grault", NULL, NULL); r3_tree_insert_path(n, "/foo/quux/grault", NULL);
r3_tree_insert_path(n, "/foo/quux/garply", NULL, NULL); r3_tree_insert_path(n, "/foo/quux/garply", NULL);
r3_tree_insert_path(n, "/foo/corge/bar", NULL, NULL); r3_tree_insert_path(n, "/foo/corge/bar", NULL);
r3_tree_insert_path(n, "/foo/corge/baz", NULL, NULL); r3_tree_insert_path(n, "/foo/corge/baz", NULL);
r3_tree_insert_path(n, "/foo/corge/qux", NULL, NULL); r3_tree_insert_path(n, "/foo/corge/qux", NULL);
r3_tree_insert_path(n, "/foo/corge/quux", NULL, NULL); r3_tree_insert_path(n, "/foo/corge/quux", NULL);
r3_tree_insert_path(n, "/foo/corge/grault", NULL, NULL); r3_tree_insert_path(n, "/foo/corge/grault", NULL);
r3_tree_insert_path(n, "/foo/corge/garply", NULL, NULL); r3_tree_insert_path(n, "/foo/corge/garply", NULL);
r3_tree_insert_path(n, "/foo/grault/bar", NULL, NULL); r3_tree_insert_path(n, "/foo/grault/bar", NULL);
r3_tree_insert_path(n, "/foo/grault/baz", NULL, NULL); r3_tree_insert_path(n, "/foo/grault/baz", NULL);
r3_tree_insert_path(n, "/foo/grault/qux", NULL, NULL); r3_tree_insert_path(n, "/foo/grault/qux", NULL);
r3_tree_insert_path(n, "/foo/grault/quux", NULL, NULL); r3_tree_insert_path(n, "/foo/grault/quux", NULL);
r3_tree_insert_path(n, "/foo/grault/corge", NULL, NULL); r3_tree_insert_path(n, "/foo/grault/corge", NULL);
r3_tree_insert_path(n, "/foo/grault/garply", NULL, NULL); r3_tree_insert_path(n, "/foo/grault/garply", NULL);
r3_tree_insert_path(n, "/foo/garply/bar", NULL, NULL); r3_tree_insert_path(n, "/foo/garply/bar", NULL);
r3_tree_insert_path(n, "/foo/garply/baz", NULL, NULL); r3_tree_insert_path(n, "/foo/garply/baz", NULL);
r3_tree_insert_path(n, "/foo/garply/qux", NULL, NULL); r3_tree_insert_path(n, "/foo/garply/qux", NULL);
r3_tree_insert_path(n, "/foo/garply/quux", NULL, NULL); r3_tree_insert_path(n, "/foo/garply/quux", NULL);
r3_tree_insert_path(n, "/foo/garply/corge", NULL, NULL); r3_tree_insert_path(n, "/foo/garply/corge", NULL);
r3_tree_insert_path(n, "/foo/garply/grault", NULL, NULL); r3_tree_insert_path(n, "/foo/garply/grault", NULL);
r3_tree_insert_path(n, "/bar/foo/baz", NULL, NULL); r3_tree_insert_path(n, "/bar/foo/baz", NULL);
r3_tree_insert_path(n, "/bar/foo/qux", NULL, NULL); r3_tree_insert_path(n, "/bar/foo/qux", NULL);
r3_tree_insert_path(n, "/bar/foo/quux", NULL, NULL); r3_tree_insert_path(n, "/bar/foo/quux", NULL);
r3_tree_insert_path(n, "/bar/foo/corge", NULL, NULL); r3_tree_insert_path(n, "/bar/foo/corge", NULL);
r3_tree_insert_path(n, "/bar/foo/grault", NULL, NULL); r3_tree_insert_path(n, "/bar/foo/grault", NULL);
r3_tree_insert_path(n, "/bar/foo/garply", NULL, NULL); r3_tree_insert_path(n, "/bar/foo/garply", NULL);
r3_tree_insert_path(n, "/bar/baz/foo", NULL, NULL); r3_tree_insert_path(n, "/bar/baz/foo", NULL);
r3_tree_insert_path(n, "/bar/baz/qux", NULL, NULL); r3_tree_insert_path(n, "/bar/baz/qux", NULL);
r3_tree_insert_path(n, "/bar/baz/quux", NULL, NULL); r3_tree_insert_path(n, "/bar/baz/quux", NULL);
r3_tree_insert_path(n, "/bar/baz/corge", NULL, NULL); r3_tree_insert_path(n, "/bar/baz/corge", NULL);
r3_tree_insert_path(n, "/bar/baz/grault", NULL, NULL); r3_tree_insert_path(n, "/bar/baz/grault", NULL);
r3_tree_insert_path(n, "/bar/baz/garply", NULL, NULL); r3_tree_insert_path(n, "/bar/baz/garply", NULL);
r3_tree_insert_path(n, "/bar/qux/foo", NULL, NULL); r3_tree_insert_path(n, "/bar/qux/foo", NULL);
r3_tree_insert_path(n, "/bar/qux/baz", NULL, NULL); r3_tree_insert_path(n, "/bar/qux/baz", NULL);
r3_tree_insert_path(n, "/bar/qux/quux", NULL, NULL); r3_tree_insert_path(n, "/bar/qux/quux", NULL);
r3_tree_insert_path(n, "/bar/qux/corge", NULL, NULL); r3_tree_insert_path(n, "/bar/qux/corge", NULL);
r3_tree_insert_path(n, "/bar/qux/grault", NULL, NULL); r3_tree_insert_path(n, "/bar/qux/grault", NULL);
r3_tree_insert_path(n, "/bar/qux/garply", NULL, NULL); r3_tree_insert_path(n, "/bar/qux/garply", NULL);
r3_tree_insert_path(n, "/bar/quux/foo", NULL, NULL); r3_tree_insert_path(n, "/bar/quux/foo", NULL);
r3_tree_insert_path(n, "/bar/quux/baz", NULL, NULL); r3_tree_insert_path(n, "/bar/quux/baz", NULL);
r3_tree_insert_path(n, "/bar/quux/qux", NULL, NULL); r3_tree_insert_path(n, "/bar/quux/qux", NULL);
r3_tree_insert_path(n, "/bar/quux/corge", NULL, NULL); r3_tree_insert_path(n, "/bar/quux/corge", NULL);
r3_tree_insert_path(n, "/bar/quux/grault", NULL, NULL); r3_tree_insert_path(n, "/bar/quux/grault", NULL);
r3_tree_insert_path(n, "/bar/quux/garply", NULL, NULL); r3_tree_insert_path(n, "/bar/quux/garply", NULL);
r3_tree_insert_path(n, "/bar/corge/foo", NULL, NULL); r3_tree_insert_path(n, "/bar/corge/foo", NULL);
r3_tree_insert_path(n, "/bar/corge/baz", NULL, NULL); r3_tree_insert_path(n, "/bar/corge/baz", NULL);
r3_tree_insert_path(n, "/bar/corge/qux", NULL, NULL); r3_tree_insert_path(n, "/bar/corge/qux", NULL);
r3_tree_insert_path(n, "/bar/corge/quux", NULL, NULL); r3_tree_insert_path(n, "/bar/corge/quux", NULL);
r3_tree_insert_path(n, "/bar/corge/grault", NULL, NULL); r3_tree_insert_path(n, "/bar/corge/grault", NULL);
r3_tree_insert_path(n, "/bar/corge/garply", NULL, NULL); r3_tree_insert_path(n, "/bar/corge/garply", NULL);
r3_tree_insert_path(n, "/bar/grault/foo", NULL, NULL); r3_tree_insert_path(n, "/bar/grault/foo", NULL);
r3_tree_insert_path(n, "/bar/grault/baz", NULL, NULL); r3_tree_insert_path(n, "/bar/grault/baz", NULL);
r3_tree_insert_path(n, "/bar/grault/qux", NULL, NULL); r3_tree_insert_path(n, "/bar/grault/qux", NULL);
r3_tree_insert_path(n, "/bar/grault/quux", NULL, NULL); r3_tree_insert_path(n, "/bar/grault/quux", NULL);
r3_tree_insert_path(n, "/bar/grault/corge", NULL, NULL); r3_tree_insert_path(n, "/bar/grault/corge", NULL);
r3_tree_insert_path(n, "/bar/grault/garply", NULL, NULL); r3_tree_insert_path(n, "/bar/grault/garply", NULL);
r3_tree_insert_path(n, "/bar/garply/foo", NULL, NULL); r3_tree_insert_path(n, "/bar/garply/foo", NULL);
r3_tree_insert_path(n, "/bar/garply/baz", NULL, NULL); r3_tree_insert_path(n, "/bar/garply/baz", NULL);
r3_tree_insert_path(n, "/bar/garply/qux", NULL, NULL); r3_tree_insert_path(n, "/bar/garply/qux", NULL);
r3_tree_insert_path(n, "/bar/garply/quux", NULL, NULL); r3_tree_insert_path(n, "/bar/garply/quux", NULL);
r3_tree_insert_path(n, "/bar/garply/corge", NULL, NULL); r3_tree_insert_path(n, "/bar/garply/corge", NULL);
r3_tree_insert_path(n, "/bar/garply/grault", NULL, NULL); r3_tree_insert_path(n, "/bar/garply/grault", NULL);
r3_tree_insert_path(n, "/baz/foo/bar", NULL, NULL); r3_tree_insert_path(n, "/baz/foo/bar", NULL);
r3_tree_insert_path(n, "/baz/foo/qux", NULL, NULL); r3_tree_insert_path(n, "/baz/foo/qux", NULL);
r3_tree_insert_path(n, "/baz/foo/quux", NULL, NULL); r3_tree_insert_path(n, "/baz/foo/quux", NULL);
r3_tree_insert_path(n, "/baz/foo/corge", NULL, NULL); r3_tree_insert_path(n, "/baz/foo/corge", NULL);
r3_tree_insert_path(n, "/baz/foo/grault", NULL, NULL); r3_tree_insert_path(n, "/baz/foo/grault", NULL);
r3_tree_insert_path(n, "/baz/foo/garply", NULL, NULL); r3_tree_insert_path(n, "/baz/foo/garply", NULL);
r3_tree_insert_path(n, "/baz/bar/foo", NULL, NULL); r3_tree_insert_path(n, "/baz/bar/foo", NULL);
r3_tree_insert_path(n, "/baz/bar/qux", NULL, NULL); r3_tree_insert_path(n, "/baz/bar/qux", NULL);
r3_tree_insert_path(n, "/baz/bar/quux", NULL, NULL); r3_tree_insert_path(n, "/baz/bar/quux", NULL);
r3_tree_insert_path(n, "/baz/bar/corge", NULL, NULL); r3_tree_insert_path(n, "/baz/bar/corge", NULL);
r3_tree_insert_path(n, "/baz/bar/grault", NULL, NULL); r3_tree_insert_path(n, "/baz/bar/grault", NULL);
r3_tree_insert_path(n, "/baz/bar/garply", NULL, NULL); r3_tree_insert_path(n, "/baz/bar/garply", NULL);
r3_tree_insert_path(n, "/baz/qux/foo", NULL, NULL); r3_tree_insert_path(n, "/baz/qux/foo", NULL);
r3_tree_insert_path(n, "/baz/qux/bar", NULL, NULL); r3_tree_insert_path(n, "/baz/qux/bar", NULL);
r3_tree_insert_path(n, "/baz/qux/quux", NULL, NULL); r3_tree_insert_path(n, "/baz/qux/quux", NULL);
r3_tree_insert_path(n, "/baz/qux/corge", NULL, NULL); r3_tree_insert_path(n, "/baz/qux/corge", NULL);
r3_tree_insert_path(n, "/baz/qux/grault", NULL, NULL); r3_tree_insert_path(n, "/baz/qux/grault", NULL);
r3_tree_insert_path(n, "/baz/qux/garply", NULL, NULL); r3_tree_insert_path(n, "/baz/qux/garply", NULL);
r3_tree_insert_path(n, "/baz/quux/foo", NULL, NULL); r3_tree_insert_path(n, "/baz/quux/foo", NULL);
r3_tree_insert_path(n, "/baz/quux/bar", NULL, NULL); r3_tree_insert_path(n, "/baz/quux/bar", NULL);
r3_tree_insert_path(n, "/baz/quux/qux", NULL, NULL); r3_tree_insert_path(n, "/baz/quux/qux", NULL);
r3_tree_insert_path(n, "/baz/quux/corge", NULL, NULL); r3_tree_insert_path(n, "/baz/quux/corge", NULL);
r3_tree_insert_path(n, "/baz/quux/grault", NULL, NULL); r3_tree_insert_path(n, "/baz/quux/grault", NULL);
r3_tree_insert_path(n, "/baz/quux/garply", NULL, NULL); r3_tree_insert_path(n, "/baz/quux/garply", NULL);
r3_tree_insert_path(n, "/baz/corge/foo", NULL, NULL); r3_tree_insert_path(n, "/baz/corge/foo", NULL);
r3_tree_insert_path(n, "/baz/corge/bar", NULL, NULL); r3_tree_insert_path(n, "/baz/corge/bar", NULL);
r3_tree_insert_path(n, "/baz/corge/qux", NULL, NULL); r3_tree_insert_path(n, "/baz/corge/qux", NULL);
r3_tree_insert_path(n, "/baz/corge/quux", NULL, NULL); r3_tree_insert_path(n, "/baz/corge/quux", NULL);
r3_tree_insert_path(n, "/baz/corge/grault", NULL, NULL); r3_tree_insert_path(n, "/baz/corge/grault", NULL);
r3_tree_insert_path(n, "/baz/corge/garply", NULL, NULL); r3_tree_insert_path(n, "/baz/corge/garply", NULL);
r3_tree_insert_path(n, "/baz/grault/foo", NULL, NULL); r3_tree_insert_path(n, "/baz/grault/foo", NULL);
r3_tree_insert_path(n, "/baz/grault/bar", NULL, NULL); r3_tree_insert_path(n, "/baz/grault/bar", NULL);
r3_tree_insert_path(n, "/baz/grault/qux", NULL, NULL); r3_tree_insert_path(n, "/baz/grault/qux", NULL);
r3_tree_insert_path(n, "/baz/grault/quux", NULL, NULL); r3_tree_insert_path(n, "/baz/grault/quux", NULL);
r3_tree_insert_path(n, "/baz/grault/corge", NULL, NULL); r3_tree_insert_path(n, "/baz/grault/corge", NULL);
r3_tree_insert_path(n, "/baz/grault/garply", NULL, NULL); r3_tree_insert_path(n, "/baz/grault/garply", NULL);
r3_tree_insert_path(n, "/baz/garply/foo", NULL, NULL); r3_tree_insert_path(n, "/baz/garply/foo", NULL);
r3_tree_insert_path(n, "/baz/garply/bar", NULL, NULL); r3_tree_insert_path(n, "/baz/garply/bar", NULL);
r3_tree_insert_path(n, "/baz/garply/qux", NULL, NULL); r3_tree_insert_path(n, "/baz/garply/qux", NULL);
r3_tree_insert_path(n, "/baz/garply/quux", NULL, NULL); r3_tree_insert_path(n, "/baz/garply/quux", NULL);
r3_tree_insert_path(n, "/baz/garply/corge", NULL, NULL); r3_tree_insert_path(n, "/baz/garply/corge", NULL);
r3_tree_insert_path(n, "/baz/garply/grault", NULL, NULL); r3_tree_insert_path(n, "/baz/garply/grault", NULL);
r3_tree_insert_path(n, "/qux/foo/bar", NULL, NULL); r3_tree_insert_path(n, "/qux/foo/bar", NULL);
r3_tree_insert_path(n, "/qux/foo/baz", NULL, NULL); r3_tree_insert_path(n, "/qux/foo/baz", NULL);
r3_tree_insert_path(n, "/qux/foo/quux", NULL, NULL); r3_tree_insert_path(n, "/qux/foo/quux", NULL);
r3_tree_insert_path(n, "/qux/foo/corge", NULL, NULL); r3_tree_insert_path(n, "/qux/foo/corge", NULL);
r3_tree_insert_path(n, "/qux/foo/grault", NULL, NULL); r3_tree_insert_path(n, "/qux/foo/grault", NULL);
r3_tree_insert_path(n, "/qux/foo/garply", NULL, NULL); r3_tree_insert_path(n, "/qux/foo/garply", NULL);
r3_tree_insert_path(n, "/qux/bar/foo", NULL, NULL); r3_tree_insert_path(n, "/qux/bar/foo", NULL);
r3_tree_insert_path(n, "/qux/bar/baz", NULL, NULL); r3_tree_insert_path(n, "/qux/bar/baz", NULL);
r3_tree_insert_path(n, "/qux/bar/quux", NULL, NULL); r3_tree_insert_path(n, "/qux/bar/quux", NULL);
r3_tree_insert_path(n, "/qux/bar/corge", NULL, &route_data); r3_tree_insert_path(n, "/qux/bar/corge", &route_data);
r3_tree_insert_path(n, "/qux/bar/grault", NULL, NULL); r3_tree_insert_path(n, "/qux/bar/grault", NULL);
r3_tree_insert_path(n, "/qux/bar/garply", NULL, NULL); r3_tree_insert_path(n, "/qux/bar/garply", NULL);
r3_tree_insert_path(n, "/qux/baz/foo", NULL, NULL); r3_tree_insert_path(n, "/qux/baz/foo", NULL);
r3_tree_insert_path(n, "/qux/baz/bar", NULL, NULL); r3_tree_insert_path(n, "/qux/baz/bar", NULL);
r3_tree_insert_path(n, "/qux/baz/quux", NULL, NULL); r3_tree_insert_path(n, "/qux/baz/quux", NULL);
r3_tree_insert_path(n, "/qux/baz/corge", NULL, NULL); r3_tree_insert_path(n, "/qux/baz/corge", NULL);
r3_tree_insert_path(n, "/qux/baz/grault", NULL, NULL); r3_tree_insert_path(n, "/qux/baz/grault", NULL);
r3_tree_insert_path(n, "/qux/baz/garply", NULL, NULL); r3_tree_insert_path(n, "/qux/baz/garply", NULL);
r3_tree_insert_path(n, "/qux/quux/foo", NULL, NULL); r3_tree_insert_path(n, "/qux/quux/foo", NULL);
r3_tree_insert_path(n, "/qux/quux/bar", NULL, NULL); r3_tree_insert_path(n, "/qux/quux/bar", NULL);
r3_tree_insert_path(n, "/qux/quux/baz", NULL, NULL); r3_tree_insert_path(n, "/qux/quux/baz", NULL);
r3_tree_insert_path(n, "/qux/quux/corge", NULL, NULL); r3_tree_insert_path(n, "/qux/quux/corge", NULL);
r3_tree_insert_path(n, "/qux/quux/grault", NULL, NULL); r3_tree_insert_path(n, "/qux/quux/grault", NULL);
r3_tree_insert_path(n, "/qux/quux/garply", NULL, NULL); r3_tree_insert_path(n, "/qux/quux/garply", NULL);
r3_tree_insert_path(n, "/qux/corge/foo", NULL, NULL); r3_tree_insert_path(n, "/qux/corge/foo", NULL);
r3_tree_insert_path(n, "/qux/corge/bar", NULL, NULL); r3_tree_insert_path(n, "/qux/corge/bar", NULL);
r3_tree_insert_path(n, "/qux/corge/baz", NULL, NULL); r3_tree_insert_path(n, "/qux/corge/baz", NULL);
r3_tree_insert_path(n, "/qux/corge/quux", NULL, NULL); r3_tree_insert_path(n, "/qux/corge/quux", NULL);
r3_tree_insert_path(n, "/qux/corge/grault", NULL, NULL); r3_tree_insert_path(n, "/qux/corge/grault", NULL);
r3_tree_insert_path(n, "/qux/corge/garply", NULL, NULL); r3_tree_insert_path(n, "/qux/corge/garply", NULL);
r3_tree_insert_path(n, "/qux/grault/foo", NULL, NULL); r3_tree_insert_path(n, "/qux/grault/foo", NULL);
r3_tree_insert_path(n, "/qux/grault/bar", NULL, NULL); r3_tree_insert_path(n, "/qux/grault/bar", NULL);
r3_tree_insert_path(n, "/qux/grault/baz", NULL, NULL); r3_tree_insert_path(n, "/qux/grault/baz", NULL);
r3_tree_insert_path(n, "/qux/grault/quux", NULL, NULL); r3_tree_insert_path(n, "/qux/grault/quux", NULL);
r3_tree_insert_path(n, "/qux/grault/corge", NULL, NULL); r3_tree_insert_path(n, "/qux/grault/corge", NULL);
r3_tree_insert_path(n, "/qux/grault/garply", NULL, NULL); r3_tree_insert_path(n, "/qux/grault/garply", NULL);
r3_tree_insert_path(n, "/qux/garply/foo", NULL, NULL); r3_tree_insert_path(n, "/qux/garply/foo", NULL);
r3_tree_insert_path(n, "/qux/garply/bar", NULL, NULL); r3_tree_insert_path(n, "/qux/garply/bar", NULL);
r3_tree_insert_path(n, "/qux/garply/baz", NULL, NULL); r3_tree_insert_path(n, "/qux/garply/baz", NULL);
r3_tree_insert_path(n, "/qux/garply/quux", NULL, NULL); r3_tree_insert_path(n, "/qux/garply/quux", NULL);
r3_tree_insert_path(n, "/qux/garply/corge", NULL, NULL); r3_tree_insert_path(n, "/qux/garply/corge", NULL);
r3_tree_insert_path(n, "/qux/garply/grault", NULL, NULL); r3_tree_insert_path(n, "/qux/garply/grault", NULL);
r3_tree_insert_path(n, "/quux/foo/bar", NULL, NULL); r3_tree_insert_path(n, "/quux/foo/bar", NULL);
r3_tree_insert_path(n, "/quux/foo/baz", NULL, NULL); r3_tree_insert_path(n, "/quux/foo/baz", NULL);
r3_tree_insert_path(n, "/quux/foo/qux", NULL, NULL); r3_tree_insert_path(n, "/quux/foo/qux", NULL);
r3_tree_insert_path(n, "/quux/foo/corge", NULL, NULL); r3_tree_insert_path(n, "/quux/foo/corge", NULL);
r3_tree_insert_path(n, "/quux/foo/grault", NULL, NULL); r3_tree_insert_path(n, "/quux/foo/grault", NULL);
r3_tree_insert_path(n, "/quux/foo/garply", NULL, NULL); r3_tree_insert_path(n, "/quux/foo/garply", NULL);
r3_tree_insert_path(n, "/quux/bar/foo", NULL, NULL); r3_tree_insert_path(n, "/quux/bar/foo", NULL);
r3_tree_insert_path(n, "/quux/bar/baz", NULL, NULL); r3_tree_insert_path(n, "/quux/bar/baz", NULL);
r3_tree_insert_path(n, "/quux/bar/qux", NULL, NULL); r3_tree_insert_path(n, "/quux/bar/qux", NULL);
r3_tree_insert_path(n, "/quux/bar/corge", NULL, NULL); r3_tree_insert_path(n, "/quux/bar/corge", NULL);
r3_tree_insert_path(n, "/quux/bar/grault", NULL, NULL); r3_tree_insert_path(n, "/quux/bar/grault", NULL);
r3_tree_insert_path(n, "/quux/bar/garply", NULL, NULL); r3_tree_insert_path(n, "/quux/bar/garply", NULL);
r3_tree_insert_path(n, "/quux/baz/foo", NULL, NULL); r3_tree_insert_path(n, "/quux/baz/foo", NULL);
r3_tree_insert_path(n, "/quux/baz/bar", NULL, NULL); r3_tree_insert_path(n, "/quux/baz/bar", NULL);
r3_tree_insert_path(n, "/quux/baz/qux", NULL, NULL); r3_tree_insert_path(n, "/quux/baz/qux", NULL);
r3_tree_insert_path(n, "/quux/baz/corge", NULL, NULL); r3_tree_insert_path(n, "/quux/baz/corge", NULL);
r3_tree_insert_path(n, "/quux/baz/grault", NULL, NULL); r3_tree_insert_path(n, "/quux/baz/grault", NULL);
r3_tree_insert_path(n, "/quux/baz/garply", NULL, NULL); r3_tree_insert_path(n, "/quux/baz/garply", NULL);
r3_tree_insert_path(n, "/quux/qux/foo", NULL, NULL); r3_tree_insert_path(n, "/quux/qux/foo", NULL);
r3_tree_insert_path(n, "/quux/qux/bar", NULL, NULL); r3_tree_insert_path(n, "/quux/qux/bar", NULL);
r3_tree_insert_path(n, "/quux/qux/baz", NULL, NULL); r3_tree_insert_path(n, "/quux/qux/baz", NULL);
r3_tree_insert_path(n, "/quux/qux/corge", NULL, NULL); r3_tree_insert_path(n, "/quux/qux/corge", NULL);
r3_tree_insert_path(n, "/quux/qux/grault", NULL, NULL); r3_tree_insert_path(n, "/quux/qux/grault", NULL);
r3_tree_insert_path(n, "/quux/qux/garply", NULL, NULL); r3_tree_insert_path(n, "/quux/qux/garply", NULL);
r3_tree_insert_path(n, "/quux/corge/foo", NULL, NULL); r3_tree_insert_path(n, "/quux/corge/foo", NULL);
r3_tree_insert_path(n, "/quux/corge/bar", NULL, NULL); r3_tree_insert_path(n, "/quux/corge/bar", NULL);
r3_tree_insert_path(n, "/quux/corge/baz", NULL, NULL); r3_tree_insert_path(n, "/quux/corge/baz", NULL);
r3_tree_insert_path(n, "/quux/corge/qux", NULL, NULL); r3_tree_insert_path(n, "/quux/corge/qux", NULL);
r3_tree_insert_path(n, "/quux/corge/grault", NULL, NULL); r3_tree_insert_path(n, "/quux/corge/grault", NULL);
r3_tree_insert_path(n, "/quux/corge/garply", NULL, NULL); r3_tree_insert_path(n, "/quux/corge/garply", NULL);
r3_tree_insert_path(n, "/quux/grault/foo", NULL, NULL); r3_tree_insert_path(n, "/quux/grault/foo", NULL);
r3_tree_insert_path(n, "/quux/grault/bar", NULL, NULL); r3_tree_insert_path(n, "/quux/grault/bar", NULL);
r3_tree_insert_path(n, "/quux/grault/baz", NULL, NULL); r3_tree_insert_path(n, "/quux/grault/baz", NULL);
r3_tree_insert_path(n, "/quux/grault/qux", NULL, NULL); r3_tree_insert_path(n, "/quux/grault/qux", NULL);
r3_tree_insert_path(n, "/quux/grault/corge", NULL, NULL); r3_tree_insert_path(n, "/quux/grault/corge", NULL);
r3_tree_insert_path(n, "/quux/grault/garply", NULL, NULL); r3_tree_insert_path(n, "/quux/grault/garply", NULL);
r3_tree_insert_path(n, "/quux/garply/foo", NULL, NULL); r3_tree_insert_path(n, "/quux/garply/foo", NULL);
r3_tree_insert_path(n, "/quux/garply/bar", NULL, NULL); r3_tree_insert_path(n, "/quux/garply/bar", NULL);
r3_tree_insert_path(n, "/quux/garply/baz", NULL, NULL); r3_tree_insert_path(n, "/quux/garply/baz", NULL);
r3_tree_insert_path(n, "/quux/garply/qux", NULL, NULL); r3_tree_insert_path(n, "/quux/garply/qux", NULL);
r3_tree_insert_path(n, "/quux/garply/corge", NULL, NULL); r3_tree_insert_path(n, "/quux/garply/corge", NULL);
r3_tree_insert_path(n, "/quux/garply/grault", NULL, NULL); r3_tree_insert_path(n, "/quux/garply/grault", NULL);
r3_tree_insert_path(n, "/corge/foo/bar", NULL, NULL); r3_tree_insert_path(n, "/corge/foo/bar", NULL);
r3_tree_insert_path(n, "/corge/foo/baz", NULL, NULL); r3_tree_insert_path(n, "/corge/foo/baz", NULL);
r3_tree_insert_path(n, "/corge/foo/qux", NULL, NULL); r3_tree_insert_path(n, "/corge/foo/qux", NULL);
r3_tree_insert_path(n, "/corge/foo/quux", NULL, NULL); r3_tree_insert_path(n, "/corge/foo/quux", NULL);
r3_tree_insert_path(n, "/corge/foo/grault", NULL, NULL); r3_tree_insert_path(n, "/corge/foo/grault", NULL);
r3_tree_insert_path(n, "/corge/foo/garply", NULL, NULL); r3_tree_insert_path(n, "/corge/foo/garply", NULL);
r3_tree_insert_path(n, "/corge/bar/foo", NULL, NULL); r3_tree_insert_path(n, "/corge/bar/foo", NULL);
r3_tree_insert_path(n, "/corge/bar/baz", NULL, NULL); r3_tree_insert_path(n, "/corge/bar/baz", NULL);
r3_tree_insert_path(n, "/corge/bar/qux", NULL, NULL); r3_tree_insert_path(n, "/corge/bar/qux", NULL);
r3_tree_insert_path(n, "/corge/bar/quux", NULL, NULL); r3_tree_insert_path(n, "/corge/bar/quux", NULL);
r3_tree_insert_path(n, "/corge/bar/grault", NULL, NULL); r3_tree_insert_path(n, "/corge/bar/grault", NULL);
r3_tree_insert_path(n, "/corge/bar/garply", NULL, NULL); r3_tree_insert_path(n, "/corge/bar/garply", NULL);
r3_tree_insert_path(n, "/corge/baz/foo", NULL, NULL); r3_tree_insert_path(n, "/corge/baz/foo", NULL);
r3_tree_insert_path(n, "/corge/baz/bar", NULL, NULL); r3_tree_insert_path(n, "/corge/baz/bar", NULL);
r3_tree_insert_path(n, "/corge/baz/qux", NULL, NULL); r3_tree_insert_path(n, "/corge/baz/qux", NULL);
r3_tree_insert_path(n, "/corge/baz/quux", NULL, NULL); r3_tree_insert_path(n, "/corge/baz/quux", NULL);
r3_tree_insert_path(n, "/corge/baz/grault", NULL, NULL); r3_tree_insert_path(n, "/corge/baz/grault", NULL);
r3_tree_insert_path(n, "/corge/baz/garply", NULL, NULL); r3_tree_insert_path(n, "/corge/baz/garply", NULL);
r3_tree_insert_path(n, "/corge/qux/foo", NULL, NULL); r3_tree_insert_path(n, "/corge/qux/foo", NULL);
r3_tree_insert_path(n, "/corge/qux/bar", NULL, NULL); r3_tree_insert_path(n, "/corge/qux/bar", NULL);
r3_tree_insert_path(n, "/corge/qux/baz", NULL, NULL); r3_tree_insert_path(n, "/corge/qux/baz", NULL);
r3_tree_insert_path(n, "/corge/qux/quux", NULL, NULL); r3_tree_insert_path(n, "/corge/qux/quux", NULL);
r3_tree_insert_path(n, "/corge/qux/grault", NULL, NULL); r3_tree_insert_path(n, "/corge/qux/grault", NULL);
r3_tree_insert_path(n, "/corge/qux/garply", NULL, NULL); r3_tree_insert_path(n, "/corge/qux/garply", NULL);
r3_tree_insert_path(n, "/corge/quux/foo", NULL, NULL); r3_tree_insert_path(n, "/corge/quux/foo", NULL);
r3_tree_insert_path(n, "/corge/quux/bar", NULL, NULL); r3_tree_insert_path(n, "/corge/quux/bar", NULL);
r3_tree_insert_path(n, "/corge/quux/baz", NULL, NULL); r3_tree_insert_path(n, "/corge/quux/baz", NULL);
r3_tree_insert_path(n, "/corge/quux/qux", NULL, NULL); r3_tree_insert_path(n, "/corge/quux/qux", NULL);
r3_tree_insert_path(n, "/corge/quux/grault", NULL, NULL); r3_tree_insert_path(n, "/corge/quux/grault", NULL);
r3_tree_insert_path(n, "/corge/quux/garply", NULL, NULL); r3_tree_insert_path(n, "/corge/quux/garply", NULL);
r3_tree_insert_path(n, "/corge/grault/foo", NULL, NULL); r3_tree_insert_path(n, "/corge/grault/foo", NULL);
r3_tree_insert_path(n, "/corge/grault/bar", NULL, NULL); r3_tree_insert_path(n, "/corge/grault/bar", NULL);
r3_tree_insert_path(n, "/corge/grault/baz", NULL, NULL); r3_tree_insert_path(n, "/corge/grault/baz", NULL);
r3_tree_insert_path(n, "/corge/grault/qux", NULL, NULL); r3_tree_insert_path(n, "/corge/grault/qux", NULL);
r3_tree_insert_path(n, "/corge/grault/quux", NULL, NULL); r3_tree_insert_path(n, "/corge/grault/quux", NULL);
r3_tree_insert_path(n, "/corge/grault/garply", NULL, NULL); r3_tree_insert_path(n, "/corge/grault/garply", NULL);
r3_tree_insert_path(n, "/corge/garply/foo", NULL, NULL); r3_tree_insert_path(n, "/corge/garply/foo", NULL);
r3_tree_insert_path(n, "/corge/garply/bar", NULL, NULL); r3_tree_insert_path(n, "/corge/garply/bar", NULL);
r3_tree_insert_path(n, "/corge/garply/baz", NULL, NULL); r3_tree_insert_path(n, "/corge/garply/baz", NULL);
r3_tree_insert_path(n, "/corge/garply/qux", NULL, NULL); r3_tree_insert_path(n, "/corge/garply/qux", NULL);
r3_tree_insert_path(n, "/corge/garply/quux", NULL, NULL); r3_tree_insert_path(n, "/corge/garply/quux", NULL);
r3_tree_insert_path(n, "/corge/garply/grault", NULL, NULL); r3_tree_insert_path(n, "/corge/garply/grault", NULL);
r3_tree_insert_path(n, "/grault/foo/bar", NULL, NULL); r3_tree_insert_path(n, "/grault/foo/bar", NULL);
r3_tree_insert_path(n, "/grault/foo/baz", NULL, NULL); r3_tree_insert_path(n, "/grault/foo/baz", NULL);
r3_tree_insert_path(n, "/grault/foo/qux", NULL, NULL); r3_tree_insert_path(n, "/grault/foo/qux", NULL);
r3_tree_insert_path(n, "/grault/foo/quux", NULL, NULL); r3_tree_insert_path(n, "/grault/foo/quux", NULL);
r3_tree_insert_path(n, "/grault/foo/corge", NULL, NULL); r3_tree_insert_path(n, "/grault/foo/corge", NULL);
r3_tree_insert_path(n, "/grault/foo/garply", NULL, NULL); r3_tree_insert_path(n, "/grault/foo/garply", NULL);
r3_tree_insert_path(n, "/grault/bar/foo", NULL, NULL); r3_tree_insert_path(n, "/grault/bar/foo", NULL);
r3_tree_insert_path(n, "/grault/bar/baz", NULL, NULL); r3_tree_insert_path(n, "/grault/bar/baz", NULL);
r3_tree_insert_path(n, "/grault/bar/qux", NULL, NULL); r3_tree_insert_path(n, "/grault/bar/qux", NULL);
r3_tree_insert_path(n, "/grault/bar/quux", NULL, NULL); r3_tree_insert_path(n, "/grault/bar/quux", NULL);
r3_tree_insert_path(n, "/grault/bar/corge", NULL, NULL); r3_tree_insert_path(n, "/grault/bar/corge", NULL);
r3_tree_insert_path(n, "/grault/bar/garply", NULL, NULL); r3_tree_insert_path(n, "/grault/bar/garply", NULL);
r3_tree_insert_path(n, "/grault/baz/foo", NULL, NULL); r3_tree_insert_path(n, "/grault/baz/foo", NULL);
r3_tree_insert_path(n, "/grault/baz/bar", NULL, NULL); r3_tree_insert_path(n, "/grault/baz/bar", NULL);
r3_tree_insert_path(n, "/grault/baz/qux", NULL, NULL); r3_tree_insert_path(n, "/grault/baz/qux", NULL);
r3_tree_insert_path(n, "/grault/baz/quux", NULL, NULL); r3_tree_insert_path(n, "/grault/baz/quux", NULL);
r3_tree_insert_path(n, "/grault/baz/corge", NULL, NULL); r3_tree_insert_path(n, "/grault/baz/corge", NULL);
r3_tree_insert_path(n, "/grault/baz/garply", NULL, NULL); r3_tree_insert_path(n, "/grault/baz/garply", NULL);
r3_tree_insert_path(n, "/grault/qux/foo", NULL, NULL); r3_tree_insert_path(n, "/grault/qux/foo", NULL);
r3_tree_insert_path(n, "/grault/qux/bar", NULL, NULL); r3_tree_insert_path(n, "/grault/qux/bar", NULL);
r3_tree_insert_path(n, "/grault/qux/baz", NULL, NULL); r3_tree_insert_path(n, "/grault/qux/baz", NULL);
r3_tree_insert_path(n, "/grault/qux/quux", NULL, NULL); r3_tree_insert_path(n, "/grault/qux/quux", NULL);
r3_tree_insert_path(n, "/grault/qux/corge", NULL, NULL); r3_tree_insert_path(n, "/grault/qux/corge", NULL);
r3_tree_insert_path(n, "/grault/qux/garply", NULL, NULL); r3_tree_insert_path(n, "/grault/qux/garply", NULL);
r3_tree_insert_path(n, "/grault/quux/foo", NULL, NULL); r3_tree_insert_path(n, "/grault/quux/foo", NULL);
r3_tree_insert_path(n, "/grault/quux/bar", NULL, NULL); r3_tree_insert_path(n, "/grault/quux/bar", NULL);
r3_tree_insert_path(n, "/grault/quux/baz", NULL, NULL); r3_tree_insert_path(n, "/grault/quux/baz", NULL);
r3_tree_insert_path(n, "/grault/quux/qux", NULL, NULL); r3_tree_insert_path(n, "/grault/quux/qux", NULL);
r3_tree_insert_path(n, "/grault/quux/corge", NULL, NULL); r3_tree_insert_path(n, "/grault/quux/corge", NULL);
r3_tree_insert_path(n, "/grault/quux/garply", NULL, NULL); r3_tree_insert_path(n, "/grault/quux/garply", NULL);
r3_tree_insert_path(n, "/grault/corge/foo", NULL, NULL); r3_tree_insert_path(n, "/grault/corge/foo", NULL);
r3_tree_insert_path(n, "/grault/corge/bar", NULL, NULL); r3_tree_insert_path(n, "/grault/corge/bar", NULL);
r3_tree_insert_path(n, "/grault/corge/baz", NULL, NULL); r3_tree_insert_path(n, "/grault/corge/baz", NULL);
r3_tree_insert_path(n, "/grault/corge/qux", NULL, NULL); r3_tree_insert_path(n, "/grault/corge/qux", NULL);
r3_tree_insert_path(n, "/grault/corge/quux", NULL, NULL); r3_tree_insert_path(n, "/grault/corge/quux", NULL);
r3_tree_insert_path(n, "/grault/corge/garply", NULL, NULL); r3_tree_insert_path(n, "/grault/corge/garply", NULL);
r3_tree_insert_path(n, "/grault/garply/foo", NULL, NULL); r3_tree_insert_path(n, "/grault/garply/foo", NULL);
r3_tree_insert_path(n, "/grault/garply/bar", NULL, NULL); r3_tree_insert_path(n, "/grault/garply/bar", NULL);
r3_tree_insert_path(n, "/grault/garply/baz", NULL, NULL); r3_tree_insert_path(n, "/grault/garply/baz", NULL);
r3_tree_insert_path(n, "/grault/garply/qux", NULL, NULL); r3_tree_insert_path(n, "/grault/garply/qux", NULL);
r3_tree_insert_path(n, "/grault/garply/quux", NULL, NULL); r3_tree_insert_path(n, "/grault/garply/quux", NULL);
r3_tree_insert_path(n, "/grault/garply/corge", NULL, NULL); r3_tree_insert_path(n, "/grault/garply/corge", NULL);
r3_tree_insert_path(n, "/garply/foo/bar", NULL, NULL); r3_tree_insert_path(n, "/garply/foo/bar", NULL);
r3_tree_insert_path(n, "/garply/foo/baz", NULL, NULL); r3_tree_insert_path(n, "/garply/foo/baz", NULL);
r3_tree_insert_path(n, "/garply/foo/qux", NULL, NULL); r3_tree_insert_path(n, "/garply/foo/qux", NULL);
r3_tree_insert_path(n, "/garply/foo/quux", NULL, NULL); r3_tree_insert_path(n, "/garply/foo/quux", NULL);
r3_tree_insert_path(n, "/garply/foo/corge", NULL, NULL); r3_tree_insert_path(n, "/garply/foo/corge", NULL);
r3_tree_insert_path(n, "/garply/foo/grault", NULL, NULL); r3_tree_insert_path(n, "/garply/foo/grault", NULL);
r3_tree_insert_path(n, "/garply/bar/foo", NULL, NULL); r3_tree_insert_path(n, "/garply/bar/foo", NULL);
r3_tree_insert_path(n, "/garply/bar/baz", NULL, NULL); r3_tree_insert_path(n, "/garply/bar/baz", NULL);
r3_tree_insert_path(n, "/garply/bar/qux", NULL, NULL); r3_tree_insert_path(n, "/garply/bar/qux", NULL);
r3_tree_insert_path(n, "/garply/bar/quux", NULL, NULL); r3_tree_insert_path(n, "/garply/bar/quux", NULL);
r3_tree_insert_path(n, "/garply/bar/corge", NULL, NULL); r3_tree_insert_path(n, "/garply/bar/corge", NULL);
r3_tree_insert_path(n, "/garply/bar/grault", NULL, NULL); r3_tree_insert_path(n, "/garply/bar/grault", NULL);
r3_tree_insert_path(n, "/garply/baz/foo", NULL, NULL); r3_tree_insert_path(n, "/garply/baz/foo", NULL);
r3_tree_insert_path(n, "/garply/baz/bar", NULL, NULL); r3_tree_insert_path(n, "/garply/baz/bar", NULL);
r3_tree_insert_path(n, "/garply/baz/qux", NULL, NULL); r3_tree_insert_path(n, "/garply/baz/qux", NULL);
r3_tree_insert_path(n, "/garply/baz/quux", NULL, NULL); r3_tree_insert_path(n, "/garply/baz/quux", NULL);
r3_tree_insert_path(n, "/garply/baz/corge", NULL, NULL); r3_tree_insert_path(n, "/garply/baz/corge", NULL);
r3_tree_insert_path(n, "/garply/baz/grault", NULL, NULL); r3_tree_insert_path(n, "/garply/baz/grault", NULL);
r3_tree_insert_path(n, "/garply/qux/foo", NULL, NULL); r3_tree_insert_path(n, "/garply/qux/foo", NULL);
r3_tree_insert_path(n, "/garply/qux/bar", NULL, NULL); r3_tree_insert_path(n, "/garply/qux/bar", NULL);
r3_tree_insert_path(n, "/garply/qux/baz", NULL, NULL); r3_tree_insert_path(n, "/garply/qux/baz", NULL);
r3_tree_insert_path(n, "/garply/qux/quux", NULL, NULL); r3_tree_insert_path(n, "/garply/qux/quux", NULL);
r3_tree_insert_path(n, "/garply/qux/corge", NULL, NULL); r3_tree_insert_path(n, "/garply/qux/corge", NULL);
r3_tree_insert_path(n, "/garply/qux/grault", NULL, NULL); r3_tree_insert_path(n, "/garply/qux/grault", NULL);
r3_tree_insert_path(n, "/garply/quux/foo", NULL, NULL); r3_tree_insert_path(n, "/garply/quux/foo", NULL);
r3_tree_insert_path(n, "/garply/quux/bar", NULL, NULL); r3_tree_insert_path(n, "/garply/quux/bar", NULL);
r3_tree_insert_path(n, "/garply/quux/baz", NULL, NULL); r3_tree_insert_path(n, "/garply/quux/baz", NULL);
r3_tree_insert_path(n, "/garply/quux/qux", NULL, NULL); r3_tree_insert_path(n, "/garply/quux/qux", NULL);
r3_tree_insert_path(n, "/garply/quux/corge", NULL, NULL); r3_tree_insert_path(n, "/garply/quux/corge", NULL);
r3_tree_insert_path(n, "/garply/quux/grault", NULL, NULL); r3_tree_insert_path(n, "/garply/quux/grault", NULL);
r3_tree_insert_path(n, "/garply/corge/foo", NULL, NULL); r3_tree_insert_path(n, "/garply/corge/foo", NULL);
r3_tree_insert_path(n, "/garply/corge/bar", NULL, NULL); r3_tree_insert_path(n, "/garply/corge/bar", NULL);
r3_tree_insert_path(n, "/garply/corge/baz", NULL, NULL); r3_tree_insert_path(n, "/garply/corge/baz", NULL);
r3_tree_insert_path(n, "/garply/corge/qux", NULL, NULL); r3_tree_insert_path(n, "/garply/corge/qux", NULL);
r3_tree_insert_path(n, "/garply/corge/quux", NULL, NULL); r3_tree_insert_path(n, "/garply/corge/quux", NULL);
r3_tree_insert_path(n, "/garply/corge/grault", NULL, NULL); r3_tree_insert_path(n, "/garply/corge/grault", NULL);
r3_tree_insert_path(n, "/garply/grault/foo", NULL, NULL); r3_tree_insert_path(n, "/garply/grault/foo", NULL);
r3_tree_insert_path(n, "/garply/grault/bar", NULL, NULL); r3_tree_insert_path(n, "/garply/grault/bar", NULL);
r3_tree_insert_path(n, "/garply/grault/baz", NULL, NULL); r3_tree_insert_path(n, "/garply/grault/baz", NULL);
r3_tree_insert_path(n, "/garply/grault/qux", NULL, NULL); r3_tree_insert_path(n, "/garply/grault/qux", NULL);
r3_tree_insert_path(n, "/garply/grault/quux", NULL, NULL); r3_tree_insert_path(n, "/garply/grault/quux", NULL);
r3_tree_insert_path(n, "/garply/grault/corge", NULL, NULL); r3_tree_insert_path(n, "/garply/grault/corge", NULL);
r3_tree_compile(n); r3_tree_compile(n);