#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; }