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