diff options
Diffstat (limited to 'test/lexer_test.c')
-rw-r--r-- | test/lexer_test.c | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/test/lexer_test.c b/test/lexer_test.c new file mode 100644 index 0000000..1fc93cc --- /dev/null +++ b/test/lexer_test.c @@ -0,0 +1,76 @@ +/* +* Copyright (C) 2023 Carlos Maniero +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see <https://www.gnu.org/licenses/>. +*/ +#define MUNIT_ENABLE_ASSERT_ALIASES +#include "munit.h" +#include "lexer.h" + +void +make_lexer_from_static_src(lexer_t *lexer, char *src, int srclen) +{ + lexer->srclen = 0; + lexer->cur = 0; + lexer->row = 0; + lexer->bol = 0; + lexer->src = src; + lexer->srclen = srclen; +} + +void +assert_tokenize_number(char *str, char *expected) +{ + lexer_t lexer; + token_t token; + + make_lexer_from_static_src(&lexer, str, strlen(str)); + lexer_next_token(&lexer, &token); + + char actual[token.value.size + 1]; + string_view_to_str(&token.value, actual); + + assert_string_equal("TOKEN_NUMBER", token_kind_to_str(token.kind)); + assert_string_equal(expected, actual); +} + +static MunitResult +test_tokenize_number(const MunitParameter params[], + void *user_data_or_fixture) +{ + lexer_t lexer; + token_t token; + + assert_tokenize_number("1", "1"); + assert_tokenize_number(" 13 ", "13"); + assert_tokenize_number(" \n 13 ", "13"); + + return MUNIT_OK; +} + +static MunitTest tests[] = { + { "/test_tokenize_digit", test_tokenize_number, NULL, NULL, MUNIT_TEST_OPTION_NONE, NULL }, + { NULL, NULL, NULL, NULL, MUNIT_TEST_OPTION_NONE, NULL } +}; + +static const MunitSuite suite = { + "/lexer_test", tests, NULL, 1, MUNIT_SUITE_OPTION_NONE +}; + +int +main(int argc, char *argv[]) +{ + return munit_suite_main(&suite, NULL, argc, argv); + return EXIT_SUCCESS; +} |