From 23ab9fb6940c6aeb10d6f913d5fd2aea25a767ef Mon Sep 17 00:00:00 2001 From: momstrosity Date: Wed, 21 May 2025 10:01:40 -0300 Subject: [PATCH 1/5] Start draft PR From d4d83bfa666eb7b188e8ea3ceb1092d030250ce5 Mon Sep 17 00:00:00 2001 From: momstrosity Date: Wed, 21 May 2025 10:01:52 -0300 Subject: [PATCH 2/5] Add string reversal function with type checking and documentation --- 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..4bb9b6c --- /dev/null +++ b/src/string_reversal.py @@ -0,0 +1,19 @@ +def reverse_string(input_string: str) -> str: + """ + Reverses 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") + + # Reverse the string using slicing + return input_string[::-1] \ No newline at end of file From c418303864c4de49aeefd54e4098fb2c8dd8ffe1 Mon Sep 17 00:00:00 2001 From: momstrosity Date: Wed, 21 May 2025 10:02:01 -0300 Subject: [PATCH 3/5] 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..f980ef2 --- /dev/null +++ b/tests/test_string_reversal.py @@ -0,0 +1,37 @@ +import pytest +from src.string_reversal import reverse_string + +def test_basic_string_reversal(): + """Test reversing a standard string.""" + assert reverse_string("hello") == "olleh" + +def test_empty_string(): + """Test reversing an empty string.""" + assert reverse_string("") == "" + +def test_single_character(): + """Test reversing a single character string.""" + assert reverse_string("a") == "a" + +def test_string_with_spaces(): + """Test reversing a string with spaces.""" + assert reverse_string("hello world") == "dlrow olleh" + +def test_string_with_special_characters(): + """Test reversing a string with special characters.""" + assert reverse_string("a1b2c3!@#") == "#@!3c2b1a" + +def test_unicode_string(): + """Test reversing a unicode string.""" + 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(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 92013684cf5070caf17eff9a6722886862646f00 Mon Sep 17 00:00:00 2001 From: laura-ct Date: Wed, 21 May 2025 10:03:33 -0300 Subject: [PATCH 4/5] Start draft PR From 202a5f47bd6a1649005d4a4efaaa2eea55f4278f Mon Sep 17 00:00:00 2001 From: laura-ct Date: Wed, 21 May 2025 10:04:26 -0300 Subject: [PATCH 5/5] Deprecate string_utils.py with backwards-compatible import --- .../string_reversal.cpython-312.pyc | Bin 634 -> 1324 bytes src/__pycache__/string_utils.cpython-312.pyc | Bin 625 -> 974 bytes src/string_utils.py | 27 ++++-------------- ...ring_reversal.cpython-312-pytest-8.3.5.pyc | Bin 6199 -> 7063 bytes ..._string_utils.cpython-312-pytest-8.3.5.pyc | Bin 6000 -> 6919 bytes 5 files changed, 5 insertions(+), 22 deletions(-) diff --git a/src/__pycache__/string_reversal.cpython-312.pyc b/src/__pycache__/string_reversal.cpython-312.pyc index 1841456ec277daa16eb5b157938e2ee1dbb1e364..3102376dfb0d228f0d6d261bf9e919fe6c54c1c3 100644 GIT binary patch literal 1324 zcmYjR&1)1%6tDi6IGHbrF@7u}mBomIGih^BL4qLaK@eFqVL_G+mF}A9GCf^mRdqsS z0zm{PDmbE`M;AP}cyVw0KX@?U9zx?`!IQUvyJ2{y8XxVCZhO`} z$Z5mcFneatS^>{ux@YvPqi_|hsjX}3)qJ{RCDsI76>xxo)nV;ngg2f{d-k1j9_xqg zjiTN{^#b_@gi9F4O}a{jq*(bBx7jKUaiSAWb;2DIMkEN<8+eT=pGOKu67<6|U@pZW zS41%$VlMD9bH#FQ<_DBLPkw0#l+cBtDz?H!50ObYz0Vu20<+V3!>(O6@wtwAErRgQ!@o@n)B6 z?*hv;(#49pe#q`dG=u!k#fnT)#j8Xx9?6`ACMFvojvGXtR$wt?F864f-6heMDJQMz z&z*)(fs*wLcmedyG*uig(_AJm)8}T=k3Ttq%PA_;GuI=(PZ*^4Bjy6|yD9_+(6v@l z&9si7I#dZ1PJ_=TiQYSOO+NApLeJekVp`x&6NK6(Xs=L zpo>c*>9i<;he?~dojfX>HK+&}E?m+iZ78Cns8rGsw9C_ZY3`gOh3ljVF6Heq+g*=q znReN$7YBfd&Q3mrX%p?8M3qB>;LYX#%BMcp4sRbh^QktsU7Xt+L)D4Fu}_ubn^%Wp zX!78TTd$^`-+n#)?9cwp=9QgNZ7}ty@&AeX+nK+vzn}Tn{^#^|ak^jVdt2qf;;XaI z{@5v22FBKS-`*)!2NPSReqlI{%KHaXj~l}ps??sI-#R}y`}pFveRLP7pc{2l=s$>r w;onG1>h%OnadE!Gy(pj;#T0xdkvG=DXIc|AEqVBSvdX_Fwo18WO&m;e9( delta 319 zcmZ3(^^3*#G%qg~0}woIl*>5A$iVOz#DM`I9}GT&luTzxVQ689VyI-)WJ-p~fTUS~ zm>GyadrZu=7O7!KVFE(tR%S_{STKVoOV!QE!Hmj`dXr}`o%Qv5`5y>0nQw7r7H8%a zmn7yTr`}>NE-AXj8B$r0>RMEkU!=)+izhR$ptK|&D4v;@UJSBL;g^PfVnKm^QEEYc zF_?@um@LbpQNan61Su%i1`-VnUt}0~#3tk{alXQ>afeU*f`q|kKEn$fh9B4%cqC@B z%ut%aa*;K753NdE$_UWJ;H`h%taKyQ(F@}h4IEghI|<{M__n+NZgvX|GtXxcmoTls3b zucd*0V?HOCEPVQTaPL;nflb8oSx094%q#*Vu#0B7Ej<$(Y}uA~voT?J;XxT-Q%X>~ zFsq!#1QO|jC>+ltcv(@vR@&O>u34Ux&~e*+sON|zGzagh*oY%9a13H}NDvd>Xt{)u z7N^W?J~dB>LAqTQl9oI8w5K0s=N|nPmO?$hvyGN|X^xS=p{eZCAe|G&DOem!~qmL6*rC`bF(cUVc;;^0#6r45xl7{+ zKcs}mjGE2Z^KHuTlaOstb`giHMNHz*fMZT09$`ki;S3wr&7A{urFTxKWS2)oz!v;o zf?~Pvf4Fl{SU%JjN0qB%-5ROZWDd%et@T5#^y+#)882LZ|7d?54IFZkkiv`GI2I9{i6Md~kY8X)YnR)5Oj6e+vzf|=T3kvj$ zQVa5n!DPI_z_Y+p!2Q6T ikm8_n7)AK#OqY$kU1CeHjIDrWrkwAvB8)ka$jA@W7MXhjp?cZv(3)P#e$YZM;IvtlB`Pz~-|8YRs&~tolHv#AY4wV@#}O zK&H&(?~)rC1tzbQa$z)@{7y>O9HgxXq@f6;vt+P9PUMqdjG3q&&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?^