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);
}
Beispiel #5
0
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;
}
Beispiel #6
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");
}
Beispiel #11
0
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");
}
Beispiel #22
0
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");
}