1 /* $Id: tst-t.c 7262 2005-06-06 04:45:48Z eagle $ */
2 /* Test suite for ternary search tries. */
7 #include "inn/messages.h"
12 /* Used for strings of unsigned characters. */
13 #define U (const unsigned char *)
15 /* An unsigned char version of strlen. */
16 #define ustrlen(s) strlen((const char *) s)
23 unsigned char buffer[1024];
31 char testing[] = "testing";
32 char Strange[] = "Strange";
33 char change[] = "çhange";
39 ok(2, tst_insert(tst, U"test", test, 0, NULL) == TST_OK);
40 ok_string(3, "test", tst_search(tst, U"test"));
41 ok(4, tst_insert(tst, U"test", foo, 0, &existing) == TST_DUPLICATE_KEY);
42 ok_string(5, "test", existing);
43 ok(6, tst_insert(tst, U"test", foo, TST_REPLACE, &existing) == TST_OK);
44 ok_string(7, "test", existing);
45 ok_string(8, "foo", tst_search(tst, U"test"));
46 ok(9, tst_insert(tst, U"testing", testing, 0, NULL) == TST_OK);
47 ok(10, tst_insert(tst, U"t", t, 0, NULL) == TST_OK);
48 ok(11, tst_insert(tst, U"Strange", Strange, 0, NULL) == TST_OK);
49 ok(12, tst_insert(tst, U"çhange", change, 0, NULL) == TST_OK);
50 ok(13, tst_insert(tst, U"", foo, 0, NULL) == TST_NULL_KEY);
51 ok(14, tst_insert(tst, NULL, foo, 0, NULL) == TST_NULL_KEY);
52 ok_string(15, "testing", tst_search(tst, U"testing"));
53 ok_string(16, "t", tst_search(tst, U"t"));
54 ok_string(17, "Strange", tst_search(tst, U"Strange"));
55 ok_string(18, "çhange", tst_search(tst, U"çhange"));
56 ok_string(19, "foo", tst_search(tst, U"test"));
57 ok(20, tst_search(tst, U"") == NULL);
58 ok(21, tst_search(tst, U"Peter") == NULL);
59 ok(22, tst_search(tst, U"foo") == NULL);
60 ok(23, tst_search(tst, U"te") == NULL);
61 ok_string(24, "Strange", tst_delete(tst, U"Strange"));
62 ok(25, tst_search(tst, U"Strange") == NULL);
63 ok_string(26, "t", tst_delete(tst, U"t"));
64 ok(27, tst_search(tst, U"t") == NULL);
65 ok_string(28, "testing", tst_search(tst, U"testing"));
66 ok_string(29, "foo", tst_search(tst, U"test"));
67 ok_string(30, "testing", tst_delete(tst, U"testing"));
68 ok_string(31, "foo", tst_search(tst, U"test"));
69 ok_string(32, "çhange", tst_delete(tst, U"çhange"));
70 ok_string(33, "foo", tst_delete(tst, U"test"));
71 ok(34, tst_search(tst, NULL) == NULL);
72 ok(35, tst_delete(tst, NULL) == NULL);
76 words = fopen("/usr/dict/words", "r");
78 words = fopen("/usr/share/dict/words", "r");
80 puts("ok 37 # skip\nok 38 # skip");
89 while (fgets((char *) buffer, sizeof(buffer), words)) {
90 buffer[ustrlen(buffer) - 1] = '\0';
91 if (buffer[0] == '\0')
93 word = (unsigned char *) xstrdup((char *) buffer);
94 if (tst_insert(tst, buffer, word, 0, NULL) != TST_OK) {
103 if (fseek(words, 0, SEEK_SET) < 0)
104 sysdie("Unable to rewind words file");
109 while (fgets((char *) buffer, sizeof(buffer), words)) {
110 buffer[ustrlen(buffer) - 1] = '\0';
111 if (buffer[0] == '\0')
113 word = tst_search(tst, buffer);
114 if (word == NULL || strcmp((char *) word, buffer) != 0) {
119 word = tst_delete(tst, buffer);
120 if (word == NULL || strcmp((char *) word, buffer) != 0) {