aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main/java/de/hysky/skyblocker/utils/RomanNumerals.java9
-rw-r--r--src/test/java/de/hysky/skyblocker/utils/RomanNumeralsTest.java35
2 files changed, 43 insertions, 1 deletions
diff --git a/src/main/java/de/hysky/skyblocker/utils/RomanNumerals.java b/src/main/java/de/hysky/skyblocker/utils/RomanNumerals.java
index 5f273f8e..007cb0b1 100644
--- a/src/main/java/de/hysky/skyblocker/utils/RomanNumerals.java
+++ b/src/main/java/de/hysky/skyblocker/utils/RomanNumerals.java
@@ -16,6 +16,13 @@ public class RomanNumerals {
};
}
+ /**
+ * Checks if a string is a valid roman numeral.
+ * It's the caller's responsibility to clean up the string before calling this method (such as trimming it).
+ * @param romanNumeral The roman numeral to check.
+ * @return True if the string is a valid roman numeral, false otherwise.
+ * @implNote This will only check if the string contains valid roman numeral characters. It won't check if the numeral is well-formed.
+ */
public static boolean isValidRomanNumeral(String romanNumeral) {
if (romanNumeral == null || romanNumeral.isEmpty()) return false;
for (int i = 0; i < romanNumeral.length(); i++) {
@@ -28,7 +35,7 @@ public class RomanNumerals {
* Converts a roman numeral to a decimal number.
*
* @param romanNumeral The roman numeral to convert.
- * @return The decimal number, or 0 if the roman numeral string is malformed, empty or null.
+ * @return The decimal number, or 0 if the roman numeral string has non-roman characters in it, or if the string is empty or null.
*/
public static int romanToDecimal(String romanNumeral) {
if (romanNumeral == null || romanNumeral.isEmpty()) return 0;
diff --git a/src/test/java/de/hysky/skyblocker/utils/RomanNumeralsTest.java b/src/test/java/de/hysky/skyblocker/utils/RomanNumeralsTest.java
new file mode 100644
index 00000000..35bd76ee
--- /dev/null
+++ b/src/test/java/de/hysky/skyblocker/utils/RomanNumeralsTest.java
@@ -0,0 +1,35 @@
+package de.hysky.skyblocker.utils;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+
+class RomanNumeralsTest {
+ @Test
+ void testToRoman() {
+ // Test the first 50 numbers
+ String[] expected = new String[]{"I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX", "X", "XI", "XII", "XIII", "XIV", "XV", "XVI", "XVII", "XVIII", "XIX", "XX", "XXI", "XXII", "XXIII", "XXIV", "XXV", "XXVI", "XXVII", "XXVIII", "XXIX", "XXX", "XXXI", "XXXII", "XXXIII", "XXXIV", "XXXV", "XXXVI", "XXXVII", "XXXVIII", "XXXIX", "XL", "XLI", "XLII", "XLIII", "XLIV", "XLV", "XLVI", "XLVII", "XLVIII", "XLIX", "L"};
+ for (int i = 1; i <= 50; i++) {
+ Assertions.assertEquals(i, RomanNumerals.romanToDecimal(expected[i-1]));
+ }
+ Assertions.assertEquals(100, RomanNumerals.romanToDecimal("C"));
+ Assertions.assertEquals(400, RomanNumerals.romanToDecimal("CD"));
+ Assertions.assertEquals(500, RomanNumerals.romanToDecimal("D"));
+ Assertions.assertEquals(900, RomanNumerals.romanToDecimal("CM"));
+ Assertions.assertEquals(1000, RomanNumerals.romanToDecimal("M"));
+ Assertions.assertEquals(1999, RomanNumerals.romanToDecimal("MCMXCIX"));
+ }
+
+ @Test
+ void isValidRoman() {
+ Assertions.assertTrue(RomanNumerals.isValidRomanNumeral("I"));
+ Assertions.assertFalse(RomanNumerals.isValidRomanNumeral("AI"));
+ Assertions.assertTrue(RomanNumerals.isValidRomanNumeral("CMI"));
+ Assertions.assertFalse(RomanNumerals.isValidRomanNumeral(" CMI"));
+ Assertions.assertFalse(RomanNumerals.isValidRomanNumeral("XI I"));
+ Assertions.assertFalse(RomanNumerals.isValidRomanNumeral("A"));
+ Assertions.assertFalse(RomanNumerals.isValidRomanNumeral("15"));
+ Assertions.assertFalse(RomanNumerals.isValidRomanNumeral("MCMLXXXAIV"));
+ Assertions.assertFalse(RomanNumerals.isValidRomanNumeral(null));
+ Assertions.assertFalse(RomanNumerals.isValidRomanNumeral(""));
+ }
+}