diff --git a/BerishaAlma_2/__pycache__/Feature1.cpython-312.pyc b/BerishaAlma_2/__pycache__/Feature1.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3270fcd902f81a4cc08bb171eabee1cce9c36aa1 Binary files /dev/null and b/BerishaAlma_2/__pycache__/Feature1.cpython-312.pyc differ diff --git a/BerishaAlma_2/__pycache__/stringCalculator.cpython-312.pyc b/BerishaAlma_2/__pycache__/stringCalculator.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5f1c175d3824110b577dc877f78e2021bcf81f11 Binary files /dev/null and b/BerishaAlma_2/__pycache__/stringCalculator.cpython-312.pyc differ diff --git a/BerishaAlma_2/__pycache__/stringCalculatorr.cpython-312.pyc b/BerishaAlma_2/__pycache__/stringCalculatorr.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5047f7559a0813d308e85fae57458ace61d9a67f Binary files /dev/null and b/BerishaAlma_2/__pycache__/stringCalculatorr.cpython-312.pyc differ diff --git a/BerishaAlma_2/my_calculator.py b/BerishaAlma_2/my_calculator.py new file mode 100644 index 0000000000000000000000000000000000000000..8ac359bd5ab644f8481587890a59256a6dff02c1 --- /dev/null +++ b/BerishaAlma_2/my_calculator.py @@ -0,0 +1,58 @@ +#Implementierung von BerishaAlma auf meinen Testfälle: StringCalculator +import unittest + +from stringCalculatorr import StringCalculator + +class TestStringCalculator(unittest.TestCase): + def setUp(self): + self.calculator = StringCalculator() + + def test_implements_interface(self): + self.assertIsInstance(self.calculator, StringCalculator) + + def test_empty_string(self): + self.assertEqual(self.calculator.add(""), 0) + + def test_single_number(self): + self.assertEqual(self.calculator.add("1"), 1) + + def test_two_numbers(self): + self.assertEqual(self.calculator.add("1,2"), 3) + + def test_multiple_numbers(self): + self.assertEqual(self.calculator.add("1,2,3,4,5"), 15) + + def test_numbers_with_newline(self): + self.assertEqual(self.calculator.add("1\n2,3"), 6) + + def test_numbers_with_multiple_newlines(self): + self.assertEqual(self.calculator.add("1\n2\n3\n4\n5"), 15) + + def test_negative_number(self): + with self.assertRaises(ValueError) as context: + self.calculator.add("1,-2,3") + self.assertEqual(str(context.exception), "Negatives not allowed: -2") + + def test_multiple_negative_numbers(self): + with self.assertRaises(ValueError) as context: + self.calculator.add("1,-2,-3,4") + self.assertEqual(str(context.exception), "Negatives not allowed: -2, -3") + + def test_custom_delimiter(self): + self.assertEqual(self.calculator.add("//;\n1;2"), 3) + + def test_custom_delimiter_with_newline(self): + self.assertEqual(self.calculator.add("//;\n1;2\n3"), 6) + + def test_custom_delimiter_with_multiple_numbers(self): + self.assertEqual(self.calculator.add("//|\n1|2|3|4"), 10) + + def test_numbers_greater_than_1000(self): + self.assertEqual(self.calculator.add("2,1001"), 2) + + def test_numbers_greater_than_1000_with_custom_delimiter(self): + self.assertEqual(self.calculator.add("//;\n2;1001"), 2) + + +if __name__ == "__main__": + unittest.main() diff --git a/BerishaAlma_2/stringCalculatorr.py b/BerishaAlma_2/stringCalculatorr.py new file mode 100644 index 0000000000000000000000000000000000000000..02d9bb4fb196299382bf68dabd25f4d18ca4078f --- /dev/null +++ b/BerishaAlma_2/stringCalculatorr.py @@ -0,0 +1,90 @@ +#Implementierung Aufgabe 02 von BerishaAlma und YildirimHatice + +from abc import ABC, abstractmethod +import unittest + +class IStringCalculator(ABC): + @abstractmethod + def add(self, numbers: str) -> int: + pass + +class StringCalculator(IStringCalculator): + def add(self, numbers: str) -> int: + if not numbers: + return 0 + + # Überprüfe, ob ein benutzerdefiniertes Trennzeichen angegeben ist + if numbers.startswith("//"): + delimiter_line_end = numbers.find("\n") + delimiter = numbers[2:delimiter_line_end] # Extrahiere das Trennzeichen + numbers = numbers[delimiter_line_end + 1:] # Entferne die erste Zeile mit dem Trennzeichen + else: + delimiter = ',' # Standard-Trennzeichen ist Komma + + # Ersetze alle Vorkommen des Trennzeichens und teile die Eingabe + numbers = numbers.replace("\n", delimiter) + nums = numbers.split(delimiter) + + # Filtere alle Zahlen, die größer als 1000 sind + nums = [int(num) for num in nums if int(num) <= 1000] + + # Prüfe auf negative Zahlen + negatives = [num for num in nums if num < 0] + + if negatives: + # Wenn negative Zahlen vorhanden sind, werfe eine Ausnahme + raise ValueError(f"Negatives not allowed: {', '.join(map(str, negatives))}") + + # Berechne die Summe der Zahlen, die <= 1000 sind + return sum(nums) + +class TestStringCalculator(unittest.TestCase): + def setUp(self): + self.calculator = StringCalculator() + + def test_empty_string(self): + self.assertEqual(self.calculator.add(""), 0) + + def test_single_number(self): + self.assertEqual(self.calculator.add("1"), 1) + + def test_two_numbers(self): + self.assertEqual(self.calculator.add("1,2"), 3) + + def test_multiple_numbers(self): + self.assertEqual(self.calculator.add("1,2,3,4,5"), 15) + + def test_numbers_with_newline(self): + self.assertEqual(self.calculator.add("1\n2,3"), 6) + + def test_numbers_with_multiple_newlines(self): + self.assertEqual(self.calculator.add("1\n2\n3\n4\n5"), 15) + + def test_negative_number(self): + with self.assertRaises(ValueError) as context: + self.calculator.add("1,-2,3") + self.assertEqual(str(context.exception), "Negatives not allowed: -2") + + def test_multiple_negative_numbers(self): + with self.assertRaises(ValueError) as context: + self.calculator.add("1,-2,-3,4") + self.assertEqual(str(context.exception), "Negatives not allowed: -2, -3") + + def test_custom_delimiter(self): + self.assertEqual(self.calculator.add("//;\n1;2"), 3) + + def test_custom_delimiter_with_newline(self): + self.assertEqual(self.calculator.add("//;\n1;2\n3"), 6) + + def test_custom_delimiter_with_multiple_numbers(self): + self.assertEqual(self.calculator.add("//|\n1|2|3|4"), 10) + + def test_numbers_greater_than_1000(self): + self.assertEqual(self.calculator.add("2,1001"), 2) + + def test_numbers_greater_than_1000_with_custom_delimiter(self): + self.assertEqual(self.calculator.add("//;\n2;1001"), 2) + + +if __name__ == "__main__": + unittest.main() diff --git a/BerishaAlma_2/your_calculator.py b/BerishaAlma_2/your_calculator.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391