diff options
Diffstat (limited to 'test')
-rw-r--r-- | test/Makefile | 3 | ||||
-rw-r--r-- | test/scope_test.c | 68 |
2 files changed, 71 insertions, 0 deletions
diff --git a/test/Makefile b/test/Makefile index 717b430..6d8bfb7 100644 --- a/test/Makefile +++ b/test/Makefile @@ -30,5 +30,8 @@ lexer_test: munit.o ../build/string_view.o ../build/lexer.o lexer_test.o parser_test: munit.o ../build/string_view.o ../build/vector.o ../build/lexer.o ../build/ast.o ../build/parser.o parser_test.o $(CC) $? $(CFLAGS) -o $@ +scope_test: munit.o ../build/string_view.o ../build/vector.o ../build/ast.o ../build/scope.o scope_test.o + $(CC) $? $(CFLAGS) -o $@ + integration_test: munit.o integration_test.o $(CC) $? $(CFLAGS) -o $@ diff --git a/test/scope_test.c b/test/scope_test.c new file mode 100644 index 0000000..b8ee30e --- /dev/null +++ b/test/scope_test.c @@ -0,0 +1,68 @@ +/* + * 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 "ast.h" +#include "munit.h" +#include "scope.h" + +static MunitResult +test_scope(const MunitParameter params[], void *user_data_or_fixture) +{ + ast_node_t first_id_node_1; + ast_node_t first_id_node_2; + ast_node_t second_id_node; + + ast_identifier_t first_id = { .name = string_view_from_str("first") }; + ast_identifier_t second_id = { .name = string_view_from_str("second") }; + + scope_t *scope = scope_new(); + + assert_null(scope_get(scope, &first_id)); + assert_null(scope_get(scope, &second_id)); + + scope_push(scope, &first_id, &first_id_node_1); + scope_push(scope, &second_id, &second_id_node); + + assert_ptr_equal((void *)scope_get(scope, &first_id), (void *)&first_id_node_1); + assert_ptr_equal((void *)scope_get(scope, &second_id), (void *)&second_id_node); + + scope_enter(scope); + + scope_push(scope, &first_id, &first_id_node_2); + assert_ptr_equal((void *)scope_get(scope, &first_id), (void *)&first_id_node_2); + assert_ptr_equal((void *)scope_get(scope, &second_id), (void *)&second_id_node); + + scope_leave(scope); + + assert_ptr_equal((void *)scope_get(scope, &first_id), (void *)&first_id_node_1); + + scope_destroy(scope); + + return MUNIT_OK; +} + +static MunitTest tests[] = { { "/test_scope", test_scope, NULL, NULL, MUNIT_TEST_OPTION_NONE, NULL }, + { NULL, NULL, NULL, NULL, MUNIT_TEST_OPTION_NONE, NULL } }; + +static const MunitSuite suite = { "/scope_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; +} |