89 lines
3.1 KiB
C
Executable file
89 lines
3.1 KiB
C
Executable file
/*----------------------------------------------------------
|
|
* HTBLA-Leonding
|
|
* ---------------------------------------------------------
|
|
* Author: S. Schraml
|
|
* ----------------------------------------------------------
|
|
* Description:
|
|
* Test functions for Roman Number.
|
|
* ----------------------------------------------------------
|
|
*/
|
|
|
|
#include "test_roman_number.h"
|
|
#include "roman_number.h"
|
|
|
|
#include <stdio.h>
|
|
#include <string.h>
|
|
|
|
#include "shortcut.h"
|
|
|
|
char* number_strs[] = {"MDCCCCLXXXIIII", "CMXLIXIV", "V", "", "CXI", "CCLIX"};
|
|
int number_vals[] = {1984, 953, 5, 0, 111, 259};
|
|
int number_cnt = sizeof(number_vals) / sizeof(number_vals[0]);
|
|
|
|
struct Tuple {
|
|
int x;
|
|
int y;
|
|
int exp_res;
|
|
};
|
|
|
|
static struct Tuple gdc_values[] = {
|
|
{111, 259, 37},
|
|
{ 12, 9, 3},
|
|
{ 23, 92, 23},
|
|
{527, 899, 31},
|
|
{ 42, 42, 42},
|
|
{ 83, 97, 1},
|
|
};
|
|
static int gdc_value_cnt = sizeof(gdc_values) / sizeof(gdc_values[0]);
|
|
|
|
TEST(test_create_with_valid_number) {
|
|
for(int i = 0; i < number_cnt; i++) {
|
|
RomanNumber result = rn_create(number_strs[i]);
|
|
ASSERT_TRUE(rn_is_valid(result), MSG("Expected that string '%s' is be a valid number", number_strs[i]));
|
|
}
|
|
}
|
|
|
|
TEST(test_create_with_invalid_number) {
|
|
char* number = "MCDR";
|
|
RomanNumber result = rn_create(number);
|
|
ASSERT_TRUE(!rn_is_valid(result), MSG("Expected that string '%s' is not be a valid number", number));
|
|
}
|
|
|
|
TEST(test_create_with_null_string) {
|
|
RomanNumber result = rn_create(0);
|
|
ASSERT_TRUE(!rn_is_valid(result), MSG("Expected that NULL (%d) string is not a valid number", 0));
|
|
}
|
|
|
|
TEST(test_get_valid_value) {
|
|
for(int i = 0; i < number_cnt; i++) {
|
|
RomanNumber result = rn_create(number_strs[i]);
|
|
int value = rn_get_value(result);
|
|
ASSERT_TRUE(value == number_vals[i], MSG("Expected that string '%s' is converted to %d but retrieved %d", number_strs[i], number_vals[i], value));
|
|
}
|
|
}
|
|
|
|
TEST(test_get_value_from_invalid_number) {
|
|
char* number = "MCDR";
|
|
RomanNumber result = rn_create(number);
|
|
int value = rn_get_value(result);
|
|
ASSERT_TRUE(value < 0, MSG("Expected that value of string '%s' is less than 0, but got %d", number, value));
|
|
}
|
|
|
|
TEST(test_calc_roman_gcd) {
|
|
int exp_res = 37;
|
|
RomanNumber x = rn_create(number_strs[4]);
|
|
RomanNumber y = rn_create(number_strs[5]);
|
|
RomanNumber result = rn_gcd(x, y);
|
|
ASSERT_TRUE(rn_is_valid(result), MSG("Expected that result (%d) of GCD is a valid roman number", exp_res));
|
|
int value = rn_get_value(result);
|
|
ASSERT_TRUE(value == exp_res, MSG("Expected that result of GCD for strings '%s' and '%s' is '%d', but got '%d'", number_strs[4], number_strs[5], exp_res, value));
|
|
}
|
|
|
|
TEST(test_int_gdc) {
|
|
for(int i = 0; i < gdc_value_cnt; i++) {
|
|
int act_res = int_gcd(gdc_values[i].x, gdc_values[i].y);
|
|
ASSERT_TRUE(act_res == gdc_values[i].exp_res, MSG("Expected that GDC of %d and %d is %d, but got %d",
|
|
gdc_values[i].x, gdc_values[i].y, gdc_values[i].exp_res, act_res));
|
|
}
|
|
}
|
|
|