From 0efebe12b3696f57831c1b71f1389eabd20ddf77 Mon Sep 17 00:00:00 2001
From: linopino <lasse.pikkemaat@web.de>
Date: Fri, 21 Mar 2025 22:20:16 +0100
Subject: [PATCH 1/4] Update test_romannumerals.py

---
 tests/test_romannumerals.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tests/test_romannumerals.py b/tests/test_romannumerals.py
index 9a774cc..5b273e6 100644
--- a/tests/test_romannumerals.py
+++ b/tests/test_romannumerals.py
@@ -18,7 +18,7 @@
 # Bei Eingabe der Zahl 3 erhalte ich das Ergebnis "III"
 # Bei Eingabe der Zahl 6 erhalte ich das Ergebnis "VI"
 # Bei Eingabe der Zahl 8 erhalte ich das Ergebnis "VIII"
-# Bei Eingabe der Zahl 30 erhalte ich das Ergebnis "XXX"
+# Bei Eingabe der Zahl 30 erhalte ich das Ergebnis "XXXX"
 # Bei Eingabe der Zahl 80 erhalte ich das Ergebnis "LXXX"
 # Kombination aus Addition und Subtraktion
 # Bei Eingabe der Zahl 14 erhalte ich das Ergebnis "XIV"
-- 
GitLab


From ecc1640e2c4ca0214d6e49e7984e54bcae59c80c Mon Sep 17 00:00:00 2001
From: linopino <lasse.pikkemaat@web.de>
Date: Wed, 26 Mar 2025 20:32:47 +0100
Subject: [PATCH 2/4] StringCalculatorTestListBasic

+ Verbesserungen alter Code
---
 src/__pycache__/interfaces.cpython-310.pyc    | Bin 505 -> 530 bytes
 src/__pycache__/romannumerals.cpython-310.pyc | Bin 894 -> 917 bytes
 src/interfaces.py                             |   4 +-
 src/romannumerals.py                          |  15 ++-
 src/stringcalculator.py                       |   0
 .../test_romannumerals.cpython-310.pyc        | Bin 2632 -> 2458 bytes
 tests/test_romannumerals.py                   |  90 ++++++++----------
 tests/test_stringcalculator.py                |   5 +
 8 files changed, 55 insertions(+), 59 deletions(-)
 create mode 100644 src/stringcalculator.py
 create mode 100644 tests/test_stringcalculator.py

diff --git a/src/__pycache__/interfaces.cpython-310.pyc b/src/__pycache__/interfaces.cpython-310.pyc
index 95e7981751754055c5e10944cc00468b50941e10..9c2c27ce8dbc3a9cbbc432aef7c2022428ab19de 100644
GIT binary patch
delta 244
zcmey#Jc)%jpO=@50SF!iJW21I$XnvY3gkEdaj_DRNM(p(Oks#(N@Y%AOl3)7N@Y!B
zNnuW5X<=z*jABb+4Q9|}yT#)fl%JcJ=U1AWlv;F)G4B>zQEEwPQQpKI`aDG-<BHh9
z#Kg~*I_$~$d1a|ZB`hEtn1BQeQ<Vs^em$rHKTY<@F^rmKx0o~YN^UV1mlPF&+zB-b
m&f)~IK!z~`aWNZ^;9y{4l$gAcQBDA2D@XyD#X0#tqZ9zz1~<Y0

delta 242
zcmbQl@{^f2pO=@50SGFu-c4_s$XjC04CFWfaj^uDNM(p(Oks#(N@Y%AOkrwaXl9IJ
zNns9V&}6yA=NXiro0#WUnwwgbm{UCQv_8)*=DgC}B37WjBG$=ljFtu*CHe71AXO|N
z1DSvX3saRiszyDS8b3|e$=QsWIz^md15gPL5Eo<$$a%$VK!SsTiIH#eDMmRhh=m{p
bU=~Q}Ee@O9{FKt1R69nHdXPo|1`#Fz4%jl`

diff --git a/src/__pycache__/romannumerals.cpython-310.pyc b/src/__pycache__/romannumerals.cpython-310.pyc
index f6197cf9b2af49383222064fa3d7a160c943eea6..24f836671a9a8436497583973509848b92b6dc91 100644
GIT binary patch
delta 271
zcmeyzHkF+>pO=@50SHtBpQPWK$m`9=;~A8no0#WUnwykblsr*T(nby_oyri!n8Fan
zl){+GoWhjKlE#w4oWjz=62+Rr8qA={c8eQH*Dc1pTWm$CC8b4q8&~x+vKFxbO_*%Q
zq`;^$IiAUelRY^<uPn8wgk|zlCS`G9B%OLt89z<7$&Z*+Z9!JwVlFNzDpCWoid0Yu
xRS=gMNPuuL$Px|)F-EY6pC<FI$yUr#T3EE);;_lhPbtkwwPS?o<6#hC0sy-vKM4Q;

delta 249
zcmbQr{*R3}pO=@50SGFu-c5fzk=Hwj&od}LH!;tzG&i*<F{d~gB#8`|fE))PE*1e2
zsSHt!DGX6eDU2yhEeui2Da^qPnk=_?QH<EQyPuIYiaD<|cd|c|0;AI80wx<Sj*|TN
zB9KL_leaP{ONpWA(1S_(X|hay&!lRs0<^1036)R=ahZVx3lJBB2o44wMzDyVCUex}
QKxQccbS;ysnI##S0e)yVC;$Ke

diff --git a/src/interfaces.py b/src/interfaces.py
index fc64573..bc8c8c3 100644
--- a/src/interfaces.py
+++ b/src/interfaces.py
@@ -1,6 +1,6 @@
 from abc import ABC, abstractmethod
 
-class IRomanNumerals(ABC):
+class IRomanNumber(ABC):
     @abstractmethod
-    def to_roman(self, num):
+    def convert(self, n: int) -> str:
         pass
\ No newline at end of file
diff --git a/src/romannumerals.py b/src/romannumerals.py
index 3f3eaf1..2507532 100644
--- a/src/romannumerals.py
+++ b/src/romannumerals.py
@@ -1,11 +1,10 @@
-from src.interfaces import IRomanNumerals
+from src.interfaces import IRomanNumber
 
-
-class RomanNumerals(IRomanNumerals):
-    def to_roman(self, num):
-        if not isinstance(num, int):
+class RomanNumber(IRomanNumber):
+    def convert(self, n: int) -> str:
+        if not isinstance(n, int):
             raise ValueError("Eingabe muss eine ganze Zahl sein")
-        if num <= 0 or num >= 4000:
+        if n <= 0 or n >= 4000:
             raise ValueError("Zahl muss zwischen 1 und 3999 liegen")
 
         val = [
@@ -17,7 +16,7 @@ class RomanNumerals(IRomanNumerals):
 
         result = ""
         for (value, numeral) in val:
-            while num >= value:
+            while n >= value:
                 result += numeral
-                num -= value
+                n -= value
         return result
\ No newline at end of file
diff --git a/src/stringcalculator.py b/src/stringcalculator.py
new file mode 100644
index 0000000..e69de29
diff --git a/tests/__pycache__/test_romannumerals.cpython-310.pyc b/tests/__pycache__/test_romannumerals.cpython-310.pyc
index e14f2572a91805d1b33f9c03c0890bd6a036010c..2ef85d1aa0aaa5d708fc349e4ed24856b6f600f4 100644
GIT binary patch
delta 985
zcmaKryKfUQ9LMc@Bu;ZpOCC~r43H9$@Tfq_7!XoH6_rS(1{gAMT+b#txQFmvD%7O|
zh&{595K|dhSUT|^FtKwp3o`=?68wHgTAC`2PyYUF{~n(^+xMmVzEX<j=jRBtxy|o`
zc6n4fx4RBAPB`^RAFbxoK<jH1$GWcvM&F=hjc|jTuL(B=d1k)S`#F*4x#yZ(7G#fo
zAP`M^S#RZkVEJx~rp3)DaKi2|*b)+^*1aQh7lX2PYHT&Ix1q<K(caBkkF-kZ!UGW}
zN0LUr*C|tL^x<Odm`8o0=T%4ly!%m4i%uL1ncRIbbbM(-#We3m;WjME9Lyv;lma@J
z5`fs_2s<8bCDL&dFACe>{b_+z>A|x^cbdn@D--GJiP4}%^~P9zw1}8#z}iHH!?}mF
z4u)4jb{ew?YT2yQSbe4MRM*@XoCqmTKmzZj;CG;STmm`x8np05^;tYSOI26R)2fnt
z>z>FvGr{v6IS_W3oqT*Bxwz^7xInx-i@3j#-=}RnH(5rRwuRLRnip<6zQ=p&7rWNH
zIIFfj4(+xIYNOD2jDLcxpqxdyfKo@fg!2EQWFx#S(g3**J=;h|7-c%cR<LrJFJ-nJ
zI9_PmfcRFZ^L{Co?ur*CLOyj|5lbDiQ-*K3>cBn4g0hKg2IftJrmPc0eCUf?^pJeT
Oq82S{?1n{+KYszrRQN9d

literal 2632
zcmcguPjB2r6rZuZyWWjAX(_an{y|hAx+(;MfCJDf;8bW)yedsuj1|dpc1$$s{t07m
zXrr7+IMYu6$uZx612;Yc7fYNt6pI_-#3lTm-N5c<m%Sjynm2FW%zHEM_ukC7SFKhU
z%EO<2UjO|ZW4};muo&npqDHqs1QWc?JZiNz?`WRJ*@sN%!q{WN2-$|dt9wRR5QY1i
zx)QSe;sN8(S;=axn8F5Y)Ob?8+v^0~M!yrPpdGbHJXkbz7Ez-mkdS#?Fi#U)XnV}l
z^W{846hsmIf+z_SZBdj(1#L;p2n($#s$v#xS<J1l+L`3+y)cT0m*ud2Qi!KzZPdsD
ziP<jOVLq0II&ai8MZ-zC)$4ABDh|~lPmCyRe}2eR2_t{rwBK1>iTgtKJF9n8@IXeJ
zs<#o|kDZ<fRd*@eT8*)VD5Jh20J={AnBRPu6rwQxWOIR*r-dxOec{xO=d(Gj(R~*%
zpZ0z92xN!tqi*nh0CoV#4iKXOnGTsTA}c^v9FdhEGe=})$SNbU8OW>=SrxKbl4aP<
zHB#De!s{t*G~vyZQZC_c`bO3+ry^@@`3EK@d`bSQQ|lb+$xIMMK>PL={h+NV7ZWq?
z<=`o@mO-BrlSa=G#Qw<?e=Ue)>rD(C&4N75|M{Nf+b^BQcZ~LAw0B@~0NMW)?F`v!
zBPB>Yt=>$_Ipe0+Gsay`y_~V-BcSSO_LAHKtY92<0YhWqyEqI$)L)BL(28ZRdlM>0
zbS{P<yfF>J0Sgm>RF`4424^Vm;Y>ZnK5@|N;EI{3Sx+gtp3x-P)oj#t-Skc-Tn0PY
zrSros1wu&j=QdQ;HIVJ=(|kBlnd|`Na}9Y;N#^M;!hx$a<J|NLafa*G-Sm~5UB-AT
zXYINxf1vOb?Ijm-`Itgfv>g{ClYJV=@{W8E3I`U|C6MWPoz0)<O>_@N{_DKX^0nNM
z6k1Pn>hee2nO?=Q9f}^pDj$=e<TyYIz3=AGD?1J*{5uqvhQr$q)OzUSUR?`S)Py4u
zB~G5RIP$Mfi}jHHDTv6HO-4UL%m|_whyI&cx?nf7eVr~`&OXJpXW-k_IqRAWEIR)s
zr1X7;Iz~$ytF<si3m5sAwU(!78Dq89r)aUUT3?OTn)@3KJS)RHq$B_y-wx_!iBW7Q
z0Ls#16uFPkC;Iyz*z3=K{oBXiUo9`zjKs>{fxCf>!YHXUgLXf>tyE8CkAk`g?Xefy
zGsEd2yIVn9idBl?iy#)C<(H2wZ8E)fy#4aDq<LbsQL7}T?{|Yv==({<_d7k&Zxe6%
zK0RRhh@z`nJxAmPA~hnf5qX`+TSVxGVt`QIDV!WeGomvfCNsIIn`M(q*(zqEw0b9y
zUEi;jJhR`GF?sKujZ|xX=zk;sl`+XLJHY!&rq$aZi9z}UD`y*_<rDM0+?`t#sq7EQ
PykYUDbn{({8^?bEe*s~n

diff --git a/tests/test_romannumerals.py b/tests/test_romannumerals.py
index 5b273e6..abc5266 100644
--- a/tests/test_romannumerals.py
+++ b/tests/test_romannumerals.py
@@ -42,67 +42,59 @@
 # Bei Eingabe der Zahl 3.14 erhalte ich eine Fehlermeldung
 
 import unittest
-from src.romannumerals import RomanNumerals
+from src.romannumerals import RomanNumber
+from src.interfaces import IRomanNumber
 
-
-class TestRomanNumerals(unittest.TestCase):
+class TestRomanNumber(unittest.TestCase):
     def setUp(self):
-        self.converter = RomanNumerals()
-
-    def test_to_roman_basic(self):
-        self.assertEqual(self.converter.to_roman(1), "I")
-        self.assertEqual(self.converter.to_roman(5), "V")
-        self.assertEqual(self.converter.to_roman(10), "X")
-        self.assertEqual(self.converter.to_roman(50), "L")
-        self.assertEqual(self.converter.to_roman(100), "C")
-        self.assertEqual(self.converter.to_roman(500), "D")
-        self.assertEqual(self.converter.to_roman(1000), "M")
+        self.converter: IRomanNumber = RomanNumber()
 
-    def test_to_roman_subtraction(self):
-        self.assertEqual(self.converter.to_roman(4), "IV")
-        self.assertEqual(self.converter.to_roman(9), "IX")
-        self.assertEqual(self.converter.to_roman(40), "XL")
-        self.assertEqual(self.converter.to_roman(90), "XC")
-        self.assertEqual(self.converter.to_roman(400), "CD")
-        self.assertEqual(self.converter.to_roman(900), "CM")
+    def test_convert_subtraction(self):
+        self.assertEqual(self.converter.convert(4), "IV")
+        self.assertEqual(self.converter.convert(9), "IX")
+        self.assertEqual(self.converter.convert(40), "XL")
+        self.assertEqual(self.converter.convert(90), "XC")
+        self.assertEqual(self.converter.convert(400), "CD")
+        self.assertEqual(self.converter.convert(900), "CM")
 
-    def test_to_roman_addition(self):
-        self.assertEqual(self.converter.to_roman(2), "II")
-        self.assertEqual(self.converter.to_roman(3), "III")
-        self.assertEqual(self.converter.to_roman(6), "VI")
-        self.assertEqual(self.converter.to_roman(8), "VIII")
-        self.assertEqual(self.converter.to_roman(30), "XXX")
-        self.assertEqual(self.converter.to_roman(80), "LXXX")
+    def test_convert_addition(self):
+        self.assertEqual(self.converter.convert(2), "II")
+        self.assertEqual(self.converter.convert(3), "III")
+        self.assertEqual(self.converter.convert(6), "VI")
+        self.assertEqual(self.converter.convert(8), "VIII")
+        self.assertEqual(self.converter.convert(30), "XXX")
+        self.assertEqual(self.converter.convert(80), "LXXX")
 
-    def test_to_roman_mixed(self):
-        self.assertEqual(self.converter.to_roman(14), "XIV")
-        self.assertEqual(self.converter.to_roman(19), "XIX")
-        self.assertEqual(self.converter.to_roman(29), "XXIX")
-        self.assertEqual(self.converter.to_roman(44), "XLIV")
-        self.assertEqual(self.converter.to_roman(99), "XCIX")
-        self.assertEqual(self.converter.to_roman(444), "CDXLIV")
-        self.assertEqual(self.converter.to_roman(999), "CMXCIX")
+    def test_convert_mixed(self):
+        self.assertEqual(self.converter.convert(14), "XIV")
+        self.assertEqual(self.converter.convert(19), "XIX")
+        self.assertEqual(self.converter.convert(29), "XXIX")
+        self.assertEqual(self.converter.convert(44), "XLIV")
+        self.assertEqual(self.converter.convert(99), "XCIX")
+        self.assertEqual(self.converter.convert(444), "CDXLIV")
+        self.assertEqual(self.converter.convert(999), "CMXCIX")
 
-    def test_to_roman_large_numbers(self):
-        self.assertEqual(self.converter.to_roman(1001), "MI")
-        self.assertEqual(self.converter.to_roman(1987), "MCMLXXXVII")
-        self.assertEqual(self.converter.to_roman(2023), "MMXXIII")
-        self.assertEqual(self.converter.to_roman(3999), "MMMCMXCIX")
+    def test_convert_large_numbers(self):
+        self.assertEqual(self.converter.convert(1001), "MI")
+        self.assertEqual(self.converter.convert(1987), "MCMLXXXVII")
+        self.assertEqual(self.converter.convert(2023), "MMXXIII")
+        self.assertEqual(self.converter.convert(3999), "MMMCMXCIX")
 
-    def test_to_roman_invalid(self):
+    def test_convert_invalid(self):
         with self.assertRaises(ValueError):
-            self.converter.to_roman(0)
+            self.converter.convert(0)
         with self.assertRaises(ValueError):
-            self.converter.to_roman(-1)
+            self.converter.convert(-1)
         with self.assertRaises(ValueError):
-            self.converter.to_roman(4000)
+            self.converter.convert(4000)
         with self.assertRaises(ValueError):
-            self.converter.to_roman("ABC")
+            self.converter.convert("ABC")
         with self.assertRaises(ValueError):
-            self.converter.to_roman(None)
+            self.converter.convert(None)
         with self.assertRaises(ValueError):
-            self.converter.to_roman(3.14)
-
+            self.converter.convert(3.14)
 
 if __name__ == "__main__":
-    unittest.main()
\ No newline at end of file
+    unittest.main()
+
+#python -m unittest discover -s tests
\ No newline at end of file
diff --git a/tests/test_stringcalculator.py b/tests/test_stringcalculator.py
new file mode 100644
index 0000000..b8e4935
--- /dev/null
+++ b/tests/test_stringcalculator.py
@@ -0,0 +1,5 @@
+# Basis
+# Bei Eingabe keiner Zahl soll eine 0 ausgegeben werden
+# Bei Eingabe einer 1 soll 1 ausgegeben werden
+# Bei Eingabe einer 3,4 soll 7 ausgegeben werden
+# Bei Eingabe einer 10,20 soll 30 ausgegeben werden
\ No newline at end of file
-- 
GitLab


From 0129c79bd74fb93ac2fb3daaa6f21837ae592922 Mon Sep 17 00:00:00 2001
From: linopino <lasse.pikkemaat@web.de>
Date: Wed, 26 Mar 2025 20:57:06 +0100
Subject: [PATCH 3/4] Umsetzung UML Digramm + Tests geschrieben

---
 src/__pycache__/interfaces.cpython-310.pyc    | Bin 530 -> 799 bytes
 .../stringcalculator.cpython-310.pyc          | Bin 0 -> 586 bytes
 src/interfaces.py                             |   5 ++++
 src/stringcalculator.py                       |   7 +++++
 .../test_romannumerals.cpython-310.pyc        | Bin 2458 -> 2458 bytes
 .../test_stringcalculator.cpython-310.pyc     | Bin 0 -> 1190 bytes
 tests/test_romannumerals.py                   |   3 ++-
 tests/test_stringcalculator.py                |  25 +++++++++++++++++-
 8 files changed, 38 insertions(+), 2 deletions(-)
 create mode 100644 src/__pycache__/stringcalculator.cpython-310.pyc
 create mode 100644 tests/__pycache__/test_stringcalculator.cpython-310.pyc

diff --git a/src/__pycache__/interfaces.cpython-310.pyc b/src/__pycache__/interfaces.cpython-310.pyc
index 9c2c27ce8dbc3a9cbbc432aef7c2022428ab19de..d7953f25e6f8b9e6f58dfc3cdb55b061b176f472 100644
GIT binary patch
delta 430
zcmbQlGM|k%pO=@50SGQcJW2mHkyn<{WTLjRm^(uXOA2cXLkepuV>5FUOA1>sgC_gL
z5L3p_6T706KC=LIq%Z_CtYq|C$)L$}i={X<C#{GLC|U$Et%z$f8>1`Z=gB^d!G^pD
zQ8<eS#9{>!%s~7Zq>qDviBW<PEH<$~QlkiDgC^T8LC@flqRhN>=fs@k(wxMS{Gwaz
zd8N5YsYS&_>_8<GPfOMpaR3=boFD>Zxh7K)H;63;6M#4gWaTa9#FP}ULOvj`N)*Fz
zJ)pdwCVLS-NUs2h5Cjn*R~89_2q6$54k94_1hUc)<`;<q`C!+GfRuoEewwU6Ta%KD
om_Q<6gFyZU%OT7_7;%fkCO1E&G$+-L5vZ&f6f^=10!$*T0J}#|>i_@%

delta 202
zcmbQwHi?BdpO=@50SF!iJW21I$ScdJGErNZErlhRL6dc2iYa69#92{F#VkM-DGWd{
zM!%H|noPG?ic@paidcc7MeJZ=vKXT)WAWq|#^7R*aZph>ixb2G8Nv+2#cV)=gMo=r
uf)Om{r^#}QIWZ}@hzX<$qyj9A&5T<dHo5sJr8%i~j39$RCJHc!FaZE<^CB1k

diff --git a/src/__pycache__/stringcalculator.cpython-310.pyc b/src/__pycache__/stringcalculator.cpython-310.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..938708f3482e2cedde5ca28d3caf0cfceea2ad7f
GIT binary patch
literal 586
zcmZ9IOG^VW5P&nAwARuVh2lv>j|<YfA|g}}4;G=fT3FVdw5;x<CRtJGt^FZ-^e^RV
zFa8BjPF5*P2WFCa@XaG{x0{UQ=x#M#(fj3`st9r}NcABZWC#gMVFbXg7<$N;47r2_
zA9*N-%&&b@74yOFUJs3mvuQs}q9O@Rt|FJI%9?yYQOQPtj3^*EdQwaTauiE3s$q?|
zb-T04vs+n_-b<xzT}e}@Eb=OJ_pg)oN%cONIcR|}WQG|q-W=Yk%?B*J1;u<mP(U?5
zaO?}qb&*=0hBM3K%-EWqC9&~6E3`}|%1!;rRLhm0^iRh_Q(#=A<69NJ#CoRk2l;4j
za+E5&l+R<WqOmS75v?!Lo4r~dB07|ILkbYkg}3hJiajbC(C&>O$ih?xfo%psnq!f;
ze=7){iZJ=laO$GA38p&ExcMrk?OaaAsdkMUY!AxFz~{C@WA<oSsU~40wQ|=hlNCfs
TbR63_`<vn1-K>PQSl9antHg;y

literal 0
HcmV?d00001

diff --git a/src/interfaces.py b/src/interfaces.py
index bc8c8c3..7a3cc8e 100644
--- a/src/interfaces.py
+++ b/src/interfaces.py
@@ -3,4 +3,9 @@ from abc import ABC, abstractmethod
 class IRomanNumber(ABC):
     @abstractmethod
     def convert(self, n: int) -> str:
+        pass
+
+class IStringCalculator(ABC):
+    @abstractmethod
+    def add(self, numbers: str) -> int:
         pass
\ No newline at end of file
diff --git a/src/stringcalculator.py b/src/stringcalculator.py
index e69de29..41f666f 100644
--- a/src/stringcalculator.py
+++ b/src/stringcalculator.py
@@ -0,0 +1,7 @@
+from src.interfaces import IStringCalculator
+
+class StringCalculator(IStringCalculator):
+    def add(self, numbers: str) -> int:
+        if not numbers:
+            return 0
+        return sum(map(int, numbers.split(',')))
\ No newline at end of file
diff --git a/tests/__pycache__/test_romannumerals.cpython-310.pyc b/tests/__pycache__/test_romannumerals.cpython-310.pyc
index 2ef85d1aa0aaa5d708fc349e4ed24856b6f600f4..1809b2b966feaa1479662587eca1207db19195ad 100644
GIT binary patch
delta 22
ccmbOwJWH52pO=@50SN4ao}@=_<n84I06F{xh5!Hn

delta 22
ccmbOwJWH52pO=@50SLH)o}`;><n84I05@C(DgXcg

diff --git a/tests/__pycache__/test_stringcalculator.cpython-310.pyc b/tests/__pycache__/test_stringcalculator.cpython-310.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..31a224455e3a18f535acc76eafba13b427a27f89
GIT binary patch
literal 1190
zcmaiz&u<bz6vt=w2Ml!Suh80f@ZxE;A+1Ma3<(;eiNplGtR$0_nKsbf1!rc}lHS@s
z1mcOCf6rd^!nrpu`rc9z5pk0F&d>MW=gp6PrBWtPzP$Z*`q?JrD-ITm1A{tL{Q^V~
zK_e1iYeh7+0*hkbj_lY897>)M;RyGN2v?Gxduay+SrmmcOWl=Z#Kr`6(^g*n;uQRm
zrcbk-=PjeU$!Q~uI%yP|zJkf^<+%=SUn~|3>QMC|h$I0OB(MY())fhCVG9RZfDr{~
zT~QPa+JY#xh+odCucbDBMWEp5SHV6;Xh78-h#{Bcf^die9%$3I6r2{x%AGm&gl3MG
z(aD4;220=Tjfd@)Nkun}+pkpksjCO7-;-zNWnV~@Jdq#T1~7E4T<2%-+gojLp1E3@
zHv^2Wk;S9K+pEB9`L@n7z6&OZe|-RQK}Jw}bOc8<hC>?XHwUTM&5S5Co!Hq%sI^q)
z>H9Q{6q;vtD1<6NFHdPEC0y7;bPlUr#shPHgTDn!*NA#Rhxb;Zt~C26y4nC=h)9p8
z$fznPt9bV3jx{``Nb)3&-$}KL`*%Qw_t)e6VfA00p?iFE_~2-IXDw58&SXCJZ-DgP
zoXB5Kv|!Wpiy7lQ31i85R^~kJixhI?na4R^)@()LPgdI~Rg`@ce2NQ#m#6Sg<H>3?
zV1!X-GuyNCc?=YX-Gp<$6tFbu8q6Zt)T&eKCPu20up_m?OAe|yx%_Zv|AJw1jS!v_
m22-~{G6(%Gu;gg@YhsUP89l~J)|()#;8Bn6TCCzx=f_X{&>!;v

literal 0
HcmV?d00001

diff --git a/tests/test_romannumerals.py b/tests/test_romannumerals.py
index abc5266..35e2af3 100644
--- a/tests/test_romannumerals.py
+++ b/tests/test_romannumerals.py
@@ -97,4 +97,5 @@ class TestRomanNumber(unittest.TestCase):
 if __name__ == "__main__":
     unittest.main()
 
-#python -m unittest discover -s tests
\ No newline at end of file
+# python -m unittest tests.test_romannumerals
+# python -m unittest discover -s tests
\ No newline at end of file
diff --git a/tests/test_stringcalculator.py b/tests/test_stringcalculator.py
index b8e4935..f7c4c12 100644
--- a/tests/test_stringcalculator.py
+++ b/tests/test_stringcalculator.py
@@ -2,4 +2,27 @@
 # Bei Eingabe keiner Zahl soll eine 0 ausgegeben werden
 # Bei Eingabe einer 1 soll 1 ausgegeben werden
 # Bei Eingabe einer 3,4 soll 7 ausgegeben werden
-# Bei Eingabe einer 10,20 soll 30 ausgegeben werden
\ No newline at end of file
+# Bei Eingabe einer 10,20 soll 30 ausgegeben werden
+
+import unittest
+from src.interfaces import IStringCalculator
+from src.stringcalculator import StringCalculator
+
+class TestStringCalculator(unittest.TestCase):
+    def setUp(self):
+        self.calculator: IStringCalculator = StringCalculator()  # Zugriff über das Interface
+
+    def test_add_empty_string(self):
+        self.assertEqual(self.calculator.add(""), 0)
+
+    def test_add_single_number(self):
+        self.assertEqual(self.calculator.add("1"), 1)
+
+    def test_add_two_numbers(self):
+        self.assertEqual(self.calculator.add("10,20"), 30)
+
+if __name__ == "__main__":
+    unittest.main()
+
+# python -m unittest tests.test_stringcalculator
+# python -m unittest discover -s tests
\ No newline at end of file
-- 
GitLab


From a542d6525a313ea95372a7d10199c62af5f16a4d Mon Sep 17 00:00:00 2001
From: linopino <lasse.pikkemaat@web.de>
Date: Tue, 1 Apr 2025 14:32:31 +0200
Subject: [PATCH 4/4] Update

---
 .idea/vcs.xml                  |  1 +
 src/interfaces.py              |  5 -----
 src/stringcalculator.py        |  7 -------
 tests/test_stringcalculator.py | 28 ----------------------------
 4 files changed, 1 insertion(+), 40 deletions(-)
 delete mode 100644 src/stringcalculator.py
 delete mode 100644 tests/test_stringcalculator.py

diff --git a/.idea/vcs.xml b/.idea/vcs.xml
index 35eb1dd..3878155 100644
--- a/.idea/vcs.xml
+++ b/.idea/vcs.xml
@@ -2,5 +2,6 @@
 <project version="4">
   <component name="VcsDirectoryMappings">
     <mapping directory="" vcs="Git" />
+    <mapping directory="$PROJECT_DIR$/StringCalculator" vcs="Git" />
   </component>
 </project>
\ No newline at end of file
diff --git a/src/interfaces.py b/src/interfaces.py
index 7a3cc8e..386cace 100644
--- a/src/interfaces.py
+++ b/src/interfaces.py
@@ -4,8 +4,3 @@ class IRomanNumber(ABC):
     @abstractmethod
     def convert(self, n: int) -> str:
         pass
-
-class IStringCalculator(ABC):
-    @abstractmethod
-    def add(self, numbers: str) -> int:
-        pass
\ No newline at end of file
diff --git a/src/stringcalculator.py b/src/stringcalculator.py
deleted file mode 100644
index 41f666f..0000000
--- a/src/stringcalculator.py
+++ /dev/null
@@ -1,7 +0,0 @@
-from src.interfaces import IStringCalculator
-
-class StringCalculator(IStringCalculator):
-    def add(self, numbers: str) -> int:
-        if not numbers:
-            return 0
-        return sum(map(int, numbers.split(',')))
\ No newline at end of file
diff --git a/tests/test_stringcalculator.py b/tests/test_stringcalculator.py
deleted file mode 100644
index f7c4c12..0000000
--- a/tests/test_stringcalculator.py
+++ /dev/null
@@ -1,28 +0,0 @@
-# Basis
-# Bei Eingabe keiner Zahl soll eine 0 ausgegeben werden
-# Bei Eingabe einer 1 soll 1 ausgegeben werden
-# Bei Eingabe einer 3,4 soll 7 ausgegeben werden
-# Bei Eingabe einer 10,20 soll 30 ausgegeben werden
-
-import unittest
-from src.interfaces import IStringCalculator
-from src.stringcalculator import StringCalculator
-
-class TestStringCalculator(unittest.TestCase):
-    def setUp(self):
-        self.calculator: IStringCalculator = StringCalculator()  # Zugriff über das Interface
-
-    def test_add_empty_string(self):
-        self.assertEqual(self.calculator.add(""), 0)
-
-    def test_add_single_number(self):
-        self.assertEqual(self.calculator.add("1"), 1)
-
-    def test_add_two_numbers(self):
-        self.assertEqual(self.calculator.add("10,20"), 30)
-
-if __name__ == "__main__":
-    unittest.main()
-
-# python -m unittest tests.test_stringcalculator
-# python -m unittest discover -s tests
\ No newline at end of file
-- 
GitLab