1f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath#include <string.h>
2f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath
3f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath#include <marisa.h>
4f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath
5f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath#include "assert.h"
6f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath
7f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamathvoid TestHandle(void) {
8f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath  marisa_trie *trie = NULL;
9f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath
10f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath  TEST_START();
11f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath
12f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath  ASSERT(marisa_init(&trie) == MARISA_OK);
13f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath  ASSERT(marisa_init(&trie) == MARISA_HANDLE_ERROR);
14f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath  ASSERT(marisa_end(trie) == MARISA_OK);
15f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath  ASSERT(marisa_end(NULL) == MARISA_HANDLE_ERROR);
16f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath
17f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath  ASSERT(marisa_build(NULL, NULL, 0, NULL, NULL, NULL, 0) ==
18f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath      MARISA_HANDLE_ERROR);
19f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath
20f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath  ASSERT(marisa_mmap(NULL, NULL, 0, 0) == MARISA_HANDLE_ERROR);
21f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath  ASSERT(marisa_map(NULL, NULL, 0) == MARISA_HANDLE_ERROR);
22f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath
23f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath  ASSERT(marisa_load(NULL, NULL, 0, 0) == MARISA_HANDLE_ERROR);
24f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath  ASSERT(marisa_fread(NULL, NULL) == MARISA_HANDLE_ERROR);
25f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath  ASSERT(marisa_read(NULL, 0) == MARISA_HANDLE_ERROR);
26f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath
27f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath  ASSERT(marisa_save(NULL, NULL, 0, 0, 0) == MARISA_HANDLE_ERROR);
28f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath  ASSERT(marisa_fwrite(NULL, NULL) == MARISA_HANDLE_ERROR);
29f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath  ASSERT(marisa_write(NULL, 0) == MARISA_HANDLE_ERROR);
30f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath
31f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath  ASSERT(marisa_restore(NULL, 0, NULL, 0, NULL) == MARISA_HANDLE_ERROR);
32f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath
33f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath  ASSERT(marisa_lookup(NULL, NULL, 0, NULL) == MARISA_HANDLE_ERROR);
34f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath
35f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath  ASSERT(marisa_find(NULL, NULL, 0, NULL, NULL, 0, NULL) ==
36f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath      MARISA_HANDLE_ERROR);
37f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath  ASSERT(marisa_find_first(NULL, NULL, 0, NULL, NULL) == MARISA_HANDLE_ERROR);
38f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath  ASSERT(marisa_find_last(NULL, NULL, 0, NULL, NULL) == MARISA_HANDLE_ERROR);
39f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath  ASSERT(marisa_find_callback(NULL, NULL, 0, NULL, NULL) ==
40f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath      MARISA_HANDLE_ERROR);
41f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath
42f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath  ASSERT(marisa_predict(NULL, NULL, 0, NULL, 0, NULL) == MARISA_HANDLE_ERROR);
43f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath  ASSERT(marisa_predict_breadth_first(NULL, NULL, 0, NULL, 0, NULL) ==
44f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath      MARISA_HANDLE_ERROR);
45f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath  ASSERT(marisa_predict_depth_first(NULL, NULL, 0, NULL, 0, NULL) ==
46f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath      MARISA_HANDLE_ERROR);
47f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath  ASSERT(marisa_predict_callback(NULL, NULL, 0, NULL, NULL) ==
48f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath      MARISA_HANDLE_ERROR);
49f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath
50f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath  ASSERT(marisa_get_num_tries(NULL) == 0);
51f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath  ASSERT(marisa_get_num_keys(NULL) == 0);
52f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath  ASSERT(marisa_get_num_nodes(NULL) == 0);
53f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath  ASSERT(marisa_get_total_size(NULL) == 0);
54f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath
55f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath  ASSERT(marisa_clear(NULL) == MARISA_HANDLE_ERROR);
56f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath
57f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath  TEST_END();
58f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath}
59f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath
60f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamathint callback_for_find(void *num_keys,
61f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath    marisa_uint32 key_id, size_t key_length) {
62f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath  ASSERT(*(size_t *)num_keys == 0);
63f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath  ASSERT(key_id == 1);
64f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath  ASSERT(key_length == 3);
65f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath  ++*(size_t *)num_keys;
66f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath  return 1;
67f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath}
68f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath
69f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamathint callback_for_predict(void *num_keys,
70f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath    marisa_uint32 key_id, const char *key, size_t key_length) {
71f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath  ASSERT(*(size_t *)num_keys < 2);
72f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath  switch (*(size_t *)num_keys) {
73f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath    case 0: {
74f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath      ASSERT(key_id == 0);
75f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath      ASSERT(key_length == 3);
76f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath      ASSERT(strcmp(key, "app") == 0);
77f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath      break;
78f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath    }
79f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath    case 1: {
80f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath      ASSERT(key_id == 3);
81f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath      ASSERT(key_length == 5);
82f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath      ASSERT(strcmp(key, "apple") == 0);
83f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath      break;
84f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath    }
85f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath  }
86f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath  ++*(size_t *)num_keys;
87f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath  return 1;
88f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath}
89f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath
90f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamathvoid TestTrie() {
91f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath  marisa_trie *trie = NULL;
92f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath  const char *keys[8];
93f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath  marisa_uint32 key_ids[8];
94f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath  size_t i;
95f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath  char key_buf[16];
96f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath  size_t key_length;
97f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath  marisa_uint32 key_id;
98f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath  marisa_uint32 found_key_ids[8];
99f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath  size_t found_key_lengths[8];
100f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath  size_t num_found_keys;
101f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath
102f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath  TEST_START();
103f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath
104f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath  ASSERT(marisa_init(&trie) == MARISA_OK);
105f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath
106f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath  ASSERT(marisa_get_num_tries(trie) == 0);
107f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath  ASSERT(marisa_get_num_keys(trie) == 0);
108f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath  ASSERT(marisa_get_num_nodes(trie) == 0);
109f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath  ASSERT(marisa_get_total_size(trie) == (sizeof(marisa_uint32) * 23));
110f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath
111f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath  ASSERT(marisa_build(trie, NULL, 0, NULL, NULL, NULL, 0) == MARISA_OK);
112f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath
113f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath  ASSERT(marisa_get_num_tries(trie) == 1);
114f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath  ASSERT(marisa_get_num_keys(trie) == 0);
115f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath  ASSERT(marisa_get_num_nodes(trie) == 1);
116f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath
117f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath  keys[0] = "apple";
118f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath  keys[1] = "and";
119f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath  keys[2] = "Bad";
120f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath  keys[3] = "apple";
121f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath  keys[4] = "app";
122f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath
123f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath  ASSERT(marisa_build(trie, keys, 5, NULL, NULL, key_ids,
124f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath      1 | MARISA_WITHOUT_TAIL | MARISA_LABEL_ORDER) == MARISA_OK);
125f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath
126f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath  ASSERT(marisa_get_num_tries(trie) == 1);
127f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath  ASSERT(marisa_get_num_keys(trie) == 4);
128f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath  ASSERT(marisa_get_num_nodes(trie) == 11);
129f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath
130f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath  ASSERT(key_ids[0] == 3);
131f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath  ASSERT(key_ids[1] == 1);
132f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath  ASSERT(key_ids[2] == 0);
133f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath  ASSERT(key_ids[3] == 3);
134f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath  ASSERT(key_ids[4] == 2);
135f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath
136f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath  for (i = 0; i < marisa_get_num_tries(trie); ++i) {
137f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath    ASSERT(marisa_restore(trie,
138f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath        key_ids[i], key_buf, sizeof(key_buf), &key_length) == MARISA_OK);
139f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath    ASSERT(key_length == strlen(keys[i]));
140f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath    ASSERT(strcmp(key_buf, keys[i]) == 0);
141f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath
142f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath    ASSERT(marisa_lookup(trie,
143f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath        keys[i], MARISA_ZERO_TERMINATED, &key_id) == MARISA_OK);
144f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath    ASSERT(key_id == key_ids[i]);
145f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath
146f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath    ASSERT(marisa_lookup(trie,
147f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath        keys[i], strlen(keys[i]), &key_id) == MARISA_OK);
148f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath    ASSERT(key_id == key_ids[i]);
149f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath  }
150f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath
151f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath  ASSERT(marisa_clear(trie) == MARISA_OK);
152f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath
153f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath  ASSERT(marisa_get_num_tries(trie) == 0);
154f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath  ASSERT(marisa_get_num_keys(trie) == 0);
155f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath  ASSERT(marisa_get_num_nodes(trie) == 0);
156f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath  ASSERT(marisa_get_total_size(trie) == (sizeof(marisa_uint32) * 23));
157f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath
158f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath  ASSERT(marisa_build(trie, keys, 5, NULL, NULL, key_ids,
159f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath      1 | MARISA_WITHOUT_TAIL | MARISA_WEIGHT_ORDER) == MARISA_OK);
160f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath
161f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath  ASSERT(marisa_get_num_tries(trie) == 1);
162f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath  ASSERT(marisa_get_num_keys(trie) == 4);
163f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath  ASSERT(marisa_get_num_nodes(trie) == 11);
164f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath
165f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath  ASSERT(key_ids[0] == 3);
166f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath  ASSERT(key_ids[1] == 1);
167f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath  ASSERT(key_ids[2] == 2);
168f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath  ASSERT(key_ids[3] == 3);
169f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath  ASSERT(key_ids[4] == 0);
170f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath
171f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath  ASSERT(marisa_find(trie, "ap", MARISA_ZERO_TERMINATED,
172f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath      found_key_ids, found_key_lengths, 8, &num_found_keys) == MARISA_OK);
173f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath  ASSERT(num_found_keys == 0);
174f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath
175f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath  ASSERT(marisa_find(trie, "applex", MARISA_ZERO_TERMINATED,
176f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath      found_key_ids, found_key_lengths, 8, &num_found_keys) == MARISA_OK);
177f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath  ASSERT(num_found_keys == 2);
178f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath  ASSERT(found_key_ids[0] == key_ids[4]);
179f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath  ASSERT(found_key_lengths[0] == 3);
180f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath  ASSERT(found_key_ids[1] == key_ids[0]);
181f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath  ASSERT(found_key_lengths[1] == 5);
182f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath
183f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath  num_found_keys = 0;
184f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath  ASSERT(marisa_find_callback(trie, "anderson", MARISA_ZERO_TERMINATED,
185f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath      callback_for_find, &num_found_keys) == MARISA_OK);
186f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath  ASSERT(num_found_keys == 1);
187f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath
188f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath  ASSERT(marisa_predict(trie, "a", MARISA_ZERO_TERMINATED,
189f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath      found_key_ids, 8, &num_found_keys) == MARISA_OK);
190f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath  ASSERT(num_found_keys == 3);
191f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath  ASSERT(found_key_ids[0] == key_ids[4]);
192f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath  ASSERT(found_key_ids[1] == key_ids[1]);
193f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath  ASSERT(found_key_ids[2] == key_ids[0]);
194f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath
195f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath  num_found_keys = 0;
196f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath  ASSERT(marisa_predict_callback(trie, "app", MARISA_ZERO_TERMINATED,
197f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath      callback_for_predict, &num_found_keys) == MARISA_OK);
198f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath
199f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath  ASSERT(marisa_end(trie) == MARISA_OK);
200f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath
201f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath  TEST_END();
202f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath}
203f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath
204f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamathint main(void) {
205f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath  TestHandle();
206f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath  TestTrie();
207f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath
208f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath  return 0;
209f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath}
210