2 * test-treap.c: code to exercise the svn importer's treap structure
6 #include "vcs-svn/obj_pool.h"
7 #include "vcs-svn/trp.h"
11 struct trp_node children
;
14 obj_pool_gen(node
, struct int_node
, 3)
16 static int node_cmp(struct int_node
*a
, struct int_node
*b
)
18 return (a
->n
> b
->n
) - (a
->n
< b
->n
);
21 trp_gen(static, treap_
, struct int_node
, children
, node
, node_cmp
)
23 static void strtonode(struct int_node
*item
, const char *s
)
26 item
->n
= strtoumax(s
, &end
, 10);
27 if (*s
== '\0' || (*end
!= '\n' && *end
!= '\0'))
28 die("invalid integer: %s", s
);
31 int main(int argc
, char *argv
[])
33 struct strbuf sb
= STRBUF_INIT
;
34 struct trp_root root
= { ~0 };
38 usage("test-treap < ints");
40 while (strbuf_getline(&sb
, stdin
, '\n') != EOF
) {
42 strtonode(node_pointer(item
), sb
.buf
);
43 treap_insert(&root
, node_pointer(item
));
46 item
= node_offset(treap_first(&root
));
49 struct int_node
*tmp
= node_pointer(node_alloc(1));
51 tmp
->n
= node_pointer(item
)->n
;
52 next
= node_offset(treap_next(&root
, node_pointer(item
)));
54 treap_remove(&root
, node_pointer(item
));
55 item
= node_offset(treap_nsearch(&root
, tmp
));
57 if (item
!= next
&& (!~item
|| node_pointer(item
)->n
!= tmp
->n
))
58 die("found %"PRIuMAX
" in place of %"PRIuMAX
"",
59 ~item
? node_pointer(item
)->n
: ~(uintmax_t) 0,
60 ~next
? node_pointer(next
)->n
: ~(uintmax_t) 0);
61 printf("%"PRIuMAX
"\n", tmp
->n
);