Loading src/rsvp.c +16 −14 Original line number Diff line number Diff line Loading @@ -421,7 +421,7 @@ char* rsvp_data_to_string(rsvp_data_t* data, int double_precision) const char *type = rsvp_type_str[arg->type]; char *arg_value = NULL, *arg_name = NULL; size_t value_len = 0, arg_len = 0; int ret = 0; int ret = 0, index = 0; // "; NAME ( INT )=\0" arg_len = 1 + strlen(arg->name) + 1 + strlen(type) + 3; arg_name = (char*)malloc(arg_len); Loading @@ -438,7 +438,7 @@ char* rsvp_data_to_string(rsvp_data_t* data, int double_precision) case DBL: value_len = count_chars_in_double(arg->value.d, double_precision) + 1; arg_value = (char*)malloc(value_len); if (snprintf(arg_value, value_len, "%.5f", arg->value.d) != (value_len - 1)) if (snprintf(arg_value, value_len, dbl_format, arg->value.d) != (value_len - 1)) ret = -1; break; Loading @@ -458,11 +458,14 @@ char* rsvp_data_to_string(rsvp_data_t* data, int double_precision) break; case VECD: int index = 0; // [] value_len = 2; for (int i = 0; i < arg_len; i++) { rsvp_vecd_elem_t* elem = rsvp_var_get_vecd_elem(arg->value.vecd, i); for (int i = 0; i < arg->len; i++) { rsvp_vecd_elem_t* elem = rsvp_var_get_vecd_elem(arg, i); if (!elem) { ret = -1; break; } // NAME + = + DOUBLE + , or \0 value_len += strlen(elem->name) + 1 + count_chars_in_double(elem->value, double_precision) + 1; } Loading @@ -471,23 +474,22 @@ char* rsvp_data_to_string(rsvp_data_t* data, int double_precision) memset(arg_value, 0, value_len); arg_value[index++] = '['; for (int i = 0; i < arg_len; i++) { rsvp_vecd_elem_t* elem = rsvp_var_get_vecd_elem(arg->value.vecd, i); size_t dbl_len = count_chars_in_double(elem->value, double_precision) ; for (int i = 0; i < arg->len; i++) { rsvp_vecd_elem_t* elem = rsvp_var_get_vecd_elem(arg, i); size_t dbl_len = count_chars_in_double(elem->value, double_precision) + 1; char* dbl_val = (char*)malloc(dbl_len + 1); dbl_val = snprintf(dbl_val, dbl_len, dbl_format, elem->value); snprintf(dbl_val, dbl_len, dbl_format, elem->value); strcat(arg_value, elem->name); index += strlen(elem->name); arg_value[index++] = '='; strcat(arg_value, dbl_val); index += strlen(dbl_val); arg_value[index++] = ','; } ret = -1; arg_value[index - 1] = ']'; break; case VECS: int index = 0; for (int i = 0; i < arg->len; i++) { value_len += strlen(arg->value.vecs[i]) + 1; } Loading tests/CMakeLists.txt +4 −4 Original line number Diff line number Diff line Loading @@ -2,13 +2,13 @@ cmake_minimum_required(VERSION 3.20) project(tests) set(C_TEST c_test) set(CPP_TEST) set(CPP_TEST cpp_test) add_executable(${C_TEST} rsvp_test.cpp) target_link_libraries(${C_TEST} rsvp GTest::gtest_main) target_link_libraries(${C_TEST} rsvp) add_executable(${CPP_TEST}pp testpp.cpp) target_link_libraries(${CPP_TEST}pp rsvppp) include(GoogleTest) gtest_discover_tests(${C_TEST}) No newline at end of file # include(GoogleTest) # gtest_discover_tests(${C_TEST}) No newline at end of file tests/rsvp_test.cpp +34 −25 Original line number Diff line number Diff line #include <stdlib.h> #include <stdio.h> #include <string.h> #include "gtest/gtest.h" // #include "gtest/gtest.h" extern "C" { #include "rsvp.h" Loading @@ -9,34 +9,43 @@ extern "C" { #define TEST_DATA "START;S(STR)=PASS" TEST(ParseTest, DataToStringConversion) { char input[] = "START;S(STR)=PASS;TEXT(VECS)=LINE1\tLINE2"; // TEST(ParseTest, DataToStringConversion) // { // char input[] = "START;S(STR)=PASS;TEXT(VECS)=LINE1\tLINE2;VECD=[X=1.0,Y=2.0,Z=3.0]"; rsvp_data_t* data = rsvp_data_parse(input); char *str = rsvp_data_to_string(data); EXPECT_STREQ(str, input); // rsvp_data_t* data = rsvp_data_parse(input); // char *str = rsvp_data_to_string(data, 5); // EXPECT_STREQ(str, input); free(str); rsvp_data_free(data); } // free(str); // rsvp_data_free(data); // } // TEST(BuildTest, BuildDataFromScratch) // { // rsvp_data_t* data = rsvp_data_create("START"); // rsvp_data_add_var(data, rsvp_var_create_string("S", "PASS")); // EXPECT_STREQ(TEST_DATA, rsvp_data_to_string(data, 5)); TEST(BuildTest, BuildDataFromScratch) // rsvp_data_free(data); // } int main() { rsvp_data_t* data = rsvp_data_create("START"); rsvp_data_add_var(data, rsvp_var_create_string("S", "PASS")); EXPECT_STREQ(TEST_DATA, rsvp_data_to_string(data)); char test_str[] = "START;STATUS(STR)=PASS;T(DBL)=4.50000;COUNT(INT)=3;USER(STR)=JEAN;FOUND(BOOL)=FALSE;POS(VECD)=[X=1.00000,Y=2.00000,Z=3.00000];TEXT(VECS)=LINE1\tLINE2"; rsvp_data_t* data = rsvp_data_parse(test_str); char *str = rsvp_data_to_string(data, 5); rsvp_data_free(data); if (strcmp(test_str, str) != 0) { printf("String don't match\n"); } // int main() // { // char test_str[] = "START;STATUS=PASS;T(DBL)=4.5;COUNT(INT)=3;USER(STR)=JEAN;FOUND(BOOL)=FALSE;POS(VECD)=[X=1.0,Y=2.0,Z=3.0];TEXT(VECS)=LINE1\tLINE2"; // rsvp_data_t* data = rsvp_data_parse(test_str); // char *str = rsvp_data_to_string(data); // printf("%s\n", str); if (strlen(test_str) != strlen(str)) { printf("String don't have the same length\n"); } // free(str); // rsvp_data_free(data); // } No newline at end of file printf("%s\n%s\n", test_str, str); free(str); rsvp_data_free(data); } No newline at end of file Loading
src/rsvp.c +16 −14 Original line number Diff line number Diff line Loading @@ -421,7 +421,7 @@ char* rsvp_data_to_string(rsvp_data_t* data, int double_precision) const char *type = rsvp_type_str[arg->type]; char *arg_value = NULL, *arg_name = NULL; size_t value_len = 0, arg_len = 0; int ret = 0; int ret = 0, index = 0; // "; NAME ( INT )=\0" arg_len = 1 + strlen(arg->name) + 1 + strlen(type) + 3; arg_name = (char*)malloc(arg_len); Loading @@ -438,7 +438,7 @@ char* rsvp_data_to_string(rsvp_data_t* data, int double_precision) case DBL: value_len = count_chars_in_double(arg->value.d, double_precision) + 1; arg_value = (char*)malloc(value_len); if (snprintf(arg_value, value_len, "%.5f", arg->value.d) != (value_len - 1)) if (snprintf(arg_value, value_len, dbl_format, arg->value.d) != (value_len - 1)) ret = -1; break; Loading @@ -458,11 +458,14 @@ char* rsvp_data_to_string(rsvp_data_t* data, int double_precision) break; case VECD: int index = 0; // [] value_len = 2; for (int i = 0; i < arg_len; i++) { rsvp_vecd_elem_t* elem = rsvp_var_get_vecd_elem(arg->value.vecd, i); for (int i = 0; i < arg->len; i++) { rsvp_vecd_elem_t* elem = rsvp_var_get_vecd_elem(arg, i); if (!elem) { ret = -1; break; } // NAME + = + DOUBLE + , or \0 value_len += strlen(elem->name) + 1 + count_chars_in_double(elem->value, double_precision) + 1; } Loading @@ -471,23 +474,22 @@ char* rsvp_data_to_string(rsvp_data_t* data, int double_precision) memset(arg_value, 0, value_len); arg_value[index++] = '['; for (int i = 0; i < arg_len; i++) { rsvp_vecd_elem_t* elem = rsvp_var_get_vecd_elem(arg->value.vecd, i); size_t dbl_len = count_chars_in_double(elem->value, double_precision) ; for (int i = 0; i < arg->len; i++) { rsvp_vecd_elem_t* elem = rsvp_var_get_vecd_elem(arg, i); size_t dbl_len = count_chars_in_double(elem->value, double_precision) + 1; char* dbl_val = (char*)malloc(dbl_len + 1); dbl_val = snprintf(dbl_val, dbl_len, dbl_format, elem->value); snprintf(dbl_val, dbl_len, dbl_format, elem->value); strcat(arg_value, elem->name); index += strlen(elem->name); arg_value[index++] = '='; strcat(arg_value, dbl_val); index += strlen(dbl_val); arg_value[index++] = ','; } ret = -1; arg_value[index - 1] = ']'; break; case VECS: int index = 0; for (int i = 0; i < arg->len; i++) { value_len += strlen(arg->value.vecs[i]) + 1; } Loading
tests/CMakeLists.txt +4 −4 Original line number Diff line number Diff line Loading @@ -2,13 +2,13 @@ cmake_minimum_required(VERSION 3.20) project(tests) set(C_TEST c_test) set(CPP_TEST) set(CPP_TEST cpp_test) add_executable(${C_TEST} rsvp_test.cpp) target_link_libraries(${C_TEST} rsvp GTest::gtest_main) target_link_libraries(${C_TEST} rsvp) add_executable(${CPP_TEST}pp testpp.cpp) target_link_libraries(${CPP_TEST}pp rsvppp) include(GoogleTest) gtest_discover_tests(${C_TEST}) No newline at end of file # include(GoogleTest) # gtest_discover_tests(${C_TEST}) No newline at end of file
tests/rsvp_test.cpp +34 −25 Original line number Diff line number Diff line #include <stdlib.h> #include <stdio.h> #include <string.h> #include "gtest/gtest.h" // #include "gtest/gtest.h" extern "C" { #include "rsvp.h" Loading @@ -9,34 +9,43 @@ extern "C" { #define TEST_DATA "START;S(STR)=PASS" TEST(ParseTest, DataToStringConversion) { char input[] = "START;S(STR)=PASS;TEXT(VECS)=LINE1\tLINE2"; // TEST(ParseTest, DataToStringConversion) // { // char input[] = "START;S(STR)=PASS;TEXT(VECS)=LINE1\tLINE2;VECD=[X=1.0,Y=2.0,Z=3.0]"; rsvp_data_t* data = rsvp_data_parse(input); char *str = rsvp_data_to_string(data); EXPECT_STREQ(str, input); // rsvp_data_t* data = rsvp_data_parse(input); // char *str = rsvp_data_to_string(data, 5); // EXPECT_STREQ(str, input); free(str); rsvp_data_free(data); } // free(str); // rsvp_data_free(data); // } // TEST(BuildTest, BuildDataFromScratch) // { // rsvp_data_t* data = rsvp_data_create("START"); // rsvp_data_add_var(data, rsvp_var_create_string("S", "PASS")); // EXPECT_STREQ(TEST_DATA, rsvp_data_to_string(data, 5)); TEST(BuildTest, BuildDataFromScratch) // rsvp_data_free(data); // } int main() { rsvp_data_t* data = rsvp_data_create("START"); rsvp_data_add_var(data, rsvp_var_create_string("S", "PASS")); EXPECT_STREQ(TEST_DATA, rsvp_data_to_string(data)); char test_str[] = "START;STATUS(STR)=PASS;T(DBL)=4.50000;COUNT(INT)=3;USER(STR)=JEAN;FOUND(BOOL)=FALSE;POS(VECD)=[X=1.00000,Y=2.00000,Z=3.00000];TEXT(VECS)=LINE1\tLINE2"; rsvp_data_t* data = rsvp_data_parse(test_str); char *str = rsvp_data_to_string(data, 5); rsvp_data_free(data); if (strcmp(test_str, str) != 0) { printf("String don't match\n"); } // int main() // { // char test_str[] = "START;STATUS=PASS;T(DBL)=4.5;COUNT(INT)=3;USER(STR)=JEAN;FOUND(BOOL)=FALSE;POS(VECD)=[X=1.0,Y=2.0,Z=3.0];TEXT(VECS)=LINE1\tLINE2"; // rsvp_data_t* data = rsvp_data_parse(test_str); // char *str = rsvp_data_to_string(data); // printf("%s\n", str); if (strlen(test_str) != strlen(str)) { printf("String don't have the same length\n"); } // free(str); // rsvp_data_free(data); // } No newline at end of file printf("%s\n%s\n", test_str, str); free(str); rsvp_data_free(data); } No newline at end of file