int main(int argc, char **argv) { AST_node *expr1, *expr2, *expr3; Eval_return ret_status; Value val; expr1= create_variable_node("x"); expr2= create_operator_node(ASSIGN, create_variable_node("x"), create_int_constant_node(3)); expr3= create_operator_node(TIMES, create_double_constant_node(2.01), create_variable_node("x")); ret_status= evaluate(expr1, &val); if(ret_status != NOT_EVALUATED) test_failed(__LINE__); ret_status= evaluate(expr2, &val); if(ret_status != EVALUATED || val.value_type != IS_INT_VALUE || val.number.int_value != 3) test_failed(__LINE__); ret_status= evaluate(expr1, &val); if(ret_status != EVALUATED || val.value_type != IS_INT_VALUE || val.number.int_value != 3) test_failed(__LINE__); ret_status= evaluate(expr3, &val); if(ret_status != EVALUATED || val.value_type != IS_DOUBLE_VALUE || val.number.double_value - 6.03 > 0.0001) test_failed(__LINE__); clear(&expr1); clear(&expr2); clear(&expr3); printf("Test passed!\n"); return 0; }
struct node *create_random_node() { struct node *n_node; int node_type = (rand() % 3) + 1; int key_val = 0; switch(node_type) { case 1: n_node = create_operator_node(); if (rand()%2 == 0) { n_node -> left = create_feature_node(); } else { n_node -> left = create_constant_node(); } key_val = (int)n_node -> key_value; if (operator_req[key_val-1]==2) { if (rand()%2 == 0) { n_node -> right = create_feature_node(); } else { n_node -> right = create_constant_node(); } } break; case 2: n_node = create_feature_node(); break; case 3: n_node = create_constant_node(); break; } return n_node; }
int main(int argc, char **argv) { AST_node *expr1, *expr2, *expr3; expr1= create_operator_node(PLUS, create_operator_node(PLUS, create_operator_node(PLUS, create_operator_node(PLUS, create_int_constant_node(5), create_int_constant_node(4)), create_int_constant_node(3)), create_int_constant_node(2)), create_int_constant_node(1)); print_expr(expr1); expr2= create_operator_node(EQUALS, create_operator_node(MODULUS, create_operator_node(PLUS, create_int_constant_node(3), create_int_constant_node(1)), create_int_constant_node(2)), create_operator_node(MODULUS, create_operator_node(MINUS, create_int_constant_node(3), create_int_constant_node(1)), create_int_constant_node(2))); print_expr(expr2); expr3= create_operator_node(ASSIGN_DIVIDE, create_variable_node("x"), create_operator_node(PLUS, create_operator_node(TIMES, create_double_constant_node(2.001), create_int_constant_node(4)), create_operator_node(MINUS, create_variable_node("z"), create_variable_node("q")))); print_expr(expr3); clear(&expr1); clear(&expr2); clear(&expr3); return 0; }