Skip to content
Snippets Groups Projects
Commit 40532471 authored by Marvin Serchimo's avatar Marvin Serchimo
Browse files

2 tests failed

parent ec78444e
Branches featureRafehDaniel
No related tags found
No related merge requests found
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"""
......
File added
# 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
......@@ -6,6 +6,6 @@
| BerishaAlma | no | 4 |
| GotsisWasilios | no | 0 |
| PikkemaatLasse | – | – |
| RafehDaniel | | |
| RafehDaniel | no | 2 |
| WeishauptOrlando | – | – |
| YildirimHatice | – | – |
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment