Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
54 changes: 52 additions & 2 deletions src/RomanNumerals.java
Original file line number Diff line number Diff line change
@@ -1,8 +1,58 @@
import java.util.HashMap;
import java.util.Map;

public class RomanNumerals {

static final Map <String, Integer> map = new HashMap<String, Integer>(){
{
put("I", 1);
put("V", 5);
put("X", 10);
put("L", 50);
put("C", 100);
put("D", 500);
put("M", 1000);
}
};

static final String[] notAllowed = new String[] {"IIII","XXXX","CCCC","MMMM","VV","LL","DD"};

public int convertToInteger(String romanNum) {
// To be Implemented
return 0;

char[] numArray = StringToArray(romanNum);
return CalculateRomanArray(numArray);

}

public char[] StringToArray(String str) {
char[] arr = str.toCharArray();
return arr;
}

public int CalculateRomanArray(char[] array) {
int lastNumber = 0;
int sum = 0;
for(int i=array.length;i>0;i--) {
String key = Character.toString(array[i-1]);
int currentNum = map.get(key);
if(lastNumber<= currentNum) {
sum += currentNum;
}
else {
sum -= currentNum;
}

lastNumber = currentNum;
}
return sum;
}

public boolean ValidateRomanString(String str) {
for(int i = 0 ; i < notAllowed.length ; i++ ) {
if(str.contains(notAllowed[i])) {
return false;
}
}
return true;
}
}
111 changes: 109 additions & 2 deletions tests/TestRomanNumerals.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,115 @@
public class TestRomanNumerals {

@Test
public void test() {
fail("Not yet implemented");
public void testRomanNumeralsOne() {

RomanNumerals rn = new RomanNumerals();
int er = rn.convertToInteger("I");
assertEquals(1,er);
}

@Test
public void testRomanNumeralsKeyPairs() {

RomanNumerals rn = new RomanNumerals();
int er = rn.convertToInteger("X");
assertEquals(10,er);
}


@Test
public void testRomanNumeralsKeyPairsMap() {

RomanNumerals rn = new RomanNumerals();
int er = rn.convertToInteger("X");
assertEquals(10,er);

er = rn.convertToInteger("C");
assertEquals(100,er);

er = rn.convertToInteger("D");
assertEquals(500,er);
}

@Test
public void testRomanNumeralsAdding() {

RomanNumerals rn = new RomanNumerals();
int er = rn.convertToInteger("II");
assertEquals(2,er);

er = rn.convertToInteger("VI");
assertEquals(6,er);

er = rn.convertToInteger("XX");
assertEquals(20,er);

er = rn.convertToInteger("CX");
assertEquals(110,er);
}

@Test
public void testStringToArray() {
RomanNumerals rn = new RomanNumerals();
char[] er = rn.StringToArray("ABC");
assertEquals(3,er.length);
}

@Test
public void testCalculateRomanArraySum() {
RomanNumerals rn = new RomanNumerals();
char[] er = rn.StringToArray("VII");
int sum = rn.CalculateRomanArray(er);
assertEquals(7,sum);
}

@Test
public void testCalculateRomanArraySum2() {
RomanNumerals rn = new RomanNumerals();
char[] er = rn.StringToArray("CCCLXVII");
int sum = rn.CalculateRomanArray(er);
assertEquals(367,sum);
}

@Test
public void testCalculateRomanArraySubtract() {
RomanNumerals rn = new RomanNumerals();
char[] er = rn.StringToArray("IV");
int sum = rn.CalculateRomanArray(er);
assertEquals(4,sum);
}

@Test
public void testCalculateRomanArraySubtract2() {
RomanNumerals rn = new RomanNumerals();
char[] er = rn.StringToArray("ILX");
int sum = rn.CalculateRomanArray(er);
assertEquals(59,sum);
}

@Test
public void testRomanStringValidity() {
RomanNumerals rn = new RomanNumerals();
String str = "IIIVVVSSSAAAXXXXVVBBSSE";
boolean verdict = rn.ValidateRomanString(str);
assertEquals(false,verdict);
}

@Test
public void testRomanStringValidity2() {
RomanNumerals rn = new RomanNumerals();
String str = "IIIVSSSAAAXVBBSSE";
boolean verdict = rn.ValidateRomanString(str);
assertEquals(true,verdict);
}

@Test
public void testRomanStringValidity3() {
RomanNumerals rn = new RomanNumerals();
String str = "IIIVVVSSSAAAXVVBBSSE";
boolean verdict = rn.ValidateRomanString(str);
assertEquals(false,verdict);
}


}