125 lines
3.9 KiB
C
125 lines
3.9 KiB
C
#include "common/tri.h"
|
|
#include "common/common.h"
|
|
|
|
#include <glib.h>
|
|
#include <stdint.h>
|
|
|
|
#define TO_PTR(x) ((void *) (uintptr_t) (x))
|
|
#define TO_INT(x) ((int) (uintptr_t) (x))
|
|
|
|
static void test_tri_get_string(void)
|
|
{
|
|
struct tri tri;
|
|
|
|
tri_init(&tri);
|
|
|
|
g_assert_cmpint(tri_add_string(&tri, "a", TO_PTR(1)), ==, 0);
|
|
g_assert_cmpint(tri_add_string(&tri, "ab", TO_PTR(2)), ==, 0);
|
|
g_assert_cmpint(tri_add_string(&tri, "abc", TO_PTR(3)), ==, 0);
|
|
g_assert_cmpint(tri_add_string(&tri, "af", TO_PTR(4)), ==, 0);
|
|
g_assert_cmpint(tri_add_string(&tri, "abd", TO_PTR(5)), ==, 0);
|
|
g_assert_cmpint(tri_add_string(&tri, "$a!0123~&.`", TO_PTR(6)), ==, 0);
|
|
|
|
g_assert_cmpint(TO_INT(tri_get_string(&tri, "a")), ==, 1);
|
|
g_assert_cmpint(TO_INT(tri_get_string(&tri, "ab")), ==, 2);
|
|
g_assert_cmpint(TO_INT(tri_get_string(&tri, "abc")), ==, 3);
|
|
g_assert_cmpint(TO_INT(tri_get_string(&tri, "af")), ==, 4);
|
|
g_assert_cmpint(TO_INT(tri_get_string(&tri, "abd")), ==, 5);
|
|
g_assert_cmpint(TO_INT(tri_get_string(&tri, "abz")), ==, 0);
|
|
g_assert_cmpint(TO_INT(tri_get_string(&tri, "ag")), ==, 0);
|
|
g_assert_cmpint(TO_INT(tri_get_string(&tri, "$a!0123~&.`")), ==, 6);
|
|
|
|
tri_free(&tri);
|
|
}
|
|
|
|
static void test_tri_prefix_match(void)
|
|
{
|
|
struct tri tri;
|
|
|
|
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_cmpint(TO_INT(tri_prefix_match(&tri, "p")), ==, 0);
|
|
g_assert_cmpint(TO_INT(tri_prefix_match(&tri, "pr")), ==, 1);
|
|
g_assert_cmpint(TO_INT(tri_prefix_match(&tri, "pre")), ==, 1);
|
|
g_assert_cmpint(TO_INT(tri_prefix_match(&tri, "pref")), ==, 2);
|
|
g_assert_cmpint(TO_INT(tri_prefix_match(&tri, "prefix10")), ==, 4);
|
|
g_assert_cmpint(TO_INT(tri_prefix_match(&tri, "asdfasdf")), ==, 0);
|
|
|
|
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();
|
|
}
|