diff --git a/.inferconfig b/.inferconfig index 93bd1c355493..e7af307a63bf 100644 --- a/.inferconfig +++ b/.inferconfig @@ -1,7 +1,6 @@ { "report-block-list-path-regex": [ "src/main/java/com/thealgorithms/ciphers/a5/CompositeLFSR.java", - "src/main/java/com/thealgorithms/conversions/RomanToInteger.java", "src/main/java/com/thealgorithms/datastructures/crdt/GCounter.java", "src/main/java/com/thealgorithms/datastructures/crdt/PNCounter.java", "src/main/java/com/thealgorithms/datastructures/graphs/KahnsAlgorithm.java", diff --git a/src/main/java/com/thealgorithms/conversions/RomanToInteger.java b/src/main/java/com/thealgorithms/conversions/RomanToInteger.java index cf2d4145858f..1934e9b264c9 100644 --- a/src/main/java/com/thealgorithms/conversions/RomanToInteger.java +++ b/src/main/java/com/thealgorithms/conversions/RomanToInteger.java @@ -19,6 +19,10 @@ private RomanToInteger() { } }; + private static int romanSymbolToInt(final char symbol) { + return ROMAN_TO_INT.computeIfAbsent(symbol, c -> { throw new IllegalArgumentException("Unknown Roman symbol: " + c); }); + } + // Roman Number = Roman Numerals /** @@ -39,10 +43,10 @@ public static int romanToInt(String a) { if (prev != ' ') { // checking current Number greater than previous or not - newPrev = ROMAN_TO_INT.get(prev) > newPrev ? ROMAN_TO_INT.get(prev) : newPrev; + newPrev = romanSymbolToInt(prev) > newPrev ? romanSymbolToInt(prev) : newPrev; } - int currentNum = ROMAN_TO_INT.get(c); + int currentNum = romanSymbolToInt(c); // if current number greater than prev max previous then add if (currentNum >= newPrev) { @@ -57,9 +61,4 @@ public static int romanToInt(String a) { return sum; } - - public static void main(String[] args) { - int sum = romanToInt("MDCCCIV"); - System.out.println(sum); - } } diff --git a/src/test/java/com/thealgorithms/conversions/RomanToIntegerTest.java b/src/test/java/com/thealgorithms/conversions/RomanToIntegerTest.java index c51986f2a8d9..f03563971cb7 100644 --- a/src/test/java/com/thealgorithms/conversions/RomanToIntegerTest.java +++ b/src/test/java/com/thealgorithms/conversions/RomanToIntegerTest.java @@ -1,6 +1,7 @@ package com.thealgorithms.conversions; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; import org.junit.jupiter.api.Test; @@ -10,5 +11,13 @@ public class RomanToIntegerTest { public void testRomanToInteger() { assertEquals(1994, RomanToInteger.romanToInt("MCMXCIV")); assertEquals(58, RomanToInteger.romanToInt("LVIII")); + assertEquals(1804, RomanToInteger.romanToInt("MDCCCIV")); + } + + @Test + void testRomanToIntegerThrows() { + assertThrows(IllegalArgumentException.class, () -> RomanToInteger.romanToInt("Z")); + assertThrows(IllegalArgumentException.class, () -> RomanToInteger.romanToInt("MZI")); + assertThrows(IllegalArgumentException.class, () -> RomanToInteger.romanToInt("MMMO")); } }