From 405324717fe3e0dbeab1736c06765fdf1c54d6a5 Mon Sep 17 00:00:00 2001
From: Marvin Serchimo <marvin.serchimo@student.reutlingen-university.de>
Date: Sun, 6 Apr 2025 20:34:51 +0200
Subject: [PATCH] 2 tests failed

---
 feature7                                      |   4 +-
 .../stringCalculator.cpython-313.pyc          | Bin 0 -> 8200 bytes
 other/RafehDaniel/stringCalculator.py         | 171 ++++++++++++++++++
 report.md                                     |   2 +-
 4 files changed, 174 insertions(+), 3 deletions(-)
 create mode 100644 other/RafehDaniel/__pycache__/stringCalculator.cpython-313.pyc
 create mode 100644 other/RafehDaniel/stringCalculator.py

diff --git a/feature7 b/feature7
index 7f7c293..be466e1 100644
--- a/feature7
+++ b/feature7
@@ -1,6 +1,6 @@
 import re 
 import unittest
-from other.BerishaAlma.Feature6 import StringCalculator as Alma
+from other.RafehDaniel.stringCalculator import StringCalculator as Dani
 #class StringCalculator:
  #   def add(self, numbers: str) -> int:
         # Feature 1: Leerer String ergibt 0
@@ -53,7 +53,7 @@ class TestStringCalculator(unittest.TestCase):
 
     def setUp(self):
         """neue Instanz des StringCalculators vor jedem Test"""
-        self.calculator = Alma()
+        self.calculator = Dani()
 
     def test_empty_string_returns_zero(self):
         """Feature 1: Leerer String soll 0 ergeben"""
diff --git a/other/RafehDaniel/__pycache__/stringCalculator.cpython-313.pyc b/other/RafehDaniel/__pycache__/stringCalculator.cpython-313.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..31887633cb86edf4eaa8102512a8528082b39374
GIT binary patch
literal 8200
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

literal 0
HcmV?d00001

diff --git a/other/RafehDaniel/stringCalculator.py b/other/RafehDaniel/stringCalculator.py
new file mode 100644
index 0000000..232cb01
--- /dev/null
+++ b/other/RafehDaniel/stringCalculator.py
@@ -0,0 +1,171 @@
+# Bei einer leeren Eingabe "" soll die Zahl 0 ausgegeben werden.
+# Bei der Eingabe "1" soll die 1 ausgegeben werden.
+# Bei der Eingabe von 2 Zahlen als Strings separiert durch "," (z.B. "1, 2") soll die Zahl 3 ausgegeben werden
+# Bei der Eingabe "0, 5" soll die Zahl 5 ausgegeben werden.
+# Bei der Eingabe von Float-Werten z.B. 3.5 soll "only integers allowed" ausgegeben werden.
+# Bei der Eingabe von Buchstaben z.B. 1, z soll "only integers allowed" ausgegeben werden.
+# Bei der Eingabe von 2 Zahlen als Strings separiert durch "\n" (z.B. "1\n2,3") soll 6 ausgegeben werden
+# Bei der Eingabe von negativen Zahlen (z.B. -3) soll "negatives not allowed" ausgegeben werden
+# Bei der Eingabe von Zahlen mit einem benutzerdefinierten Trennzeichen soll die Summe der Zahlen berechnet werden (z.B. //;\n1;2 = 3)
+# Bei Eingabe von Zahlen >1000 sollen diese ignoriert werden (z.B. 2 + 1001 = 2)
+# Bei der Eingabe von Zahlen mit einem benutzerdefinierten Trennzeichen soll die Summe der Zahlen berechnet werden. Trennzeichen können unbegrenzt lang sein (z.B. “//[***]\n1***2***3” = 6).
+# Bei der Eingabe mehrerer negativen Zahlen (z.B. -3, -4) sollen die Zahlen in der exception ausgegeben werden
+# Bei der Eingabe von Zahlen mit Leerzeichen soll dennoch die Summe ausgegeben werden (z.B." 4  , 5" = 9)
+# Bei der Eingabe "2, 1001, 5" soll die Zahl 7 ausgegeben werden
+# Bei der Eingabe von Texten mit leeren Trennzeichen (z.B. "//;\n") soll die Zahl 0 ausgegeben werden
+# Bei der Eingabe von "1, " soll die Zahl 1 ausgegeben werden
+# Bei der Eingabe von "-2, 5" soll "negatives not allowed" ausgegeben werden
+# Bei der Eingabe von "//;\n-1;2;1001;-3" soll "negatives not allowed [-1, -3]" ausgegeben werden
+
+import unittest
+from abc import ABC, abstractmethod
+
+
+class IStringCalculator(ABC):
+    @abstractmethod
+    def add(self, numbers: str) -> int: 
+        pass
+
+class StringCalculator(IStringCalculator):
+    def add(self, numbers: str) -> int: 
+
+        '''Leere Eingabe soll 0 ausgeben'''
+        if numbers == "":
+            return 0
+        
+        '''Standard-Trennzeichen'''
+        delimiter = ";"
+        
+        '''Es wird geprüft ob ein benutzerdefiniertes Trennzeichen vorhanden ist.'''
+        if numbers.startswith("//"):
+            sep = numbers.split("\n", 1) 
+            delimiter_sep = sep[0][2:]
+
+            '''Für den Fall, dass das Trennzeichen in eckigen Klammern steht werden die Klammern entfernt und das Trennzeichen gespeichert'''
+            if delimiter_sep.startswith("[") and delimiter_sep.endswith("]"):
+                delimiter = delimiter_sep[1:-1]
+
+            else:
+                delimiter = delimiter_sep[0]
+
+            '''Entfernen der ersten Zeile, damit nur noch Zahlen übrig bleiben'''
+            numbers = sep[1]
+
+        '''Ersetzen von Zeilenumbrüchen mit Delimiter und ersetzen von Delimiter durch ",", um splitten zu können'''
+        numbers = numbers.replace("\n", delimiter).replace(delimiter, ",")
+
+        list = numbers.split(",")
+        result = 0
+        
+        negative_numbers = []
+
+        for num in list:
+            num = num.strip()
+            if num == "":
+                continue
+
+            '''Sicherstellen dass Floats nicht berücksichtigt werden'''
+            if "." in num:
+                return "only integers allowed"
+            
+            '''Sicherstellen, dass keine Buchstaben verwendet werden dürfen'''
+            try:
+                number = int(num)
+            except ValueError:
+                return "only integers allowed"
+
+            '''Konvertirung von Strings zu Integer'''
+            if number < 0:
+                negative_numbers.append(number)
+            
+            if number > 1000:
+                continue
+        
+            result += number
+        
+        if len(negative_numbers) > 1:
+            return "negatives not allowed " + str(negative_numbers)
+        elif negative_numbers:
+            return "negatives not allowed"
+
+        return result
+        
+
+class TestStringCalculator(unittest.TestCase):
+    def setUp(self):
+        self.c = StringCalculator()
+
+    def test_empty(self):
+        res = self.c.add("")
+        self.assertEqual(res, 0)
+
+    def test_oneNumber(self):
+        res = self.c.add("1")
+        self.assertEqual(res, 1)
+    
+    def test_addingTwoNumbers(self):
+        res = self.c.add("1,2")
+        self.assertEqual(res, 3)
+
+    def test_addingTwoNumbersWithZero(self):
+        res = self.c.add("0,5")
+        self.assertEqual(res, 5)
+
+    def test_handleFloat(self):
+        res = self.c.add("3.5")
+        self.assertEqual(res, "only integers allowed")
+
+    def test_handleLetter(self):
+        res = self.c.add("1, z")
+        self.assertEqual(res, "only integers allowed")
+
+    def test_addWithBackslashN(self):
+        res = self.c.add("1\n2,3")
+        self.assertEqual(res, 6)
+
+    def test_negativeValues(self):
+        res = self.c.add("-3")
+        self.assertEqual(res, "negatives not allowed")
+
+    def test_delimiter(self):
+        res = self.c.add("//;\n1;2")
+        self.assertEqual(res, 3)
+
+    def test_thousandone(self):
+        res = self.c.add("2, 1001")
+        self.assertEqual(res, 2)
+
+    def test_multidelimiter(self):
+        res = self.c.add("//[***]\n1***2***3")
+        self.assertEqual(res, 6)
+
+    def test_multi_negative(self):
+        res = self.c.add("-3, -4")
+        self.assertEqual(res, "negatives not allowed " + str([-3, -4]))
+
+    def test_space_between_numbers(self):
+        res = self.c.add(" 4  , 5")
+        self.assertEqual(res, 9)
+
+    def test_multiple_num_with_thousandone(self):
+        res = self.c.add(" 2, 1001, 5")
+        self.assertEqual(res, 7)
+
+    def test_empty_text(self):
+        res = self.c.add("//;\n")
+        self.assertEqual(res, 0)
+
+    def test_one_number_with_empty_string(self):
+        res = self.c.add("1,")
+        self.assertEqual(res, 1)
+
+    def test_negative_with_positive(self):
+        res = self.c.add("-2, 5")
+        self.assertEqual(res, "negatives not allowed")
+
+    def test_mixture(self):
+        res = self.c.add("//;\n-1;2;1001;-3")
+        self.assertEqual(res, "negatives not allowed " + str([-1, -3]))
+
+if __name__ == "__main__":
+    unittest.main()
\ No newline at end of file
diff --git a/report.md b/report.md
index 58bf717..8284d84 100644
--- a/report.md
+++ b/report.md
@@ -6,6 +6,6 @@
 | BerishaAlma       | no               | 4                 |
 | GotsisWasilios    | no               | 0                 |
 | PikkemaatLasse    | –                | –                 |
-| RafehDaniel       | –                | –                 |
+| RafehDaniel       | no               | 2                 |
 | WeishauptOrlando  | –                | –                 |
 | YildirimHatice    | –                | –                 |
-- 
GitLab