X-Git-Url: https://git.distorted.org.uk/~mdw/disorder/blobdiff_plain/8818b7fca12456e62410ef914a7bef250a0633c9..00e36cd01af92a9c42c71e0037f592fc2e613bc4:/lib/test.c diff --git a/lib/test.c b/lib/test.c index 0790efc..d9e81a6 100644 --- a/lib/test.c +++ b/lib/test.c @@ -30,6 +30,7 @@ #include #include #include +#include #include "utf8.h" #include "mem.h" @@ -38,11 +39,13 @@ #include "charset.h" #include "mime.h" #include "hex.h" -#include "words.h" #include "heap.h" #include "unicode.h" #include "inputline.h" #include "wstat.h" +#include "signame.h" +#include "cache.h" +#include "filepart.h" static int tests, errors; static int fail_first; @@ -215,6 +218,7 @@ static void test_utf8(void) { U8("\xF4\x80\x80\x80", "0x100000"); U8("\xF4\x8F\xBF\xBF", "0x10FFFF"); insist(!validutf8("\xF4\x90\x80\x80")); + insist(!validutf8("\xF4\x80\xFF\x80")); /* miscellaneous non-UTF-8 rubbish */ insist(!validutf8("\x80")); @@ -411,7 +415,7 @@ static void test_casefold(void) { ++tests; } } - check_string(casefold(""), ""); + check_string(utf8_casefold_canon("", 0, 0), ""); } struct { @@ -450,7 +454,7 @@ static void test_words(void) { fprintf(stderr, "test_words\n"); for(t = 0; t < NWTEST; ++t) { - char **got = utf8_word_split(wtest[t].in, strlen(wtest[t].in), &ngot); + char **got = utf8_word_split(wtest[t].in, strlen(wtest[t].in), &ngot, 0); for(nexpect = 0; wtest[t].expect[nexpect]; ++nexpect) ; @@ -672,6 +676,64 @@ static void test_unicode(void) { fclose(fp); breaktest("auxiliary/GraphemeBreakTest.txt", utf32_is_grapheme_boundary); breaktest("auxiliary/WordBreakTest.txt", utf32_is_word_boundary); + insist(utf32_combining_class(0x40000) == 0); + insist(utf32_combining_class(0xE0000) == 0); +} + +static void test_signame(void) { + fprintf(stderr, "test_signame\n"); + insist(find_signal("SIGTERM") == SIGTERM); + insist(find_signal("SIGHUP") == SIGHUP); + insist(find_signal("SIGINT") == SIGINT); + insist(find_signal("SIGQUIT") == SIGQUIT); + insist(find_signal("SIGKILL") == SIGKILL); + insist(find_signal("SIGYOURMUM") == -1); +} + +static void test_cache(void) { + const struct cache_type t1 = { 1 }, t2 = { 10 }; + const char v11[] = "spong", v12[] = "wibble", v2[] = "blat"; + fprintf(stderr, "test_cache\n"); + cache_put(&t1, "1_1", v11); + cache_put(&t1, "1_2", v12); + cache_put(&t2, "2", v2); + insist(cache_count() == 3); + insist(cache_get(&t2, "2") == v2); + insist(cache_get(&t1, "1_1") == v11); + insist(cache_get(&t1, "1_2") == v12); + insist(cache_get(&t1, "2") == 0); + insist(cache_get(&t2, "1_1") == 0); + insist(cache_get(&t2, "1_2") == 0); + insist(cache_get(&t1, "2") == 0); + insist(cache_get(&t2, "1_1") == 0); + insist(cache_get(&t2, "1_2") == 0); + sleep(2); + cache_expire(); + insist(cache_count() == 1); + insist(cache_get(&t1, "1_1") == 0); + insist(cache_get(&t1, "1_2") == 0); + insist(cache_get(&t2, "2") == v2); + cache_clean(0); + insist(cache_count() == 0); + insist(cache_get(&t2, "2") == 0); +} + +static void test_filepart(void) { + fprintf(stderr, "test_filepart\n"); + check_string(d_dirname("/"), "/"); + check_string(d_dirname("/spong"), "/"); + check_string(d_dirname("/foo/bar"), "/foo"); + check_string(d_dirname("./bar"), "."); + check_string(d_dirname("."), "."); + check_string(d_dirname(".."), "."); + check_string(d_dirname("../blat"), ".."); + check_string(d_dirname("wibble"), "."); + check_string(extension("foo.c"), ".c"); + check_string(extension(".c"), ".c"); + check_string(extension("."), "."); + check_string(extension("foo"), ""); + check_string(extension("./foo"), ""); + check_string(extension("./foo.c"), ".c"); } int main(void) { @@ -693,6 +755,8 @@ int main(void) { /* client.c */ /* configuration.c */ /* event.c */ + /* filepart.c */ + test_filepart(); /* fprintf.c */ /* heap.c */ test_heap(); @@ -721,8 +785,11 @@ int main(void) { /* words.c */ test_casefold(); test_words(); - /* XXX words() */ /* wstat.c */ + /* signame.c */ + test_signame(); + /* cache.c */ + test_cache(); fprintf(stderr, "%d errors out of %d tests\n", errors, tests); return !!errors; }