From 87851e8d13ffc9df28c2e3651c038055f3745bc7 Mon Sep 17 00:00:00 2001 From: momstrosity Date: Thu, 22 May 2025 14:15:46 -0300 Subject: [PATCH 1/4] Start draft PR From c48280aed8f66ab370cf21c7743e516aaaf6183f Mon Sep 17 00:00:00 2001 From: momstrosity Date: Thu, 22 May 2025 14:16:05 -0300 Subject: [PATCH 2/4] Add string reversal function implementation --- 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..8b80b55 --- /dev/null +++ b/src/string_reversal.py @@ -0,0 +1,19 @@ +def reverse_string(input_str): + """ + Reverse a given string. + + Args: + input_str (str): The string to be reversed. + + Returns: + str: The reversed string. + + Raises: + TypeError: If input is not a string. + """ + # Check if input is a string + if not isinstance(input_str, str): + raise TypeError("Input must be a string") + + # Reverse the string using slicing + return input_str[::-1] \ No newline at end of file From 076c72253d664a2da0dbb108a9a56d195fb01ccc Mon Sep 17 00:00:00 2001 From: momstrosity Date: Thu, 22 May 2025 14:16:15 -0300 Subject: [PATCH 3/4] Add comprehensive tests for string reversal function --- tests/test_string_reversal.py | 38 +++++++++++++++++++++++++++++++++++ 1 file changed, 38 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..da07575 --- /dev/null +++ b/tests/test_string_reversal.py @@ -0,0 +1,38 @@ +import pytest +from src.string_reversal import reverse_string + +def test_reverse_simple_string(): + """Test reversing a simple string.""" + assert reverse_string("hello") == "olleh" + +def test_reverse_empty_string(): + """Test reversing an empty string.""" + assert reverse_string("") == "" + +def test_reverse_single_character(): + """Test reversing a single character string.""" + assert reverse_string("a") == "a" + +def test_reverse_string_with_spaces(): + """Test reversing a string with spaces.""" + assert reverse_string("hello world") == "dlrow olleh" + +def test_reverse_string_with_special_characters(): + """Test reversing a string with special characters.""" + assert reverse_string("hello, world!") == "!dlrow ,olleh" + +def test_reverse_unicode_string(): + """Test reversing a string with Unicode characters.""" + assert reverse_string("café") == "éfac" + +def test_invalid_input_type(): + """Test that 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) + +def test_numeric_string(): + """Test reversing a string of numbers.""" + assert reverse_string("12345") == "54321" \ No newline at end of file From 230c2cb702f642ba03ffb37df7c825c181dee05f Mon Sep 17 00:00:00 2001 From: momstrosity Date: Thu, 22 May 2025 14:17:01 -0300 Subject: [PATCH 4/4] Implement string reversal without built-in reversal methods --- .../string_reversal.cpython-312.pyc | Bin 0 -> 684 bytes src/string_reversal.py | 18 +++++++++++++++--- ...ring_reversal.cpython-312-pytest-8.3.5.pyc | Bin 0 -> 6610 bytes 3 files changed, 15 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..d5c483b9be9dd7435c22f41a62b5ddf4117252ec GIT binary patch literal 684 zcmY*XJ#Q015Z(0|WIK)v5aF}f28lyTHW6KfKom%%Nnu<;VXb|WyA}4`X?8EjQ3`~h zpfgqe01ZmZuYkr9(46R~=pvbl24?TW3Uivd-Fa_j-;Van`g(_veSa>aPn@xzZc`iW z3tKwM2@BX8_KeNA-x$}3gPY_Y`SJ;c6J}S~F|!Ry6?R&!%$mJW=K_9OabNRe7BuMd z-g?&we#-pj(dUjJ>%$?S0ii^w4l{RpWKA5HO7%`!uy@T?2p^b-I^sX+hZGY|UELuBf7g_hp`@tON xgLe-X%^OQ%vwfcz^&c6!SA{JKdF%c(39<=1z%Ffz)($-LIOog8C4RHu{sRXWxEni35lB)E)?j)yBJtUDjS}X5G|j zB2}~(q)Ko=Y7Ra4n5g^{6(_{Sj`Ja{Kt+N}Z&ia-sVCl>*^u8gpo&G?Vi>!ap&9GVhhVAUQyZG%r2!=mpsbErjOf`Oqi*lC%(>53_F^ z)Z^&}@u}9=fHKpvK~QHp^vEk=L>z39ryFsfYJDGh`hLVh_T`jE^;VJwLeGvf24AagF_?Dsp|R?`7r z*80vz{F?mlr?Qc_1@i~53~zWLR86FlbEmGE%u&S>fZ11dl@*F*%T&c`$heWbX<4=# zu`SEYFUv1OGj;lxwrCC3I&!t&9xuA{<>4h|-IFQT44MQ1( za|j~{7hdku88fNFD;P^N6pme8PH+`B`F^?TKp!=ox(BtKZdn>N%QR;f%Q`jP4#?J~ zDh10al$aZ}Y$(CpqZ-TG70cj7wHeEv(k-o|7fm;zF@4&^8r*#oyxD?X`hZfKx`(uB zn-+CPGjEkGy`(#kvmA95Y(eyJxScuQ&b-skj0#57c2RUuFvCL(CRI{-dg)~IcG1jQ zdWGuQnSz6FzA}|9QxH3Ov%<2|rtVazIf(zzFllzyrk}vara663pD{~L7RQEV;SbpY zwey~c51N=o7zQ+P-O7}!?s1+G7(JhD&-Q5#bPjEC^De+0>4)Q|>tyi$rNzFc(gRd& z2B5C=)MgsW;0D2G%@YVNzy_)buGu12$>3t2kgjmOfUeC1ssXW11~;J_QVzjSf7~O< zf6^m`xJL?a^GM`1^GKx4?*Cbj6bU?1)QJ5}9x1-fBgNB+ogS&An#HnH4Lp)WaS_l2 z0(upS{-2^_r05B+(t}7I2WT@kdK!55*p{`=tM!+DALQef!~CUxvQAR4^n030H&C@M zfV$FM>uM;e4T8^_ClFkK4OA0cvqi3w)MAg2u5i78u5|^f0kKX}^bB-nZ|VEn7i`A= z{iUD2wsSKs&A?`y%j;CnIVKH^K-PC}1>IY$fWfwJnOe{UJqrsDT}xmIu>O0&5>id& zO`vKifV%Q#E!9wZHwZp!oPr98m4-65LGW4g1cD2&fog(lw#Zd7 zwg~4c)LY?t0ljoZknOlm#`dfOmv?X#{a;+#hF)PEX0D)HtxW?grITCAfH0NQbDgJ! zu?+l0YkB*3tc7=?wXHCkfoXaJ-oSFwbutc?lWi(zfm*Tw>dM(AyP=G45Pa4=f#3pc zpqk*CEpnBNFJ^^wh3f_Mk{zf9#5x(@vm7*>J5S`4RL2tBIN1F+z5AiPF{D^Yt^#JV>W7msZ=j8(@-J6qL%E^pon;=g;KfVfa5#- zArfk_0#U9hQ`Nl#G{ik45bDY0pWcR1x|$|#RD_w_D6fyXiJ%b?x)L)Yu8~LhG!{xX zb*o@#yeZ9rKGBO%*-3cWb$~n4Pl^4XcYoIXWwqY_{(55KyZGTR*lPU5i?EcuEdLyp zk_WbDJFD@NBD|F-_Q2Mnq5{q?)1TEG;+?iVZ|=%#+bBtZoDq4>6j{ zYztqCa1RD4DTZtKO_d+W`PqV^1LY=2v1jxG0`DJ>{lwoZ+D64PFVV}8f&PtQiDzM1 pmY+z{J?U=e_fqCL3CWq~@sNB5;Vp!B5iTJ>MpW+JJOC80_!l`Mt^)u7 literal 0 HcmV?d00001