Skip to content
Snippets Groups Projects
Commit 16545368 authored by linopino's avatar linopino
Browse files

Integration von Wasilis Code + Tests

parent 029101f3
No related branches found
No related tags found
2 merge requests!15Develop,!10Integration von Wasilis Code + Tests
This commit is part of merge request !10. Comments created here will be created in the context of that merge request.
#Bei Eingabe des Strings "" liefert die Funktion 0
#Bei Eingabe des Strings "1" liefert die Funktion 1
#Bei Eingabe des Strings "1,2" liefert die Funktion 3
#Bei Eingabe des Strings "1,2,3,4,5,6,7" liefert die Funkktion 28
#Bei Eingabe des Strings "1\n2,3,4" liefert die Funkktion 10
#Bei Eingabe des Strings "-5" liefert die Funkktion eine exception mit [“negatives not allowed” -5]
#Bei Eingabe des Strings "-5,-2,-2" liefert die Funkktion eine exception mit [“negatives not allowed” -5,-2,-2]
#Bei Eingabe des Strings "//;\n1;2" liefert die Funktion 3 wobei das Standard-Trennzeichen';' ist.
#Bei Eingabe des Strings "2,1001" liefert die Funktion 2
#Bei Eingabe des Strings "2,10022\n6" liefert die Funktion 8
#Bei Eingabe des Strings "//[***]\n1***2***3" mit dem Trennzeichen '***' liefert die Funktion 6
#Bei Eingabe des Strings "//[*+*+*]\n1*+*+*2*+*+*3*+*+*220" mit dem Trennzeichen '***' liefert die Funktion 226
import unittest
from abc import ABC, abstractmethod
from src.stringcalculator import StringCalculator #Auskommentieren, falls andere Implementierung genutzt wird
'''
#Interface für StringCalculator
class IStringCalculator(ABC):
@abstractmethod
def add(self, numbers:str) -> int:
pass
#Implementierung der Calculator Klasse
class StringCalculator(IStringCalculator):
def add(self, numbers:str) -> int:
if numbers == "":
return 0
#Prüfen, ob ein benutzerdefiniertes Trennzeichen definiert wurde
if numbers.startswith("//"):
delimiter_end_index = numbers.index("\n") #Zeilenumbruchs Position finden
delimiter = numbers[2:delimiter_end_index] # Trennzeichen, also alles zwischen "//" und "\n" extrahieren
if delimiter.startswith("[") and delimiter.endswith("]"):
delimiter = delimiter[1:-1] # "[" und "]" entfernen
numbers = numbers[delimiter_end_index + 1:] #Zahlen nach "\n" extrahieren
numbers = numbers.replace(delimiter,",") #Benutzerdefiniertes Trennzeichen durch "," ersetzen
#Zeilenumbrüche ebenfals durch "," ersetzen
numbers = numbers.replace("\n",",")
# String anhand von Kommas splitten, eine Liste der einzelnen Zahlen(in str) erzeugen und in Int umwandeln -> Ergebnis wäre z.B. bei add("1\n2,3,4") -> [1,2,3,4]
num_list = list(map(int, numbers.split(",",)))
#Prüfung auf negative Zahlen
negatives = [n for n in num_list if n<0]
if negatives:
raise ValueError(f"negatives not allowed: {','.join(map(str, negatives))}") #Alle negativen Zahlen durch Kommas in getrennte Strings darstellen
#Zahlen größer als 1000 aus Liste entfernen
num_list = [n for n in num_list if n <= 1000]
return sum(num_list) #Summe berechnen (bei einer Zahln wird immernoch dieselbe Zahl ausgegeben)
'''
#mplementierung der Testklasse für StringCalculator
class TestStringCalculator(unittest.TestCase):
def test_add_empty(self):
c = StringCalculator()
self.assertEqual(c.add(""), 0)
def test_add_one_string(self):
c = StringCalculator()
self.assertEqual(c.add("1"), 1)
def test_add_two_string(self):
c = StringCalculator()
self.assertEqual(c.add("1,2"), 3)
def test_add_multiple_string(self):
c = StringCalculator()
self.assertEqual(c.add("1,2,3,4,5,6,7"), 28)
def test_add_new_lines(self):
c = StringCalculator()
self.assertEqual(c.add("1\n2,3,4"), 10)
def test_add_exception(self):
c = StringCalculator()
with self.assertRaises(ValueError) as context:
c.add("-5")
self.assertEqual(str(context.exception), "negatives not allowed: -5")
def test_add_negative_numbers(self):
c = StringCalculator()
with self.assertRaises(ValueError) as context:
c.add("-5,-2,-2")
self.assertEqual(str(context.exception), "negatives not allowed: -5,-2,-2")
def test_add_different_delimiters(self):
c = StringCalculator()
self.assertEqual(c.add("//;\n1;2"), 3)
def test_add_numbers_greater_than_1000(self):
c = StringCalculator()
self.assertEqual(c.add("2,1001"),2)
self.assertEqual(c.add("2,10022\n6"),8)
def test_delimiters_of_any_length(self):
c = StringCalculator()
self.assertEqual(c.add("//[***]\n1***2***3"), 6)
def test_delimiters_of_any_length2(self):
c = StringCalculator()
self.assertEqual(c.add("//[*+*+*]\n1*+*+*2*+*+*3*+*+*220"), 226)
if __name__ == "__main__":
unittest.main()
# python -m unittest others.Wasili.WasiliStringCalculator -v
\ No newline at end of file
| Name | Interface break | Failed Testcases |
|--------|-----------------|----------------------------------------------------------------------------------------------------------------------------------|
| Wasili | no | test_add_multiple_negative_numbers (tests.testStringcalculator.TestStringCalculator) ... negatives not allowed: -10,-20,-30 FAIL |
| Wasili | no | test_add_single_negative_number (tests.testStringcalculator.TestStringCalculator) ... negatives not allowed: -2 FAIL |
\ No newline at end of file
| Name | Interface break | Failed Testcases |
|--------|-----------------|------------------------------------------------------------------------------------------------|
| Wasili | no | test_add_exception (others.Wasili.WasiliStringCalculator.TestStringCalculator) ... FAIL |
| Wasili | no | test_add_negative_numbers (others.Wasili.WasiliStringCalculator.TestStringCalculator) ... FAIL |
\ No newline at end of file
......@@ -33,9 +33,12 @@ Orlandos Code:
import unittest
from others.Orlando.OrlandoInterfaces import IStringCalculator
from others.Orlando.OrlandoStringCalculator import StringCalculator
'''
import unittest
from others.Dani.DaniStringCalculator import IStringCalculator, StringCalculator
'''
import unittest
from others.Wasili.WasiliStringCalculator import IStringCalculator, StringCalculator
class TestStringCalculator(unittest.TestCase):
def setUp(self):
......
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