diff --git a/others/Dani/DaniRomanConverter.py b/others/Dani/DaniRomanConverter.py new file mode 100644 index 0000000000000000000000000000000000000000..af8bf54e9f054bf4fcce88485ced7ae37506c765 --- /dev/null +++ b/others/Dani/DaniRomanConverter.py @@ -0,0 +1,183 @@ +# Bei Eingabe der Zahl 1 soll "I" ausgegeben werden +# Bei Eingabe der Zahl 2 soll "II" ausgegeben werden +# Bei Eingabe der Zahl 3 soll "III" ausgegeben werden +# Bei Eingabe der Zahl 4 soll "IV" ausgegeben werden +# Bei Eingabe der Zahl 5 soll "V" ausgegeben werden +# Bei Eingabe der Zahl 9 soll "IX" ausgegeben werden +# Bei Eingabe der Zahl 10 soll "X" ausgegeben werden +# Bei Eingabe der Zahl 21 soll "XXI" ausgegeben werden +# Bei Eingabe der Zahl 50 soll "L" ausgegeben werden +# Bei Eingabe der Zahl 100 soll "C" ausgegeben werden +# Bei Eingabe der Zahl 500 soll "D" ausgegeben werden +# Bei Eingabe der Zahl 1000 soll "M" ausgegeben werden +# Bei Eingabe der Zahl 1111 soll "MCXI" ausgegeben werden +# Bei Eingabe der Zahl 99 soll "XCIX" ausgegeben werden +# Bei Eingabe der Zahl 0 soll "Es gibt keine römische Null" ausgegeben werden +# Bei Eingabe der Zahl 40 soll "XL" ausgegeben werden +# Bei Eingabe eines Strings soll "Bitte ganze Zahlen eingeben" ausgegeben werden -> geändert aufgrund der Aufgabenstellung +# Bei Eingabe von Float-Werten (z.B. 4,3) soll "Bitte ganze Zahlen eingeben" ausgegeben werden. +# Bei Eingabe von negativen Werten (z.B. -5) soll "Es sind nur positive Zahlen zum konvertieren erlaubt" ausgegeben werden +# Bei Eingabe der Zahl 2025 soll "MMXXV" ausgegeben werden +# Bei Eingabe von Zeichen wie ! soll "Bitte ganze Zahlen eingeben" ausgegeben werden +# Bei Eingabe mehrerer Zahlen wie 4, 3 soll "Bitte nur eine ganze Zahl eingeben" augegeben werden +# Bei Eingabe größerer Zahlen wie z.B. 4000 soll "MMMM" ausgegeben werden +# Bei Eingabe der Zahl 30 soll "XXX" ausgegeben werden +# Bei Eingabe der Zahl 90 soll "90" ausgegeben werden +# Bei Eingabe eines leeren Strings soll "Bitte ganze Zahlen eingeben" ausgegeben werden + + +from abc import ABC, abstractmethod +import unittest +from src.romannumerals import RomanNumber +from src.interfaces import IRomanNumber +''' +class IConverter(ABC): + @abstractmethod + def convert(self, num: int) -> str: + pass + +class Converter(IConverter): + def convert(self, num: int) -> str: + + if isinstance(num, str) and len(num.split(',')) > 1: + return 'Bitte nur eine ganze Zahl eingeben' + + roman_numbers = [(1000, 'M'), (500, 'D'), (100, 'C'), (90, 'XC'), (50, 'L'), (40, 'XL'), (10, 'X'), (9, 'IX'), (5, 'V'), (4, 'IV'), (1, 'I')] + + roman_str = '' + + if num == 0: + return "Es gibt keine römische Null" + + + if isinstance(num, int): + + if num < 0: + return "Es sind nur positive Zahlen zum konvertieren erlaubt" + + for value, numeral in roman_numbers: + + while num >= value: + roman_str += numeral + num -= value + + return roman_str + else: + return "Bitte ganze Zahlen eingeben" + +''' +class TestConverter(unittest.TestCase): + def setUp(self): + self.converter: IRomanNumber = RomanNumber() + + def test_convertOne(self): + res = self.converter.convert(1) + self.assertEqual(res, 'I') + + def test_convertTwo(self): + res = self.converter.convert(2) + self.assertEqual(res, 'II') + + def test_convertThree(self): + res = self.converter.convert(3) + self.assertEqual(res, 'III') + + def test_convertFour(self): + res = self.converter.convert(4) + self.assertEqual(res, 'IV') + + def test_convertFive(self): + res = self.converter.convert(5) + self.assertEqual(res, 'V') + + def test_convertNine(self): + res = self.converter.convert(9) + self.assertEqual(res, 'IX') + + def test_convertTen(self): + res = self.converter.convert(10) + self.assertEqual(res, 'X') + + def test_convertTwentyTwo(self): + res = self.converter.convert(21) + self.assertEqual(res, 'XXI') + + def test_convertFifty(self): + res = self.converter.convert(50) + self.assertEqual(res, 'L') + + def test_convertHundred(self): + res = self.converter.convert(100) + self.assertEqual(res, 'C') + + def test_convertFiveHundred(self): + res = self.converter.convert(500) + self.assertEqual(res, 'D') + + def test_convertThousand(self): + res = self.converter.convert(1000) + self.assertEqual(res, 'M') + + def test_convertFourDigit(self): + res = self.converter.convert(1111) + self.assertEqual(res, 'MCXI') + + def test_convertNintyNine(self): + res = self.converter.convert(99) + self.assertEqual(res, 'XCIX') + + def test_convertZero(self): + res = self.converter.convert(0) + self.assertEqual(res, 'Es gibt keine römische Null') + + def test_convertFourty(self): + res = self.converter.convert(40) + self.assertEqual(res, 'XL') + + def test_convertString(self): + res = self.converter.convert('HUIHIN') + self.assertEqual(res, "Bitte ganze Zahlen eingeben") + + def test_convertFloat(self): + res = self.converter.convert(4.3) + self.assertEqual(res, "Bitte ganze Zahlen eingeben") + + def test_convertNegative(self): + res = self.converter.convert(-4) + self.assertEqual(res, "Es sind nur positive Zahlen zum konvertieren erlaubt") + + def test_convertYear(self): + res = self.converter.convert(2025) + self.assertEqual(res, "MMXXV") + + def test_convertSign(self): + res = self.converter.convert('!') + self.assertEqual(res, "Bitte ganze Zahlen eingeben") + + def test_convertMultipleNum(self): + res = self.converter.convert('4, 3') + self.assertEqual(res, "Bitte nur eine ganze Zahl eingeben") + + def test_convertHighNum(self): + res = self.converter.convert(4000) + self.assertEqual(res, "MMMM") + + def test_convertThirty(self): + res = self.converter.convert(30) + self.assertEqual(res, "XXX") + + def test_convertNinety(self): + res = self.converter.convert(90) + self.assertEqual(res, "XC") + + def test_convertEmpty(self): + res = self.converter.convert('') + self.assertEqual(res, "Bitte ganze Zahlen eingeben") + + + + +if __name__ == "__main__": + unittest.main() + +# python -m unittest others.Dani.DaniRomanConverter -v \ No newline at end of file diff --git a/others/Dani/reportDaniImp.md b/others/Dani/reportDaniImp.md new file mode 100644 index 0000000000000000000000000000000000000000..e516fb134bb330df0442875b798b760beaa2d4be --- /dev/null +++ b/others/Dani/reportDaniImp.md @@ -0,0 +1,7 @@ +| Name | Interface break | Failed Testcases | | +|------|-----------------|---------------------------------------------------------------------------------|------------------------------------------------------------------------------| +| Dani | no | test_convert_addition (tests.test_romannumerals.TestRomanNumber) ... ERROR | TypeError: Converter.convert() missing 1 required positional argument: 'num' | +| Dani | no | test_convert_invalid (tests.test_romannumerals.TestRomanNumber) ... ERROR | TypeError: Converter.convert() missing 1 required positional argument: 'num' | +| Dani | no | test_convert_large_numbers (tests.test_romannumerals.TestRomanNumber) ... ERROR | TypeError: Converter.convert() missing 1 required positional argument: 'num' | +| Dani | no | test_convert_mixed (tests.test_romannumerals.TestRomanNumber) ... ERROR | TypeError: Converter.convert() missing 1 required positional argument: 'num' | +| Dani | no | test_convert_subtraction (tests.test_romannumerals.TestRomanNumber) ... ERROR | TypeError: Converter.convert() missing 1 required positional argument: 'num' | \ No newline at end of file diff --git a/others/Dani/reportDaniTests.md b/others/Dani/reportDaniTests.md new file mode 100644 index 0000000000000000000000000000000000000000..840969b6f5acc6c38212764010b3c736ef73b442 --- /dev/null +++ b/others/Dani/reportDaniTests.md @@ -0,0 +1,10 @@ +| Name | Interface break | Failed Testcases | | +|------|-----------------|----------------------------------------------------------------------------------|--------------------------------------| +| Dani | no | test_convertEmpty (others.Dani.DaniRomanConverter.TestConverter) ... ERROR | Eingabe muss eine ganze Zahl sein | +| Dani | no | test_convertFloat (others.Dani.DaniRomanConverter.TestConverter) ... ERROR | Eingabe muss eine ganze Zahl sein | +| Dani | no | test_convertHighNum (others.Dani.DaniRomanConverter.TestConverter) ... ERROR | Zahl muss zwischen 1 und 3999 liegen | +| Dani | no | test_convertMultipleNum (others.Dani.DaniRomanConverter.TestConverter) ... ERROR | Eingabe muss eine ganze Zahl sein | +| Dani | no | test_convertNegative (others.Dani.DaniRomanConverter.TestConverter) ... ERROR | Zahl muss zwischen 1 und 3999 liegen | +| Dani | no | test_convertSign (others.Dani.DaniRomanConverter.TestConverter) ... ERROR | Eingabe muss eine ganze Zahl sein | +| Dani | no | test_convertString (others.Dani.DaniRomanConverter.TestConverter) ... ERROR | Eingabe muss eine ganze Zahl sein | +| Dani | no | test_convertZero (others.Dani.DaniRomanConverter.TestConverter) ... ERROR | Zahl muss zwischen 1 und 3999 liegen | \ No newline at end of file diff --git a/tests/test_romannumerals.py b/tests/test_romannumerals.py index 01d0efc3212d4e5598483eb98a33230569bcfc28..0dc43195ac02aab1e674fc46b5e7266608dd3eec 100644 --- a/tests/test_romannumerals.py +++ b/tests/test_romannumerals.py @@ -44,22 +44,26 @@ import unittest from src.romannumerals import RomanNumber from src.interfaces import IRomanNumber -''' + import unittest from others.Orlando.OrlandoRomanConverter import RomanConverter from others.Orlando.OrlandoInterfaces import IRomanConverter +''' + +import unittest +from others.Dani.DaniRomanConverter import Converter, IConverter class TestRomanNumber(unittest.TestCase): def setUp(self): - self.converter: IRomanConverter = RomanConverter + self.converter: IConverter = Converter def test_convert_subtraction(self): - self.assertEqual(self.converter.roman_to_int(4), "IV") - self.assertEqual(self.converter.roman_to_int(9), "IX") - self.assertEqual(self.converter.roman_to_int(40), "XL") - self.assertEqual(self.converter.roman_to_int(90), "XC") - self.assertEqual(self.converter.roman_to_int(400), "CD") - self.assertEqual(self.converter.roman_to_int(900), "CM") + 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_convert_addition(self): self.assertEqual(self.converter.convert(2), "II")