trie.c (1775B)
1 #define HEADER_IMPL 2 #include "trie.h" 3 4 int 5 main(void) 6 { 7 char buf[8192]; 8 struct arena arena = { .ptr = buf, .cap = sizeof buf, .len = 0, }; 9 10 printf("trie_init()\n"); 11 struct trie_node *root = trie_init(&arena); 12 assert(root); 13 trie_display(root, 0); 14 15 printf("trie_insert(\"foo\")\n"); 16 struct trie_node *foo = trie_insert(&arena, root, "foo", 3); 17 trie_display(root, 0); 18 19 printf("trie_insert(\"for\")\n"); 20 struct trie_node *_for = trie_insert(&arena, root, "for", 3); 21 trie_display(root, 0); 22 23 printf("trie_insert(\"foobar\")\n"); 24 struct trie_node *foobar = trie_insert(&arena, root, "foobar", 6); 25 trie_display(root, 0); 26 27 printf("trie_insert(\"bar\")\n"); 28 struct trie_node *bar = trie_insert(&arena, root, "bar", 3); 29 trie_display(root, 0); 30 31 printf("trie_insert(\"forsen\")\n"); 32 struct trie_node *forsen = trie_insert(&arena, root, "forsen", 6); 33 trie_display(root, 0); 34 35 printf("trie_insert(\"forseen\")\n"); 36 struct trie_node *forseen = trie_insert(&arena, root, "forseen", 7); 37 trie_display(root, 0); 38 39 printf("trie_insert(\"forsee\")\n"); 40 struct trie_node *forsee = trie_insert(&arena, root, "forsee", 6); 41 trie_display(root, 0); 42 43 struct trie_node const *search_result; 44 45 printf("trie_search(\"foo\")\n"); 46 search_result = trie_search(root, "foo", 3); 47 assert(search_result == foo); 48 49 printf("trie_search(\"bar\")\n"); 50 search_result = trie_search(root, "bar", 3); 51 assert(search_result == bar); 52 53 printf("trie_search(\"baz\")\n"); 54 search_result = trie_search(root, "baz", 3); 55 assert(!search_result); 56 57 printf("trie_search(\"forsee\")\n"); 58 search_result = trie_search(root, "forsee", 6); 59 assert(search_result == forsee); 60 61 printf("arena stats: %zu/%zu bytes used, %zu nodes allocated\n", 62 arena.len, arena.cap, arena.len / sizeof *root); 63 64 return 0; 65 }