fixup.cc5711424b7ae36276a40c06ede5d95f87ca20f0
[git/dscho.git] / test-levenshtein.c
blobc33cf38ea33fb1f4e4e0c97f674085c2688ab10c
1 #include "cache.h"
2 #include "levenshtein.h"
3 #include "path-list.h"
4 #include "strbuf.h"
6 struct path_list all_names = { NULL, 0, 0, 1 };
7 struct path_list pairs = { NULL, 0, 0, 1 };
9 static int compair(const void *a, const void *b)
11 const struct path_list_item *x = a, *y = b;
13 return (int)x->util - (int)y->util;
16 int main(int argc, char **argv)
18 FILE *in;
19 struct strbuf line = STRBUF_INIT;
20 int i, j;
22 if (argc > 1) {
23 in = fopen(argv[1], "r");
24 if (!in)
25 die ("Could not open %s", argv[1]);
27 else
28 in = stdin;
30 while (strbuf_getline(&line, in, '\n') != EOF)
31 path_list_insert(line.buf, &all_names);
33 for (i = 0; i < all_names.nr; i++) {
34 struct strbuf pair = STRBUF_INIT;
35 const char *name1 = all_names.items[i].path;
36 int len;
38 strbuf_addf(&pair, "%s <-> ", name1);
39 len = pair.len;
41 for (j = i + 1; j < all_names.nr; j++) {
42 const char *name2 = all_names.items[j].path;
43 int distance = levenshtein(name1, name2, 1, 9, 1, 1);
45 strbuf_setlen(&pair, len);
46 strbuf_addstr(&pair, name2);
47 path_list_append(pair.buf, &pairs)->util =
48 (void *)distance;
52 qsort(pairs.items, pairs.nr, sizeof(*pairs.items), compair);
54 for (i = 0; i < pairs.nr; i++)
55 printf("%d\t%s\n", (int)pairs.items[i].util,
56 pairs.items[i].path);
58 return 0;