tri: fix autocomplete when one string is a prefix of another

Also add a bunch of unit tests for all of the various tri functions.

Signed-off-by: Max Regan <mgregan2@gmail.com>
This commit is contained in:
2017-04-02 22:26:41 -07:00
parent 6e2f4096a2
commit d9bf91fc5a
2 changed files with 70 additions and 6 deletions

View File

@@ -54,12 +54,71 @@ static void test_tri_prefix_match(void)
tri_free(&tri);
}
static void test_tri_autocomplete(void)
{
struct tri tri;
bool ambiguous;
tri_init(&tri);
g_assert_cmpint(tri_add_string(&tri, "pr", TO_PTR(1)), ==, 0);
g_assert_cmpint(tri_add_string(&tri, "pref", TO_PTR(2)), ==, 0);
g_assert_cmpint(tri_add_string(&tri, "Z", TO_PTR(3)), ==, 0);
g_assert_cmpint(tri_add_string(&tri, "prefix", TO_PTR(4)), ==, 0);
g_assert_cmpint(tri_add_string(&tri, "blah", TO_PTR(5)), ==, 0);
g_assert_null(tri_get_string_autocomplete(&tri, "p", &ambiguous));
g_assert_true(ambiguous);
g_assert_null(tri_get_string_autocomplete(&tri, "pr", &ambiguous));
g_assert_true(ambiguous);
g_assert_null(tri_get_string_autocomplete(&tri, "pre", &ambiguous));
g_assert_true(ambiguous);
g_assert_null(tri_get_string_autocomplete(&tri, "pref", &ambiguous));
g_assert_true(ambiguous);
g_assert_null(tri_get_string_autocomplete(&tri, "prefix10", &ambiguous));
g_assert_false(ambiguous);
g_assert_null(tri_get_string_autocomplete(&tri, "asdfasdf", &ambiguous));
g_assert_false(ambiguous);
g_assert_cmpint(TO_INT(tri_get_string_autocomplete(&tri, "bla", &ambiguous)), ==, 5);
g_assert_false(ambiguous);
g_assert_cmpint(TO_INT(tri_get_string_autocomplete(&tri, "prefi", &ambiguous)), ==, 4);
g_assert_false(ambiguous);
g_assert_cmpint(TO_INT(tri_get_string_autocomplete(&tri, "prefix", &ambiguous)), ==, 4);
g_assert_false(ambiguous);
g_assert_cmpint(TO_INT(tri_get_string_autocomplete(&tri, "Z", &ambiguous)), ==, 3);
g_assert_false(ambiguous);
tri_free(&tri);
}
static void test_tri_null(void)
{
struct tri tri;
tri_init(&tri);
g_assert_cmpint(tri_add_string(&tri, NULL, TO_PTR(1)), ==, -1);
g_assert_null(tri_prefix_match(&tri, NULL));
}
int main(int argc, char **argv)
{
g_test_init(&argc, &argv, NULL);
g_test_add_func("/tri/get_string", test_tri_get_string);
g_test_add_func("/tri/prefix_match", test_tri_prefix_match);
g_test_add_func("/tri/autocomplete", test_tri_autocomplete);
g_test_add_func("/tri/null", test_tri_null);
return g_test_run();
}