From 630d9f53e1c57d81203e99e50dcd377d7890d816 Mon Sep 17 00:00:00 2001 From: laentropia Date: Fri, 24 Apr 2026 09:36:03 -0600 Subject: [PATCH] test: changed lexer tests --- CMakeLists.txt | 2 - src/main.c | 1 - test/test_ASTNodeArray.c | 86 ---------------------------------------- test/test_lexer.c | 56 ++++++++++++-------------- 4 files changed, 25 insertions(+), 120 deletions(-) delete mode 100644 test/test_ASTNodeArray.c diff --git a/CMakeLists.txt b/CMakeLists.txt index 0749c57..d300c72 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -31,14 +31,12 @@ add_library(calculator_lib src/lexer.c src/parser.c src/evaluator.c - src/ASTNodeArray.c ) target_include_directories(calculator_lib PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include ) -# 🔥 aquí está la magia target_link_libraries(calculator_lib PUBLIC arena PUBLIC arraylist diff --git a/src/main.c b/src/main.c index 89cfc64..2c5827f 100644 --- a/src/main.c +++ b/src/main.c @@ -1,4 +1,3 @@ -#include "arena.h" #include "evaluator.h" #include "lexer.h" #include "parser.h" diff --git a/test/test_ASTNodeArray.c b/test/test_ASTNodeArray.c deleted file mode 100644 index 59c98cb..0000000 --- a/test/test_ASTNodeArray.c +++ /dev/null @@ -1,86 +0,0 @@ -#include "lexer.h" -#include -#include -#include -#include -#include -#include - -static void test_array_push(void **state) { - (void) state; - - // We use 2 to force resize and checking anything wrong with malloc - ASTNodeArray arr = ASTNodeArray_init(2); - ASTNode node1 = { - .type = NODE_INTEGER, - .data = { .integer = 90 } - }; - - ASTNode node2 = { - .type = NODE_INTEGER, - .data = { .integer = 80 } - }; - - ASTNode node3 = { - .type = NODE_INTEGER, - .data = { .integer = 70 } - }; - - assert_int_equal(ASTNodeArray_push(&arr, node1), ARRAY_OK); - assert_int_equal(ASTNodeArray_len(&arr), 1); - - assert_int_equal(ASTNodeArray_push(&arr, node2), ARRAY_OK); - assert_int_equal(ASTNodeArray_len(&arr), 2); - - assert_int_equal(ASTNodeArray_push(&arr, node3), ARRAY_OK); - assert_int_equal(ASTNodeArray_len(&arr), 3); - - ASTNodeArray_free(&arr); -} - -static void test_array_pop(void **state) { - (void) state; - - // Set to force desize - ASTNodeArray arr = ASTNodeArray_init(16); - ASTNode node1 = { - .type = NODE_INTEGER, - .data = { .integer = 90 } - }; - - ASTNode node2 = { - .type = NODE_INTEGER, - .data = { .integer = 80 } - }; - - ASTNode node3 = { - .type = NODE_INTEGER, - .data = { .integer = 70 } - }; - - assert_int_equal(ASTNodeArray_push(&arr, node1), ARRAY_OK); - assert_int_equal(ASTNodeArray_len(&arr), 1); - - assert_int_equal(ASTNodeArray_push(&arr, node2), ARRAY_OK); - assert_int_equal(ASTNodeArray_len(&arr), 2); - - assert_int_equal(ASTNodeArray_push(&arr, node3), ARRAY_OK); - assert_int_equal(ASTNodeArray_len(&arr), 3); - - ASTNode node4; - assert_int_equal(ASTNodeArray_pop(&arr, 1, &node4), ARRAY_OK); - assert_int_equal(node4.type, NODE_INTEGER); - assert_int_equal(node4.data.integer, 80); - - ASTNodeArray_free(&arr); -} - - -int main(void) { - const struct CMUnitTest tests[] = { - cmocka_unit_test(test_array_push), - cmocka_unit_test(test_array_pop), - }; - - return cmocka_run_group_tests(tests, NULL, NULL); -} diff --git a/test/test_lexer.c b/test/test_lexer.c index db9b914..7540119 100644 --- a/test/test_lexer.c +++ b/test/test_lexer.c @@ -1,3 +1,4 @@ +#include "arraylist.h" #include "lexer.h" #include #include @@ -10,37 +11,37 @@ static void test_tokenize_normal_expresion(void **state) { (void) state; char expr[256] = "2 + 3 / 66 * 789"; - ASTNodeArray tokens; ASTNode node; - - assert_int_equal(tokenize(expr, &tokens), LEXER_OK); - assert_int_equal(tokens.len, 7); + TokenizeResult tokens = tokenize(expr); - ASTNodeArray_get(&tokens, 0, &node); + assert_true(tokens.is_valid); + assert_int_equal(arraylist_size(tokens.arr), 7); + + arraylist_get(tokens.arr, 0, &node); assert_int_equal(node.type, NODE_INTEGER); assert_int_equal(node.data.integer, 2); - ASTNodeArray_get(&tokens, 1, &node); + arraylist_get(tokens.arr, 0, &node); assert_int_equal(node.type, NODE_BINARY_OP); assert_int_equal(node.data.binary.op, OP_ADD); - ASTNodeArray_get(&tokens, 2, &node); + arraylist_get(tokens.arr, 0, &node); assert_int_equal(node.type, NODE_INTEGER); assert_int_equal(node.data.integer, 3); - ASTNodeArray_get(&tokens, 3, &node); + arraylist_get(tokens.arr, 0, &node); assert_int_equal(node.type, NODE_BINARY_OP); assert_int_equal(node.data.binary.op, OP_DIV); - ASTNodeArray_get(&tokens, 4, &node); + arraylist_get(tokens.arr, 0, &node); assert_int_equal(node.type, NODE_INTEGER); assert_int_equal(node.data.integer, 66); - ASTNodeArray_get(&tokens, 5, &node); + arraylist_get(tokens.arr, 0, &node); assert_int_equal(node.type, NODE_BINARY_OP); assert_int_equal(node.data.binary.op, OP_MUL); - ASTNodeArray_get(&tokens, 6, &node); + arraylist_get(tokens.arr, 0, &node); assert_int_equal(node.type, NODE_INTEGER); assert_int_equal(node.data.integer, 789); } @@ -49,28 +50,20 @@ static void test_tokenize_unrecognized_symbol(void **state) { (void) state; char expr[256] = " 2 j 3 / 66 } 789"; - ASTNodeArray tokens = { - .len = 0, - .cap = 0, - }; + TokenizeResult tokens = tokenize(expr); - assert_int_equal(tokenize(expr, &tokens), LEXER_NOT_RECOGNIZED_SYMBOL); - assert_int_equal(tokens.len, 0); - assert_int_equal(tokens.cap, 0); + assert_false(tokens.is_valid); + assert_uint_equal(tokens.err, LEXER_WRONG_SYNTAX); } static void test_tokenize_wrong_sintax(void **state) { (void) state; char expr[256] = "2 3 / 66 789"; - ASTNodeArray tokens = { - .len = 0, - .cap = 0, - }; + TokenizeResult tokens = tokenize(expr); - assert_int_equal(tokenize(expr, &tokens), LEXER_WRONG_SYNTAX); - assert_int_equal(tokens.len, 0); - assert_int_equal(tokens.cap, 0); + assert_false(tokens.is_valid); + assert_uint_equal(tokens.err, LEXER_WRONG_SYNTAX); } static void test_string_to_number_normal(void **state) { @@ -78,13 +71,13 @@ static void test_string_to_number_normal(void **state) { char num[16] = "2333t55"; size_t offset = 0; - ASTNode result; + ASTNodeResult result = tokenize_number(num, &offset); - assert_int_equal(tokenize_number(num, &offset, &result), LEXER_OK); + assert_true(result.is_valid); assert_int_equal(offset, 4); // equal to t position in string - assert_int_equal(result.type, NODE_INTEGER); - assert_int_equal(result.data.integer, 2333); + assert_int_equal(result.node.type, NODE_INTEGER); + assert_int_equal(result.node.data.integer, 2333); } static void test_string_to_number_overflow(void **state) { @@ -93,8 +86,9 @@ static void test_string_to_number_overflow(void **state) { // Number is INT64_MAX but with a extra 8 at the end char num[32] = "92233720368547758078yy7"; size_t offset = 0; - ASTNode result; - assert_int_equal(tokenize_number(num, &offset, &result), LEXER_INT_OVERFLOW); + ASTNodeResult result = tokenize_number(num, &offset); + assert_false(result.is_valid); + assert_uint_equal(result.err, LEXER_INT_OVERFLOW); // Technically it can trigger a buf overflow error but obvioulsy // it will trigger int overflow error first }