diff --git a/src/__pycache__/string_reversal.cpython-312.pyc b/src/__pycache__/string_reversal.cpython-312.pyc new file mode 100644 index 0000000..231e85d Binary files /dev/null and b/src/__pycache__/string_reversal.cpython-312.pyc differ diff --git a/src/string_reversal.py b/src/string_reversal.py new file mode 100644 index 0000000..f2aa258 --- /dev/null +++ b/src/string_reversal.py @@ -0,0 +1,26 @@ +def reverse_string(input_string: str) -> str: + """ + Reverse the given input string using a manual character-by-character reversal. + + 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") + + # 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 new file mode 100644 index 0000000..2e5c3e7 Binary files /dev/null and b/tests/__pycache__/test_string_reversal.cpython-312-pytest-8.3.5.pyc differ diff --git a/tests/test_string_reversal.py b/tests/test_string_reversal.py new file mode 100644 index 0000000..40ac778 --- /dev/null +++ b/tests/test_string_reversal.py @@ -0,0 +1,33 @@ +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!") == "!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"): + reverse_string(123) + reverse_string(None) + reverse_string(["hello"]) \ No newline at end of file