diff --git a/others/Alma/AlmaRomanConverter.py b/others/Alma/AlmaRomanConverter.py new file mode 100644 index 0000000000000000000000000000000000000000..e5a434ccd14da412b21990f51d63638b546144c4 --- /dev/null +++ b/others/Alma/AlmaRomanConverter.py @@ -0,0 +1,42 @@ +import unittest +from abc import ABC, abstractmethod +''' +class IRomanNumber(ABC): + @abstractmethod + def convert(self, n:int) -> str: + pass + +class RomanNumber(IRomanNumber): + def convert(self, n: int) -> str: + roman_numerals = { + 3: "III", 6: "VI", 8: "VIII", + 12: "XII", 17: "XVII", 29: "XXIX", + 34: "XXXIV", 55: "LV", 101: "CI", + 501: "DI", 1003: "MIII" + } + return roman_numerals.get(n, "") +''' +from src.romannumerals import RomanNumber +from src.interfaces import IRomanNumber + +class TestRomanConverter(unittest.TestCase): + def setUp(self): + self.converter = RomanNumber() + + def test_single_value(self): + 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(12), "XII") + self.assertEqual(self.converter.convert(17), "XVII") + self.assertEqual(self.converter.convert(29), "XXIX") + self.assertEqual(self.converter.convert(34), "XXXIV") + self.assertEqual(self.converter.convert(55), "LV") + self.assertEqual(self.converter.convert(101), "CI") + self.assertEqual(self.converter.convert(501), "DI") + self.assertEqual(self.converter.convert(1003), "MIII") + +if __name__ == "__main__": + unittest.main() + +#python -m unittest others.Alma.AlmaRomanConverter -v \ No newline at end of file diff --git a/others/Alma/reportAlmaImp.md b/others/Alma/reportAlmaImp.md new file mode 100644 index 0000000000000000000000000000000000000000..a0834113bfec267ecd2aafd92579aa8ef2944746 --- /dev/null +++ b/others/Alma/reportAlmaImp.md @@ -0,0 +1,7 @@ +| Name | Interface break | Failed Testcases | | +|------|-----------------|--------------------------------------------------------------------------------|---------------------------------------| +| Alma | no | test_convert_addition (tests.test_romannumerals.TestRomanNumber) ... FAIL | AssertionError: '' != 'II' + II | +| Alma | no | test_convert_invalid (tests.test_romannumerals.TestRomanNumber) ... FAIL | AssertionError: ValueError not raised | +| Alma | no | test_convert_large_numbers (tests.test_romannumerals.TestRomanNumber) ... FAIL | AssertionError: '' != 'MI' + MI | +| Alma | no | test_convert_mixed (tests.test_romannumerals.TestRomanNumber) ... FAIL | AssertionError: '' != 'XIV' + XIV | +| Alma | no | test_convert_subtraction (tests.test_romannumerals.TestRomanNumber) ... FAIL | AssertionError: '' != 'IV' + IV | \ No newline at end of file diff --git a/others/Alma/reportAlmaTests.md b/others/Alma/reportAlmaTests.md new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 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/others/Hatice/HaticeRomanConverter.py b/others/Hatice/HaticeRomanConverter.py new file mode 100644 index 0000000000000000000000000000000000000000..37d8b16339e9e4b98d37ca7e71d9abfb31b9246d --- /dev/null +++ b/others/Hatice/HaticeRomanConverter.py @@ -0,0 +1,55 @@ +#Bei Eingabe von Zahlen, die in der Liste definiert sind, sollen römische Zhalen zurückgegeben werden. +#Bei Eingabe von Zahlen, die nicht in der Liste definiert ist, soll ein "" ausgeben werden. +''' +import unittest +from abc import ABC, abstractmethod + +class IRomanNumber(ABC): + @abstractmethod + def convert(self, n:int) -> str: + pass + +class RomanNumber(IRomanNumber): + def convert(self, n: int) -> str: + roman_numerals = { + 1: "I", 2: "II", 3: "III", + 4: "IV", 5: "V", 9: "IX", + 21: "XXI", 50: "L", 100: "C", + 500: "D", 1000: "M" + } + return roman_numerals.get(n, "") +''' +import unittest +from src.romannumerals import RomanNumber +from src.interfaces import IRomanNumber + +class TestRomanConverter(unittest.TestCase): + def setUp(self): + self.converter = RomanNumber() + + def test_single_value(self): + self.assertEqual(self.converter.convert(1), "I") + self.assertEqual(self.converter.convert(2), "II") + self.assertEqual(self.converter.convert(3), "III") + self.assertEqual(self.converter.convert(4), "IV") + self.assertEqual(self.converter.convert(5), "V") + self.assertEqual(self.converter.convert(9), "IX") + self.assertEqual(self.converter.convert(21), "XXI") + self.assertEqual(self.converter.convert(50), "L") + self.assertEqual(self.converter.convert(100), "C") + self.assertEqual(self.converter.convert(500), "D") + self.assertEqual(self.converter.convert(1000), "M") + + def test_inivalid_numbers(self): + self.assertEqual(self.converter.convert(6), "") + self.assertEqual(self.converter.convert(99), "") + self.assertEqual(self.converter.convert(-1), "") + + + + + +if __name__ == "__main__": + unittest.main() + +#python -m unittest others.Hatice.HaticeRomanConverter -v \ No newline at end of file diff --git a/others/Hatice/reportHaticeImp.md b/others/Hatice/reportHaticeImp.md new file mode 100644 index 0000000000000000000000000000000000000000..b03fd0b5898b6761e14a5aa0aef8f9e518fc3c8a --- /dev/null +++ b/others/Hatice/reportHaticeImp.md @@ -0,0 +1,7 @@ +| Name | Interface break | Failed Testcases | | +|--------|-----------------|--------------------------------------------------------------------------------|---------------------------------------| +| Hatice | no | test_convert_addition (tests.test_romannumerals.TestRomanNumber) ... FAIL | AssertionError: '' != 'II' + II | +| Hatice | no | test_convert_invalid (tests.test_romannumerals.TestRomanNumber) ... FAIL | AssertionError: ValueError not raised | +| Hatice | no | test_convert_large_numbers (tests.test_romannumerals.TestRomanNumber) ... FAIL | AssertionError: '' != 'MI' + MI | +| Hatice | no | test_convert_mixed (tests.test_romannumerals.TestRomanNumber) ... FAIL | AssertionError: '' != 'XIV' + XIV | +| Hatice | no | test_convert_subtraction (tests.test_romannumerals.TestRomanNumber) ... FAIL | AssertionError: '' != 'IV' + IV | \ No newline at end of file diff --git a/others/Hatice/reportHaticeTests.md b/others/Hatice/reportHaticeTests.md new file mode 100644 index 0000000000000000000000000000000000000000..5a4d3b62c0d8cf70ce3ddf58266864d3fa320f9c --- /dev/null +++ b/others/Hatice/reportHaticeTests.md @@ -0,0 +1,3 @@ +| Name | Interface break | Failed Testcases | | +|--------|-----------------|----------------------------------------------------------------------------------------|---------------------------------| +| Hatice | no | test_inivalid_numbers (others.Hatice.HaticeRomanConverter.TestRomanConverter) ... FAIL | AssertionError: 'VI' != '' - VI | \ No newline at end of file diff --git a/others/Momo/MomoRomanConverter.py b/others/Momo/MomoRomanConverter.py new file mode 100644 index 0000000000000000000000000000000000000000..4d0841f9a87f5478f3cd6ad296479c24e24aa418 --- /dev/null +++ b/others/Momo/MomoRomanConverter.py @@ -0,0 +1,42 @@ +#Test_Converter_Römische_Zahlen +''' +import unittest + +def convert(n: int) -> str: + roman_numerals = { + 1000: "M", 900: "CM", 500: "D", 400: "CD", + 100: "C", 90: "XC", 50: "L", 40: "XL", + 10: "X", 9: "IX", 5: "V", 4: "IV", 1: "I" + } + result = "" + for value in sorted(roman_numerals.keys(), reverse=True): #Schleife, die über die Schlüssel (die Dezimalzahlen) des roman_numerals-Dictionaries iteriert und in absteigender reienfolge zurück gibt durch value nimmt in jeder Iteration den Wert des nächsten sortierten Schlüssels an + while n >= value: #Dies startet eine while-Schleife, die so lange ausgeführt wird, wie der Wert von n größer oder gleich dem aktuellen value (der Dezimalzahl) ist + result += roman_numerals[value] #fügt die entsprechende römische Ziffer (den Wert aus dem roman_numerals-Dictionary) zur result-Zeichenkette hinzu. + n -= value # aktuelle value - n + return result +''' +import unittest +from src.romannumerals import RomanNumber +from src.interfaces import IRomanNumber + +class TestRomanConverter(unittest.TestCase): + def test_1(self): + self.assertEqual(convert(1), "I") # Erwartet "I" für 1 + + def test_10(self): + self.assertEqual(convert(10), "X") # Erwartet "X" für 10 + def test_21(self): + self.assertEqual(convert(21), "XXI") # Erwartet "XXI" für 21 + def test_50(self): + self.assertEqual(convert(50), "L") # Erwartet "L" für 50 + def test_100(self): + self.assertEqual(convert(100), "C") # Erwartet "C" für 100 + def test_1000(self): + self.assertEqual(convert(1000), "M") # Erwartet "M" für 1000 + def test_1999(self): + self.assertEqual(convert(1999), "MCMXCIX") #Erwartet "MCMXCIX" für 1999 + +if __name__ == "__main__": + unittest.main() + +#python -m unittest others.Momo.MomoRomanConverter -v \ No newline at end of file diff --git a/others/Momo/reportMomoImp.md b/others/Momo/reportMomoImp.md new file mode 100644 index 0000000000000000000000000000000000000000..875eee8abfee1223dfb714002952728f2f783df9 --- /dev/null +++ b/others/Momo/reportMomoImp.md @@ -0,0 +1,7 @@ +| Name | Interface break | Failed Testcases | | +|------|-----------------|---------------------------------------------------------------------------------|-----------------------------------------------------------------------| +| Momo | no | test_convert_addition (tests.test_romannumerals.TestRomanNumber) ... ERROR | AttributeError: 'TestRomanNumber' object has no attribute 'converter' | +| Momo | no | test_convert_invalid (tests.test_romannumerals.TestRomanNumber) ... ERROR | AttributeError: 'TestRomanNumber' object has no attribute 'converter' | +| Momo | no | test_convert_large_numbers (tests.test_romannumerals.TestRomanNumber) ... ERROR | AttributeError: 'TestRomanNumber' object has no attribute 'converter' | +| Momo | no | test_convert_mixed (tests.test_romannumerals.TestRomanNumber) ... ERROR | AttributeError: 'TestRomanNumber' object has no attribute 'converter' | +| Momo | no | test_convert_subtraction (tests.test_romannumerals.TestRomanNumber) ... ERROR | AttributeError: 'TestRomanNumber' object has no attribute 'converter' | \ No newline at end of file diff --git a/others/Momo/reportMomoTests.md b/others/Momo/reportMomoTests.md new file mode 100644 index 0000000000000000000000000000000000000000..92968fcaf94e45a066414454ebffe7aebac5f888 --- /dev/null +++ b/others/Momo/reportMomoTests.md @@ -0,0 +1,9 @@ +| Name | Interface break | Failed Testcases | | +|------|-----------------|-------------------------------------------------------------------------|------------------------------------------| +| Momo | no | test_1 (others.Momo.MomoRomanConverter.TestRomanConverter) ... ERROR | NameError: name 'convert' is not defined | +| Momo | no | test_10 (others.Momo.MomoRomanConverter.TestRomanConverter) ... ERROR | NameError: name 'convert' is not defined | +| Momo | no | test_100 (others.Momo.MomoRomanConverter.TestRomanConverter) ... ERROR | NameError: name 'convert' is not defined | +| Momo | no | test_1000 (others.Momo.MomoRomanConverter.TestRomanConverter) ... ERROR | NameError: name 'convert' is not defined | +| Momo | no | test_1999 (others.Momo.MomoRomanConverter.TestRomanConverter) ... ERROR | NameError: name 'convert' is not defined | +| Momo | no | test_21 (others.Momo.MomoRomanConverter.TestRomanConverter) ... ERROR | NameError: name 'convert' is not defined | +| Momo | no | test_50 (others.Momo.MomoRomanConverter.TestRomanConverter) ... ERROR | NameError: name 'convert' is not defined | \ No newline at end of file diff --git a/others/Orlando/OrlandoInterfaces.py b/others/Orlando/OrlandoInterfaces.py new file mode 100644 index 0000000000000000000000000000000000000000..8a6149aeacc1ef08a4eb883ffc4b0df2324d37a8 --- /dev/null +++ b/others/Orlando/OrlandoInterfaces.py @@ -0,0 +1,7 @@ +from abc import ABC, abstractmethod + +class IRomanConverter(ABC): + @abstractmethod + def roman_to_int(self, s: str) -> int: + """Konvertiert eine römische Zahl (String) in eine Dezimalzahl.""" + pass diff --git a/others/Orlando/OrlandoRomanConverter.py b/others/Orlando/OrlandoRomanConverter.py new file mode 100644 index 0000000000000000000000000000000000000000..fd7ab771b39488210639140350c2a5d69613b1cd --- /dev/null +++ b/others/Orlando/OrlandoRomanConverter.py @@ -0,0 +1,50 @@ +from others.Orlando.OrlandoInterfaces import IRomanConverter + + +def int_to_roman(num: int) -> str: + """Konvertiert eine Dezimalzahl in eine römische Zahl.""" + val = [ + 1000, 900, 500, 400, + 100, 90, 50, 40, + 10, 9, 5, 4, + 1 + ] + syb = [ + "M", "CM", "D", "CD", + "C", "XC", "L", "XL", + "X", "IX", "V", "IV", + "I" + ] + roman_num = '' + i = 0 + while num > 0: + for _ in range(num // val[i]): + roman_num += syb[i] + num -= val[i] + i += 1 + return roman_num + + +class RomanConverter(IRomanConverter): + def roman_to_int(self, s: str) -> int: + """Konvertiert eine römische Zahl (String) in eine Dezimalzahl.""" + roman_values = { + 'I': 1, 'V': 5, 'X': 10, 'L': 50, + 'C': 100, 'D': 500, 'M': 1000 + } + + total = 0 + prev_value = 0 + + # Iteriere über die Zeichen der römischen Zahl von rechts nach links + for char in reversed(s.upper()): + value = roman_values.get(char) + if value is None: + raise ValueError(f"Ungültiges Zeichen '{char}' in der römischen Zahl.") + if value < prev_value: + total -= value + else: + total += value + prev_value = value + + return total diff --git a/others/Orlando/reportOrlandoImp.md b/others/Orlando/reportOrlandoImp.md new file mode 100644 index 0000000000000000000000000000000000000000..c56e64c59252b509fd636823f2a4f760f345089f --- /dev/null +++ b/others/Orlando/reportOrlandoImp.md @@ -0,0 +1,7 @@ +| Name | Interface break | Failed Testcases | | +|---------|-----------------|---------------------------------------------------------------------------------|------------------------------------------------------------------------------------------| +| Orlando | no | test_convert_addition (tests.test_romannumerals.TestRomanNumber) ... ERROR | Eingabe muss eine ganze Römische Zahl sein. Testet von Dezimalzahlen auf Römische Zahlen | +| Orlando | no | test_convert_invalid (tests.test_romannumerals.TestRomanNumber) ... ERROR | Eingabe muss eine ganze Römische Zahl sein. Testet von Dezimalzahlen auf Römische Zahlen | +| Orlando | no | test_convert_large_numbers (tests.test_romannumerals.TestRomanNumber) ... ERROR | Eingabe muss eine ganze Römische Zahl sein. Testet von Dezimalzahlen auf Römische Zahlen | +| Orlando | no | test_convert_mixed (tests.test_romannumerals.TestRomanNumber) ... ERROR | Eingabe muss eine ganze Römische Zahl sein. Testet von Dezimalzahlen auf Römische Zahlen | +| Orlando | no | test_convert_subtraction (tests.test_romannumerals.TestRomanNumber) ... ERROR | Eingabe muss eine ganze Römische Zahl sein. Testet von Dezimalzahlen auf Römische Zahlen | \ No newline at end of file diff --git a/others/Wasili/WasiliRomanConverter.py b/others/Wasili/WasiliRomanConverter.py new file mode 100644 index 0000000000000000000000000000000000000000..54a708e256634d98ab8eec26e893fd45f00fe309 --- /dev/null +++ b/others/Wasili/WasiliRomanConverter.py @@ -0,0 +1,54 @@ +import unittest +from abc import ABC, abstractmethod +from src.romannumerals import RomanNumber +from src.interfaces import IRomanNumber +''' +#Interface für Counter +class IRomanNumber(ABC): + @abstractmethod + def convert_int_to_str(self, n: int) -> str: + pass + +# Implementierung Converter Klasse +class RomanNumber(IRomanNumber): + def convert_int_to_str(self, n: int) -> str: + + #Eingabe anders als int + if not isinstance(n, int): + return "Fehler: Bitte Zahl eingeben" + + #Int Eingabe kleiner gleich 0 + if n <= 0: + return "Integer muss größer als 0 sein" + + # Bekannte Werte umwandeln + roman_convert = {1: "I", 21: "XXI", 1000: "M"} + return roman_convert.get(n) +''' +# Testklasse (TestConverter) +class TestRomanNumber (unittest.TestCase): + def setUp(self): + self.r = RomanNumber() + + def test_convert_1(self): + self.assertEqual(self.r.convert(1), "I") + + def test_convert_21(self): + self.assertEqual(self.r.convert(21), "XXI") + + def test_convert_empty(self): + self.assertEqual(self.r.convert(None), "Fehler: Bitte Zahl eingeben") + + def test_convert_string(self): + self.assertEqual(self.r.convert("Hello"), "Fehler: Bitte Zahl eingeben") + + def test_convert_downzero(self): + self.assertEqual(self.r.convert(-5), "Integer muss größer als 0 sein") + + def test_convert_downzero(self): + self.assertEqual(self.r.convert(1000), "M") + +if __name__ == "__main__": + unittest.main() + +# python -m unittest others.Wasili.WasiliRomanConverter -v \ No newline at end of file diff --git a/others/Wasili/reportWasiliImp.md b/others/Wasili/reportWasiliImp.md new file mode 100644 index 0000000000000000000000000000000000000000..6e16b760ac5c53ccb2da6813c9d3081f1ca93ee3 --- /dev/null +++ b/others/Wasili/reportWasiliImp.md @@ -0,0 +1,7 @@ +| Name | Interface break | Failed Testcases | | +|--------|-----------------|---------------------------------------------------------------------------------|---------------------------------------------------------------| +| Wasili | no | test_convert_addition (tests.test_romannumerals.TestRomanNumber) ... ERROR | AttributeError: 'TestRomanNumber' object has no attribute 'r' | +| Wasili | no | test_convert_invalid (tests.test_romannumerals.TestRomanNumber) ... ERROR | AttributeError: 'TestRomanNumber' object has no attribute 'r' | +| Wasili | no | test_convert_large_numbers (tests.test_romannumerals.TestRomanNumber) ... ERROR | AttributeError: 'TestRomanNumber' object has no attribute 'r' | +| Wasili | no | test_convert_mixed (tests.test_romannumerals.TestRomanNumber) ... ERROR | AttributeError: 'TestRomanNumber' object has no attribute 'r' | +| Wasili | no | test_convert_subtraction (tests.test_romannumerals.TestRomanNumber) ... ERROR | AttributeError: 'TestRomanNumber' object has no attribute 'r' | \ No newline at end of file diff --git a/others/Wasili/reportWasiliTests.md b/others/Wasili/reportWasiliTests.md new file mode 100644 index 0000000000000000000000000000000000000000..62478d1aeb716cc446f917e933d7be1e1a87a109 --- /dev/null +++ b/others/Wasili/reportWasiliTests.md @@ -0,0 +1,4 @@ +| Name | Interface break | Failed Testcases | | +|--------|-----------------|------------------------------------------------------------------------------------|-----------------------------------| +| Wasili | no | test_convert_empty (others.Wasili.WasiliRomanConverter.TestRomanNumber) ... ERROR | Eingabe muss eine ganze Zahl sein | +| Wasili | no | test_convert_string (others.Wasili.WasiliRomanConverter.TestRomanNumber) ... ERROR | Eingabe muss eine ganze Zahl sein | \ No newline at end of file diff --git a/tests/test_romannumerals.py b/tests/test_romannumerals.py index 35e2af35f754d89a2da55ab9537741a29fd40960..1a97477ad5aaec4c754e7e735b17e9d3f9bee50d 100644 --- a/tests/test_romannumerals.py +++ b/tests/test_romannumerals.py @@ -40,11 +40,29 @@ # Bei Eingabe der Zeichenfolge "ABC" erhalte ich eine Fehlermeldung # Bei Eingabe von None erhalte ich eine Fehlermeldung # Bei Eingabe der Zahl 3.14 erhalte ich eine Fehlermeldung - +''' 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 + + +import unittest +from others.Momo.MomoRomanConverter import convert + +import unittest +from others.Alma.AlmaRomanConverter import IRomanNumber, RomanNumber +''' +import unittest +from others.Hatice.HaticeRomanConverter import IRomanNumber, RomanNumber + class TestRomanNumber(unittest.TestCase): def setUp(self): self.converter: IRomanNumber = RomanNumber() @@ -97,5 +115,5 @@ class TestRomanNumber(unittest.TestCase): if __name__ == "__main__": unittest.main() -# python -m unittest tests.test_romannumerals +# python -m unittest tests.test_romannumerals -v # python -m unittest discover -s tests \ No newline at end of file diff --git a/testsothers/OrlandoTestRoman.py b/testsothers/OrlandoTestRoman.py new file mode 100644 index 0000000000000000000000000000000000000000..ce7b888f746f3f3bd98eaca7945119c794bba2c3 --- /dev/null +++ b/testsothers/OrlandoTestRoman.py @@ -0,0 +1,68 @@ +# Testfälle roman_to_int, str -> int + +# 1. Einzelne römische Ziffern +# Eingabe: "I" → Erwartete Ausgabe: 1 +# Eingabe: "V" → Erwartete Ausgabe: 5 +# Eingabe: "X" → Erwartete Ausgabe: 10 +# Eingabe: "L" → Erwartete Ausgabe: 50 +# Eingabe: "C" → Erwartete Ausgabe: 100 +# Eingabe: "D" → Erwartete Ausgabe: 500 +# Eingabe: "M" → Erwartete Ausgabe: 1000 + +#2. Mehrere gleiche Ziffern hintereinander (einfache Addition) +# Eingabe: "II" → Erwartete Ausgabe: 2 +# Eingabe: "XX" → Erwartete Ausgabe: 20 +# Eingabe: "CC" → Erwartete Ausgabe: 200 +# Eingabe: "MM" → Erwartete Ausgabe: 2000 + +#3. Subtraktive Notation +# Eingabe: "IV" → Erwartete Ausgabe: 4 +# Eingabe: "IX" → Erwartete Ausgabe: 9 +# Eingabe: "XL" → Erwartete Ausgabe: 40 +# Eingabe: "XC" → Erwartete Ausgabe: 90 +# Eingabe: "CD" → Erwartete Ausgabe: 400 +# Eingabe: "CM" → Erwartete Ausgabe: 900 + +#4. Komplexe Zahlen +# Eingabe: "MCMXCIV" → Erwartete Ausgabe: 1994 +#Eingabe: "XIV" → Erwartete Ausgabe: 14 +#Eingabe: "CDXLIV" → Erwartete Ausgabe: 444 + + +import sys +import os +import unittest + +# Füge das src-Verzeichnis zum Python-Pfad hinzu +sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '../src'))) + +from src.romannumerals import RomanNumber # Importiere die zu testende Klasse + +class TestRomanConverter(unittest.TestCase): + def setUp(self): + self.converter = RomanNumber() + + def test_single_digits(self): + self.assertEqual(self.converter.convert("I"), 1) + self.assertEqual(self.converter.convert("V"), 5) + self.assertEqual(self.converter.convert("X"), 10) + + def test_multiple_digits(self): + self.assertEqual(self.converter.convert("II"), 2) + self.assertEqual(self.converter.convert("XX"), 20) + self.assertEqual(self.converter.convert("VI"), 6) + + def test_subtractive_notation(self): + self.assertEqual(self.converter.convert("IV"), 4) + self.assertEqual(self.converter.convert("IX"), 9) + self.assertEqual(self.converter.convert("XL"), 40) + self.assertEqual(self.converter.convert("XC"), 90) + + def test_complex_numbers(self): + self.assertEqual(self.converter.convert("MCMXCIV"), 1994) + self.assertEqual(self.converter.convert("CDXLIV"), 444) + +if __name__ == "__main__": + unittest.main() + +# python -m unittest testsothers.OrlandoTestRoman -v \ No newline at end of file diff --git a/testsothers/reportOrlandoTests.md b/testsothers/reportOrlandoTests.md new file mode 100644 index 0000000000000000000000000000000000000000..cea7a636bfd3b750a46b53281db395224ef02f51 --- /dev/null +++ b/testsothers/reportOrlandoTests.md @@ -0,0 +1,6 @@ +| Name | Interface break | Failed Testcases | | +|---------|-----------------|---------------------------------------------------------------------------------------|----------------------------------------------------------------------------------| +| Orlando | no | test_complex_numbers (testsothers.OrlandoTestRoman.TestRomanConverter) ... ERROR | Eingabe muss eine ganze Zahl sein. Testet von Römischen Zahlen auf Dezimalzahlen | +| Orlando | no | test_multiple_digits (testsothers.OrlandoTestRoman.TestRomanConverter) ... ERROR | Eingabe muss eine ganze Zahl sein. Testet von Römischen Zahlen auf Dezimalzahlen | +| Orlando | no | test_single_digits (testsothers.OrlandoTestRoman.TestRomanConverter) ... ERROR | Eingabe muss eine ganze Zahl sein. Testet von Römischen Zahlen auf Dezimalzahlen | +| Orlando | no | test_subtractive_notation (testsothers.OrlandoTestRoman.TestRomanConverter) ... ERROR | Eingabe muss eine ganze Zahl sein. Testet von Römischen Zahlen auf Dezimalzahlen | \ No newline at end of file