#include "evaluator.h" #include "memory_pool.h" #include "testing.h" static memory_pool_t pool; static void number_1234_is_evaluated_as_1234(void) { init_memory_pool(&pool); expression_t *expression = allocate_expression(&pool); expression->is_number = true; expression->number = 1234; const int result = evaluate(expression); ASSERT_EQUAL(1234, result); } static void number_4321_is_evaluated_as_4321(void) { init_memory_pool(&pool); expression_t *expression = allocate_expression(&pool); expression->is_number = true; expression->number = 4321; const int result = evaluate(expression); ASSERT_EQUAL(4321, result); } static void sum_of_14_and_31_evaluates_to_45(void) { init_memory_pool(&pool); expression_t *operand0 = allocate_expression(&pool); operand0->is_number = true; operand0->number = 14; expression_t *operand1 = allocate_expression(&pool); operand1->is_number = true; operand1->number = 31; expression_t *expression = allocate_expression(&pool); expression->is_number = false; expression->application.operator= OPERATOR_ADD; expression->application.operands[0] = operand0; expression->application.operands[1] = operand1; const int result = evaluate(expression); ASSERT_EQUAL(45, result); } static void sum_of_72_and_6_evaluates_to_78(void) { init_memory_pool(&pool); expression_t *operand0 = allocate_expression(&pool); operand0->is_number = true; operand0->number = 72; expression_t *operand1 = allocate_expression(&pool); operand1->is_number = true; operand1->number = 6; expression_t *expression = allocate_expression(&pool); expression->is_number = false; expression->application.operator= OPERATOR_ADD; expression->application.operands[0] = operand0; expression->application.operands[1] = operand1; const int result = evaluate(expression); ASSERT_EQUAL(78, result); } static void sum_of_21_and_the_sum_of_9_and_31_evaluates_to_61(void) { init_memory_pool(&pool); expression_t *operand0 = allocate_expression(&pool); operand0->is_number = true; operand0->number = 21; expression_t *operand10 = allocate_expression(&pool); operand10->is_number = true; operand10->number = 9; expression_t *operand11 = allocate_expression(&pool); operand11->is_number = true; operand11->number = 31; expression_t *operand1 = allocate_expression(&pool); operand1->is_number = false; operand1->application.operator= OPERATOR_ADD; operand1->application.operands[0] = operand10; operand1->application.operands[1] = operand11; expression_t *expression = allocate_expression(&pool); expression->is_number = false; expression->application.operator= OPERATOR_ADD; expression->application.operands[0] = operand0; expression->application.operands[1] = operand1; const int result = evaluate(expression); ASSERT_EQUAL(61, result); } static void sum_of_the_sum_of_4_and_66_and_83_evaluates_to_153(void) { init_memory_pool(&pool); expression_t *operand00 = allocate_expression(&pool); operand00->is_number = true; operand00->number = 4; expression_t *operand01 = allocate_expression(&pool); operand01->is_number = true; operand01->number = 66; expression_t *operand0 = allocate_expression(&pool); operand0->is_number = false; operand0->application.operator= OPERATOR_ADD; operand0->application.operands[0] = operand00; operand0->application.operands[1] = operand01; expression_t *operand1 = allocate_expression(&pool); operand1->is_number = true; operand1->number = 83; expression_t *expression = allocate_expression(&pool); expression->is_number = false; expression->application.operator= OPERATOR_ADD; expression->application.operands[0] = operand0; expression->application.operands[1] = operand1; const int result = evaluate(expression); ASSERT_EQUAL(153, result); } static void subtraction_of_56_from_88_evaluates_to_32(void) { init_memory_pool(&pool); expression_t *operand0 = allocate_expression(&pool); operand0->is_number = true; operand0->number = 88; expression_t *operand1 = allocate_expression(&pool); operand1->is_number = true; operand1->number = 56; expression_t *expression = allocate_expression(&pool); expression->is_number = false; expression->application.operator= OPERATOR_SUBTRACT; expression->application.operands[0] = operand0; expression->application.operands[1] = operand1; const int result = evaluate(expression); ASSERT_EQUAL(32, result); } int main(void) { TESTING_BEGIN(); RUN_TEST(number_1234_is_evaluated_as_1234); RUN_TEST(number_4321_is_evaluated_as_4321); RUN_TEST(sum_of_14_and_31_evaluates_to_45); RUN_TEST(sum_of_72_and_6_evaluates_to_78); RUN_TEST(sum_of_21_and_the_sum_of_9_and_31_evaluates_to_61); RUN_TEST(sum_of_the_sum_of_4_and_66_and_83_evaluates_to_153); RUN_TEST(subtraction_of_56_from_88_evaluates_to_32); TESTING_END(); }