} END_TEST

/********************** Combine two single digit values ***********************/
START_TEST(concatinate_all_the_digits_two_single_digit_values) {
   RomanNumber rnFirst = newRomanNumber("I");
   RomanNumber rnSecond = newRomanNumber("I");

   RomanNumber concat = rnConcatinate(rnFirst, rnSecond);

   ck_assert_str_eq("II", to_string(concat));
} END_TEST
} END_TEST

/***************** Combine a single digit to multiple digits ******************/
START_TEST(concatinate_all_the_digits_of_a_single_and_double_digit_value) {
   RomanNumber rnFirst = newRomanNumber("I");
   RomanNumber rnSecond = newRomanNumber("VI");

   RomanNumber concat = rnConcatinate(rnFirst, rnSecond);

   ck_assert_str_eq("IVI", to_string(concat));
} END_TEST
} END_TEST

/****************** Concatenate two non-standardized numbers ******************/
START_TEST(concatinate_all_the_digits_of_two_nonstandard_values) {
   RomanNumber rnFirst = newRomanNumber("XVIIII");
   RomanNumber rnSecond = newRomanNumber("XVIIII");

   RomanNumber concat = rnConcatinate(rnFirst, rnSecond);

   ck_assert_str_eq("XVIIIIXVIIII", to_string(concat));
} END_TEST
} END_TEST

/************* Concatenate single digit to non-standardized value *************/
START_TEST(concatinate_all_the_digits_of_a_single_and_nonstandard_value) {
   RomanNumber rnFirst = newRomanNumber("I");
   RomanNumber rnSecond = newRomanNumber("XVIIII");

   RomanNumber concat = rnConcatinate(rnFirst, rnSecond);

   ck_assert_str_eq("IXVIIII", to_string(concat));
} END_TEST
} END_TEST

/************** Concatenate multi-digit value to a complex value **************/
START_TEST(concatinate_all_the_digits_of_two_complex_values) {
   RomanNumber rnFirst = newRomanNumber("MDCCCCLXXXXVIIII");
   RomanNumber rnSecond = newRomanNumber("MDCCCCLXXXXVIIII");

   RomanNumber concat = rnConcatinate(rnFirst, rnSecond);

   ck_assert_str_eq("MDCCCCLXXXXVIIIIMDCCCCLXXXXVIIII", to_string(concat));
} END_TEST
예제 #6
0
} END_TEST

/******************** Test Subtract Function, start simple 10-5=5 *******************/
START_TEST(subtraction_10_minus_5_equals_5) {
   RomanNumber rn1 = newRomanNumber("X");
   RomanNumber rn2 = newRomanNumber("V");

   RomanNumber difference = rnSubtract(rn1, rn2);

   ck_assert_str_eq("V",  to_string(difference));
   ck_assert_int_eq(5, to_a(difference));
} END_TEST
예제 #7
0
} END_TEST

/******* First Value has digit multi levels above the largest in Second *******/
START_TEST(create_function_to_breakdown_digit_first_has_digit_multiple_levels_higher) {
   RomanNumber rn1 = newRomanNumber("L");
   RomanNumber rn2 = newRomanNumber("VI");

   rnBreakdownDigit(&rn1, &rn2);

   ck_assert_str_eq("XXXXX",  to_string(rn1));
   ck_assert_str_eq("VI",  to_string(rn2));
} END_TEST
예제 #8
0
} END_TEST

/********** First Value has digit one greater than largest in Second **********/
START_TEST(create_function_to_breakdown_digit_first_has_digit_one_larger) {
   RomanNumber rn1 = newRomanNumber("LX");
   RomanNumber rn2 = newRomanNumber("VI");

   rnBreakdownDigit(&rn1, &rn2);

   ck_assert_str_eq("LVV",  to_string(rn1));
   ck_assert_str_eq("VI",  to_string(rn2));
} END_TEST
예제 #9
0
} END_TEST

/********** None of the values in the Second value exist in the First *********/
START_TEST(test_eleminate_duplictes_where_no_digits_are_in_common) {
   RomanNumber rn1 = newRomanNumber("LX");
   RomanNumber rn2 = newRomanNumber("VI");

   rnEliminateDuplicates(&rn1, &rn2);

   ck_assert_str_eq("LX",  to_string(rn1));
   ck_assert_str_eq("VI",  to_string(rn2));
} END_TEST
예제 #10
0
} END_TEST

/* Some of the values in the Second Value exit in the First but not all of them */
START_TEST(test_eleminate_duplictes_where_only_some_of_second_digits_exist_in_first) {
   RomanNumber rn1 = newRomanNumber("LXI");
   RomanNumber rn2 = newRomanNumber("LVI");

   rnEliminateDuplicates(&rn1, &rn2);

   ck_assert_str_eq("X",  to_string(rn1));
   ck_assert_str_eq("V",  to_string(rn2));
} END_TEST
예제 #11
0
} END_TEST

/** Second value contains only digits that are duplicated in the First Value **/
START_TEST(test_eleminate_duplictes_where_second_is_subset_of_first) {
   RomanNumber rn1 = newRomanNumber("XVII");
   RomanNumber rn2 = newRomanNumber("VI");

   rnEliminateDuplicates(&rn1, &rn2);

   ck_assert_str_eq("XI",  to_string(rn1));
   ck_assert_str_eq("",  to_string(rn2));
} END_TEST
예제 #12
0
} END_TEST

/******** Test Elimination of Duplicates when both values are the same ********/
START_TEST(test_eleminate_duplictes_where_both_values_are_the_same) {
   RomanNumber rn1 = newRomanNumber("II");
   RomanNumber rn2 = newRomanNumber("II");

   rnEliminateDuplicates(&rn1, &rn2);

   ck_assert_str_eq("",  to_string(rn1));
   ck_assert_str_eq("",  to_string(rn2));
} END_TEST
예제 #13
0
} END_TEST

/***** Test Add Function with triple digit numbers, exercising full suite *****/
START_TEST(test_add_function_with_complex_numbers_143_plus_352_equals_495) {
   RomanNumber rn1 = newRomanNumber("CXLIII");
   RomanNumber rn2 = newRomanNumber("CCCLII");

   RomanNumber sum = rnAdd(rn1, rn2);

   ck_assert_str_eq("CDXCV",  to_string(sum));
   ck_assert_int_eq(495, to_a(sum));
} END_TEST
예제 #14
0
} END_TEST

/*** Test Add Function, using two digit numbers that require simplification ***/
START_TEST(test_add_function_with_moderately_complex_numbers_15_plus_17_equals_32) {
   RomanNumber rn1 = newRomanNumber("XV");
   RomanNumber rn2 = newRomanNumber("XVII");

   RomanNumber sum = rnAdd(rn1, rn2);

   ck_assert_str_eq("XXXII",  to_string(sum));
   ck_assert_int_eq(32, to_a(sum));
} END_TEST
예제 #15
0
} END_TEST

/**************** Test Add Function, using larger digits, 5+2=7 ***************/
START_TEST(test_add_function_with_simple_math_5_plus_2_equals_7) {
   RomanNumber rn1 = newRomanNumber("V");
   RomanNumber rn2 = newRomanNumber("II");

   RomanNumber sum = rnAdd(rn1, rn2);

   ck_assert_str_eq("VII",  to_string(sum));
   ck_assert_int_eq(7, to_a(sum));
} END_TEST
예제 #16
0
} END_TEST

/********************** Test Subtract Function, complex results *********************/
START_TEST(subtraction_complex_result) {
   RomanNumber rn1 = newRomanNumber("CL");
   RomanNumber rn2 = newRomanNumber("LX");

   RomanNumber difference = rnSubtract(rn1, rn2);

   ck_assert_str_eq("XC",  to_string(difference));
   ck_assert_int_eq(90, to_a(difference));
} END_TEST
예제 #17
0
} END_TEST

/******************** Test Subtract Function, start simple 10-1=9 *******************/
START_TEST(subtraction_10_minus_1_equals_9_subtractive_result) {
   RomanNumber rn1 = newRomanNumber("X");
   RomanNumber rn2 = newRomanNumber("I");

   RomanNumber difference = rnSubtract(rn1, rn2);

   ck_assert_str_eq("IX",  to_string(difference));
   ck_assert_int_eq(9, to_a(difference));
} END_TEST
} END_TEST

/*******************************************************************************
 * Concatinate digits of two values into one new one                           *
 ******************************************************************************/

/******** Create a function to create one value from the digits of two ********/
START_TEST(concatinate_all_the_digits_of_two_numbers_into_a_new_value) {
   RomanNumber rnFirst = newRomanNumber("MDC");
   RomanNumber rnSecond = newRomanNumber("LXVI");

   RomanNumber concat = rnConcatinate(rnFirst, rnSecond);

   ck_assert_str_eq("MDCLXVI", to_string(concat));
} END_TEST
예제 #19
0
} END_TEST

/*******************************************************************************
 * Cancel Redundant digits between two values                                  *
 ******************************************************************************/

/******** Create a function to eliminate duplicated between two values ********/
START_TEST(create_function_to_erase_duplicate_digits_between_two_values) {
   RomanNumber rn1 = newRomanNumber("MDCL");
   RomanNumber rn2 = newRomanNumber("XVI");

   rnEliminateDuplicates(&rn1, &rn2);

   ck_assert_str_eq("MDCL",  to_string(rn1));
   ck_assert_str_eq("XVI",  to_string(rn2));
} END_TEST
예제 #20
0
} END_TEST

/*******************************************************************************
 * Use above API to add two roman numbers                                      *
 ******************************************************************************/

/******************** Test Add Function, start simple 1+1=2 *******************/
START_TEST(create_function_to_add_two_numbers) {
   RomanNumber rn1 = newRomanNumber("I");
   RomanNumber rn2 = newRomanNumber("I");

   RomanNumber sum = rnAdd(rn1, rn2);

   ck_assert_str_eq("II",  to_string(sum));
   ck_assert_int_eq(2, to_a(sum));
} END_TEST
} END_TEST

/********************** Initialize a Complex Number Value *********************/
START_TEST(initialize_a_value_with_complex_structure) {
   RomanNumber rn = newRomanNumber("MCMXCIX");

   ck_assert_int_eq(rn.Size, 7);

   ck_assert(rn.Digit[0].Symbol == 'M');
   ck_assert_int_eq(rn.Digit[0].Value, 1000);

   ck_assert(rn.Digit[1].Symbol == 'C');
   ck_assert_int_eq(rn.Digit[1].Value, -100);

   ck_assert(rn.Digit[2].Symbol == 'M');
   ck_assert_int_eq(rn.Digit[2].Value, 1000);

   ck_assert(rn.Digit[3].Symbol == 'X');
   ck_assert_int_eq(rn.Digit[3].Value, -10);

   ck_assert(rn.Digit[4].Symbol == 'C');
   ck_assert_int_eq(rn.Digit[4].Value, 100);

   ck_assert(rn.Digit[5].Symbol == 'I');
   ck_assert_int_eq(rn.Digit[5].Value, -1);

   ck_assert(rn.Digit[6].Symbol == 'X');
   ck_assert_int_eq(rn.Digit[6].Value, 10);
} END_TEST
예제 #22
0
} END_TEST

/*******************************************************************************
 * Breakdown one digit in the first value, that is larger than the largest in  *
 * the second value                                                            *
 ******************************************************************************/

/* Create function to break down digit in first value larger than largest digit in second value */
START_TEST(create_function_to_breakdown_digit) {
   RomanNumber rn1 = newRomanNumber("MDCL");
   RomanNumber rn2 = newRomanNumber("XVI");

   rnBreakdownDigit(&rn1, &rn2);

   ck_assert_str_eq("MDCXXXXX",  to_string(rn1));
   ck_assert_str_eq("XVI",  to_string(rn2));
} END_TEST
예제 #23
0
} END_TEST


/*******************************************************************************
 * Use above API to subtract two roman numbers                                 *
 ******************************************************************************/

/******************** Test Subtract Function, start simple 2-1=1 *******************/
START_TEST(create_function_to_subtract_two_numbers) {
   RomanNumber rn1 = newRomanNumber("II");
   RomanNumber rn2 = newRomanNumber("I");

   RomanNumber difference = rnSubtract(rn1, rn2);

   ck_assert_str_eq("I",  to_string(difference));
   ck_assert_int_eq(1, to_a(difference));
} END_TEST
} END_TEST

/**** Create a number from the string "MCMXCIX" -> toInt should return 1999 ***/
START_TEST(roman_number_MCMXCIX_should_have_value_1999) {
   RomanNumber rn = newRomanNumber("MCMXCIX");
   uint32_t value = to_a(rn);

   ck_assert_int_eq(value, 1999);
} END_TEST
} END_TEST

/******** Create a number from the string "VI" -> toInt should return 6 *******/
START_TEST(roman_number_VI_should_have_value_6) {
   RomanNumber rn = newRomanNumber("VI");
   uint32_t value = to_a(rn);

   ck_assert_int_eq(value, 6);
} END_TEST
예제 #26
0
} END_TEST

/************* Test a complex number with multiple substitutions **************/
START_TEST(reintroduce_subtractive_complex_number) {
   RomanNumber rn = newRomanNumber("MMMDCCCCLXXXXVIII");

   rnRewriteSubtractive(&rn);

   ck_assert_str_eq("MMMCMXCVIII", to_string(rn));
} END_TEST
} END_TEST

/*************** Testing Remove Subtractive with complex value ****************/
START_TEST(substitute_for_any_subtractives_complex_subtractive_value) {
   RomanNumber rn = newRomanNumber("MCMXCIX");

   rnRemoveSubtractive(&rn);

   ck_assert_str_eq("MDCCCCLXXXXVIIII", to_string(rn));
} END_TEST
} END_TEST

/* Testing a simple number consisting of only a single value needing conversion */
START_TEST(substitute_for_any_subtractives_simple_subtractive_value) {
   RomanNumber rn = newRomanNumber("IV");

   rnRemoveSubtractive(&rn);

   ck_assert_str_eq("IIII", to_string(rn));
} END_TEST
} END_TEST

/*** A single digit can not be out of order, so it should not change value ****/
START_TEST(substitute_for_any_subtractives_single_digit_value) {
   RomanNumber rn = newRomanNumber("I");

   rnRemoveSubtractive(&rn);

   ck_assert_str_eq("I", to_string(rn));
} END_TEST
} END_TEST

/***** Initialize a simple value then check the structure that comes back *****/
START_TEST(initialize_roman_number_with_a_simple_single_digit_value) {
   RomanNumber rn = newRomanNumber("I");

   ck_assert_int_eq(rn.Size, 1);
   ck_assert(rn.Digit[0].Symbol == 'I');
   ck_assert_int_eq(rn.Digit[0].Value, 1);
} END_TEST