From 335b355d528625efc28c2e31bbf86fed0bcdadf7 Mon Sep 17 00:00:00 2001 From: gc87 Date: Sun, 26 Sep 2021 15:44:03 +0800 Subject: [PATCH] Add operation function of NEU_DTYPE_ERRORCODE type - Add test case --- include/neu_data_expr.h | 3 +++ src/base/neu_data_expr.c | 28 ++++++++++++++++++++++++++++ tests/data_val_test.cc | 24 ++++++++++++++++++++++++ 3 files changed, 55 insertions(+) diff --git a/include/neu_data_expr.h b/include/neu_data_expr.h index 3f440ad1..34f2ab6d 100644 --- a/include/neu_data_expr.h +++ b/include/neu_data_expr.h @@ -251,6 +251,7 @@ void neu_dvalue_init_int_val(neu_data_val_t *val, neu_int_val_t int_val); void neu_dvalue_init_string_val(neu_data_val_t * val, neu_string_val_t string_val); void neu_dvalue_init_data_val(neu_data_val_t *val, void *data); +void neu_dvalue_init_errorcode_val(neu_data_val_t *val, int32_t i32); /* The parameter cstr/bytes/array/vec is copy to neu_data_val_t */ @@ -295,6 +296,7 @@ int neu_dvalue_set_float(neu_data_val_t *val, float f32); int neu_dvalue_set_double(neu_data_val_t *val, double f64); int neu_dvalue_set_int_val(neu_data_val_t *val, neu_int_val_t int_val); int neu_dvalue_set_string_val(neu_data_val_t *val, neu_string_val_t string_val); +int neu_dvalue_set_errorcode(neu_data_val_t *val, int32_t i32); /* The parameter cstr/bytes/array/vec is copy to neu_data_val_t */ @@ -340,6 +342,7 @@ int neu_dvalue_get_int_val(neu_data_val_t *val, neu_int_val_t *p_int_val); int neu_dvalue_get_string_val(neu_data_val_t * val, neu_string_val_t *p_string_val); int neu_dvalue_get_data_val(neu_data_val_t *val, void **p_data); +int neu_dvalue_get_errorcode(neu_data_val_t *val, int32_t *p_i32); /* The parameter cstr/bytes/array/vec is copy from neu_data_val_t */ diff --git a/src/base/neu_data_expr.c b/src/base/neu_data_expr.c index ca254f7a..798cef97 100644 --- a/src/base/neu_data_expr.c +++ b/src/base/neu_data_expr.c @@ -362,6 +362,12 @@ void neu_dvalue_init_data_val(neu_data_val_t *val, void *data) val->val_data = data; } +void neu_dvalue_init_errorcode_val(neu_data_val_t *val, int32_t i32) +{ + val->type = NEU_DTYPE_ERRORCODE; + val->val_int32 = i32; +} + void neu_dvalue_init_copy_cstr(neu_data_val_t *val, char *cstr) { val->type = NEU_DTYPE_CSTR | NEU_DTYPE_PTR | NEU_DTYPE_EXTERN_PTR; @@ -685,6 +691,17 @@ int neu_dvalue_set_string_val(neu_data_val_t *val, neu_string_val_t string_val) } } +int neu_dvalue_set_errorcode(neu_data_val_t *val, int32_t i32) +{ + assert(val->type == NEU_DTYPE_ERRORCODE); + if (val->type == NEU_DTYPE_ERRORCODE) { + val->val_int32 = i32; + return 0; + } else { + return -1; + } +} + int neu_dvalue_set_cstr(neu_data_val_t *val, char *cstr) { neu_dtype_e type; @@ -1178,6 +1195,17 @@ int neu_dvalue_get_data_val(neu_data_val_t *val, void **p_data) } } +int neu_dvalue_get_errorcode(neu_data_val_t *val, int32_t *p_i32) +{ + assert(val->type == NEU_DTYPE_ERRORCODE); + if (val->type == NEU_DTYPE_ERRORCODE) { + *p_i32 = val->val_int32; + return 0; + } else { + return -1; + } +} + int neu_dvalue_get_cstr(neu_data_val_t *val, char **p_cstr) { neu_dtype_e val_type; diff --git a/tests/data_val_test.cc b/tests/data_val_test.cc index 6c923ce8..b2da8de3 100644 --- a/tests/data_val_test.cc +++ b/tests/data_val_test.cc @@ -141,6 +141,30 @@ TEST(DataValueTest, neu_dvalue_init_set_get_prim_val) EXPECT_EQ(0, neu_dvalue_get_double(val, &ret_double)); EXPECT_EQ(100010111010.010604, ret_double); neu_dvalue_free(val); + + /** test errorcode **/ + int32_t ret_error = 0; + val = neu_dvalue_new(NEU_DTYPE_ERRORCODE); + neu_dvalue_init_errorcode_val(val, -1); + EXPECT_EQ(0, neu_dvalue_get_errorcode(val, &ret_error)); + EXPECT_EQ(NEU_DTYPE_ERRORCODE, neu_dvalue_get_type(val)); + EXPECT_EQ(-1, ret_error); + + EXPECT_EQ(0, neu_dvalue_set_errorcode(val, 0)); + EXPECT_EQ(0, neu_dvalue_get_errorcode(val, &ret_error)); + EXPECT_EQ(0, ret_error); + + EXPECT_EQ(0, neu_dvalue_set_errorcode(val, 1)); + EXPECT_EQ(0, neu_dvalue_get_errorcode(val, &ret_error)); + EXPECT_EQ(1, ret_error); + neu_dvalue_free(val); + + val = neu_dvalue_new(NEU_DTYPE_ERRORCODE); + EXPECT_EQ(NEU_DTYPE_ERRORCODE, neu_dvalue_get_type(val)); + EXPECT_EQ(0, neu_dvalue_set_errorcode(val, 2)); + EXPECT_EQ(0, neu_dvalue_get_errorcode(val, &ret_error)); + EXPECT_EQ(2, ret_error); + neu_dvalue_free(val); } #define INT_VAL_TEST_STR "hello int-val"