]>
git.saurik.com Git - apt.git/blob - triehash/tests/test-multi-byte-level
2 .
$(dirname $(readlink -f $0))/framework.sh
4 # Check that building a single-byte trie works
6 ┌────────────────────────────────────────────────────┐
8 └────────────────────────────────────────────────────┘
19 │ │ │ │ │ │ │ │ │ ├── o
20 │ │ │ │ │ │ │ │ │ │ ├── r
21 │ │ │ │ │ │ │ │ │ │ │ ├── d → VeryLongWord
28 │ │ │ │ │ │ ├── 0 → Word-_0
30 ┌────────────────────────────────────────────────────┐
32 └────────────────────────────────────────────────────┘
43 │ │ │ │ │ │ │ │ │ ├── o
44 │ │ │ │ │ │ │ │ │ │ ├── r
45 │ │ │ │ │ │ │ │ │ │ │ ├── d → VeryLongWord
52 │ │ │ │ │ │ ├── 0 → Word-_0
54 ┌────────────────────────────────────────────────────┐
55 │ Trie for words of length 4 │
56 └────────────────────────────────────────────────────┘
62 ┌────────────────────────────────────────────────────┐
63 │ Trie for words of length 5 │
64 └────────────────────────────────────────────────────┘
71 ┌────────────────────────────────────────────────────┐
72 │ Trie for words of length 7 │
73 └────────────────────────────────────────────────────┘
81 │ │ │ │ │ │ ├── 0 → Word-_0
82 ┌────────────────────────────────────────────────────┐
83 │ Trie for words of length 12 │
84 └────────────────────────────────────────────────────┘
95 │ │ │ │ │ │ │ │ │ ├── o
96 │ │ │ │ │ │ │ │ │ │ ├── r
97 │ │ │ │ │ │ │ │ │ │ │ ├── d → VeryLongWord" triehash
--multi-byte=0 -l tree
/dev
/stdin
99 # Two byte optimization
101 ┌────────────────────────────────────────────────────┐
103 └────────────────────────────────────────────────────┘
110 │ │ │ │ │ ├── rd → VeryLongWord
114 │ │ │ ├── 0 → Word-_0
116 ┌────────────────────────────────────────────────────┐
118 └────────────────────────────────────────────────────┘
125 │ │ │ │ │ ├── rd → VeryLongWord
129 │ │ │ ├── _0 → Word-_0
131 ┌────────────────────────────────────────────────────┐
132 │ Trie for words of length 4 │
133 └────────────────────────────────────────────────────┘
137 ┌────────────────────────────────────────────────────┐
138 │ Trie for words of length 5 │
139 └────────────────────────────────────────────────────┘
144 ┌────────────────────────────────────────────────────┐
145 │ Trie for words of length 7 │
146 └────────────────────────────────────────────────────┘
151 │ │ │ ├── 0 → Word-_0
152 ┌────────────────────────────────────────────────────┐
153 │ Trie for words of length 12 │
154 └────────────────────────────────────────────────────┘
161 │ │ │ │ │ ├── rd → VeryLongWord" triehash
--multi-byte=1 -l tree
/dev
/stdin
162 # Four byte optimization
164 ┌────────────────────────────────────────────────────┐
166 └────────────────────────────────────────────────────┘
170 │ │ ├── Word → VeryLongWord
174 │ │ │ ├── 0 → Word-_0
176 ┌────────────────────────────────────────────────────┐
178 └────────────────────────────────────────────────────┘
182 │ │ ├── Word → VeryLongWord
186 │ │ │ ├── 0 → Word-_0
188 ┌────────────────────────────────────────────────────┐
189 │ Trie for words of length 4 │
190 └────────────────────────────────────────────────────┘
193 ┌────────────────────────────────────────────────────┐
194 │ Trie for words of length 5 │
195 └────────────────────────────────────────────────────┘
199 ┌────────────────────────────────────────────────────┐
200 │ Trie for words of length 7 │
201 └────────────────────────────────────────────────────┘
206 │ │ │ ├── 0 → Word-_0
207 ┌────────────────────────────────────────────────────┐
208 │ Trie for words of length 12 │
209 └────────────────────────────────────────────────────┘
213 │ │ ├── Word → VeryLongWord" triehash
--multi-byte=2 -l tree
/dev
/stdin
214 # Eigh byte optimization
216 ┌────────────────────────────────────────────────────┐
218 └────────────────────────────────────────────────────┘
224 │ │ │ │ ├── d → VeryLongWord
231 │ │ │ │ │ │ ├── 0 → Word-_0
232 │ │ │ │ ├── 2 → Label
233 ┌────────────────────────────────────────────────────┐
235 └────────────────────────────────────────────────────┘
241 │ │ │ │ ├── d → VeryLongWord
248 │ │ │ │ │ │ ├── 0 → Word-_0
249 │ │ │ │ ├── 2 → Label
250 ┌────────────────────────────────────────────────────┐
251 │ Trie for words of length 4 │
252 └────────────────────────────────────────────────────┘
258 ┌────────────────────────────────────────────────────┐
259 │ Trie for words of length 5 │
260 └────────────────────────────────────────────────────┘
266 │ │ │ │ ├── 2 → Label
267 ┌────────────────────────────────────────────────────┐
268 │ Trie for words of length 7 │
269 └────────────────────────────────────────────────────┘
277 │ │ │ │ │ │ ├── 0 → Word-_0
278 ┌────────────────────────────────────────────────────┐
279 │ Trie for words of length 12 │
280 └────────────────────────────────────────────────────┘
286 │ │ │ │ ├── d → VeryLongWord" triehash
--multi-byte=3 -l tree
/dev
/stdin
289 # Check that building a multi-byte trie works
291 ┌────────────────────────────────────────────────────┐
293 └────────────────────────────────────────────────────┘
296 │ ├── Word → VeryLongWord
300 │ │ │ ├── 0 → Word-_0
302 ┌────────────────────────────────────────────────────┐
304 └────────────────────────────────────────────────────┘
307 │ ├── LongWord → VeryLongWord
311 │ │ │ ├── 0 → Word-_0
313 ┌────────────────────────────────────────────────────┐
314 │ Trie for words of length 4 │
315 └────────────────────────────────────────────────────┘
318 ┌────────────────────────────────────────────────────┐
319 │ Trie for words of length 5 │
320 └────────────────────────────────────────────────────┘
324 ┌────────────────────────────────────────────────────┐
325 │ Trie for words of length 7 │
326 └────────────────────────────────────────────────────┘
331 │ │ │ ├── 0 → Word-_0
332 ┌────────────────────────────────────────────────────┐
333 │ Trie for words of length 12 │
334 └────────────────────────────────────────────────────┘
337 │ ├── Word → VeryLongWord" triehash
-l tree
/dev
/stdin
340 ###### CHANGE THE WORDS FOR THE FOLLOWING TESTS #######
343 # Check that we are generating the proper multi-byte and fallback sessions
344 testsuccessequal
"#include \"/dev/null\"
346 typedef uint16_t __attribute__((aligned (1))) triehash_uu16;
347 typedef char static_assert16[__alignof__(triehash_uu16) == 1 ? 1 : -1];
348 typedef uint32_t __attribute__((aligned (1))) triehash_uu32;
349 typedef char static_assert32[__alignof__(triehash_uu32) == 1 ? 1 : -1];
350 typedef uint64_t __attribute__((aligned (1))) triehash_uu64;
351 typedef char static_assert64[__alignof__(triehash_uu64) == 1 ? 1 : -1];
352 #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
353 #define onechar(c, s, l) (((uint64_t)(c)) << (s))
355 #define onechar(c, s, l) (((uint64_t)(c)) << (l-8-s))
357 #if (!defined(__ARM_ARCH) || defined(__ARM_FEATURE_UNALIGNED)) && !defined(TRIE_HASH_NO_MULTI_BYTE)
358 #define TRIE_HASH_MULTI_BYTE
361 #ifdef TRIE_HASH_MULTI_BYTE
362 static enum PerfectKey PerfectHash4(const char *string)
364 switch(*((triehash_uu32*) &string[0])) {
365 case 0| onechar('W', 0, 32)| onechar('o', 8, 32)| onechar('r', 16, 32)| onechar('d', 24, 32):
371 static enum PerfectKey PerfectHash4(const char *string)
388 #endif /* TRIE_HASH_MULTI_BYTE */
389 enum PerfectKey PerfectHash(const char *string, size_t length)
393 return PerfectHash4(string);
397 }" triehash
-H /dev
/null
/dev
/stdin
400 # Check that we are generating no multi-byte session
401 testsuccessequal
"#include \"/dev/null\"
402 static enum PerfectKey PerfectHash4(const char *string)
419 enum PerfectKey PerfectHash(const char *string, size_t length)
423 return PerfectHash4(string);
427 }" triehash
--multi-byte=0 -H /dev
/null
/dev
/stdin