diff --git a/.idea/vcs.xml b/.idea/vcs.xml index 35eb1ddfbbc029bcab630581847471d7f238ec53..38781555edf5f3a26edb9f21ef928e2eda156f1f 100644 --- a/.idea/vcs.xml +++ b/.idea/vcs.xml @@ -2,5 +2,6 @@ <project version="4"> <component name="VcsDirectoryMappings"> <mapping directory="" vcs="Git" /> + <mapping directory="$PROJECT_DIR$/StringCalculator" vcs="Git" /> </component> </project> \ No newline at end of file diff --git a/src/__pycache__/interfaces.cpython-310.pyc b/src/__pycache__/interfaces.cpython-310.pyc index 95e7981751754055c5e10944cc00468b50941e10..d7953f25e6f8b9e6f58dfc3cdb55b061b176f472 100644 Binary files a/src/__pycache__/interfaces.cpython-310.pyc and b/src/__pycache__/interfaces.cpython-310.pyc differ diff --git a/src/__pycache__/romannumerals.cpython-310.pyc b/src/__pycache__/romannumerals.cpython-310.pyc index f6197cf9b2af49383222064fa3d7a160c943eea6..24f836671a9a8436497583973509848b92b6dc91 100644 Binary files a/src/__pycache__/romannumerals.cpython-310.pyc and b/src/__pycache__/romannumerals.cpython-310.pyc differ diff --git a/src/__pycache__/stringcalculator.cpython-310.pyc b/src/__pycache__/stringcalculator.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..938708f3482e2cedde5ca28d3caf0cfceea2ad7f Binary files /dev/null and b/src/__pycache__/stringcalculator.cpython-310.pyc differ diff --git a/src/interfaces.py b/src/interfaces.py index fc645736ebe7edf2091db66c3738825f50fd923f..386cace279b05d126d9b5ed73ee758a43ae5223b 100644 --- a/src/interfaces.py +++ b/src/interfaces.py @@ -1,6 +1,6 @@ from abc import ABC, abstractmethod -class IRomanNumerals(ABC): +class IRomanNumber(ABC): @abstractmethod - def to_roman(self, num): - pass \ No newline at end of file + def convert(self, n: int) -> str: + pass diff --git a/src/romannumerals.py b/src/romannumerals.py index 3f3eaf1e8e956ca023c64ae71e38caefb1198940..2507532728391ee0523da6172527a5482d3a5148 100644 --- a/src/romannumerals.py +++ b/src/romannumerals.py @@ -1,11 +1,10 @@ -from src.interfaces import IRomanNumerals +from src.interfaces import IRomanNumber - -class RomanNumerals(IRomanNumerals): - def to_roman(self, num): - if not isinstance(num, int): +class RomanNumber(IRomanNumber): + def convert(self, n: int) -> str: + if not isinstance(n, int): raise ValueError("Eingabe muss eine ganze Zahl sein") - if num <= 0 or num >= 4000: + if n <= 0 or n >= 4000: raise ValueError("Zahl muss zwischen 1 und 3999 liegen") val = [ @@ -17,7 +16,7 @@ class RomanNumerals(IRomanNumerals): result = "" for (value, numeral) in val: - while num >= value: + while n >= value: result += numeral - num -= value + n -= value return result \ No newline at end of file diff --git a/tests/__pycache__/test_romannumerals.cpython-310.pyc b/tests/__pycache__/test_romannumerals.cpython-310.pyc index e14f2572a91805d1b33f9c03c0890bd6a036010c..1809b2b966feaa1479662587eca1207db19195ad 100644 Binary files a/tests/__pycache__/test_romannumerals.cpython-310.pyc and b/tests/__pycache__/test_romannumerals.cpython-310.pyc differ diff --git a/tests/__pycache__/test_stringcalculator.cpython-310.pyc b/tests/__pycache__/test_stringcalculator.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..31a224455e3a18f535acc76eafba13b427a27f89 Binary files /dev/null and b/tests/__pycache__/test_stringcalculator.cpython-310.pyc differ diff --git a/tests/test_romannumerals.py b/tests/test_romannumerals.py index 9a774cc92787102f3ef685b0c6a80138e5bbcedf..35e2af35f754d89a2da55ab9537741a29fd40960 100644 --- a/tests/test_romannumerals.py +++ b/tests/test_romannumerals.py @@ -18,7 +18,7 @@ # Bei Eingabe der Zahl 3 erhalte ich das Ergebnis "III" # Bei Eingabe der Zahl 6 erhalte ich das Ergebnis "VI" # Bei Eingabe der Zahl 8 erhalte ich das Ergebnis "VIII" -# Bei Eingabe der Zahl 30 erhalte ich das Ergebnis "XXX" +# Bei Eingabe der Zahl 30 erhalte ich das Ergebnis "XXXX" # Bei Eingabe der Zahl 80 erhalte ich das Ergebnis "LXXX" # Kombination aus Addition und Subtraktion # Bei Eingabe der Zahl 14 erhalte ich das Ergebnis "XIV" @@ -42,67 +42,60 @@ # Bei Eingabe der Zahl 3.14 erhalte ich eine Fehlermeldung import unittest -from src.romannumerals import RomanNumerals +from src.romannumerals import RomanNumber +from src.interfaces import IRomanNumber - -class TestRomanNumerals(unittest.TestCase): +class TestRomanNumber(unittest.TestCase): def setUp(self): - self.converter = RomanNumerals() - - def test_to_roman_basic(self): - self.assertEqual(self.converter.to_roman(1), "I") - self.assertEqual(self.converter.to_roman(5), "V") - self.assertEqual(self.converter.to_roman(10), "X") - self.assertEqual(self.converter.to_roman(50), "L") - self.assertEqual(self.converter.to_roman(100), "C") - self.assertEqual(self.converter.to_roman(500), "D") - self.assertEqual(self.converter.to_roman(1000), "M") + self.converter: IRomanNumber = RomanNumber() - def test_to_roman_subtraction(self): - self.assertEqual(self.converter.to_roman(4), "IV") - self.assertEqual(self.converter.to_roman(9), "IX") - self.assertEqual(self.converter.to_roman(40), "XL") - self.assertEqual(self.converter.to_roman(90), "XC") - self.assertEqual(self.converter.to_roman(400), "CD") - self.assertEqual(self.converter.to_roman(900), "CM") + def test_convert_subtraction(self): + self.assertEqual(self.converter.convert(4), "IV") + self.assertEqual(self.converter.convert(9), "IX") + self.assertEqual(self.converter.convert(40), "XL") + self.assertEqual(self.converter.convert(90), "XC") + self.assertEqual(self.converter.convert(400), "CD") + self.assertEqual(self.converter.convert(900), "CM") - def test_to_roman_addition(self): - self.assertEqual(self.converter.to_roman(2), "II") - self.assertEqual(self.converter.to_roman(3), "III") - self.assertEqual(self.converter.to_roman(6), "VI") - self.assertEqual(self.converter.to_roman(8), "VIII") - self.assertEqual(self.converter.to_roman(30), "XXX") - self.assertEqual(self.converter.to_roman(80), "LXXX") + def test_convert_addition(self): + self.assertEqual(self.converter.convert(2), "II") + self.assertEqual(self.converter.convert(3), "III") + self.assertEqual(self.converter.convert(6), "VI") + self.assertEqual(self.converter.convert(8), "VIII") + self.assertEqual(self.converter.convert(30), "XXX") + self.assertEqual(self.converter.convert(80), "LXXX") - def test_to_roman_mixed(self): - self.assertEqual(self.converter.to_roman(14), "XIV") - self.assertEqual(self.converter.to_roman(19), "XIX") - self.assertEqual(self.converter.to_roman(29), "XXIX") - self.assertEqual(self.converter.to_roman(44), "XLIV") - self.assertEqual(self.converter.to_roman(99), "XCIX") - self.assertEqual(self.converter.to_roman(444), "CDXLIV") - self.assertEqual(self.converter.to_roman(999), "CMXCIX") + def test_convert_mixed(self): + self.assertEqual(self.converter.convert(14), "XIV") + self.assertEqual(self.converter.convert(19), "XIX") + self.assertEqual(self.converter.convert(29), "XXIX") + self.assertEqual(self.converter.convert(44), "XLIV") + self.assertEqual(self.converter.convert(99), "XCIX") + self.assertEqual(self.converter.convert(444), "CDXLIV") + self.assertEqual(self.converter.convert(999), "CMXCIX") - def test_to_roman_large_numbers(self): - self.assertEqual(self.converter.to_roman(1001), "MI") - self.assertEqual(self.converter.to_roman(1987), "MCMLXXXVII") - self.assertEqual(self.converter.to_roman(2023), "MMXXIII") - self.assertEqual(self.converter.to_roman(3999), "MMMCMXCIX") + def test_convert_large_numbers(self): + self.assertEqual(self.converter.convert(1001), "MI") + self.assertEqual(self.converter.convert(1987), "MCMLXXXVII") + self.assertEqual(self.converter.convert(2023), "MMXXIII") + self.assertEqual(self.converter.convert(3999), "MMMCMXCIX") - def test_to_roman_invalid(self): + def test_convert_invalid(self): with self.assertRaises(ValueError): - self.converter.to_roman(0) + self.converter.convert(0) with self.assertRaises(ValueError): - self.converter.to_roman(-1) + self.converter.convert(-1) with self.assertRaises(ValueError): - self.converter.to_roman(4000) + self.converter.convert(4000) with self.assertRaises(ValueError): - self.converter.to_roman("ABC") + self.converter.convert("ABC") with self.assertRaises(ValueError): - self.converter.to_roman(None) + self.converter.convert(None) with self.assertRaises(ValueError): - self.converter.to_roman(3.14) - + self.converter.convert(3.14) if __name__ == "__main__": - unittest.main() \ No newline at end of file + unittest.main() + +# python -m unittest tests.test_romannumerals +# python -m unittest discover -s tests \ No newline at end of file