END_TEST START_TEST(given_negative_1_when_to_roman_then_negative_numbers_are_not_allowed) { char *result = to_roman(-1); ck_assert_str_eq(result, "Negative numbers are not allowed"); ck_assert_int_eq(errno, ROMAN_NEGATIVE_NOT_VALID); }
END_TEST START_TEST(given_0_when_to_roman_then_zero_is_not_a_valid_roman_number) { char *result = to_roman(0); ck_assert_str_eq(result, "Zero is not a valid roman number"); ck_assert_int_eq(errno, ROMAN_ZERO_IS_NOT_VALID); }
int main() { for (int i = 1; i <= 4000; ++i) { std::cout << to_roman(i) << std::endl; } }
END_TEST START_TEST(given_4000_when_to_roman_then_roman_number_too_large) { char *result = to_roman(4000); ck_assert_str_eq(result, "Resulting value is not valid"); ck_assert_int_eq(errno, ROMAN_NUMERAL_TOO_LARGE); }
int main(int argc, char **argv) { int val; if(argc != 2) { (void) printf("Usage: %s value\n", argv[0]); return -1; } val = atoi(argv[1]); (void) printf("%d in roman is %s\n", val, to_roman(val)); return 0; }
int main() { int inp; scanf("%d", &inp); printf("%s\n", to_roman(inp)); return 0; }
char * add_roman_numerals(const char *first, const char *second) { if(!is_roman_valid(first)) { return "First roman numeral is not valid"; } if(!is_roman_valid(second)) { return "Second roman numeral is not valid"; } int firstArabic = to_arabic(first); int secondArabic = to_arabic(second); return to_roman(firstArabic + secondArabic); }
char* to_roman (int i) { char* result = calloc ( i+1, 1 ); if (i >= 5) return concatenate_and_free_target( "V", to_roman(i-5) ); if (i == 4) return strdup ( "IV" ); memset (result, 'I', i); return result; }
char * subtract_roman_numerals(const char *first, const char *second) { if(!is_roman_valid(first)) { return "First roman numeral is not valid"; } if(!is_roman_valid(second)) { return "Second roman numeral is not valid"; } int firstArabic = to_arabic(first); int secondArabic = to_arabic(second); if(firstArabic < secondArabic) { return "Invalid subtraction second number is greater than first number"; } return to_roman(firstArabic - secondArabic); }
END_TEST START_TEST(given_90_when_to_roman_then_XC) { char *result = to_roman(90); ck_assert_str_eq(result, "XC"); }
void date_to_roman(struct tm* t, char* s, verb_struct verbosity, int ad, int leap) { int kni; /* Which of Kalends, Nones or Ides is the next *day*/ /* Kalends=1, Nones=2, Ides=3 */ int n; /* Number of days to the next */ char numeral[80], num_year[80]; int bis; /* Is it the second of the two a.d. V Kal. Mar. of a leap year? */ int year;/* In special cases (end of december), the year verbose and */ int month;/* terse are non-identical. */ mode m; bis=0; month=t->tm_mon; if(leap!=0 && t->tm_mon==2 && t->tm_mday>23) { month++; /* Special treatment for leap year days!! */ switch(t->tm_mday) { case 24: n=6; break; case 25: n=6; bis=1; break; case 26: n=5; break; case 27: n=4; break; case 28: n=3; break; case 29: n=PRID; /* pridie */ break; default: /* should **NEVER** occur */ break; } kni=1; } else if(t->tm_mon==3 || t->tm_mon==7 || t->tm_mon==10 || t->tm_mon==5) { switch(t->tm_mday) { case 1: kni=1; n=DIES; break; case 2: kni=1; n=POST; break; case 3: case 4: case 5: kni=2; n=8-t->tm_mday; break; case 6: kni=2; n=PRID; break; case 7: kni=2; n=DIES; break; case 8: kni=2; n=POST; break; case 9: case 10: case 11: case 12: case 13: kni=3; n=16-t->tm_mday; break; case 14: kni=3; n=PRID; break; case 15: kni=3; n=DIES; break; case 16: kni=3; n=POST; break; default: kni=1; month++; n=33-t->tm_mday; break; } } else { switch(t->tm_mday) { case 1: kni=1; n=DIES; break; case 2: kni=1; n=POST; break; case 3: kni=2; n=3; break; case 4: kni=2; n=PRID; break; case 5: kni=2; n=DIES; break; case 6: kni=2; n=POST; break; case 7: case 8: case 9: case 10: case 11: kni=3; n=14-t->tm_mday; break; case 12: kni=3; n=PRID; break; case 13: kni=3; n=DIES; break; case 14: kni=3; n=POST; break; default: kni=1; month++; if(t->tm_mon==2) n=30-t->tm_mday; else if(t->tm_mon==4 || t->tm_mon==6 || t->tm_mon==9 || t->tm_mon==11) n=32-t->tm_mday; else { n=33-t->tm_mday; } } } /* What if we have a day in the end of December? */ if(month==13) { month=1; year=t->tm_year+1; } else { year=t->tm_year; } if(!verbosity.year) /* Year non-verbose */ { m.numeral=1; to_roman(year,num_year,m); } if(!verbosity.day && !verbosity.year) /* Nonverbose display */ { if(n==DIES) /* On a main day */ { sprintf(s,"%s %s %s",terse[kni],month_terse[month], num_year); return; } else { if(n==POST) /* postridie */ { sprintf(s,"%s %s %s %s",pripost_terse[POS],terse[kni], month_terse[month],num_year); return; } else if(n==PRID) /* pridie */ { sprintf(s,"%s %s %s %s",pripost_terse[PR],terse[kni], month_terse[month], num_year); return; } else if(bis==1) /* Second VI Kal. Mar. */ { m.numeral=1; to_roman(n,numeral,m); if(ad) { sprintf(s,"%s %s %s %s bis %s",pripost_terse[AD], numeral, terse[kni], month_terse[month],num_year); } else { sprintf(s,"%s %s %s bis %s", numeral, terse[kni], month_terse[month],num_year); } return; } else { m.numeral=1; to_roman(n,numeral,m); if(ad) sprintf(s,"%s %s %s %s %s",pripost_terse[AD], numeral, terse[kni], month_terse[month],num_year); else sprintf(s,"%s %s %s %s", numeral, terse[kni], month_terse[month],num_year); return; } } } else /* Verbose or ExVerbose display */ { m.numeral=verbosity.year?0:1; if(year!=1) m.numerus=1; /* plural */ else m.numerus=0; /* singular */ m.genus=0; /* masculine */ m.casus=4; /* ablative */ m.et_bind=0; m.type=1; to_roman(year,num_year,m); if(n==DIES) /* On the main day */ { sprintf(s,"%s %s %s",abl[kni],month_abl[month],num_year); return; } else { if(n==POST) /* Postridie */ { sprintf(s,"%s %s %s %s",pripost[POS],ack[kni], month_ack[month], num_year); return; } else if(n==PRID) /* pridie */ { sprintf(s,"%s %s %s %s",pripost[PR],ack[kni], month_ack[month], num_year); return; } else { if(ad==0) /* Ante diem controls acc. */ m.casus=4; else m.casus=3; m.numerus=0; m.genus=0; m.numeral=verbosity.day?0:1; m.et_bind=0; m.type=1; to_roman(n,numeral,m); } } if(bis==1) { if(ad) sprintf(s,"%s %s %s %s bis %s", pripost[AD], numeral, ack[kni], month_ack[month],num_year); else sprintf(s,"%s %s %s bis %s", numeral, ack[kni], month_ack[month],num_year); return; } else { if(ad) sprintf(s,"%s %s %s %s %s", pripost[AD], numeral, ack[kni], month_ack[month],num_year); else sprintf(s,"%s %s %s %s", numeral, ack[kni], month_ack[month],num_year); return; } } }
END_TEST START_TEST(given_4_when_to_roman_then_IV) { char *result = to_roman(4); ck_assert_str_eq(result, "IV"); }
END_TEST START_TEST(given_1_when_to_roman_then_no_error) { to_roman(1); ck_assert_int_eq(errno, ROMAN_SUCCESS); }
END_TEST START_TEST(given_1099_when_to_roman_then_MXCIX) { char *result = to_roman(1099); ck_assert_str_eq(result, "MXCIX"); }
END_TEST START_TEST(given_103_when_to_roman_then_CIII) { char *result = to_roman(103); ck_assert_str_eq(result, "CIII"); }
END_TEST START_TEST(given_1000_when_to_roman_then_M) { char *result = to_roman(1000); ck_assert_str_eq(result, "M"); }
END_TEST START_TEST(given_900_when_to_roman_then_CM) { char *result = to_roman(900); ck_assert_str_eq(result, "CM"); }
END_TEST START_TEST(given_500_when_to_roman_then_D) { char *result = to_roman(500); ck_assert_str_eq(result, "D"); }
END_TEST START_TEST(given_40_when_to_roman_then_XL) { char *result = to_roman(40); ck_assert_str_eq(result, "XL"); };
END_TEST START_TEST(given_9_when_to_roman_then_IX) { char *result = to_roman(9); ck_assert_str_eq(result, "IX"); };
END_TEST START_TEST(given_5_when_to_roman_then_V) { char *result = to_roman(5); ck_assert_str_eq(result, "V"); }
int main() { char roman[100]; to_roman(1111, roman); printf("Result: %d %s \n", from_roman("MCXI"), roman ); return 0; }
END_TEST START_TEST(given_400_when_to_roman_then_CD) { char *result = to_roman(400); ck_assert_str_eq(result, "CD"); }