diff --git a/others/Momo/MomoStringCalculator.py b/others/Momo/MomoStringCalculator.py new file mode 100644 index 0000000000000000000000000000000000000000..2a3c8a623068587416903e06e3c569e16c0ad028 --- /dev/null +++ b/others/Momo/MomoStringCalculator.py @@ -0,0 +1,139 @@ +#vorher im anderen projekt jetzt im neuen projekt +#test no string +#test add 1 string +#test adding 2 strings + +#add 3 strings +#add 4 strings +#add 6 strings + +#\n statt , bei 2 strings +#\n statt , bei mehreren strings + +# eine negative zahl +# mehrere negative zahlen + +# Delimiters: +# add numbers seperated by a custom delimiter +# Test with - Numbers + +#numbers over 1000 should be ignored +#1001 + 2 should return 2 +#1001 -2 should return negatives not allowed + +#custom delimiters +#input "//[***]\n1***2***3" +#output 6 + +import unittest +import re +from src.stringcalculator import StringCalculator #Auskommentieren, falls andere Implementierung genutzt wird +''' +class StringCalculator: + def __init__(self): + self.called_count = 0 + def add (self, numbers : str)-> int: #Erwartet Integer + if not numbers: + return 0 + + if numbers.startswith("//"): + delimiter_end_index = numbers.index("\n") + delimiter_section = numbers[2:delimiter_end_index] + numbers = numbers[delimiter_end_index +1:] + + if delimiter_section.startswith("[")and delimiter_section.endswith("]"): + delimiters = re.findall(r'\[([^\]]+)\]',delimiter_section) + else: + delimiters= [delimiter_section] + + for delimiters in delimiters: + numbers = numbers.replace(delimiters,",") + + numbers = numbers.replace("\n",",") + + number_list = numbers.split(',')#aufteilung der strings + negative = [] #array für die negativen nummern + numbers_to_add = [] + #total_sum = 0 + for number_str in number_list: #jedes element in der liste wird durch genommen + #if number_str: + number = int(number_str)# summierung der integer + if number <0: + negative.append(number) + elif number > 1000: + continue + else: + numbers_to_add.append(number) + #total_sum += number + + if negative: + print(f"Negative Zahlen:{negative} ")#ausgabe negative zahlen + raise ValueError(f"negatives not allowed: {','.join(map(str, negative))}") + self.called_count += 1 + return sum(numbers_to_add) + def get_called_count(self): + return self.called_count +''' + +class TestStingCalculator(unittest.TestCase): + def setUp(self): + self.calculator = StringCalculator() + def test_empty_string(self): + self.assertEqual(self.calculator.add(""), 0) #leerer string + 0 + def test_single_number(self): + self.assertEqual(self.calculator.add("5"),5) #eingabe von einem String + def test_multiple_numbers(self): + self.assertEqual(self.calculator.add("5,5"),10)#eingabe mehrere strings + def test_unknowen_amount_of_numbers(self): + self.assertEqual(self.calculator.add("1,2,3"),6) + self.assertEqual(self.calculator.add("10,20,30,40"),100) + self.assertEqual(self.calculator.add("1,2,3,4,5,6"),21) + def test_numbers_seperated_by_newline(self): + self.assertEqual(self.calculator.add("1\n2"),3) + self.assertEqual(self.calculator.add("1\n2\n3"),6) + self.assertEqual(self.calculator.add("10,20\n30"),60) + + def test_negative_number_exception(self): + + with self.assertRaises(ValueError) as e: + self.calculator.add("-1,2") + self.assertEqual(str(e.exception), "negatives not allowed: -1") + def test_multiple_negative_numbers_exception(self): + with self.assertRaises(ValueError)as e: + self.calculator.add("-1,-2,3") + self.assertEqual(str(e.exception),"negatives not allowed: -1,-2") + with self.assertRaises(ValueError) as e: + self.calculator.add("-1,-3,4") + self.assertEqual(str(e.exception),"negatives not allowed: -1,-3") + + with self.assertRaises(ValueError) as e: + self.calculator.add("-1\n-3,4") + self.assertEqual(str(e.exception),"negatives not allowed: -1,-3") + def test_add_numbers_with_custom_delimiter(self): + self.assertEqual(self.calculator.add("//;\n1;2;3"),6) + self.assertEqual(self.calculator.add("//;\n1,2,3"),6) + with self.assertRaises(ValueError) as e: + self.calculator.add("//;\n-3,4") + self.assertEqual(str(e.exception),"negatives not allowed: -3") + + def test_add_numbers_greater_than_1000(self): + self.assertEqual(self.calculator.add("1,1001,2,3"),6) + def test_add_numbers_greater_than_1000_1002(self): + self.assertEqual(self.calculator.add("1002,1,2,3"),6) + def test_add_numbers_greater_1000_and_minus(self): + with self.assertRaises(ValueError) as e: + self.calculator.add("//;\n-3,4;1001") + self.assertEqual(str(e.exception),"negatives not allowed: -3") + def test_custom_delimiter(self): + self.assertEqual(self.calculator.add("//[***]\n1***2***3"),6) + def test_custom_del(self): + self.assertEqual(self.calculator.add("//[+++]\n1+++2+++3"),6) + def test_custom_del2(self): + self.assertEqual(self.calculator.add("//[aa]\n1aa2aa3"),6) + + + +if __name__=='__main__': + unittest.main() + +# python -m unittest others.Momo.MomoStringCalculator -v \ No newline at end of file diff --git a/others/Momo/reportMomoImp.md b/others/Momo/reportMomoImp.md new file mode 100644 index 0000000000000000000000000000000000000000..c8d4d2e8c4ac8538952a51359e6d595be0b4720c --- /dev/null +++ b/others/Momo/reportMomoImp.md @@ -0,0 +1,4 @@ +| Name | Interface break | Failed Testcases | +|------|-----------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Momo | no | test_add_multiple_negative_numbers (tests.testStringcalculator.TestStringCalculator) ... Negative Zahlen:[-10, -20, -30] negatives not allowed: -10,-20,-30 FAIL | +| Momo | no | test_add_single_negative_number (tests.testStringcalculator.TestStringCalculator) ... Negative Zahlen:[-2] negatives not allowed: -2 FAIL | \ No newline at end of file diff --git a/others/Momo/reportMomoTests.md b/others/Momo/reportMomoTests.md new file mode 100644 index 0000000000000000000000000000000000000000..efc777e7c48f8ad802c57a9812c0d267f140854e --- /dev/null +++ b/others/Momo/reportMomoTests.md @@ -0,0 +1,6 @@ +| Name | Interface break | Failed Testcases | +|------|-----------------|----------------------------------------------------------------------------------------------------------| +| Momo | no | test_add_numbers_greater_1000_and_minus (others.Momo.MomoStringCalculator.TestStingCalculator) ... FAIL | +| Momo | no | test_add_numbers_with_custom_delimiter (others.Momo.MomoStringCalculator.TestStingCalculator) ... FAIL | +| Momo | no | test_multiple_negative_numbers_exception (others.Momo.MomoStringCalculator.TestStingCalculator) ... FAIL | +| Momo | no | test_negative_number_exception (others.Momo.MomoStringCalculator.TestStingCalculator) ... FAIL | \ No newline at end of file diff --git a/tests/testStringcalculator.py b/tests/testStringcalculator.py index 110ba77b00900b4f0d77757cc8c5694b784aa66c..28448a3bfafd5690d8955091493e2f0087ca299a 100644 --- a/tests/testStringcalculator.py +++ b/tests/testStringcalculator.py @@ -36,9 +36,12 @@ from others.Orlando.OrlandoStringCalculator import StringCalculator import unittest from others.Dani.DaniStringCalculator import IStringCalculator, StringCalculator -''' + import unittest from others.Wasili.WasiliStringCalculator import IStringCalculator, StringCalculator +''' +import unittest +from others.Momo.MomoStringCalculator import StringCalculator class TestStringCalculator(unittest.TestCase): def setUp(self):