diff --git a/src/RomanNumerals.java b/src/RomanNumerals.java index 20904f0..43c30fe 100644 --- a/src/RomanNumerals.java +++ b/src/RomanNumerals.java @@ -1,8 +1,60 @@ public class RomanNumerals { - public int convertToInteger(String romanNum) { - // To be Implemented - return 0; - + + public int convertToInteger(String str) { + int result = 0; + if(str==null||str.isEmpty()||!(isValid(str))){ + return 0; + } + else{ + for (int i = 0; i < str.length(); i++){ + + int s1 = getIntegerValue(str.charAt(i)); + if (i + 1 < str.length()){ + + int s2 = getIntegerValue(str.charAt(i + 1)); + if (s1 >= s2){ + result = result + s1; + } else + { + result = result + s2 - s1; + i++; + } + } else { + result = result + s1; + i++; + } + } + } + return result; + + } + + public int getIntegerValue(char r) { + if (r == 'I') + return 1; + if (r == 'V') + return 5; + if (r == 'X') + return 10; + if (r == 'L') + return 50; + if (r == 'C') + return 100; + if (r == 'D') + return 500; + if (r == 'M') + return 1000; + return -1; + } + public boolean isValid(String str){ + if(str.matches("IIII")||str.matches("XXXX")||str.matches("CCCC")||str.matches("MMMM")){ + return false; + } + if(str.matches("DD")||str.matches("LL")||str.matches("VV")){ + return false; + } + return true; } + } diff --git a/tests/TestRomanNumerals.java b/tests/TestRomanNumerals.java index 5d1de75..17652e6 100644 --- a/tests/TestRomanNumerals.java +++ b/tests/TestRomanNumerals.java @@ -1,12 +1,37 @@ import static org.junit.Assert.*; - import org.junit.Test; public class TestRomanNumerals { + @Test + public void testUnitExpression() { + String roman = "VI"; + RomanNumerals rn = new RomanNumerals(); + assertEquals("Unit conversion fails", 6, rn.convertToInteger(roman)); + + } @Test - public void test() { - fail("Not yet implemented"); + public void testTenExpression() { + String roman = "XII"; + RomanNumerals rn = new RomanNumerals(); + assertEquals("Ten conversion fails", 12, rn.convertToInteger(roman)); + + } + + @Test + public void testHunderedExpression() { + String roman = "CII"; + RomanNumerals rn = new RomanNumerals(); + assertEquals("Hundered conversion fails", 102, rn.convertToInteger(roman)); + + } + + @Test + public void testThousandExpression() { + String roman = "MCMLXXXIV"; + RomanNumerals rn = new RomanNumerals(); + assertEquals("Thousand conversion fails", 1984, rn.convertToInteger(roman)); + } }