From 43b6006015d312486fb74dc083cf03cfcfacab63 Mon Sep 17 00:00:00 2001 From: Andrea Shepard <andrea@persephoneslair.org> Date: Sun, 20 Nov 2016 10:22:44 +0000 Subject: [PATCH] Add test cases to tickle CHARSET_ACTION_SCAN and CHARSET_ACTION_BITMAP --- src/t_parser.c | 53 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) diff --git a/src/t_parser.c b/src/t_parser.c index d0aeb8b3..7fa7659c 100644 --- a/src/t_parser.c +++ b/src/t_parser.c @@ -222,18 +222,71 @@ static void test_action(gconstpointer backend) { static void test_in(gconstpointer backend) { uint8_t options[3] = { 'a', 'b', 'c' }; + uint8_t odds[128]; + uint8_t _1_mod_4[64]; + uint8_t scattered[3] = { 'A', 'b', 'z' }; + int i; + const HParser *in_ = h_in(options, 3); g_check_parse_match(in_, (HParserBackend)GPOINTER_TO_INT(backend), "b", 1, "u0x62"); g_check_parse_failed(in_, (HParserBackend)GPOINTER_TO_INT(backend), "d", 1); + for (i = 0; i < 128; ++i) odds[i] = (uint8_t)(2*i + 1); + const HParser *odds_ = h_in(odds, 128); + g_check_parse_match(odds_, (HParserBackend)GPOINTER_TO_INT(backend), "c", 1, "u0x63"); + g_check_parse_match(odds_, (HParserBackend)GPOINTER_TO_INT(backend), "E", 1, "u0x45"); + g_check_parse_failed(odds_, (HParserBackend)GPOINTER_TO_INT(backend), "d", 1); + g_check_parse_failed(odds_, (HParserBackend)GPOINTER_TO_INT(backend), "F", 1); + + for (i = 0; i < 64; ++i) _1_mod_4[i] = (uint8_t)(4*i + 1); + const HParser *_1_mod_4_ = h_in(_1_mod_4, 64); + g_check_parse_match(_1_mod_4_, (HParserBackend)GPOINTER_TO_INT(backend), "a", 1, "u0x61"); + g_check_parse_match(_1_mod_4_, (HParserBackend)GPOINTER_TO_INT(backend), "E", 1, "u0x45"); + g_check_parse_failed(_1_mod_4_, (HParserBackend)GPOINTER_TO_INT(backend), "d", 1); + g_check_parse_failed(_1_mod_4_, (HParserBackend)GPOINTER_TO_INT(backend), "c", 1); + g_check_parse_failed(_1_mod_4_, (HParserBackend)GPOINTER_TO_INT(backend), "F", 1); + + const HParser *scattered_ = h_in(scattered, 3); + g_check_parse_match(scattered_, (HParserBackend)GPOINTER_TO_INT(backend), "A", 1, "u0x41"); + g_check_parse_match(scattered_, (HParserBackend)GPOINTER_TO_INT(backend), "b", 1, "u0x62"); + g_check_parse_match(scattered_, (HParserBackend)GPOINTER_TO_INT(backend), "z", 1, "u0x7a"); + g_check_parse_failed(scattered_, (HParserBackend)GPOINTER_TO_INT(backend), "y", 1); + g_check_parse_failed(scattered_, (HParserBackend)GPOINTER_TO_INT(backend), "F", 1); } static void test_not_in(gconstpointer backend) { uint8_t options[3] = { 'a', 'b', 'c' }; + uint8_t odds[128]; + uint8_t _1_mod_4[64]; + uint8_t scattered[3] = { 'A', 'b', 'z' }; + int i; + const HParser *not_in_ = h_not_in(options, 3); g_check_parse_match(not_in_, (HParserBackend)GPOINTER_TO_INT(backend), "d", 1, "u0x64"); g_check_parse_failed(not_in_, (HParserBackend)GPOINTER_TO_INT(backend), "a", 1); + for (i = 0; i < 128; ++i) odds[i] = (uint8_t)(2*i + 1); + const HParser *odds_ = h_not_in(odds, 128); + g_check_parse_match(odds_, (HParserBackend)GPOINTER_TO_INT(backend), "d", 1, "u0x64"); + g_check_parse_match(odds_, (HParserBackend)GPOINTER_TO_INT(backend), "F", 1, "u0x46"); + g_check_parse_failed(odds_, (HParserBackend)GPOINTER_TO_INT(backend), "c", 1); + g_check_parse_failed(odds_, (HParserBackend)GPOINTER_TO_INT(backend), "E", 1); + + for (i = 0; i < 64; ++i) _1_mod_4[i] = (uint8_t)(4*i + 1); + const HParser *_1_mod_4_ = h_not_in(_1_mod_4, 64); + g_check_parse_match(_1_mod_4_, (HParserBackend)GPOINTER_TO_INT(backend), "b", 1, "u0x62"); + g_check_parse_match(_1_mod_4_, (HParserBackend)GPOINTER_TO_INT(backend), "F", 1, "u0x46"); + g_check_parse_failed(_1_mod_4_, (HParserBackend)GPOINTER_TO_INT(backend), "e", 1); + g_check_parse_failed(_1_mod_4_, (HParserBackend)GPOINTER_TO_INT(backend), "A", 1); + + const HParser *scattered_ = h_not_in(scattered, 3); + g_check_parse_match(scattered_, (HParserBackend)GPOINTER_TO_INT(backend), "B", 1, "u0x42"); + g_check_parse_match(scattered_, (HParserBackend)GPOINTER_TO_INT(backend), "a", 1, "u0x61"); + g_check_parse_match(scattered_, (HParserBackend)GPOINTER_TO_INT(backend), "y", 1, "u0x79"); + g_check_parse_failed(scattered_, (HParserBackend)GPOINTER_TO_INT(backend), "A", 1); + g_check_parse_failed(scattered_, (HParserBackend)GPOINTER_TO_INT(backend), "b", 1); + g_check_parse_failed(scattered_, (HParserBackend)GPOINTER_TO_INT(backend), "z", 1); + } static void test_end_p(gconstpointer backend) { -- GitLab