Skip to content

File test_computation_rational_data.c

File List > comp-rational_data > test > test_computation_rational_data.c

Go to the documentation of this file

#include "comp_rational_data.h"
#include "string.h"
#include "unity.h"

/******************************************************************************/
/*******************************Untested Frameworks****************************/
/******************************************************************************/

/******************************************************************************/
/******************************* Stubs ****************************************/
/******************************************************************************/

char key_buff[UTIL_TANG_DEFS_MAX_CROSSINGNUM * 100u]
[UTIL_TANG_DEFS_MAX_CROSSINGNUM * 100u];
char index_buff[UTIL_TANG_DEFS_MAX_CROSSINGNUM * 100u]
[UTIL_TANG_DEFS_MAX_CROSSINGNUM * 100u];
char value_buff[UTIL_TANG_DEFS_MAX_CROSSINGNUM * 100u]
[UTIL_TANG_DEFS_MAX_CROSSINGNUM * 100u];
size_t key_idx   = 0;
size_t index_idx = 0;
size_t value_idx = 0;

STATIC_INLINE_UINT8 stub_write_success(const char *key,
                                       const char *index,
                                       const char *value)
{
    strcpy(key_buff[key_idx], key);
    strcpy(index_buff[index_idx], index);
    strcpy(value_buff[value_idx], value);
    key_idx++;
    index_idx++;
    value_idx++;
    return STORE_DEFS_WRITE_SUCCESS;
}

STATIC_INLINE_UINT8 stub_write_fail(const char *key,
                                    const char *index,
                                    const char *value)
{
    strcpy(key_buff[key_idx], key);
    strcpy(index_buff[index_idx], index);
    strcpy(value_buff[value_idx], value);
    key_idx++;
    index_idx++;
    value_idx++;
    return STORE_DEFS_WRITE_FAIL;
}

STATIC_INLINE const char *stub_read(const char *key, const char *index)
{
    return value_buff[value_idx];
}

/******************************************************************************/
/*******************************Test Data**************************************/
/******************************************************************************/
note_tv_t tv;
char      tv_str[UTIL_TANG_DEFS_MAX_CROSSINGNUM * 2u];

/* this is tv: 1 3 2*/
note_tv_t tv_oe = { { 2, 3, 1 }, 3 };
char      output_oe[UTIL_TANG_DEFS_MAX_CROSSINGNUM * 5]
[UTIL_TANG_DEFS_MAX_CROSSINGNUM * 2u] =
{ "9", "4", "1", "4", UTIL_TANG_DEFS_INF_TANG_STR };

/* this is tv: 2 3 1*/
note_tv_t tv_oo = { { 1, 3, 2 }, 3 };
char      output_oo[UTIL_TANG_DEFS_MAX_CROSSINGNUM * 5]
[UTIL_TANG_DEFS_MAX_CROSSINGNUM * 2u] =
{ "9", "7", "2", "7", UTIL_TANG_DEFS_ONE_TANG_STR };

/* this is tv: 3 2 1*/
note_tv_t tv_eo = { { 1, 2, 3 }, 3 };
char      output_eo[UTIL_TANG_DEFS_MAX_CROSSINGNUM * 5]
[UTIL_TANG_DEFS_MAX_CROSSINGNUM * 2u] =
{ "10", "7", "3", "7", UTIL_TANG_DEFS_ZERO_TANG_STR };

size_t output_len = 5;
/* clang-format off */

comp_rational_data_config_t tc_write_success = {
                                          &stub_write_success,
                                          &tv,
                                          tv_str,
                                          UTIL_TANG_DEFS_MAX_CROSSINGNUM * 2u,};
comp_rational_data_config_t tc_write_fail = {
                                          &stub_write_fail,
                                          &tv,
                                          tv_str,
                                          UTIL_TANG_DEFS_MAX_CROSSINGNUM * 2u,};
comp_rational_data_config_t tc_null_buff = {
                                          &stub_write_fail,
                                          NULL,
                                          tv_str,
                                          UTIL_TANG_DEFS_MAX_CROSSINGNUM * 2u,};
comp_rational_data_config_t tc_null_str_buff = {
                                          &stub_write_fail,
                                          &tv,
                                          NULL,
                                          UTIL_TANG_DEFS_MAX_CROSSINGNUM * 2u,};

/* clang-format on */

/******************************************************************************/
/*******************************Test prep**************************************/
/******************************************************************************/

void setUp(void)
{
}

void tearDown(void)
{
}

/******************************************************************************/
/*******************************Test cases*************************************/
/******************************************************************************/

STATIC_INLINE void test_config(void)
{
    uint8_t ret_val = comp_rational_data_config(&tc_write_success);

    TEST_ASSERT_EQUAL_UINT8(ret_val, COMP_DEFS_CONFIG_SUCCESS);
    ret_val = comp_rational_data_config(NULL);
    TEST_ASSERT_EQUAL_UINT8(
        ret_val, COMP_RATIONAL_DAT_CONFIG_IS_NULL | COMP_DEFS_CONFIG_FAIL);
    ret_val = comp_rational_data_config(&tc_null_buff);
    TEST_ASSERT_EQUAL_UINT8(
        ret_val, COMP_RATIONAL_DAT_CONFIG_BUFFER | COMP_DEFS_CONFIG_FAIL);
    ret_val = comp_rational_data_config(&tc_null_str_buff);
    TEST_ASSERT_EQUAL_UINT8(
        ret_val, COMP_RATIONAL_DAT_CONFIG_STR_BUFFER | COMP_DEFS_CONFIG_FAIL);
}

STATIC_INLINE void test_result(void)
{
    uint8_t ret_val = comp_rational_data_config(&tc_write_success);
    const comp_rational_data_result_t *result;

    /* Odd/Even*/
    tc_write_success.tv_n = &tv_oe;
    TEST_ASSERT_EQUAL_UINT8(ret_val, COMP_DEFS_CONFIG_SUCCESS);
    ret_val = comp_rational_data_compute();
    TEST_ASSERT_EQUAL_UINT8(ret_val, COMP_DEFS_COMPUTE_SUCCESS);
    result = comp_rational_data_result();
    TEST_ASSERT_EQUAL_STRING(result->parity, UTIL_TANG_DEFS_INF_TANG_STR);
    TEST_ASSERT_EQUAL_UINT8(result->numerator, 9);
    TEST_ASSERT_EQUAL_UINT8(result->denominator, 4);
    TEST_ASSERT_EQUAL_UINT8(result->num_algebraic_equ, 1);
    TEST_ASSERT_EQUAL_UINT8(result->den_algebraic_equ, 4);
}

STATIC_INLINE void test_compute(void)
{
    uint8_t ret_val;
    size_t  i;

    /* Odd/Even*/
    tc_write_success.tv_n = &tv_oe;
    ret_val = comp_rational_data_config(&tc_write_success);
    TEST_ASSERT_EQUAL_UINT8(ret_val, COMP_DEFS_CONFIG_SUCCESS);
    ret_val = comp_rational_data_compute();
    TEST_ASSERT_EQUAL_UINT8(ret_val, COMP_DEFS_COMPUTE_SUCCESS);
    for (i = 0; i < output_len; i++)
    {
        TEST_ASSERT_EQUAL_STRING(output_oe[i], value_buff[i]);
    }
    key_idx   = 0;
    index_idx = 0;
    value_idx = 0;
    /* Even/Odd*/
    tc_write_success.tv_n = &tv_oo;
    ret_val = comp_rational_data_config(&tc_write_success);
    TEST_ASSERT_EQUAL_UINT8(ret_val, COMP_DEFS_CONFIG_SUCCESS);
    ret_val = comp_rational_data_compute();
    TEST_ASSERT_EQUAL_UINT8(ret_val, COMP_DEFS_COMPUTE_SUCCESS);
    for (i = 0; i < output_len; i++)
    {
        TEST_ASSERT_EQUAL_STRING(output_oo[i], value_buff[i]);
    }
    key_idx   = 0;
    index_idx = 0;
    value_idx = 0;
    /* Odd/Odd*/
    tc_write_success.tv_n = &tv_eo;
    ret_val = comp_rational_data_config(&tc_write_success);
    TEST_ASSERT_EQUAL_UINT8(ret_val, COMP_DEFS_CONFIG_SUCCESS);
    ret_val = comp_rational_data_compute();
    TEST_ASSERT_EQUAL_UINT8(ret_val, COMP_DEFS_COMPUTE_SUCCESS);
    for (i = 0; i < output_len; i++)
    {
        TEST_ASSERT_EQUAL_STRING(output_eo[i], value_buff[i]);
    }
}

/******************************************************************************/
/*******************************Test main**************************************/
/******************************************************************************/
int main(void)
{
    UNITY_BEGIN();

    RUN_TEST(test_config);
    RUN_TEST(test_compute);
    RUN_TEST(test_result);

    return UNITY_END();
}