/*---------------------------------------------------------- * HTBLA-Leonding * --------------------------------------------------------- * Author: S. Schraml * ---------------------------------------------------------- * Description: * Test functions for Roman Number. * ---------------------------------------------------------- */ #include "test_roman_number.h" #include "roman_number.h" #include #include #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)); } }