From 8cb68814376a8aff87bf95fcceebf60b8489d74d Mon Sep 17 00:00:00 2001 From: picomeg <megordon5@gmail.com> Date: Wed, 21 Oct 2020 20:32:55 +0100 Subject: [PATCH] test working for get and compile backend by name. TODO: refactor and cleanup --- src/hammer.c | 17 +++++------------ src/t_names.c | 37 ++++++++++++++++++++++++++++++------- 2 files changed, 35 insertions(+), 19 deletions(-) diff --git a/src/hammer.c b/src/hammer.c index 52052a6b..0c6af368 100644 --- a/src/hammer.c +++ b/src/hammer.c @@ -329,6 +329,7 @@ char * h_get_short_name_with_no_params(HAllocator *mm__, return h_get_backend_text_with_no_params(mm__, be, 0); } +/*TODO: refactor and clean this up more */ HParserBackendWithParams * h_get_backend_with_params_by_name(const char *name_with_params) { HParserBackendWithParams *result = NULL; @@ -338,7 +339,7 @@ HParserBackendWithParams * h_get_backend_with_params_by_name(const char *name_wi char *name_with_no_params = NULL; char *params_as_string = NULL; - size_t name_len + size_t name_len; size_t len = strlen(name_with_params); result = h_new(HParserBackendWithParams, 1); @@ -434,24 +435,16 @@ bool h_not_regular(HRVMProg *prog, void *env) { } int h_compile_for_named_backend(HParser* parser, HParserBackendWithParams* be_with_params){ - HAllocator* mm__ = be_with_params->mm__; + HAllocator *mm__ = &system_allocator; - if(mm__ == NULL){ - mm__ = &system_allocator; + if (be_with_params) { + if (be_with_params->mm__) mm__ = be_with_params->mm__; } return h_compile_for_named_backend__m(mm__, parser, be_with_params); } int h_compile_for_named_backend__m(HAllocator* mm__, HParser* parser, HParserBackendWithParams* be_with_params) { - /*if (parser->backend >= PB_MIN && parser->backend <= PB_MAX && - backends[parser->backend]->free != NULL) { - backends[parser->backend]->free(parser); - } - int ret = backends[be_with_params->backend]->compile(mm__, parser, (const void*) be_with_params->params); - if (!ret) - parser->backend = be_with_params->backend; - return ret;*/ return h_compile__m(mm__, parser, be_with_params->backend, be_with_params->params); } diff --git a/src/t_names.c b/src/t_names.c index 499fef0b..95cefdeb 100644 --- a/src/t_names.c +++ b/src/t_names.c @@ -41,9 +41,6 @@ static void test_tt_backend_short_name(void) { g_check_maybe_string_eq(name, glr_name); } -/*TODO create proper test(s) with test name matching what is being tested. - * As is this is just what I am using to drive development - * and check I am not making silly mistakes */ static void test_tt_query_backend_by_name(void) { HParserBackend be; @@ -52,7 +49,9 @@ static void test_tt_query_backend_by_name(void) { be = h_query_backend_by_name(regular_name); g_check_inttype("%d", HParserBackend, be, ==, PB_REGULAR); +} +static void test_tt_get_backend_with_params_by_name(void) { HParserBackendWithParams * be_w_p = NULL; be_w_p = h_get_backend_with_params_by_name(glr_name); @@ -60,13 +59,35 @@ static void test_tt_query_backend_by_name(void) { g_check_maybe_string_eq(be_w_p->name, glr_name); be_w_p = h_get_backend_with_params_by_name("glr(1)"); - printf("%d be enum val \n", be_w_p->backend); + g_check_inttype("%d", HParserBackend, be_w_p->backend, ==, PB_GLR); - printf("%s be name \n", be_w_p->name); + g_check_maybe_string_eq(be_w_p->name, glr_name); - printf("%p as void pointer \n", be_w_p->params); + g_check_cmp_size((uintptr_t)be_w_p->params, ==, 1); - printf("%zu param as uintptr_t \n", (uintptr_t)be_w_p->params); + + +} + +/* test that we can request a backend with params from character + * and compile a parser using it */ +static void test_tt_h_compile_for_named_backend(void) { + HParserBackendWithParams * be_w_p = NULL; + + be_w_p = h_get_backend_with_params_by_name(llk_name); + g_check_inttype("%d", HParserBackend, be_w_p->backend, ==, PB_LLk); + + be_w_p->mm__ = &system_allocator; + + HParser *p = h_many(h_sequence(h_ch('A'), h_ch('B'), NULL)); + + int r = h_compile_for_named_backend(p, be_w_p); + if (r != 0) { + g_test_message("Compile failed"); + g_test_fail(); + } + + /* TODO further test for success? */ } @@ -74,4 +95,6 @@ void register_names_tests(void) { g_test_add_func("/core/names/tt_backend_short_name", test_tt_backend_short_name); g_test_add_func("/core/names/tt_backend_description", test_tt_backend_description); g_test_add_func("/core/names/tt_query_backend_by_name", test_tt_query_backend_by_name); + g_test_add_func("/core/names/tt_get_backend_with_params_by_name", test_tt_get_backend_with_params_by_name); + g_test_add_func("/core/names/tt_h_compile_for_named_backend", test_tt_h_compile_for_named_backend); } -- GitLab