1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
| | #include "test-tool.h"
#include "unique-prefix.h"
static size_t test_count, failed_count;
static void check(int succeeded, const char *file, size_t line_no,
const char *fmt, ...)
{
va_list ap;
test_count++;
if (succeeded)
return;
va_start(ap, fmt);
fprintf(stderr, "%s:%d: ", file, (int)line_no);
vfprintf(stderr, fmt, ap);
fputc('\n', stderr);
va_end(ap);
failed_count++;
}
#define EXPECT_SIZE_T_EQUALS(expect, actual, hint) \
check(expect == actual, __FILE__, __LINE__, \
"size_t's do not match: expected: %" \
PRIdMAX " got: %" PRIdMAX " (%s) (%s)", \
(intmax_t)expect, (intmax_t)actual, #actual, hint)
int cmd__prefix_map(int argc, const char **argv)
{
size_t i;
struct prefix_item items[] = {
{ "unique" },
{ "hell" },
{ "hello" },
{ "wok" },
{ "world" },
{ "a" },
{ "" },
{ "pq" },
{ "pq" },
{ "pqr" },
};
struct prefix_item *list[ARRAY_SIZE(items)];
for (i = 0; i < ARRAY_SIZE(items); i++) {
list[i] = &items[i];
list[i]->prefix_length = 12345; /* dummy */
}
find_unique_prefixes(list, ARRAY_SIZE(list), 1, 3);
#define EXPECT_PREFIX_LENGTH_EQUALS(expect, index) \
EXPECT_SIZE_T_EQUALS(expect, list[index]->prefix_length, \
list[index]->name)
EXPECT_PREFIX_LENGTH_EQUALS(1, 0);
EXPECT_PREFIX_LENGTH_EQUALS(0, 1);
EXPECT_PREFIX_LENGTH_EQUALS(0, 2);
EXPECT_PREFIX_LENGTH_EQUALS(3, 3);
EXPECT_PREFIX_LENGTH_EQUALS(3, 4);
EXPECT_PREFIX_LENGTH_EQUALS(1, 5);
EXPECT_PREFIX_LENGTH_EQUALS(0, 6);
EXPECT_PREFIX_LENGTH_EQUALS(0, 7);
EXPECT_PREFIX_LENGTH_EQUALS(0, 8);
EXPECT_PREFIX_LENGTH_EQUALS(3, 9);
return !!failed_count;
}
|