diff --git a/String Calculator.py b/String Calculator.py new file mode 100644 index 0000000000000000000000000000000000000000..75ecc09617aa694296836baa8ccbd048a809d6fb --- /dev/null +++ b/String Calculator.py @@ -0,0 +1,31 @@ +#test no string +#test add 1 string +#test adding 2 strings +import unittest + +class StringCalculator: + def add (self, numbers : str)-> int: #Erwartet Integer + if not numbers: + return 0 + else: + number_list = numbers.split(',')#aufteilung der strings + if len(number_list) ==1: + return int(number_list[0])#bei einem string wird er in int umgewandelt + elif len(number_list)==2: + return int(number_list[0])+ int(number_list[1])#bei 2 strings wird beides in int verwandelt und die summe zurück gegeben(Position 1/0+Position 2/1) + return 0 + + +class TestStingCalculator(unittest.TestCase): + def test_empty_string(self): + calculator = StringCalculator() + self.assertEqual(calculator.add(""), 0) #leerer string + 0 + def test_single_number(self): + calculator = StringCalculator() + self.assertEqual(calculator.add("5"),5) #eingabe von einem String + def test_multiple_numbers(self): + calculator=StringCalculator() + self.assertEqual(calculator.add("5,5"),10)#eingabe mehrere strings + +if __name__=='__main__': + unittest.main() \ No newline at end of file diff --git "a/Test_Converter_R\303\266mische_Zahlen.py" "b/Test_Converter_R\303\266mische_Zahlen.py" index d98f3422bc2a74e8201a16b6c5a433846eaf8e02..61622f8a9ab18de762b7adb4f9d89c2ded7425d4 100644 --- "a/Test_Converter_R\303\266mische_Zahlen.py" +++ "b/Test_Converter_R\303\266mische_Zahlen.py" @@ -1,36 +1,59 @@ #Test_Converter_Römische_Zahlen import unittest +from abc import ABC, abstractmethod +#from muhamed_directory.other.alma.test2converter import RomanNumber as Alma +#from muhamed_directory.other.daniel.converter import Converter as Dani +#from muhamed_directory.other.hatice.converter import RomanNumber as Hati +#from muhamed_directory.other.wasili.TDD_Converter import RomanNumber as was +from muhamed_directory.other.orlando.RomanConverter import int_to_roman as Lando -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 +class IStringCalculator(ABC): + @abstractmethod + def add(self, numbers: str) -> int: + pass +class Converter(IStringCalculator): + @staticmethod + 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): + while n >= value: + result += roman_numerals[value] + n -= value + return result + + class TestRomanConverter(unittest.TestCase): + + def setUp(self): + self.Converter = Lando + def test_1(self): - self.assertEqual(convert(1), "I") # Erwartet "I" für 1 + self.assertEqual(self.Converter.int_to_roman(1), "I") def test_10(self): - self.assertEqual(convert(10), "X") # Erwartet "X" für 10 + self.assertEqual(self.calculator.roman_to_int(10), "X") + def test_21(self): - self.assertEqual(convert(21), "XXI") # Erwartet "XXI" für 21 + self.assertEqual(self.calculator.roman_to_int(21), "XXI") + def test_50(self): - self.assertEqual(convert(50), "L") # Erwartet "L" für 50 + self.assertEqual(self.calculator.roman_to_int(50), "L") + def test_100(self): - self.assertEqual(convert(100), "C") # Erwartet "C" für 100 + self.assertEqual(self.calculator.roman_to_int(100), "C") + def test_1000(self): - self.assertEqual(convert(1000), "M") # Erwartet "M" für 1000 + self.assertEqual(self.calculator.roman_to_int(1000), "M") + def test_1999(self): - self.assertEqual(convert(1999), "MCMXCIX") #Erwartet "MCMXCIX" für 1999 - + self.assertEqual(self.calculator.roman_to_int(1999), "MCMXCIX") + if __name__ == "__main__": unittest.main() \ No newline at end of file diff --git a/muhamed_directory/other/alma/__pycache__/test2converter.cpython-311.pyc b/muhamed_directory/other/alma/__pycache__/test2converter.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ab298a188fc70437ac40bc3acde1e4edb9f8eabf Binary files /dev/null and b/muhamed_directory/other/alma/__pycache__/test2converter.cpython-311.pyc differ diff --git a/muhamed_directory/other/alma/import unittest.py b/muhamed_directory/other/alma/import unittest.py new file mode 100644 index 0000000000000000000000000000000000000000..c1b2fe7432330ac049fb5f7f56d79e9a1227880b --- /dev/null +++ b/muhamed_directory/other/alma/import unittest.py @@ -0,0 +1,50 @@ +import unittest +from abc import ABC, abstractmethod + +#Interface für Counter +class ICounter(ABC): + @abstractmethod + def count_ED(self, s): + pass + +# Implementierung Counter Klasse +class Counter(ICounter): + def count_ED(self, s): + s = s.upper() + return s.count("D") + s.count("E") + +class TextCounter (unittest.TestCase): + def setUp(self): + self.c = Counter() + + def test_count_ED_regular(self): + ergebnis = self.c.count_ED("Decker") + self.assertEqual(ergebnis, 3) + + def test_count_ED_empty(self): + ergebnis = self.c.count_ED("") + self.assertEqual(ergebnis, 0) + + def test_count_ED_wo(self): + '''Testet einen String ohne E und D''' + ergebnis = self.c.count_ED("HAllo") + self.assertEqual(ergebnis, 0) + + def test_count_ED_insensitive(self): + '''Testet verschiedene Groß- und Kleinschreibung ''' + ergebnis = self.c.count_ED("Der Esel") + self.assertEqual(ergebnis, 4) + + def test_count_ED_single_letter(self): + '''Testet Eingaben mit nur einem Buchstaben''' + ergebnis = self.c.count_ED("D") + self.assertEqual(ergebnis, 1) + ergebnis = self.c.count_ED("E") + self.assertEqual(ergebnis, 1) + ergebnis = self.c.count_ED("d") + self.assertEqual(ergebnis, 1) + ergebnis = self.c.count_ED("e") + self.assertEqual(ergebnis, 1) + +if __name__ == "__main__": + unittest.main() \ No newline at end of file diff --git a/muhamed_directory/other/alma/test2converter.py b/muhamed_directory/other/alma/test2converter.py new file mode 100644 index 0000000000000000000000000000000000000000..2e04e942a54a0b4c592206688a69e563a966af96 --- /dev/null +++ b/muhamed_directory/other/alma/test2converter.py @@ -0,0 +1,37 @@ +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, "") + +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() \ No newline at end of file diff --git a/muhamed_directory/other/daniel/__pycache__/converter.cpython-311.pyc b/muhamed_directory/other/daniel/__pycache__/converter.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e484c342eca8a05c422e607ed31e42fb40fb37af Binary files /dev/null and b/muhamed_directory/other/daniel/__pycache__/converter.cpython-311.pyc differ diff --git a/muhamed_directory/other/daniel/converter.py b/muhamed_directory/other/daniel/converter.py new file mode 100644 index 0000000000000000000000000000000000000000..1d5eff48258d339da12cee00fa9dd6dd640c6911 --- /dev/null +++ b/muhamed_directory/other/daniel/converter.py @@ -0,0 +1,182 @@ +# 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 + +import unittest +from abc import ABC, abstractmethod + +class IConverter(ABC): + @abstractmethod + def convert(self, num: int) -> str: + pass + +class Converter(IConverter): + def convert(self, num: int) -> str: + + '''Sicherstellen, dass nur eine ganze Zahl eingegeben wurde.''' + 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 = '' + + '''Wenn eine 0 eingegeben wird muss eine Exception folgen''' + if num == 0: + return "Es gibt keine römische Null" + + + '''Sicherstellen, dass keine Zeichen oder Strings eingegeben werden''' + if isinstance(num, int): + + '''Sicherstellen, dass keine negativen Zahlen eingegeben werden''' + 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.c = Converter() + + def test_convertOne(self): + res = self.c.convert(1) + self.assertEqual(res, 'I') + + def test_convertTwo(self): + res = self.c.convert(2) + self.assertEqual(res, 'II') + + def test_convertThree(self): + res = self.c.convert(3) + self.assertEqual(res, 'III') + + def test_convertFour(self): + res = self.c.convert(4) + self.assertEqual(res, 'IV') + + def test_convertFive(self): + res = self.c.convert(5) + self.assertEqual(res, 'V') + + def test_convertNine(self): + res = self.c.convert(9) + self.assertEqual(res, 'IX') + + def test_convertTen(self): + res = self.c.convert(10) + self.assertEqual(res, 'X') + + def test_convertTwentyTwo(self): + res = self.c.convert(21) + self.assertEqual(res, 'XXI') + + def test_convertFifty(self): + res = self.c.convert(50) + self.assertEqual(res, 'L') + + def test_convertHundred(self): + res = self.c.convert(100) + self.assertEqual(res, 'C') + + def test_convertFiveHundred(self): + res = self.c.convert(500) + self.assertEqual(res, 'D') + + def test_convertThousand(self): + res = self.c.convert(1000) + self.assertEqual(res, 'M') + + def test_convertFourDigit(self): + res = self.c.convert(1111) + self.assertEqual(res, 'MCXI') + + def test_convertNintyNine(self): + res = self.c.convert(99) + self.assertEqual(res, 'XCIX') + + def test_convertZero(self): + res = self.c.convert(0) + self.assertEqual(res, 'Es gibt keine römische Null') + + def test_convertFourty(self): + res = self.c.convert(40) + self.assertEqual(res, 'XL') + + def test_convertString(self): + res = self.c.convert('HUIHIN') + self.assertEqual(res, "Bitte ganze Zahlen eingeben") + + def test_convertFloat(self): + res = self.c.convert(4.3) + self.assertEqual(res, "Bitte ganze Zahlen eingeben") + + def test_convertNegative(self): + res = self.c.convert(-4) + self.assertEqual(res, "Es sind nur positive Zahlen zum konvertieren erlaubt") + + def test_convertYear(self): + res = self.c.convert(2025) + self.assertEqual(res, "MMXXV") + + def test_convertSign(self): + res = self.c.convert('!') + self.assertEqual(res, "Bitte ganze Zahlen eingeben") + + def test_convertMultipleNum(self): + res = self.c.convert('4, 3') + self.assertEqual(res, "Bitte nur eine ganze Zahl eingeben") + + def test_convertHighNum(self): + res = self.c.convert(4000) + self.assertEqual(res, "MMMM") + + def test_convertThirty(self): + res = self.c.convert(30) + self.assertEqual(res, "XXX") + + def test_convertNinety(self): + res = self.c.convert(90) + self.assertEqual(res, "XC") + + def test_convertEmpty(self): + res = self.c.convert('') + self.assertEqual(res, "Bitte ganze Zahlen eingeben") + + + + +if __name__ == "__main__": + unittest.main() diff --git a/muhamed_directory/other/hatice/__pycache__/converter.cpython-311.pyc b/muhamed_directory/other/hatice/__pycache__/converter.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4f84ad4ae027f6ae2c09c923699dc5e41872ad4a Binary files /dev/null and b/muhamed_directory/other/hatice/__pycache__/converter.cpython-311.pyc differ diff --git a/muhamed_directory/other/hatice/calculator.py b/muhamed_directory/other/hatice/calculator.py new file mode 100644 index 0000000000000000000000000000000000000000..79532fcf5edde813fe1f73aa5077023520b017f2 --- /dev/null +++ b/muhamed_directory/other/hatice/calculator.py @@ -0,0 +1,13 @@ +import unittest + +class Calculator: + def add(self, a, b): + return a + b + +class TestCalculator(unittest.TestCase): + def test_add(self): + c = Calculator() + self.assertEqual(c.add(2,3), 5) + +if __name__ == '__main__': + unittest.main() \ No newline at end of file diff --git a/muhamed_directory/other/hatice/converter.py b/muhamed_directory/other/hatice/converter.py new file mode 100644 index 0000000000000000000000000000000000000000..0ef9bd00dc3c5f4bb6eec9d95b79aea454ffd3f8 --- /dev/null +++ b/muhamed_directory/other/hatice/converter.py @@ -0,0 +1,49 @@ +#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, "") + +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() diff --git a/muhamed_directory/other/hatice/counter.py b/muhamed_directory/other/hatice/counter.py new file mode 100644 index 0000000000000000000000000000000000000000..f6ee3bb865d651fd9c93a7faa2daf9851732b86e --- /dev/null +++ b/muhamed_directory/other/hatice/counter.py @@ -0,0 +1,35 @@ +#Bei Einhabe des Strings "Decker" liefert die Funktion 3 +#Bei Eingabe eines leeren Strings soll 0 ausgegeben werden +#Bei Eingabe des Strings "Hallo" ohne E und D soll 0 ausgegeben werden + +from abc import ABC,abstractmethod +import unittest + +class ICounter (ABC): + @abstractmethod + def count_ED(self,s): + pass + +class Counter (ICounter): + #def count_ED(self,s): + #return s.count("e")+s.count("D") + pass + +class TestCounter (unittest.TestCase): + def test_count_ED_regular (self): + c=Counter() + res=c.count_ED ("Decker") + self.assertEqual(res,3) + def test_count_ED_empty (self): + c=Counter() + res=c.count_ED ("") + self.assertEqual(res,0) + def test_count_ED_wo (self): + '''Testet einen String ohne E und D''' + c=Counter() + res=c.count_ED ("Hallo") + self.assertEqual(res,0) + + +if __name__=="__main__": + unittest.main() diff --git a/muhamed_directory/other/hatice/test.py b/muhamed_directory/other/hatice/test.py new file mode 100644 index 0000000000000000000000000000000000000000..d40dcf92e86fa7d9cc3fa3f3309aa5d30b9a311e --- /dev/null +++ b/muhamed_directory/other/hatice/test.py @@ -0,0 +1,5 @@ +#Meine Übung, um es zu verstehen! +class Employee: + def __init__(self, name, age): + self.name = name + self.age = age \ No newline at end of file diff --git a/muhamed_directory/other/lasse/Test.py b/muhamed_directory/other/lasse/Test.py new file mode 100644 index 0000000000000000000000000000000000000000..903e6d75502eb48a50b99ba6c5a6ba3d97140231 --- /dev/null +++ b/muhamed_directory/other/lasse/Test.py @@ -0,0 +1,2 @@ +print("Hello WORLD") +print("test") \ No newline at end of file diff --git a/muhamed_directory/other/lasse/calculator.py b/muhamed_directory/other/lasse/calculator.py new file mode 100644 index 0000000000000000000000000000000000000000..e799761a891c6add0f8c76442f7d6d523992d0e0 --- /dev/null +++ b/muhamed_directory/other/lasse/calculator.py @@ -0,0 +1,29 @@ +#Test1: Addition 2 positiver Zaheln (2+5) erwartetes Ergebnis 8 +#Test2: Addition negativer und positiver Zahl (-1+1) erwartetes Ergebnis 0 +#Test3: Addition (0+0), erwartetes Ergebnis 0 +#Test4: Addition von 2 Dezimalzahlen (2,5+3,5), erwartetes Ergebnis 6 + +from abc import ABC, abstractmethod +class ICalculator(ABC): + @abstractmethod + def add(self, a: float, b: float) -> float: + pass + +class Calculator(ICalculator): + def add(self, a: float, b: float) -> float: + return a + b + +class TestCalculator: + def __init__(self, calculator: ICalculator): + self.calculator = calculator + def test_add(self): + assert self.calculator.add(2,3) == 5, "Fehler falls nicht 5" + assert self.calculator.add(-1,1) == 0, "Fegler falls nich 0" + assert self.calculator.add(0,0) == 0, "Fehler falls nicht 0" + assert self.calculator.add(2.5,3.5) == 6, "Fehler falls nicht 5" + print("Test erfolgreich") + +if __name__ == "__main__": + calc = Calculator() + tester = TestCalculator(calc) + tester.test_add() diff --git a/muhamed_directory/other/lasse/counter.py b/muhamed_directory/other/lasse/counter.py new file mode 100644 index 0000000000000000000000000000000000000000..00cf9c02e9829bf00319ee1547bfdd28a6018193 --- /dev/null +++ b/muhamed_directory/other/lasse/counter.py @@ -0,0 +1,48 @@ +#Bei Eingabe des Strings "Decker" liefert die Funktion 3 +#Bei Eingabe eines leeren Stings soll 0 augegeben werden +#Bei Eingabe des Strings "Hallo" ohne E und D soll 0 ausgegeben werden +#Bei Eingabe von dem String "Der Esel" soll Groß-Kleinschreibung (Caseinsensitive) gezählt werden. das Ergebnis ist 4 +#Bei Eingabe des Buchstaben D oder E soll 1 ausgegeben werden + +from abc import ABC,abstractmethod +import unittest + +class ICounter (ABC): + @abstractmethod + def count_ED(self,s): + pass + +class Counter (ICounter): + def count_ED(self, s): + s=s.upper() + return s.count("D")+s.count("E") + +class TestCounter (unittest.TestCase): + def setUp(self): + self.c=Counter() + def test_count_ED_regular (self): + res=self.c.count_ED ("Decker") + self.assertEqual(res,3) + def test_count_ED_empty (self): + res=self.c.count_ED ("") + self.assertEqual(res,0) + def test_count_ED_wo (self): + '''Testet einen String ohne E und D''' + res=self.c.count_ED ("Hallo") + self.assertEqual(res,0) + def test_count_ED_case_insensitive (self): + '''Testet verschiedene Groß- und Kleinschreibungen''' + res=self.c.count_ED ("Der Esel") + self.assertEqual(res,4) + def test_count_ED_single_letetr (self): + '''Testet Eingaben mit nur einem Buchstaben''' + res=self.c.count_ED ('D') + self.assertEqual(res,1) + res=self.c.count_ED ('E') + self.assertEqual (res,1) + res=self.c.count_ED ('d') + self.assertEqual(res,1) + res=self.c.count_ED ('e') + self.assertEqual (res,1) +if __name__=="__main__": + unittest.main() \ No newline at end of file diff --git a/muhamed_directory/other/lasse/interfaces.py b/muhamed_directory/other/lasse/interfaces.py new file mode 100644 index 0000000000000000000000000000000000000000..fc645736ebe7edf2091db66c3738825f50fd923f --- /dev/null +++ b/muhamed_directory/other/lasse/interfaces.py @@ -0,0 +1,6 @@ +from abc import ABC, abstractmethod + +class IRomanNumerals(ABC): + @abstractmethod + def to_roman(self, num): + pass \ No newline at end of file diff --git a/muhamed_directory/other/lasse/main.py b/muhamed_directory/other/lasse/main.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/muhamed_directory/other/lasse/romannumerals.py b/muhamed_directory/other/lasse/romannumerals.py new file mode 100644 index 0000000000000000000000000000000000000000..3f3eaf1e8e956ca023c64ae71e38caefb1198940 --- /dev/null +++ b/muhamed_directory/other/lasse/romannumerals.py @@ -0,0 +1,23 @@ +from src.interfaces import IRomanNumerals + + +class RomanNumerals(IRomanNumerals): + def to_roman(self, num): + if not isinstance(num, int): + raise ValueError("Eingabe muss eine ganze Zahl sein") + if num <= 0 or num >= 4000: + raise ValueError("Zahl muss zwischen 1 und 3999 liegen") + + val = [ + (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, numeral) in val: + while num >= value: + result += numeral + num -= value + return result \ No newline at end of file diff --git a/muhamed_directory/other/lasse/test_romannumerals.py b/muhamed_directory/other/lasse/test_romannumerals.py new file mode 100644 index 0000000000000000000000000000000000000000..9a774cc92787102f3ef685b0c6a80138e5bbcedf --- /dev/null +++ b/muhamed_directory/other/lasse/test_romannumerals.py @@ -0,0 +1,108 @@ +# Basisfälle +# Bei Eingabe der Zahl 1, erhalte ich das Ergebnis I +# Bei Eingabe der Zahl 5, erhalte ich das Ergebnis V +# Bei Eingabe der Zahl 10, erhalte ich das Ergebnis X +# Bei Eingabe der Zahl 50, erhalte ich das Ergebnis L +# Bei Eingabe der Zahl 100, erhalte ich das Ergebnis C +# Bei Eingabe der Zahl 500, erhalte ich das Ergebnis D +# Bei Eingabe der Zahl 1000, erhalte ich das Ergebnis M +# Substraktionsregel +# Bei Eingabe der Zahl 4, erhalte ich das Ergebnis IV +# Bei Eingabe der Zahl 9, erhalte ich das Ergebnis IX +# Bei Eingabe der Zahl 40, erhalte ich das Ergebnis XL +# Bei Eingabe der Zahl 90, erhalte ich das Ergebnis XC +# Bei Eingabe der Zahl 400, erhalte ich das Ergebnis CD +# Bei Eingabe der Zahl 900, erhalte ich das Ergebnis CM +# Additionsregel +# Bei Eingabe der Zahl 2 erhalte ich das Ergebnis "II" +# 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 80 erhalte ich das Ergebnis "LXXX" +# Kombination aus Addition und Subtraktion +# Bei Eingabe der Zahl 14 erhalte ich das Ergebnis "XIV" +# Bei Eingabe der Zahl 19 erhalte ich das Ergebnis "XIX" +# Bei Eingabe der Zahl 29 erhalte ich das Ergebnis "XXIX" +# Bei Eingabe der Zahl 44 erhalte ich das Ergebnis "XLIV" +# Bei Eingabe der Zahl 99 erhalte ich das Ergebnis "XCIX" +# Bei Eingabe der Zahl 444 erhalte ich das Ergebnis "CDXLIV" +# Bei Eingabe der Zahl 999 erhalte ich das Ergebnis "CMXCIX" +# Größere Zahlen +# Bei Eingabe der Zahl 1001 erhalte ich das Ergebnis "MI" +# Bei Eingabe der Zahl 1987 erhalte ich das Ergebnis "MCMLXXXVII" +# Bei Eingabe der Zahl 2023 erhalte ich das Ergebnis "MMXXIII" +# Bei Eingabe der Zahl 3999 erhalte ich das Ergebnis "MMMCMXCIX" +# Fehlerfälle +# Bei Eingabe der Zahl 0 erhalte ich eine Fehlermeldung +# Bei Eingabe der Zahl -1 erhalte ich eine Fehlermeldung +# Bei Eingabe der Zahl 4000 erhalte ich eine Fehlermeldung +# 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 RomanNumerals + + +class TestRomanNumerals(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") + + 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_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_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_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_to_roman_invalid(self): + with self.assertRaises(ValueError): + self.converter.to_roman(0) + with self.assertRaises(ValueError): + self.converter.to_roman(-1) + with self.assertRaises(ValueError): + self.converter.to_roman(4000) + with self.assertRaises(ValueError): + self.converter.to_roman("ABC") + with self.assertRaises(ValueError): + self.converter.to_roman(None) + with self.assertRaises(ValueError): + self.converter.to_roman(3.14) + + +if __name__ == "__main__": + unittest.main() \ No newline at end of file diff --git a/muhamed_directory/other/orlando/RomanConverter.py b/muhamed_directory/other/orlando/RomanConverter.py new file mode 100644 index 0000000000000000000000000000000000000000..0af044bf86763d59f9238708be92acaac2e092a8 --- /dev/null +++ b/muhamed_directory/other/orlando/RomanConverter.py @@ -0,0 +1,55 @@ + + + +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 IRomanConverter(ABC): + @abstractmethod + def roman_to_int(self, s: str) -> int: + """Konvertiert eine römische Zahl (String) in eine Dezimalzahl.""" + pass + +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/muhamed_directory/other/orlando/TestCount_ED.py b/muhamed_directory/other/orlando/TestCount_ED.py new file mode 100644 index 0000000000000000000000000000000000000000..152bccd1cb4dff5df43c1c368fea2de123bfc632 --- /dev/null +++ b/muhamed_directory/other/orlando/TestCount_ED.py @@ -0,0 +1,34 @@ +import unittest +import sys +import os + +sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '../src'))) +from src.Count_ED import Counter + +class TestCounter(unittest.TestCase): + def setUp(self): + self.c = Counter() + + def test_count_ed_regular(self): + self.assertEqual(self.c.count_ed("Decker"), 3) + + def test_count_ed_empty(self): + self.assertEqual(self.c.count_ed(""), 0) + + def test_count_ed_wo(self): + """Testet einen String ohne E und D""" + self.assertEqual(self.c.count_ed("Hallo"), 0) + + def test_count_ed_case_insensitive(self): + """Testet verschiedene Groß- und Kleinschreibungen""" + self.assertEqual(self.c.count_ed("Der Esel"), 4) + + def test_count_ED_single_letter(self): + """Testet Eingaben mit nur einem Buchstaben""" + self.assertEqual(self.c.count_ed('D'), 1) + self.assertEqual(self.c.count_ed('E'), 1) + self.assertEqual(self.c.count_ed('d'), 1) + self.assertEqual(self.c.count_ed('e'), 1) + +if __name__ == "__main__": + unittest.main() \ No newline at end of file diff --git a/muhamed_directory/other/orlando/__init__.py b/muhamed_directory/other/orlando/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/muhamed_directory/other/orlando/__pycache__/RomanConverter.cpython-311.pyc b/muhamed_directory/other/orlando/__pycache__/RomanConverter.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..78e04a25dbea7b2bc1b1abf5f51c568432e01f84 Binary files /dev/null and b/muhamed_directory/other/orlando/__pycache__/RomanConverter.cpython-311.pyc differ diff --git a/muhamed_directory/other/orlando/__pycache__/__init__.cpython-311.pyc b/muhamed_directory/other/orlando/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..456506eeb2e840d1aa8b7835d806ade181909483 Binary files /dev/null and b/muhamed_directory/other/orlando/__pycache__/__init__.cpython-311.pyc differ diff --git a/muhamed_directory/other/orlando/interfaces.py b/muhamed_directory/other/orlando/interfaces.py new file mode 100644 index 0000000000000000000000000000000000000000..be069d6d910a5d5c44d8c083ec4429cfaac516b6 --- /dev/null +++ b/muhamed_directory/other/orlando/interfaces.py @@ -0,0 +1,30 @@ +from abc import ABC, abstractmethod + +# Definition des Interfaces für den StringCalculator +class IStringCalculator(ABC): + @abstractmethod + def add(self, numbers: str) -> int: + """ + Addiert beliebig viele Zahlen, die durch Kommas getrennt sind. + Leere oder nur aus Leerzeichen bestehende Einträge werden ignoriert. + + :param numbers: String mit Zahlen (z.B. "1,2,3") + :return: Summe der Zahlen als int + """ + pass + +class ICounter(ABC): + @abstractmethod + def count_ed(self, s: str) -> int: + """Zählt die Buchstaben 'E' und 'D' in einem String (Case-Insensitive).""" + pass +class IRomanConverter(ABC): + @abstractmethod + def roman_to_int(self, s: str) -> int: + """Konvertiert eine römische Zahl (String) in eine Dezimalzahl.""" + pass + +class ICalculator(ABC): + @abstractmethod + def calculate(self, expression: str) -> float: + pass \ No newline at end of file diff --git a/muhamed_directory/other/orlando/test_calculator.py b/muhamed_directory/other/orlando/test_calculator.py new file mode 100644 index 0000000000000000000000000000000000000000..a0c79315eb48c048e5a191db3037f095771d70a9 --- /dev/null +++ b/muhamed_directory/other/orlando/test_calculator.py @@ -0,0 +1,103 @@ +# Testfälle für calculate(), Eingabe: str, Ausgabe: float/int + +# 1ï¸âƒ£ Additionstests +# Eingabe: "1+1" → Erwartete Ausgabe: 2 +# Eingabe: "10+20" → Erwartete Ausgabe: 30 +# Eingabe: "0+5" → Erwartete Ausgabe: 5 +# Eingabe: "-3+7" → Erwartete Ausgabe: 4 +# Eingabe: "2.5+2.5" → Erwartete Ausgabe: 5.0 + +# 2ï¸âƒ£ Subtraktionstests +# Eingabe: "5-3" → Erwartete Ausgabe: 2 +# Eingabe: "10-20" → Erwartete Ausgabe: -10 +# Eingabe: "0-5" → Erwartete Ausgabe: -5 +# Eingabe: "-3-7" → Erwartete Ausgabe: -10 +# Eingabe: "2.5-1.5" → Erwartete Ausgabe: 1.0 + +# 3ï¸âƒ£ Multiplikationstests +# Eingabe: "2*3" → Erwartete Ausgabe: 6 +# Eingabe: "10*0" → Erwartete Ausgabe: 0 +# Eingabe: "-2*5" → Erwartete Ausgabe: -10 +# Eingabe: "3.5*2" → Erwartete Ausgabe: 7.0 +# Eingabe: "-3*-3" → Erwartete Ausgabe: 9 + +# 4ï¸âƒ£ Divisionstests +# Eingabe: "10/2" → Erwartete Ausgabe: 5 +# Eingabe: "5/2" → Erwartete Ausgabe: 2.5 +# Eingabe: "-6/3" → Erwartete Ausgabe: -2 +# Eingabe: "7.5/2.5" → Erwartete Ausgabe: 3.0 +# Eingabe: "5/0" → Erwartete Ausgabe: ZeroDivisionError (Fehlermeldung) + +# 5ï¸âƒ£ Komplexe Berechnungen +# Eingabe: "3+5*2" → Erwartete Ausgabe: 13 (Multiplikation vor Addition) +# Eingabe: "(3+5)*2" → Erwartete Ausgabe: 16 (Klammer zuerst) +# Eingabe: "10-4/2" → Erwartete Ausgabe: 8 (Division vor Subtraktion) +# Eingabe: "3+(2*5)-8/4" → Erwartete Ausgabe: 10 (Mehrere Operatoren) + +# 6ï¸âƒ£ Ungültige Eingaben +# Eingabe: "3++5" → Erwartete Ausgabe: SyntaxError (Fehlermeldung) +# Eingabe: "10*/2" → Erwartete Ausgabe: SyntaxError (Fehlermeldung) +# Eingabe: "abc" → Erwartete Ausgabe: ValueError (Fehlermeldung) + + +import unittest +from src.calculator import Calculator + +class TestCalculator(unittest.TestCase): + def setUp(self): + self.calc = Calculator() + + # Addition + def test_addition(self): + self.assertEqual(self.calc.calculate("1+1"), 2) + self.assertEqual(self.calc.calculate("10+20"), 30) + self.assertEqual(self.calc.calculate("0+5"), 5) + self.assertEqual(self.calc.calculate("-3+7"), 4) + self.assertEqual(self.calc.calculate("2.5+2.5"), 5.0) + + # Subtraktion + def test_subtraction(self): + self.assertEqual(self.calc.calculate("5-3"), 2) + self.assertEqual(self.calc.calculate("10-20"), -10) + self.assertEqual(self.calc.calculate("0-5"), -5) + self.assertEqual(self.calc.calculate("-3-7"), -10) + self.assertEqual(self.calc.calculate("2.5-1.5"), 1.0) + + # Multiplikation + def test_multiplication(self): + self.assertEqual(self.calc.calculate("2*3"), 6) + self.assertEqual(self.calc.calculate("10*0"), 0) + self.assertEqual(self.calc.calculate("-2*5"), -10) + self.assertEqual(self.calc.calculate("3.5*2"), 7.0) + self.assertEqual(self.calc.calculate("-3*-3"), 9) + + # Division + def test_division(self): + self.assertEqual(self.calc.calculate("10/2"), 5) + self.assertEqual(self.calc.calculate("5/2"), 2.5) + self.assertEqual(self.calc.calculate("-6/3"), -2) + self.assertEqual(self.calc.calculate("7.5/2.5"), 3.0) + + # Division durch Null + def test_division_by_zero(self): + with self.assertRaises(ZeroDivisionError): + self.calc.calculate("5/0") + + # Komplexe Berechnungen + def test_complex_expressions(self): + self.assertEqual(self.calc.calculate("3+5*2"), 13) # Punkt-vor-Strich beachten + self.assertEqual(self.calc.calculate("(3+5)*2"), 16) # Klammer zuerst + self.assertEqual(self.calc.calculate("10-4/2"), 8) # Division vor Subtraktion + self.assertEqual(self.calc.calculate("3+(2*5)-8/4"), 11.0) # 11 + + # Ungültige Eingaben + def test_invalid_expressions(self): + with self.assertRaises(ValueError): + self.calc.calculate("3++5") + with self.assertRaises(ValueError): + self.calc.calculate("10*/2") + with self.assertRaises(ValueError): + self.calc.calculate("abc") + +if __name__ == "__main__": + unittest.main() \ No newline at end of file diff --git a/muhamed_directory/other/orlando/test_roman.py b/muhamed_directory/other/orlando/test_roman.py new file mode 100644 index 0000000000000000000000000000000000000000..30cbabf8e6517f5fdcb4741df4389df09b0d3817 --- /dev/null +++ b/muhamed_directory/other/orlando/test_roman.py @@ -0,0 +1,66 @@ +# 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.RomanConverter import RomanConverter # Importiere die zu testende Klasse + +class TestRomanConverter(unittest.TestCase): + def setUp(self): + self.converter = RomanConverter() + + def test_single_digits(self): + self.assertEqual(self.converter.roman_to_int("I"), 1) + self.assertEqual(self.converter.roman_to_int("V"), 5) + self.assertEqual(self.converter.roman_to_int("X"), 10) + + def test_multiple_digits(self): + self.assertEqual(self.converter.roman_to_int("II"), 2) + self.assertEqual(self.converter.roman_to_int("XX"), 20) + self.assertEqual(self.converter.roman_to_int("VI"), 6) + + def test_subtractive_notation(self): + self.assertEqual(self.converter.roman_to_int("IV"), 4) + self.assertEqual(self.converter.roman_to_int("IX"), 9) + self.assertEqual(self.converter.roman_to_int("XL"), 40) + self.assertEqual(self.converter.roman_to_int("XC"), 90) + + def test_complex_numbers(self): + self.assertEqual(self.converter.roman_to_int("MCMXCIV"), 1994) + self.assertEqual(self.converter.roman_to_int("CDXLIV"), 444) + +if __name__ == "__main__": + unittest.main() \ No newline at end of file diff --git a/muhamed_directory/other/orlando/test_string_calculator.py b/muhamed_directory/other/orlando/test_string_calculator.py new file mode 100644 index 0000000000000000000000000000000000000000..b9420c04783cbe6fe8d8c40d0caea43d541e054e --- /dev/null +++ b/muhamed_directory/other/orlando/test_string_calculator.py @@ -0,0 +1,113 @@ +# Testfälle add(numbers: str) -> int – StringCalculator + +# 1. Leerer String +# Eingabe: "" → Erwartete Ausgabe: 0 + +# 2. Einzelne Zahl +# Eingabe: "1" → Erwartete Ausgabe: 1 + +# 3. Zwei Zahlen, getrennt durch Komma +# Eingabe: "1,2" → Erwartete Ausgabe: 3 + +# 4. Mehr als zwei Zahlen (beliebig viele erlaubt) +# Eingabe: "1,2,3" → Erwartete Ausgabe: 6 +# Eingabe: "1,2,3,4,5" → Erwartete Ausgabe: 15 + +# 5. Leere Einträge ignorieren +# Eingabe: "1,,2" → Erwartete Ausgabe: 3 +# Eingabe: "1, ,2" → Erwartete Ausgabe: 3 +# Eingabe: ",,1,,2,,," → Erwartete Ausgabe: 3 + +# 6. Zeilenumbrüche als Trennzeichen erlauben +# Eingabe: "1\n2,3" → Erwartete Ausgabe: 6 +# Eingabe: "1,2\n3" → Erwartete Ausgabe: 6 +# Eingabe: "1\n2\n3" → Erwartete Ausgabe: 6 + +# 8. Negative Zahlen → Exception mit allen negativen Werten +# Eingabe: "1,-2" → Exception mit Message "negatives not allowed: -2" +# Eingabe: "-1,-2,3" → Exception mit Message "negatives not allowed: -1, -2" + +# 9. Benutzerdefinierter Delimiter über Präfix: "//<delimiter>\n" +# Eingabe: "//;\n1;2" → 3 +# Eingabe: "//|\n4|5|6" → 15 +# Eingabe: "//_\n7_8_9" → 24 + +# 10. Zahlen größer als 1000 ignorieren +# Eingabe: "2,1001" → 2 +# Eingabe: "1000,1" → 1001 (1000 zählt noch mit) +# Eingabe: "1234,1001,3" → 3 + +# 11. Delimiter mit beliebiger Länge (Format: //[delimiter]\n) +# Eingabe: "//[***]\n1***2***3" → 6 +# Eingabe: "//[abc]\n4abc5abc6" → 15 +# Eingabe: "//[+]\n1+2+3" → 6 + +import unittest +from src.string_calculator import StringCalculator + +class TestStringCalculator(unittest.TestCase): + def setUp(self): + # Vor jedem Test wird eine Instanz des Calculators erstellt + self.calc = StringCalculator() + + def test_add_empty_string(self): + # Leerer String → 0 + self.assertEqual(self.calc.add(""), 0) + + def test_add_single_number(self): + # Ein einzelner Wert → int + self.assertEqual(self.calc.add("1"), 1) + + def test_add_two_numbers(self): + # Zwei Zahlen → Summe + self.assertEqual(self.calc.add("1,2"), 3) + + def test_add_multiple_numbers(self): + # Mehr als zwei Zahlen → Summe + self.assertEqual(self.calc.add("1,2,3"), 6) + self.assertEqual(self.calc.add("1,2,3,4,5"), 15) + + def test_add_ignores_empty_entries(self): + # Leere Einträge ignorieren → Summe + self.assertEqual(self.calc.add("1,,2"), 3) + self.assertEqual(self.calc.add("1, ,2"), 3) + self.assertEqual(self.calc.add(",,1,,2,,,"), 3) + + def test_add_with_newlines_between_numbers(self): + # Zeilenumbrüche als Trennzeichen erlauben → Summe + self.assertEqual(self.calc.add("1\n2,3"), 6) + self.assertEqual(self.calc.add("1,2\n3"), 6) + self.assertEqual(self.calc.add("1\n2\n3"), 6) + + def test_add_raises_exception_on_negative_number(self): + # Negative Zahlen → Exception mit allen negativen Werten + with self.assertRaises(ValueError) as context: + self.calc.add("1,-2") + self.assertIn("negatives not allowed: -2", str(context.exception)) + + def test_add_raises_exception_on_multiple_negatives(self): + # Negative Zahlen → Exception mit allen negativen Werten + with self.assertRaises(ValueError) as context: + self.calc.add("-1,-2,3") + self.assertIn("negatives not allowed: -1, -2", str(context.exception)) + + def test_add_with_custom_delimiter(self): + # Benutzerdefinierter Delimiter über Präfix: "//<delimiter>\n" + self.assertEqual(self.calc.add("//;\n1;2"), 3) + self.assertEqual(self.calc.add("//|\n4|5|6"), 15) + self.assertEqual(self.calc.add("//_\n7_8_9"), 24) + + def test_add_ignores_numbers_greater_than_1000(self): + # Zahlen größer als 1000 ignorieren + self.assertEqual(self.calc.add("2,1001"), 2) + self.assertEqual(self.calc.add("1000,1"), 1001) + self.assertEqual(self.calc.add("1234,1001,3"), 3) + + def test_add_with_multi_char_delimiter(self): + # Delimiter mit beliebiger Länge (Format: //[delimiter]\n) + self.assertEqual(self.calc.add("//[***]\n1***2***3"), 6) + self.assertEqual(self.calc.add("//[abc]\n4abc5abc6"), 15) + self.assertEqual(self.calc.add("//[+]\n1+2+3"), 6) + +if __name__ == "__main__": + unittest.main() \ No newline at end of file diff --git a/muhamed_directory/other/wasili/TDD_Converter.py b/muhamed_directory/other/wasili/TDD_Converter.py new file mode 100644 index 0000000000000000000000000000000000000000..36a051802d037c50673356e39ecbde3b67a57589 --- /dev/null +++ b/muhamed_directory/other/wasili/TDD_Converter.py @@ -0,0 +1,51 @@ +import unittest +from abc import ABC, abstractmethod + +#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_int_to_str(1), "I") + + def test_convert_21(self): + self.assertEqual(self.r.convert_int_to_str(21), "XXI") + + def test_convert_empty(self): + self.assertEqual(self.r.convert_int_to_str(None), "Fehler: Bitte Zahl eingeben") + + def test_convert_string(self): + self.assertEqual(self.r.convert_int_to_str("Hello"), "Fehler: Bitte Zahl eingeben") + + def test_convert_downzero(self): + self.assertEqual(self.r.convert_int_to_str(-5), "Integer muss größer als 0 sein") + + def test_convert_downzero(self): + self.assertEqual(self.r.convert_int_to_str(1000), "M") + +if __name__ == "__main__": + unittest.main() + diff --git a/muhamed_directory/other/wasili/Testszenarios.txt b/muhamed_directory/other/wasili/Testszenarios.txt new file mode 100644 index 0000000000000000000000000000000000000000..13205631d9ce736941534febbec3841f825f9da9 --- /dev/null +++ b/muhamed_directory/other/wasili/Testszenarios.txt @@ -0,0 +1,7 @@ +Convert int to str (römische Zahlen BSP): +-Bei Eingabe des integers 1 liefert die Funktion I +-Bei Eingabe des integers 21 liefert die Funktion XXI +-Bei Eingabe eines leeren integers soll "Fehler: Bitte Zahl eingeben" rauskommen +-Bei Eingabe eines strings "Hello" soll "Fehler: Bitte Zahl eingeben" rauskommen +-Bei Eingabe eines des integers -5 soll "Integer muss größer als 0 sein" rauskommen +-Bei Eingabe des integers 1000 liefert die Funktion "M" diff --git a/muhamed_directory/other/wasili/__pycache__/TDD_Converter.cpython-311.pyc b/muhamed_directory/other/wasili/__pycache__/TDD_Converter.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3cc6d13bf7a8ce4994dd7263ee9cf684d92090e5 Binary files /dev/null and b/muhamed_directory/other/wasili/__pycache__/TDD_Converter.cpython-311.pyc differ diff --git a/report.md b/report.md new file mode 100644 index 0000000000000000000000000000000000000000..fe36cee18fd4bf504a513b9034112db3bd9e8e5e --- /dev/null +++ b/report.md @@ -0,0 +1,12 @@ +| Name | Interface break | Failed Testcases | Begründung | +|-------------------------|-----------------|------------------|----------------------------------------------------------------------------------------------------------------------------------------------------| +| Alma | yes | all | `TypeError`: Methode `convert()` fehlt der erwartete Parameter `n`. Interface nicht eingehalten. | +| ich vs Alma Tests | no | none | Einziger definierter Test in `test2converter.py` wurde bestanden. | +| Daniel | yes | all | Die Tests rufen Converter.convert() als statische Methode auf, aber die convert-Methode aus Skript 1 ist eine Instanzmethode, die eine Objektinstanz (self) benötigt. Dieser falsche Aufruf verursacht bei jedem der 7 Tests einen TypeError, weil das erwartete self-Argument fehlt. | +| Ich vs Daniel Tests | no | none | +| Hatice | yes | all | TypeError: RomanNumber.convert() missing 1 required positional argument: 'n' | +| ich vs Hatice Tests | no | 1 | FAIL: test_inivalid_numbers (__main__.TestRomanConverter.test_inivalid_numbers) | +| Lasse | yes | all | TypeError: RomanNumerals.to_roman() missing 1 required positional argument: 'num' | +| Wasili | yes | all | TypeError: RomanNumber.convert_int_to_str() missing 1 required positional argument: 'n' | +| ich vs wasili Tests | no | 2 | TypeError: '>=' not supported between instances of 'str' and 'int') | +| Orlando | yes | all | nicht umsätzbar | \ No newline at end of file