Commit 7c082c04 authored by Gallacchi Mattia's avatar Gallacchi Mattia
Browse files

Add VECD to string conversion

parent 30a451cb
Loading
Loading
Loading
Loading
+16 −14
Original line number Diff line number Diff line
@@ -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);
@@ -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;

@@ -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;
                }
@@ -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;
                }
+4 −4
Original line number Diff line number Diff line
@@ -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
+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"
@@ -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