more test coverage
[protos/libecoli.git] / lib / ecoli_node_expr_test.c
index c0e149a..935eec0 100644 (file)
@@ -40,6 +40,8 @@
 #include <ecoli_node_re_lex.h>
 #include <ecoli_node_expr.h>
 
+EC_LOG_TYPE_REGISTER(node_expr);
+
 struct my_eval_result {
        int val;
 };
@@ -49,7 +51,9 @@ ec_node_expr_test_eval_var(void **result, void *userctx,
        const struct ec_parsed *var)
 {
        const struct ec_strvec *vec;
-       struct my_eval_result *eval;
+       const struct ec_node *node;
+       struct my_eval_result *eval = NULL;
+       int64_t val;
 
        (void)userctx;
 
@@ -58,12 +62,16 @@ ec_node_expr_test_eval_var(void **result, void *userctx,
        if (ec_strvec_len(vec) != 1)
                return -EINVAL;
 
+       node = ec_parsed_get_node(var);
+       if (ec_node_int_getval(node, ec_strvec_val(vec, 0), &val) < 0)
+               return -EINVAL;
+
        eval = ec_malloc(sizeof(*eval));
        if (eval == NULL)
                return -ENOMEM;
 
-       eval->val = atoi(ec_strvec_val(vec, 0)); // XXX use strtol
-       printf("eval var %d\n", eval->val);
+       eval->val = val;
+       EC_LOG(EC_LOG_DEBUG, "eval var %d\n", eval->val);
        *result = eval;
 
        return 0;
@@ -88,7 +96,7 @@ ec_node_expr_test_eval_pre_op(void **result, void *userctx, void *operand,
        else
                return -EINVAL;
 
-       printf("eval pre_op %d\n", eval->val);
+       EC_LOG(EC_LOG_DEBUG, "eval pre_op %d\n", eval->val);
        *result = eval;
 
        return 0;
@@ -113,7 +121,7 @@ ec_node_expr_test_eval_post_op(void **result, void *userctx, void *operand,
        else
                return -EINVAL;
 
-       printf("eval post_op %d\n", eval->val);
+       EC_LOG(EC_LOG_DEBUG, "eval post_op %d\n", eval->val);
        *result = eval;
 
        return 0;
@@ -142,7 +150,7 @@ ec_node_expr_test_eval_bin_op(void **result, void *userctx, void *operand1,
        else
                return -EINVAL;
 
-       printf("eval bin_op %d\n", eval1->val);
+       EC_LOG(EC_LOG_DEBUG, "eval bin_op %d\n", eval1->val);
        ec_free(eval2);
        *result = eval1;
 
@@ -159,7 +167,7 @@ ec_node_expr_test_eval_parenthesis(void **result, void *userctx,
        (void)open_paren;
        (void)close_paren;
 
-       printf("eval paren\n");
+       EC_LOG(EC_LOG_DEBUG, "eval paren\n");
        *result = value;
 
        return 0;
@@ -190,8 +198,6 @@ static int ec_node_expr_test_eval(struct ec_node *lex_node,
        struct my_eval_result *eval;
        int ret;
 
-       /* XXX check node type (again and again) */
-
        p = ec_node_parse(lex_node, str);
        if (p == NULL)
                return -1;
@@ -205,7 +211,7 @@ static int ec_node_expr_test_eval(struct ec_node *lex_node,
        eval = result;
        assert(eval != NULL);
 
-       printf("result: %d (expected %d)\n", eval->val, val);
+       EC_LOG(EC_LOG_DEBUG, "result: %d (expected %d)\n", eval->val, val);
        if (eval->val == val)
                ret = 0;
        else
@@ -226,13 +232,13 @@ static int ec_node_expr_testcase(void)
        if (node == NULL)
                return -1;
 
-       ec_node_expr_set_val_node(node, ec_node_int(NULL, 0, UCHAR_MAX, 0));
-       ec_node_expr_add_bin_op(node, ec_node_str(NULL, "+"));
-       ec_node_expr_add_bin_op(node, ec_node_str(NULL, "*"));
-       ec_node_expr_add_pre_op(node, ec_node_str(NULL, "!"));  /* not */
-       ec_node_expr_add_post_op(node, ec_node_str(NULL, "^")); /* square */
-       ec_node_expr_add_parenthesis(node, ec_node_str(NULL, "("),
-               ec_node_str(NULL, ")"));
+       ec_node_expr_set_val_node(node, ec_node_int(EC_NO_ID, 0, UCHAR_MAX, 0));
+       ec_node_expr_add_bin_op(node, ec_node_str(EC_NO_ID, "+"));
+       ec_node_expr_add_bin_op(node, ec_node_str(EC_NO_ID, "*"));
+       ec_node_expr_add_pre_op(node, ec_node_str(EC_NO_ID, "!"));  /* not */
+       ec_node_expr_add_post_op(node, ec_node_str(EC_NO_ID, "^")); /* square */
+       ec_node_expr_add_parenthesis(node, ec_node_str(EC_NO_ID, "("),
+               ec_node_str(EC_NO_ID, ")"));
        ret |= EC_TEST_CHECK_PARSE(node, 1, "1");
        ret |= EC_TEST_CHECK_PARSE(node, 1, "1", "1");
        ret |= EC_TEST_CHECK_PARSE(node, 1, "1", "*");
@@ -248,7 +254,7 @@ static int ec_node_expr_testcase(void)
        ret |= EC_TEST_CHECK_PARSE(node, 5, "1", "+", "!", "1", "^");
 
        /* prepend a lexer to the expression node */
-       lex_node = ec_node_re_lex(NULL, ec_node_clone(node));
+       lex_node = ec_node_re_lex(EC_NO_ID, ec_node_clone(node));
        if (lex_node == NULL)
                goto fail;
 
@@ -302,7 +308,7 @@ fail:
 /* LCOV_EXCL_STOP */
 
 static struct ec_test ec_node_expr_test = {
-       .name = "expr",
+       .name = "node_expr",
        .test = ec_node_expr_testcase,
 };