diff --git a/src/RomanNumerals.java b/src/RomanNumerals.java index 20904f0..518090a 100644 --- a/src/RomanNumerals.java +++ b/src/RomanNumerals.java @@ -1,8 +1,58 @@ +import java.util.HashMap; +import java.util.Map; public class RomanNumerals { + + static final Map map = new HashMap(){ + { + 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; } } diff --git a/tests/TestRomanNumerals.java b/tests/TestRomanNumerals.java index 5d1de75..5030d35 100644 --- a/tests/TestRomanNumerals.java +++ b/tests/TestRomanNumerals.java @@ -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); + } + }