From ac0c8c18c01461c876a7b4a41317ac55e7074ffe Mon Sep 17 00:00:00 2001
From: Hatice Yildirim <Hatice.Yildirim@student.reutlingen-university.de>
Date: Sun, 6 Apr 2025 03:12:00 +0200
Subject: [PATCH] Implementierung SerchimoMarvin getestet stringCalculator

---
 .../__pycache__/feature7.cpython-312.pyc      | Bin 0 -> 8641 bytes
 .../stringCalculator.cpython-312.pyc          | Bin 0 -> 6651 bytes
 Other/SerchimoMarvin_2/my_calculator.py       |  58 ++++++++++++
 Other/SerchimoMarvin_2/stringCalculator.py    |  88 ++++++++++++++++++
 Other/SerchimoMarvin_2/your_calculator.py     |  87 +++++++++++++++++
 5 files changed, 233 insertions(+)
 create mode 100644 Other/SerchimoMarvin_2/__pycache__/feature7.cpython-312.pyc
 create mode 100644 Other/SerchimoMarvin_2/__pycache__/stringCalculator.cpython-312.pyc
 create mode 100644 Other/SerchimoMarvin_2/my_calculator.py
 create mode 100644 Other/SerchimoMarvin_2/stringCalculator.py
 create mode 100644 Other/SerchimoMarvin_2/your_calculator.py

diff --git a/Other/SerchimoMarvin_2/__pycache__/feature7.cpython-312.pyc b/Other/SerchimoMarvin_2/__pycache__/feature7.cpython-312.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..ea83a5be0e909a6cffbfa593c6fd9bece8c0ed38
GIT binary patch
literal 8641
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
Uo%qq|ADsT-nFTYl6l-h#53EBK3IG5A

literal 0
HcmV?d00001

diff --git a/Other/SerchimoMarvin_2/__pycache__/stringCalculator.cpython-312.pyc b/Other/SerchimoMarvin_2/__pycache__/stringCalculator.cpython-312.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..481f23d725110b6364206a29d305bd4d7b6eaeed
GIT binary patch
literal 6651
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
b{+V$uu~qla|KQ?xFMj{h3Pad>U6}s@Pgj97

literal 0
HcmV?d00001

diff --git a/Other/SerchimoMarvin_2/my_calculator.py b/Other/SerchimoMarvin_2/my_calculator.py
new file mode 100644
index 0000000..c086b23
--- /dev/null
+++ b/Other/SerchimoMarvin_2/my_calculator.py
@@ -0,0 +1,58 @@
+#Implementierung von SerchimoMarvin auf meinen Testfälle: StringCalculator
+import unittest
+
+from feature7 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/Other/SerchimoMarvin_2/stringCalculator.py b/Other/SerchimoMarvin_2/stringCalculator.py
new file mode 100644
index 0000000..bd21dc8
--- /dev/null
+++ b/Other/SerchimoMarvin_2/stringCalculator.py
@@ -0,0 +1,88 @@
+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/Other/SerchimoMarvin_2/your_calculator.py b/Other/SerchimoMarvin_2/your_calculator.py
new file mode 100644
index 0000000..7fcb668
--- /dev/null
+++ b/Other/SerchimoMarvin_2/your_calculator.py
@@ -0,0 +1,87 @@
+#Meine Implementierungen auf Testfälle anderer Studierenden testen: StringCalculator
+
+import re 
+import unittest
+from stringCalculator import StringCalculator
+
+
+class TestStringCalculator(unittest.TestCase):
+    """Test suite for the StringCalculator class."""
+
+    def setUp(self):
+        """neue Instanz des StringCalculators vor jedem Test"""
+        self.calculator = StringCalculator()
+
+    def test_implements_interface(self):
+        self.assertIsInstance(self.calculator, StringCalculator)
+
+    def test_empty_string_returns_zero(self):
+        """Feature 1: Leerer String soll 0 ergeben"""
+        self.assertEqual(self.calculator.add(""), 0)
+
+    def test_single_number_returns_value(self):
+        """Ein einzelner Wert soll zurückgegeben werden"""
+        self.assertEqual(self.calculator.add("1"), 1)
+
+    def test_two_numbers_return_sum(self):
+        """Zwei Zahlen sollen summiert werden"""
+        self.assertEqual(self.calculator.add("1,2"), 3)
+
+    def test_add_multiple_numbers(self):
+        """Feature 2: Mehrere Zahlen summieren"""
+        self.assertEqual(self.calculator.add("1,2,3,4,5"), 15)
+
+    def test_add_numbers_with_newlines(self):
+        """Feature 3: Zeilenumbrüche als Trennzeichen"""
+        self.assertEqual(self.calculator.add("1\n2\n3"), 6)
+
+    def test_add_negative_numbers(self):
+        """Feature 4: Negative Zahlen sollen Fehler werfen"""
+        with self.assertRaises(ValueError) as e:
+            self.calculator.add("-1,2,-3")
+        self.assertEqual(str(e.exception), "Negative numbers are not allowed: -1, -3")
+
+    def test_add_numbers_with_custom_delimiter(self):
+        """Feature 5: Benutzerdefiniertes Trennzeichen"""
+        self.assertEqual(self.calculator.add("//;\n1;2;3"), 6)    
+
+    def test_add_numbers_with_custom_delimiter_different_symbol(self):
+        """Feature 5: Benutzerdefiniertes Trennzeichen mit anderem Symbol"""
+        self.assertEqual(self.calculator.add("//#\n4#5#6"), 15)
+
+    def test_custom_delimiter_with_multiple_numbers(self):
+        """
+        Kombinierter Test für:
+        feature 5 und feature 2
+        Erwartet wird die korrekte Addition von sechs durch ein benutzerdefiniertes Zeichen getrennten Zahlen.
+        """
+        self.assertEqual(self.calculator.add("//:\n1:2:3:4:5:6"), 21)    
+
+    def test_add_numbers_greater_than_1000(self):
+        """Feature6 test"""
+        self.assertEqual(self.calculator.add("1,1001,2,3"), 6)
+
+    def test_add_numbers_with_newlines_and_ignore_above_1000(self):
+        """Feature 3 und 6 test Zeilenumbruch als trenner, Zahlen>1000 ignorieren"""
+        self.assertEqual(self.calculator.add("1\n2\n1000\n1001"), 1003)
+    
+    def test_add_numbers_with_custom_delimiter_long_length(self):
+        """Benutzerdefinierte Trennzeichen beliebig lang """
+        self.assertEqual(self.calculator.add("//[***]\n1***2***3"), 6)
+
+    def test_custom_long_delimiter_with_large_number_ignored(self):
+        """FEature 6 und 7 test Benutzerdefinierte Delimiter Länge und zahl über 1000 wird ignoriert"""
+        self.assertEqual(self.calculator.add("//[***]\n1***1001***2"), 3) 
+        
+    def test_custom_long_delimiter_with_negative_numbers(self):
+        """Feature 4 und 7: Benutzerdefinierter Delimiter beliebiger Länge + negative Zahlen"""
+        with self.assertRaises(ValueError) as e:
+             self.calculator.add("//[***]\n1***-2***3***-4")
+        self.assertEqual(str(e.exception), "Negative numbers are not allowed: -2, -4")
+    
+    
+
+
+
+if __name__ == '__main__':
+    unittest.main()
-- 
GitLab