From 059be0e5d10c58434924e5df2110945880d5700b Mon Sep 17 00:00:00 2001 From: labrocadabro Date: Fri, 9 May 2025 15:26:59 -0300 Subject: [PATCH 1/7] Start draft PR From 3cef8b7b1999273d433bda3f8336c814522a7c24 Mon Sep 17 00:00:00 2001 From: labrocadabro Date: Fri, 9 May 2025 15:27:10 -0300 Subject: [PATCH 2/7] 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..1dfb1bf --- /dev/null +++ b/src/string_reversal.py @@ -0,0 +1,19 @@ +def reverse_string(input_string: str) -> str: + """ + 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 473e22eb0aec4ccf88dd81e522c9873ea62aee7d Mon Sep 17 00:00:00 2001 From: labrocadabro Date: Fri, 9 May 2025 15:27:18 -0300 Subject: [PATCH 3/7] Add comprehensive tests for string reversal function --- tests/test_string_reversal.py | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 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..cc80aec --- /dev/null +++ b/tests/test_string_reversal.py @@ -0,0 +1,29 @@ +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("h3llo!") == "!0ll3h" + +def test_non_string_input(): + """Test that a TypeError is raised for non-string inputs.""" + with pytest.raises(TypeError, match="Input must be a string"): + reverse_string(123) + reverse_string(None) + reverse_string(["hello"]) \ No newline at end of file From b9e4c257c10b02afc9eca4fdff808287567f264e Mon Sep 17 00:00:00 2001 From: labrocadabro Date: Fri, 9 May 2025 15:27:31 -0300 Subject: [PATCH 4/7] Update test case for string reversal with special characters --- src/__pycache__/string_reversal.cpython-312.pyc | Bin 0 -> 746 bytes ..._string_reversal.cpython-312-pytest-8.3.5.pyc | Bin 0 -> 5130 bytes tests/test_string_reversal.py | 2 +- 3 files changed, 1 insertion(+), 1 deletion(-) 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..231e85dea4475aa5f2c8f5851e0fb64409c108d9 GIT binary patch literal 746 zcmY*XJ8#rL5MDnB$-RmMg+n6IiYgXLmLRGKAt8j6G%1c$G$-GA&S&AXt=VW8ji;jx!q)SBs%=&RU#@dqNx3@CxCA#gu9hKT2acp+$~ zmV+LmFZc3HmnZ6@H-f7^XduAT3kNQYi-D(v`t>FAYKuP&|+E8HE`8?zZbg zq=W*gq(DgG!guf86%zZR=vTLBfE(^4C#35u6=5CSIkOvwUP&*ZB&$Z2A5u_RD)IKCE5pkXQZ#hP}&| literal 0 HcmV?d00001 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..0e6d02b146445ee46038b0cff379ce10f97b38f3 GIT binary patch literal 5130 zcmeHL&2Jk;6yLSS_HMRGX$qw+4Q%2-y+XF*H2nyWszKt=LvyN-n#*eA-PlgoUTb#U z#BL&0v=<~KdO&IpJ@}X?{1Y63iyh}fT7f`{`0( z;ZmiL4<@Ho0w}Cb*xMB8O2iex1H{U*uo2)D(TuD_mc`}B?UW#_M3WdVh# zTbs~lUNjNWnU8D)J9^QkS*9#_&zc^;Bj8@bpzfbv>hE8rTFt>>=aFik59Ve$26LtGF)i zN2aFM#m3mXscL;fbNlWFK%G(v8q?eqsmC=}>swK$nDnydVzQO%$d5uFLdFT1AmsA? zfZ@6p_UHhUnoER}GwU){@%ye->mIC9H?V&~&l|R_W2=huPPuAe%RdIq`dqDKd!>r& z$886Cxc+I~Ejl&Zq+Rub?aUdrUNOp+FYB%`Z;=uFfoVEz$*FvTv4j1S`n-e7hNoLg zRokc-9<;2-eTB@xR+#H$F7z^&dYOxiVWVAPOJq!L%!S7)sI=_YvPGwCWo@H|jclRh zk*ipn%T_Uny`oifv-6hW)v%Q&cW7ETyXfHCP&qhnq>X}A@v>xZ+$`LX!>B$n9?0mf zvBwDeK)l?rGu66(jy81to;~m&0N@c=A8|a8q@|2B z3vDI6i^zXF5HOC@Hc?|-rwg}Gdi6Y$Zc;stn+2}Q!469A!7_wAAz}IRVM+XpVJSkx zQuI(*LN8fZLOss^?}nuq4@+?~@ehS1=}=gbG`aE4%|l_SqFUvuSLZ=Vz{Ci!Ob7`q zn7jlqiH?|r!x?;nz_UPl{0$ES@1Hqf{dCyS^xuPa^4{U5f3Ag+VEQ8+We8An5J*cI zY7VxQFryr4S;*1+UQP~kq1Y@rz z^cf#urx<)!4TT;|RX7pZW@2GEkow|Yar%H)klA!L8-5>lk-S;B zTbys9NpOpFM@a!%y8)!7q}FbNH;V4D)HmM%RYd09| zr8{Wym0J+I<|*j^B3T=Ij$2syl3}a)q5*FQ4^I1;M!a|da<}0|e0a>ZFBD(gF-DJa z3_73Qoe!tsiM$RMcM?b#vfw1CjskCyY;y@nOG!4D+Ddj8k^goeU>v7yqQAdh;!W-NqXT|gcdkAJx^#jhh9L63`qD0CA7 zGa8;w4oK0F(pZ7VT=-Ih$S)jK6zV7`vK6(IM7U*+Rp z4t+lKRlSwEwj)pfAf0;XZb@&E+S`)OLA{!ISl^O{e@_T~AB(&4bX%U@cNI{6oSc@T z-$=3P6AA6OFNG;SCI;r8(b-ZnEH8&dJ%g=9T=F2n=ORB5$nYTO;2cpr>Ee9mP)^J; z2$J_=k^#^o5Doa$py@5)3DS@xgeDQvM`g#X+16G3A;`#gFqatrZ&6Vce-eZT!u|dq ch0IeF5i?Jvh&W2fI3XVpGPWnh#1T5&AAgSGeE Date: Fri, 9 May 2025 15:28:05 -0300 Subject: [PATCH 5/7] Implement string reversal without using slicing or reverse() --- src/string_reversal.py | 13 ++++++++++--- ...ring_reversal.cpython-312-pytest-8.3.5.pyc | Bin 5130 -> 5130 bytes 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/string_reversal.py b/src/string_reversal.py index 1dfb1bf..f2aa258 100644 --- a/src/string_reversal.py +++ b/src/string_reversal.py @@ -1,6 +1,6 @@ def reverse_string(input_string: str) -> str: """ - Reverse the given input string. + Reverse the given input string using a manual character-by-character reversal. Args: input_string (str): The string to be reversed. @@ -15,5 +15,12 @@ def reverse_string(input_string: str) -> str: 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 + # Create a list to store reversed characters + reversed_chars = [] + + # Iterate through the string from the end to the beginning + for i in range(len(input_string) - 1, -1, -1): + reversed_chars.append(input_string[i]) + + # Join the characters back into a string + return ''.join(reversed_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 index 0e6d02b146445ee46038b0cff379ce10f97b38f3..2e5c3e787c367d28b8c1a8028a2b553815e70ea5 100644 GIT binary patch delta 32 mcmeCu=+fXk&CAQh00hDtIWq-V@^f;GC&%(yZ{8>n$qWE}Q3xpj delta 32 mcmeCu=+fXk&CAQh00e9sIWq-V403XeC&%(yZ{8>n$qWE_CkNdC From 599e226f8715354e3a79ac7256a3a70f182f5e59 Mon Sep 17 00:00:00 2001 From: labrocadabro Date: Fri, 9 May 2025 15:28:13 -0300 Subject: [PATCH 6/7] Update tests for string reversal function --- tests/test_string_reversal.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tests/test_string_reversal.py b/tests/test_string_reversal.py index a89884f..40ac778 100644 --- a/tests/test_string_reversal.py +++ b/tests/test_string_reversal.py @@ -21,6 +21,10 @@ def test_reverse_with_special_characters(): """Test reversing a string with special characters.""" assert reverse_string("h3llo!") == "!oll3h" +def test_reverse_with_mixed_characters(): + """Test reversing a string with mixed characters.""" + assert reverse_string("A1b2C3!@") == "@!3C2b1A" + def test_non_string_input(): """Test that a TypeError is raised for non-string inputs.""" with pytest.raises(TypeError, match="Input must be a string"): From 36c014ccf5b325bf6cf8227e558382d96dced514 Mon Sep 17 00:00:00 2001 From: momstrosity Date: Fri, 9 May 2025 15:29:33 -0300 Subject: [PATCH 7/7] Start draft PR