From a47383ff5d706d80c3ba9f39e301ed6d2c9a89bc Mon Sep 17 00:00:00 2001 From: momstrosity Date: Fri, 9 May 2025 19:05:05 +0000 Subject: [PATCH 01/16] Start draft PR From ca136efed5836afcfe850efc67a838acea57da66 Mon Sep 17 00:00:00 2001 From: momstrosity Date: Fri, 9 May 2025 19:05:17 +0000 Subject: [PATCH 02/16] Add string reversal function with type checking --- src/string_utils.py | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 src/string_utils.py diff --git a/src/string_utils.py b/src/string_utils.py new file mode 100644 index 0000000..567d54d --- /dev/null +++ b/src/string_utils.py @@ -0,0 +1,19 @@ +def reverse_string(input_string): + """ + Reverse the given string. + + Args: + input_string (str): The string to be reversed. + + Returns: + str: The reversed string. + + Raises: + TypeError: If the input is not a string. + """ + # Check if input is a string + if not isinstance(input_string, str): + raise TypeError("Input must be a string") + + # Return the reversed string + return input_string[::-1] \ No newline at end of file From 84c65489fbd303079a690f8f9d9f321db095414c Mon Sep 17 00:00:00 2001 From: momstrosity Date: Fri, 9 May 2025 19:05:26 +0000 Subject: [PATCH 03/16] Add comprehensive tests for string reversal function --- tests/test_string_utils.py | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 tests/test_string_utils.py diff --git a/tests/test_string_utils.py b/tests/test_string_utils.py new file mode 100644 index 0000000..eab8677 --- /dev/null +++ b/tests/test_string_utils.py @@ -0,0 +1,34 @@ +import pytest +from src.string_utils import reverse_string + +def test_reverse_string_basic(): + """Test basic string reversal.""" + assert reverse_string("hello") == "olleh" + assert reverse_string("python") == "nohtyp" + +def test_reverse_string_empty(): + """Test reversal of an empty string.""" + assert reverse_string("") == "" + +def test_reverse_string_special_chars(): + """Test reversal of strings with special characters.""" + assert reverse_string("a!b@c#") == "#c@b!a" + +def test_reverse_string_unicode(): + """Test reversal of unicode strings.""" + assert reverse_string("こんにちは") == "はちにんこ" + +def test_reverse_string_with_spaces(): + """Test reversal of strings with spaces.""" + assert reverse_string("hello world") == "dlrow olleh" + +def test_reverse_string_invalid_input(): + """Test that a TypeError is raised for non-string inputs.""" + with pytest.raises(TypeError, match="Input must be a string"): + reverse_string(123) + + with pytest.raises(TypeError, match="Input must be a string"): + reverse_string(None) + + with pytest.raises(TypeError, match="Input must be a string"): + reverse_string(["hello"]) \ No newline at end of file From 324659a7735c7cd2836c211c7f6da595dfd346fa Mon Sep 17 00:00:00 2001 From: momstrosity Date: Fri, 9 May 2025 19:05:31 +0000 Subject: [PATCH 04/16] Add pytest to requirements --- requirements.txt | 1 + 1 file changed, 1 insertion(+) create mode 100644 requirements.txt diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..55b033e --- /dev/null +++ b/requirements.txt @@ -0,0 +1 @@ +pytest \ No newline at end of file From b0d46fe63fb49e7132742a38d47c968913c04aec Mon Sep 17 00:00:00 2001 From: momstrosity Date: Fri, 9 May 2025 19:06:13 +0000 Subject: [PATCH 05/16] Reimplement string reversal without slice or reverse methods --- src/__pycache__/string_utils.cpython-312.pyc | Bin 0 -> 625 bytes src/string_utils.py | 13 +++++++++---- ...est_string_utils.cpython-312-pytest-8.3.5.pyc | Bin 0 -> 6000 bytes 3 files changed, 9 insertions(+), 4 deletions(-) create mode 100644 src/__pycache__/string_utils.cpython-312.pyc create mode 100644 tests/__pycache__/test_string_utils.cpython-312-pytest-8.3.5.pyc diff --git a/src/__pycache__/string_utils.cpython-312.pyc b/src/__pycache__/string_utils.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..aca1ee17c8ed3f832eea45b110741ae107eb1b98 GIT binary patch literal 625 zcmY*Xze~eF6uxVs^p_nRY6UHaAQ*)HSc?cEf?W#MPA;W3XARUO++7MS9Yl0@Yu#O> z|Af0sMW^8A`}e zT*zKRw({`{Ff>1Iam(hSVK=F-K_`A}=5Js>IX@tmmq&g!^9|R{GwM2A#d;ynSu;N! zx$X(8&2w(oPX*Hix5HvkEDiWJgiG|jhLY*q_Wk~AV(TrnGR_oUQpIt!__c_VnLB;B yG1Q+E>tlU=0&-L_urhc+O#T`y3c-)=TsWrJrn@W&N98TaFAZZni7ex+(*6Nn{-SpP literal 0 HcmV?d00001 diff --git a/src/string_utils.py b/src/string_utils.py index 567d54d..63a44a0 100644 --- a/src/string_utils.py +++ b/src/string_utils.py @@ -1,6 +1,6 @@ def reverse_string(input_string): """ - Reverse the given string. + Reverse the given string using a manual character-by-character approach. Args: input_string (str): The string to be reversed. @@ -11,9 +11,14 @@ def reverse_string(input_string): Raises: TypeError: If the input is not a string. """ - # Check if input is a string + # Type checking if not isinstance(input_string, str): raise TypeError("Input must be a string") - # Return the reversed string - return input_string[::-1] \ No newline at end of file + # Use list to manually reverse the string + reversed_chars = [] + for i in range(len(input_string) - 1, -1, -1): + reversed_chars.append(input_string[i]) + + # Convert list back to string + return ''.join(reversed_chars) \ No newline at end of file diff --git a/tests/__pycache__/test_string_utils.cpython-312-pytest-8.3.5.pyc b/tests/__pycache__/test_string_utils.cpython-312-pytest-8.3.5.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3246c7f248e37a80161fdf49f5ffb713fc5dad90 GIT binary patch literal 6000 zcmeHL&1)M+6yKFbpKB*h(uO*5+O-uEsg7kk%|{)Q5F1+PA%;RI#Fu5QU0ds}v|?r* zTZ#?&xZq);DnP@#ty7xFhWx6+Gb`J*f?Ex4E5N?aQ7sc&X>SBkCF#I!VRGunOo zdvE5w8O`pSH}k%0ZH)_1e*gIG>{mz-)+ytafD1N00q}*O37TjMqau3-a=}bM6mn=Z zB=VZ@Xc%e&W+WFKje;zATNsUL2xwdj0hP2c&=xHMv{j1&-BT1(u_v^Xk(B7{!TMDl z6I~%THu4i0w{!N001d*uQ3eVl5$6P3^cu_xi!PoMwZL3pR-6rdniPb&;B1h5Yg0W| zCgJ~WEgG~L7d1q6#siCP3oT^R9$A@;dZ_+fbm3Kjv^UsiGg)s%k?phI7;&RUi(l=7 z?HYLz##8?nO?2urutPi18^sRo0$w{U`~a20FqcS+Xwg|@h>Q!_d%XcSSZecR_2+EJ zv*bN*idt+2-XGi|+`+kk7JuQ}lwQA0K9`ft-uf%~HjA-TOX=`so!Ii2N{o!m-C5?| zt(s{kl+{hsazd7A>e&TxGjRU=f>`SBP8NzMQzU-P1@d{BqW%;~(&vd3NyX>n^IUo+ zMKE=V1>^*w4J9WiIZ4Tx%{?k1I<}dC!4#pw!4W51DB4*o?}YPK)-DznV$6gSzX);| zucBgSpOR5cQ^9%xXRKU7#k$i1)ymkEVcJHXIAPO*7Q}f=Az5q6)L2tx!nDRzQ^~72 z-H9ng9oMM^XU`BDhGFGDz}Ujh0cG66In`G5nS!b2RU2v+!j43H;3FPrWZr9JPB${A zIK!>I&xgpFfqnw+D#)yC9`92Ng+3UIMHp53`{+Lpx(O|=8x5+ErJW-W;*ATr{Tmk2NTBT~7tJUE$ z>YYEvrAtiD$K?rM)dyhu`$N!e9}FN_lM;Z+Ge9a*qC8WT`qmJ=R$Kw+d|IVyoU7I0 zGU}U8a_JJ&^Kp5`SM|Xv>f3!tJ}rKO7%ky9oWp{Wbr;eujZvZ@fu-n93U&OVi!(K+;n*60G02 zzkc)n`i;f)8(*&9c;w0+F>aC7+~2*c9B$?+?lACi=zSmDq9+Uyu>u?xZkztn*gwihF-f0yp8{v zt90)aP1KAI5kz7~MS0r7rdE&A^P*$K`S@6 z1{;>$T1S7Y_0WWWV%R?VB1#AY0uiSnS9t~gvnbp(W`b9QX>ptU!{+iL;__6ubees% zc2>1zRlZy-=o_NMXU>^iOGc?^88TqTKX=n=T9-juQ?QoOp zK&}hF#P)u6c)$@^i#pP%x zZ%~O1J!_?g0Bk-3V_OkPz#ty947UZpky?g3g5R8N9Zm)xw}pn=Bab^m!`+d`$LxdMOut5Okb&g(qp!JWm3NlQh<+v0+2P#TPjdSBBpJ9ejc+wh^33^9kpf4t_2> zN*mB~727$o$jCgO%@;mJE9fDIPjmEK&eEn#{Q^D*GU^b7t`ffnMN#}o5N->%T7MLJ do}!@G|1=&Dk3NkC009{mDLuOpjfq{%-XG`oYux|< literal 0 HcmV?d00001 From d7d0bde0010b1d5bcab95581ea09df442fda7fae Mon Sep 17 00:00:00 2001 From: momstrosity Date: Fri, 9 May 2025 19:06:21 +0000 Subject: [PATCH 06/16] Update tests for string reversal function --- tests/test_string_utils.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/tests/test_string_utils.py b/tests/test_string_utils.py index eab8677..0a66c5b 100644 --- a/tests/test_string_utils.py +++ b/tests/test_string_utils.py @@ -10,6 +10,10 @@ def test_reverse_string_empty(): """Test reversal of an empty string.""" assert reverse_string("") == "" +def test_reverse_string_with_spaces(): + """Test reversal of strings with spaces.""" + assert reverse_string("hello world") == "dlrow olleh" + def test_reverse_string_special_chars(): """Test reversal of strings with special characters.""" assert reverse_string("a!b@c#") == "#c@b!a" @@ -18,9 +22,9 @@ def test_reverse_string_unicode(): """Test reversal of unicode strings.""" assert reverse_string("こんにちは") == "はちにんこ" -def test_reverse_string_with_spaces(): - """Test reversal of strings with spaces.""" - assert reverse_string("hello world") == "dlrow olleh" +def test_reverse_string_mixed_chars(): + """Test reversal of strings with mixed character types.""" + assert reverse_string("Hello, World! 123") == "321 !dlroW ,olleH" def test_reverse_string_invalid_input(): """Test that a TypeError is raised for non-string inputs.""" From 40815f3ddd18b4224e666c9355372696d4a6cf4f Mon Sep 17 00:00:00 2001 From: momstrosity Date: Fri, 9 May 2025 22:29:47 +0000 Subject: [PATCH 07/16] Start draft PR From 206cfc6f15462d292e9ae44c1e0b032782224872 Mon Sep 17 00:00:00 2001 From: momstrosity Date: Fri, 9 May 2025 22:29:57 +0000 Subject: [PATCH 08/16] Add string reversal function with type checking --- src/string_reversal.py | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 src/string_reversal.py diff --git a/src/string_reversal.py b/src/string_reversal.py new file mode 100644 index 0000000..1c5b4be --- /dev/null +++ b/src/string_reversal.py @@ -0,0 +1,19 @@ +def reverse_string(input_string): + """ + Reverse the given input string. + + Args: + input_string (str): The string to be reversed. + + Returns: + str: The reversed string. + + Raises: + TypeError: If the input is not a string. + """ + # Check if input is a string + if not isinstance(input_string, str): + raise TypeError("Input must be a string") + + # Return the reversed string + return input_string[::-1] \ No newline at end of file From 7a8226548a37180858115b7ad44f33dd09f9835b Mon Sep 17 00:00:00 2001 From: momstrosity Date: Fri, 9 May 2025 22:30:04 +0000 Subject: [PATCH 09/16] Add comprehensive tests for string reversal function --- tests/test_string_reversal.py | 37 +++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 tests/test_string_reversal.py diff --git a/tests/test_string_reversal.py b/tests/test_string_reversal.py new file mode 100644 index 0000000..5398e44 --- /dev/null +++ b/tests/test_string_reversal.py @@ -0,0 +1,37 @@ +import pytest +from src.string_reversal import reverse_string + +def test_reverse_standard_string(): + """Test reversing a standard string.""" + assert reverse_string("hello") == "olleh" + +def test_reverse_empty_string(): + """Test reversing an empty string.""" + assert reverse_string("") == "" + +def test_reverse_palindrome(): + """Test reversing a palindrome string.""" + assert reverse_string("racecar") == "racecar" + +def test_reverse_with_spaces(): + """Test reversing a string with spaces.""" + assert reverse_string("hello world") == "dlrow olleh" + +def test_reverse_with_special_characters(): + """Test reversing a string with special characters.""" + assert reverse_string("a1b2c3!@#") == "#@!3c2b1a" + +def test_reverse_unicode_string(): + """Test reversing a string with Unicode characters.""" + assert reverse_string("こんにちは") == "はちにんこ" + +def test_invalid_input_type(): + """Test that a TypeError is raised for non-string inputs.""" + with pytest.raises(TypeError, match="Input must be a string"): + reverse_string(12345) + + with pytest.raises(TypeError, match="Input must be a string"): + reverse_string(None) + + with pytest.raises(TypeError, match="Input must be a string"): + reverse_string(["hello"]) \ No newline at end of file From f38750b067afb57442b78d679cf1c38d5720b07c Mon Sep 17 00:00:00 2001 From: momstrosity Date: Fri, 9 May 2025 22:30:45 +0000 Subject: [PATCH 10/16] Implement string reversal using manual two-pointer technique --- .../string_reversal.cpython-312.pyc | Bin 0 -> 634 bytes src/string_reversal.py | 17 ++++++++++++++--- ...tring_reversal.cpython-312-pytest-8.3.5.pyc | Bin 0 -> 6199 bytes 3 files changed, 14 insertions(+), 3 deletions(-) create mode 100644 src/__pycache__/string_reversal.cpython-312.pyc create mode 100644 tests/__pycache__/test_string_reversal.cpython-312-pytest-8.3.5.pyc diff --git a/src/__pycache__/string_reversal.cpython-312.pyc b/src/__pycache__/string_reversal.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1841456ec277daa16eb5b157938e2ee1dbb1e364 GIT binary patch literal 634 zcmY*Xy-&hG6u+a@ARvPSVj|??L}LQF8e?LNi7XDt15bKBvTh5_H9H`eS4e&eCDZdtjCw9txwcW_tX>L6 zt_3rg&7#-w)8Rnj1+fLtOAo#d=>mPPqEzO#dB69XEWD?eN7;>+^yVnOIi5$U?43SX x8|cr;+(^$&fQ}9gtPCCylm7^dL-OO>E!S!{=?+W5QF%*ntYM5Nu_c^W+&{aUrZE5j literal 0 HcmV?d00001 diff --git a/src/string_reversal.py b/src/string_reversal.py index 1c5b4be..952ccb9 100644 --- a/src/string_reversal.py +++ b/src/string_reversal.py @@ -1,6 +1,6 @@ def reverse_string(input_string): """ - Reverse the given input string. + Reverse the given input string manually, without using slice notation or reverse(). Args: input_string (str): The string to be reversed. @@ -15,5 +15,16 @@ def reverse_string(input_string): if not isinstance(input_string, str): raise TypeError("Input must be a string") - # Return the reversed string - return input_string[::-1] \ No newline at end of file + # Convert string to list of characters + chars = list(input_string) + + # Manually reverse the list of characters + left, right = 0, len(chars) - 1 + while left < right: + # Swap characters from both ends + chars[left], chars[right] = chars[right], chars[left] + left += 1 + right -= 1 + + # Convert list back to string and return + return ''.join(chars) \ No newline at end of file diff --git a/tests/__pycache__/test_string_reversal.cpython-312-pytest-8.3.5.pyc b/tests/__pycache__/test_string_reversal.cpython-312-pytest-8.3.5.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7d4b01b696682e1cfbffc0c64701ca19a198bb72 GIT binary patch literal 6199 zcmeHL&2QUA7AK|A2Sqz^(?vJQ+Fjam5({3-l2fPaq6uOHEzm=9N)I&(5VXix%2FQ~ z(s875^*#?L%wt#ynu!lumAV5xiZ-yKyc8av# zZBcYhkw5<4n|U*%;k@~H|LE^eNpSsp?d4)DCQ17!1Xsi-2k!#;t7J;1Y)kVpdq>LA zLPVCzWIiVIl=yrcQX+PuoSaXBF8YBqub2cdWySziGY;5iCII`*B;YAi0X$uoGpVn! zs+$?vJ4LO#7IiG$acQZtSn!*`UJ1Y`JO|q{YmdAtxxo0fB5nD6RW>85krjC*@~1IL zT8*wmozGpgW7i!Lu<&g{p4+lX(B^hz%g>(S%4hu<=0fHQ zF=!+0wdfPcf*iG|$k3kfUp&Jm?1AUxlY>?~CtoDUXU0DvjX3lrF%xETg_L9_#oW_D zgL_IE2z23lB^Hzvyx)^ex+RL04qR<)~K`)bCa z*p-{ai$WfRDTG%LUVU=Pa2$)etbmz}gUXqkn+h}WQrByB7h0(s)O$fM7`Clbt40ge za?PNY*9Xb^!cxh0OBKh9+f~TncxQE|SY5JBmQ`Q0s|$v$SB$ddDY|3awy*^6)GVvE zRIR*0X_a~}>bI-3Y`D60uVxz+!-bU1xTj(byoLE*;c~BVrB|5d0x#{4yop@M=N$N~ zlE$tllaofRHVJL1It=yPB>q!}q3@9J570jiJ6o%JgRCP$kL91r&q+t1WOOCxeSrJY zm*}1d7u)#d(e5M0S(Dfb={-kEhUKkiBzHjeb^aF!V1% zI<6RE=nu9?8ixKzM;!vTaR#8J4sD!itLZ(0_l~dNlE5~aaj6s1E=jMCaP2m;6MW;0 zFcoB%q-h!&b29XU)d$wnU;ofgA0GNz&9F-qlUB=?82$-r6s&?lkM9M)eaZ{MDrg3V z98N022huH)2Or3E)KOqf1)!ylHkG!T-y?YM_zErwY@->MIw9?n{Cb9Kx0#*bO+}ar zvP<&+jSrmcC*eclb>~^j#4mS0IeNqg_%>2oF1ba`slniPvJI7ODYfM)watcV+O)c? zvF+vYz2fXsUV*jgyf!)xy@)G|aEnVVG6QZg(NV{MHE#g4)UoD`wmP#%@ZRwiToTwu zGcI*P+9fmVu$4l)ZDuEU^9HBAxJzbE+yck7I6VGe9J6xIaSN+ZGHk6-G+=dbVYi=c zC`Nu^s&IMudb**cuMb}?OfBS%MIw9?n>Gg50-DY-zH+{7z0LU(xK5-TFloMCMKm=bw z-ma7iRnzKql_fko?5{oCfA8V`+SdNs-}cu&^>v>zX^W*iJihb%?kVS4;!Oxn9+Ob} zS$Lce0r1cbPBQ!8TI)PG%^!faaV&ilxzB@#pyf8R z40+Bkk!v{alG&r4gJB0eZygj_EH8}X-3g+OkQiL9ACZ$F0{QpImY-u)THA;?UY7iLGD%Hw_zfmexYD+FG0583TL@O^r zd~U%4Tb>RP+ZcqX3dPb)4o}MvLY6Ybi}M(n7iWb!o+4`EaW{z#2!4#_2Z&PTE}TwG zoz&|yG#Hz^ka#o}o69FM170!+|504LymLD5j4Y4YK@cxXtz}wrA^0a$Uc%SWGhjof z(C|fv7P7pXMbwSQC@``{F~-0SS!_$m7E6lW&-#r{Bf~cHPENjFu9{1>b&b9bI&=r; uGQfYLvMm2gl0J~$@BgQi{f0#3>^I4XJc=-d@EXDuggN;jsmLR&(C+|@2$QS; literal 0 HcmV?d00001 From d40c662504e6fa6001bebecca25b2d41a4e8516d Mon Sep 17 00:00:00 2001 From: momstrosity Date: Fri, 9 May 2025 23:03:05 +0000 Subject: [PATCH 11/16] Start draft PR From 26dda782614ae4a429125e4652c6bad0f928e195 Mon Sep 17 00:00:00 2001 From: labrocadabro Date: Mon, 19 May 2025 13:14:53 -0300 Subject: [PATCH 12/16] Start draft PR From 2938bd76cfead0e18c25cb5ecb1e8ffd7287bb0a Mon Sep 17 00:00:00 2001 From: labrocadabro Date: Mon, 19 May 2025 15:25:00 -0300 Subject: [PATCH 13/16] Start draft PR From 00a7f510e2260c83b46da1c2a49f188d54127f50 Mon Sep 17 00:00:00 2001 From: laura-ct Date: Wed, 21 May 2025 10:08:59 -0300 Subject: [PATCH 14/16] Start draft PR From 154c6480f9796d93c5795b89097fa68ef632fcb0 Mon Sep 17 00:00:00 2001 From: laura-ct Date: Wed, 21 May 2025 10:09:41 -0300 Subject: [PATCH 15/16] Resolve merge conflicts in test_string_reversal.py --- src/__pycache__/string_utils.cpython-312.pyc | Bin 625 -> 1030 bytes src/string_reversal.py | 6 +++++- src/string_utils.py | 6 +++++- ..._string_utils.cpython-312-pytest-8.3.5.pyc | Bin 6000 -> 6919 bytes tests/test_string_reversal.py | 5 +++++ 5 files changed, 15 insertions(+), 2 deletions(-) diff --git a/src/__pycache__/string_utils.cpython-312.pyc b/src/__pycache__/string_utils.cpython-312.pyc index aca1ee17c8ed3f832eea45b110741ae107eb1b98..e7d97245b240d94664d41497c10bc01584efc0ef 100644 GIT binary patch literal 1030 zcmYjP&1(}u6rb5_+caO&Mq@+^L-o)ck~MlL6e);$=%t6+lOSP|ohI9EcH_)!C1nd$ zJSYhEAXINXc!=~L5xk_-kFxaUskcZydC@n!*^meG-kX{C@p~U%v)L2^deJYp1{y-Y z)Fmc;s9anI?47@S`+PJITioQ=~(koY-uKTpdM2<^&^!N z=plMqKxkL<@n$-D8RtIowQKMY`(yOBs3TL`%#K?{x2Q}eT9s57?LKdcrBG9`$Gb}w zAZ}@itV5n*2I-PIBRm3N4kN6EGZ+g3#*tTSICPKgsU_H$`Fgj*9&zr1)5=CzRfvLE zf;g^(dZOf&5ado_MJ)hndqOHK@o#|6)$q>$0hOkLlm)#Ik~$3*B)~tI9%Tt8ICYxv zY%?dAgl;g$4D?Oca!LuV)*{HoxNE9wBEXhV!-e+z-7;Ekn;ACsI5nD)m29u~z+*>`% z&c469@1Nvv9X>nGFZAYn^&i>lYkZn4{7lXrC+9xcz3NBzd$KY}pxm875@mAl7T+xH zFQ266`}+I^BtxqujjQz!F?>cmuk;yULGoVPH9eax^DA%-;T1s{BrwJU?K-}Bm>(bz Kz5E{~LeKxi`VXuC delta 291 zcmZqU_{idWnwOW00SMj(%4Hm2WMFs<;=llq4+ft>N~SZUFtjj4F;p^YG9|-gK+-Hg z%nZbzJtpSb3Z*asA#*FUBv2%nL6fEG@??8P*~#6E=Y0KM{s#h0=388u#hH1pY_C@qNxif87f7lUk4_@%0!SWuu}lvjG= k01~%2Y;yBcN^?@}ig str: """ Reverse the given input string manually, without using slice notation or reverse(). @@ -15,6 +15,10 @@ def reverse_string(input_string): if not isinstance(input_string, str): raise TypeError("Input must be a string") + # Handle empty string case + if not input_string: + return "" + # Convert string to list of characters chars = list(input_string) diff --git a/src/string_utils.py b/src/string_utils.py index 63a44a0..679e567 100644 --- a/src/string_utils.py +++ b/src/string_utils.py @@ -1,4 +1,4 @@ -def reverse_string(input_string): +def reverse_string(input_string: str) -> str: """ Reverse the given string using a manual character-by-character approach. @@ -15,6 +15,10 @@ def reverse_string(input_string): if not isinstance(input_string, str): raise TypeError("Input must be a string") + # Handle empty string case + if not input_string: + return "" + # Use list to manually reverse the string reversed_chars = [] for i in range(len(input_string) - 1, -1, -1): diff --git a/tests/__pycache__/test_string_utils.cpython-312-pytest-8.3.5.pyc b/tests/__pycache__/test_string_utils.cpython-312-pytest-8.3.5.pyc index 3246c7f248e37a80161fdf49f5ffb713fc5dad90..945ab3b5c1716a71fceb342223c188e0fec7d8e5 100644 GIT binary patch delta 526 zcmeyM*KWplnwOW00SJmO=w<}6PUMqdjG3q&&XvO1!Vtw@$*9S-u_=}{qDVg@KQ~oB zC$Y3BQ9nJi1cWn6lk^LUfWjpisinpGX{m`NrA4W_Nu`-NDXB&J<@rU~Kq|i|IZ-z; zJvFaHza+J|q*%WwwIClt#v7V%{>W;{Hn~D*HmerU4ZM>jgy(L~=6%FCS&L^rs}4{| zaPv7H1!h(~AX9YnXZ}_uMw7|fJaRUi3WxTQo0vdTzl*;Nax77)4$6M=By7&cKooTZXclXGK7EUS=?equp^eo<;celeJg zH`r{;X2~{rD*t>|EucQ$&6WZR%&a;^!GO?Ng zxssEMB{wqiPga$3VKkbYC1s)k5-lE3yG{8G*Q1Z}Mp= X1u=t9988Q(j3CnLGY2Q55?B)errs?^ diff --git a/tests/test_string_reversal.py b/tests/test_string_reversal.py index 5398e44..61d360c 100644 --- a/tests/test_string_reversal.py +++ b/tests/test_string_reversal.py @@ -4,11 +4,16 @@ def test_reverse_standard_string(): """Test reversing a standard string.""" assert reverse_string("hello") == "olleh" + assert reverse_string("python") == "nohtyp" def test_reverse_empty_string(): """Test reversing an empty string.""" assert reverse_string("") == "" +def test_reverse_single_char_string(): + """Test reversing a single character string.""" + assert reverse_string("a") == "a" + def test_reverse_palindrome(): """Test reversing a palindrome string.""" assert reverse_string("racecar") == "racecar" From dfefc4d8095c73b598c75f5b438f9509345d8f6a Mon Sep 17 00:00:00 2001 From: laura-ct Date: Thu, 22 May 2025 12:43:45 -0300 Subject: [PATCH 16/16] Start draft PR