Implement Levenshtein distance; use in C FE for misspelled field names
[official-gcc.git] / gcc / testsuite / gcc.dg / plugin / levenshtein_plugin.c
blob3e7dc7889305a422eddd6de8760fd1dc0499a2e3
1 /* Plugin for unittesting gcc/spellcheck.h. */
3 #include "config.h"
4 #include "gcc-plugin.h"
5 #include "system.h"
6 #include "coretypes.h"
7 #include "spellcheck.h"
8 #include "diagnostic.h"
10 int plugin_is_GPL_compatible;
12 static void
13 levenshtein_distance_unit_test_oneway (const char *a, const char *b,
14 edit_distance_t expected)
16 edit_distance_t actual = levenshtein_distance (a, b);
17 if (actual != expected)
18 error ("levenshtein_distance (\"%s\", \"%s\") : expected: %i got %i",
19 a, b, expected, actual);
23 static void
24 levenshtein_distance_unit_test (const char *a, const char *b,
25 edit_distance_t expected)
27 /* Run every test both ways to ensure it's symmetric. */
28 levenshtein_distance_unit_test_oneway (a, b, expected);
29 levenshtein_distance_unit_test_oneway (b, a, expected);
32 /* Callback handler for the PLUGIN_FINISH event; run
33 levenshtein_distance unit tests here. */
35 static void
36 on_finish (void */*gcc_data*/, void */*user_data*/)
38 levenshtein_distance_unit_test ("", "nonempty", strlen ("nonempty"));
39 levenshtein_distance_unit_test ("saturday", "sunday", 3);
40 levenshtein_distance_unit_test ("foo", "m_foo", 2);
41 levenshtein_distance_unit_test ("hello_world", "HelloWorld", 3);
42 levenshtein_distance_unit_test
43 ("the quick brown fox jumps over the lazy dog", "dog", 40);
44 levenshtein_distance_unit_test
45 ("the quick brown fox jumps over the lazy dog",
46 "the quick brown dog jumps over the lazy fox",
47 4);
48 levenshtein_distance_unit_test
49 ("Lorem ipsum dolor sit amet, consectetur adipiscing elit,",
50 "All your base are belong to us",
51 44);
54 int
55 plugin_init (struct plugin_name_args *plugin_info,
56 struct plugin_gcc_version */*version*/)
58 register_callback (plugin_info->base_name,
59 PLUGIN_FINISH,
60 on_finish,
61 NULL); /* void *user_data */
63 return 0;