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) {
 
  41                 struct int_node *node = node_pointer(node_alloc(1));
 
  43                 item = node_offset(node);
 
  44                 strtonode(node, sb.buf);
 
  45                 node = treap_insert(&root, node_pointer(item));
 
  46                 if (node_offset(node) != item)
 
  47                         die("inserted %"PRIu32" in place of %"PRIu32"",
 
  48                                 node_offset(node), item);
 
  51         item = node_offset(treap_first(&root));
 
  54                 struct int_node *tmp = node_pointer(node_alloc(1));
 
  56                 tmp->n = node_pointer(item)->n;
 
  57                 next = node_offset(treap_next(&root, node_pointer(item)));
 
  59                 treap_remove(&root, node_pointer(item));
 
  60                 item = node_offset(treap_nsearch(&root, tmp));
 
  62                 if (item != next && (!~item || node_pointer(item)->n != tmp->n))
 
  63                         die("found %"PRIuMAX" in place of %"PRIuMAX"",
 
  64                                 ~item ? node_pointer(item)->n : ~(uintmax_t) 0,
 
  65                                 ~next ? node_pointer(next)->n : ~(uintmax_t) 0);
 
  66                 printf("%"PRIuMAX"\n", tmp->n);