This commit is contained in:
Marc Tismonar 2025-02-13 15:16:35 +01:00
parent 45200bb640
commit d6cffc16e4
12 changed files with 954 additions and 0 deletions

89
test_roman_number.c Executable file
View file

@ -0,0 +1,89 @@
/*----------------------------------------------------------
* 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));
}
}