Second test, just pop, almost identical to first put important for asserting pop works because it is very needed

This commit is contained in:
2026-03-05 10:20:44 -06:00
parent 79f7e327ff
commit 194f1dd80f
2 changed files with 44 additions and 8 deletions

View File

@@ -7,7 +7,7 @@
// For identifing
typedef enum {
NODE_NUMBER,
NODE_OPERATOR,
NODE_BINARY_OP,
} ASTNodeType;
// For classify operators
@@ -41,10 +41,12 @@ typedef struct ASTNode {
ASTNodeType type;
union {
double number;
struct ASTNode *left;
struct ASTNode *right;
Operator op;
} operator;
struct {
struct ASTNode *left;
struct ASTNode *right;
Operator op;
} binary;
} data;
} ASTNode;
// I prefer ot have a dynamic array for storing the "tokens"

View File

@@ -9,20 +9,21 @@
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_NUMBER,
.operator = { .number = 90 }
.data = { .number = 90 }
};
ASTNode node2 = {
.type = NODE_NUMBER,
.operator = { .number = 80 }
.data = { .number = 80 }
};
ASTNode node3 = {
.type = NODE_NUMBER,
.operator = { .number = 70 }
.data = { .number = 70 }
};
assert_int_equal(ASTNodeArray_push(&arr, node1), ARRAY_OK);
@@ -35,11 +36,44 @@ static void test_array_push(void **state) {
assert_int_equal(ASTNodeArray_len(&arr), 3);
}
static void test_array_pop(void **state) {
(void) state;
ASTNodeArray arr = ASTNodeArray_init(2);
ASTNode node1 = {
.type = NODE_NUMBER,
.data = { .number = 90 }
};
ASTNode node2 = {
.type = NODE_NUMBER,
.data = { .number = 80 }
};
ASTNode node3 = {
.type = NODE_NUMBER,
.data = { .number = 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_NUMBER);
assert_int_equal(node4.data.number, 80);
}
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);