1b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak#include <string.h>
2b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak
3b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak#include <marisa_alpha.h>
4b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak
5b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak#include "assert.h"
6b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak
7b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniakvoid TestHandle(void) {
8b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak  marisa_alpha_trie *trie = NULL;
9b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak
10b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak  TEST_START();
11b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak
12b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak  ASSERT(marisa_alpha_init(&trie) == MARISA_ALPHA_OK);
13b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak  ASSERT(marisa_alpha_init(&trie) == MARISA_ALPHA_HANDLE_ERROR);
14b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak  ASSERT(marisa_alpha_end(trie) == MARISA_ALPHA_OK);
15b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak  ASSERT(marisa_alpha_end(NULL) == MARISA_ALPHA_HANDLE_ERROR);
16b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak
17b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak  ASSERT(marisa_alpha_build(NULL, NULL, 0, NULL, NULL, NULL, 0) ==
18b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak      MARISA_ALPHA_HANDLE_ERROR);
19b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak
20b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak  ASSERT(marisa_alpha_mmap(NULL, NULL, 0, 0) == MARISA_ALPHA_HANDLE_ERROR);
21b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak  ASSERT(marisa_alpha_map(NULL, NULL, 0) == MARISA_ALPHA_HANDLE_ERROR);
22b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak
23b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak  ASSERT(marisa_alpha_load(NULL, NULL, 0, 0) == MARISA_ALPHA_HANDLE_ERROR);
24b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak  ASSERT(marisa_alpha_fread(NULL, NULL) == MARISA_ALPHA_HANDLE_ERROR);
25b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak  ASSERT(marisa_alpha_read(NULL, 0) == MARISA_ALPHA_HANDLE_ERROR);
26b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak
27b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak  ASSERT(marisa_alpha_save(NULL, NULL, 0, 0, 0) == MARISA_ALPHA_HANDLE_ERROR);
28b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak  ASSERT(marisa_alpha_fwrite(NULL, NULL) == MARISA_ALPHA_HANDLE_ERROR);
29b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak  ASSERT(marisa_alpha_write(NULL, 0) == MARISA_ALPHA_HANDLE_ERROR);
30b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak
31b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak  ASSERT(marisa_alpha_restore(NULL, 0, NULL, 0, NULL) ==
32b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak      MARISA_ALPHA_HANDLE_ERROR);
33b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak
34b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak  ASSERT(marisa_alpha_lookup(NULL, NULL, 0, NULL) ==
35b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak      MARISA_ALPHA_HANDLE_ERROR);
36b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak
37b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak  ASSERT(marisa_alpha_find(NULL, NULL, 0, NULL, NULL, 0, NULL) ==
38b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak      MARISA_ALPHA_HANDLE_ERROR);
39b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak  ASSERT(marisa_alpha_find_first(NULL, NULL, 0, NULL, NULL) ==
40b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak      MARISA_ALPHA_HANDLE_ERROR);
41b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak  ASSERT(marisa_alpha_find_last(NULL, NULL, 0, NULL, NULL) ==
42b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak      MARISA_ALPHA_HANDLE_ERROR);
43b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak  ASSERT(marisa_alpha_find_callback(NULL, NULL, 0, NULL, NULL) ==
44b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak      MARISA_ALPHA_HANDLE_ERROR);
45b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak
46b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak  ASSERT(marisa_alpha_predict(NULL, NULL, 0, NULL, 0, NULL) ==
47b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak      MARISA_ALPHA_HANDLE_ERROR);
48b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak  ASSERT(marisa_alpha_predict_breadth_first(NULL, NULL, 0, NULL, 0, NULL) ==
49b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak      MARISA_ALPHA_HANDLE_ERROR);
50b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak  ASSERT(marisa_alpha_predict_depth_first(NULL, NULL, 0, NULL, 0, NULL) ==
51b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak      MARISA_ALPHA_HANDLE_ERROR);
52b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak  ASSERT(marisa_alpha_predict_callback(NULL, NULL, 0, NULL, NULL) ==
53b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak      MARISA_ALPHA_HANDLE_ERROR);
54b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak
55b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak  ASSERT(marisa_alpha_get_num_tries(NULL) == 0);
56b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak  ASSERT(marisa_alpha_get_num_keys(NULL) == 0);
57b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak  ASSERT(marisa_alpha_get_num_nodes(NULL) == 0);
58b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak  ASSERT(marisa_alpha_get_total_size(NULL) == 0);
59b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak
60b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak  ASSERT(marisa_alpha_clear(NULL) == MARISA_ALPHA_HANDLE_ERROR);
61b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak
62b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak  TEST_END();
63b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak}
64b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak
65b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniakint callback_for_find(void *num_keys,
66b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak    marisa_alpha_uint32 key_id, size_t key_length) {
67b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak  ASSERT(*(size_t *)num_keys == 0);
68b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak  ASSERT(key_id == 1);
69b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak  ASSERT(key_length == 3);
70b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak  ++*(size_t *)num_keys;
71b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak  return 1;
72b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak}
73b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak
74b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniakint callback_for_predict(void *num_keys,
75b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak    marisa_alpha_uint32 key_id, const char *key, size_t key_length) {
76b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak  ASSERT(*(size_t *)num_keys < 2);
77b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak  switch (*(size_t *)num_keys) {
78b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak    case 0: {
79b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak      ASSERT(key_id == 0);
80b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak      ASSERT(key_length == 3);
81b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak      ASSERT(strcmp(key, "app") == 0);
82b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak      break;
83b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak    }
84b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak    case 1: {
85b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak      ASSERT(key_id == 3);
86b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak      ASSERT(key_length == 5);
87b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak      ASSERT(strcmp(key, "apple") == 0);
88b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak      break;
89b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak    }
90b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak  }
91b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak  ++*(size_t *)num_keys;
92b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak  return 1;
93b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak}
94b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak
95b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniakvoid TestTrie() {
96b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak  marisa_alpha_trie *trie = NULL;
97b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak  const char *keys[8];
98b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak  marisa_alpha_uint32 key_ids[8];
99b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak  size_t i;
100b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak  char key_buf[16];
101b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak  size_t key_length;
102b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak  marisa_alpha_uint32 key_id;
103b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak  marisa_alpha_uint32 found_key_ids[8];
104b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak  size_t found_key_lengths[8];
105b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak  size_t num_found_keys;
106b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak
107b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak  TEST_START();
108b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak
109b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak  ASSERT(marisa_alpha_init(&trie) == MARISA_ALPHA_OK);
110b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak
111b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak  ASSERT(marisa_alpha_get_num_tries(trie) == 0);
112b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak  ASSERT(marisa_alpha_get_num_keys(trie) == 0);
113b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak  ASSERT(marisa_alpha_get_num_nodes(trie) == 0);
114b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak  ASSERT(marisa_alpha_get_total_size(trie) ==
115b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak      (sizeof(marisa_alpha_uint32) * 23));
116b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak
117b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak  ASSERT(marisa_alpha_build(trie, NULL, 0, NULL, NULL, NULL, 0) ==
118b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak      MARISA_ALPHA_OK);
119b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak
120b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak  ASSERT(marisa_alpha_get_num_tries(trie) == 1);
121b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak  ASSERT(marisa_alpha_get_num_keys(trie) == 0);
122b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak  ASSERT(marisa_alpha_get_num_nodes(trie) == 1);
123b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak
124b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak  keys[0] = "apple";
125b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak  keys[1] = "and";
126b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak  keys[2] = "Bad";
127b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak  keys[3] = "apple";
128b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak  keys[4] = "app";
129b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak
130b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak  ASSERT(marisa_alpha_build(trie, keys, 5, NULL, NULL, key_ids,
131b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak      1 | MARISA_ALPHA_WITHOUT_TAIL | MARISA_ALPHA_LABEL_ORDER) ==
132b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak      MARISA_ALPHA_OK);
133b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak
134b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak  ASSERT(marisa_alpha_get_num_tries(trie) == 1);
135b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak  ASSERT(marisa_alpha_get_num_keys(trie) == 4);
136b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak  ASSERT(marisa_alpha_get_num_nodes(trie) == 11);
137b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak
138b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak  ASSERT(key_ids[0] == 3);
139b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak  ASSERT(key_ids[1] == 1);
140b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak  ASSERT(key_ids[2] == 0);
141b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak  ASSERT(key_ids[3] == 3);
142b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak  ASSERT(key_ids[4] == 2);
143b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak
144b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak  for (i = 0; i < marisa_alpha_get_num_tries(trie); ++i) {
145b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak    ASSERT(marisa_alpha_restore(trie,
146b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak        key_ids[i], key_buf, sizeof(key_buf), &key_length) == MARISA_ALPHA_OK);
147b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak    ASSERT(key_length == strlen(keys[i]));
148b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak    ASSERT(strcmp(key_buf, keys[i]) == 0);
149b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak
150b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak    ASSERT(marisa_alpha_lookup(trie,
151b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak        keys[i], MARISA_ALPHA_ZERO_TERMINATED, &key_id) == MARISA_ALPHA_OK);
152b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak    ASSERT(key_id == key_ids[i]);
153b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak
154b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak    ASSERT(marisa_alpha_lookup(trie,
155b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak        keys[i], strlen(keys[i]), &key_id) == MARISA_ALPHA_OK);
156b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak    ASSERT(key_id == key_ids[i]);
157b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak  }
158b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak
159b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak  ASSERT(marisa_alpha_clear(trie) == MARISA_ALPHA_OK);
160b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak
161b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak  ASSERT(marisa_alpha_get_num_tries(trie) == 0);
162b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak  ASSERT(marisa_alpha_get_num_keys(trie) == 0);
163b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak  ASSERT(marisa_alpha_get_num_nodes(trie) == 0);
164b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak  ASSERT(marisa_alpha_get_total_size(trie) ==
165b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak      (sizeof(marisa_alpha_uint32) * 23));
166b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak
167b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak  ASSERT(marisa_alpha_build(trie, keys, 5, NULL, NULL, key_ids,
168b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak      1 | MARISA_ALPHA_WITHOUT_TAIL | MARISA_ALPHA_WEIGHT_ORDER) ==
169b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak      MARISA_ALPHA_OK);
170b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak
171b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak  ASSERT(marisa_alpha_get_num_tries(trie) == 1);
172b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak  ASSERT(marisa_alpha_get_num_keys(trie) == 4);
173b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak  ASSERT(marisa_alpha_get_num_nodes(trie) == 11);
174b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak
175b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak  ASSERT(key_ids[0] == 3);
176b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak  ASSERT(key_ids[1] == 1);
177b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak  ASSERT(key_ids[2] == 2);
178b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak  ASSERT(key_ids[3] == 3);
179b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak  ASSERT(key_ids[4] == 0);
180b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak
181b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak  ASSERT(marisa_alpha_find(trie, "ap", MARISA_ALPHA_ZERO_TERMINATED,
182b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak      found_key_ids, found_key_lengths, 8, &num_found_keys) ==
183b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak      MARISA_ALPHA_OK);
184b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak  ASSERT(num_found_keys == 0);
185b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak
186b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak  ASSERT(marisa_alpha_find(trie, "applex", MARISA_ALPHA_ZERO_TERMINATED,
187b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak      found_key_ids, found_key_lengths, 8, &num_found_keys) ==
188b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak      MARISA_ALPHA_OK);
189b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak  ASSERT(num_found_keys == 2);
190b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak  ASSERT(found_key_ids[0] == key_ids[4]);
191b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak  ASSERT(found_key_lengths[0] == 3);
192b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak  ASSERT(found_key_ids[1] == key_ids[0]);
193b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak  ASSERT(found_key_lengths[1] == 5);
194b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak
195b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak  num_found_keys = 0;
196b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak  ASSERT(marisa_alpha_find_callback(trie, "anderson",
197b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak      MARISA_ALPHA_ZERO_TERMINATED,
198b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak      callback_for_find, &num_found_keys) == MARISA_ALPHA_OK);
199b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak  ASSERT(num_found_keys == 1);
200b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak
201b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak  ASSERT(marisa_alpha_predict(trie, "a", MARISA_ALPHA_ZERO_TERMINATED,
202b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak      found_key_ids, 8, &num_found_keys) == MARISA_ALPHA_OK);
203b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak  ASSERT(num_found_keys == 3);
204b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak  ASSERT(found_key_ids[0] == key_ids[4]);
205b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak  ASSERT(found_key_ids[1] == key_ids[1]);
206b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak  ASSERT(found_key_ids[2] == key_ids[0]);
207b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak
208b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak  num_found_keys = 0;
209b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak  ASSERT(marisa_alpha_predict_callback(trie, "app",
210b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak      MARISA_ALPHA_ZERO_TERMINATED,
211b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak      callback_for_predict, &num_found_keys) == MARISA_ALPHA_OK);
212b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak
213b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak  ASSERT(marisa_alpha_end(trie) == MARISA_ALPHA_OK);
214b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak
215b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak  TEST_END();
216b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak}
217b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak
218b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniakint main(void) {
219b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak  TestHandle();
220b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak  TestTrie();
221b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak
222b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak  return 0;
223b4acd09676fe12e9d95b2a5f3f742e9a1a0483b1Przemyslaw Szczepaniak}
224