diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..184c4eb --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,11 @@ +{ + "python.testing.unittestArgs": [ + "-v", + "-s", + ".", + "-p", + "test_*.py" + ], + "python.testing.pytestEnabled": false, + "python.testing.unittestEnabled": true +} \ No newline at end of file diff --git a/__pycache__/bracket_validator.cpython-311.pyc b/__pycache__/bracket_validator.cpython-311.pyc new file mode 100644 index 0000000..d3919d5 Binary files /dev/null and b/__pycache__/bracket_validator.cpython-311.pyc differ diff --git a/__pycache__/test_bracket_validator.cpython-311.pyc b/__pycache__/test_bracket_validator.cpython-311.pyc new file mode 100644 index 0000000..ce449b7 Binary files /dev/null and b/__pycache__/test_bracket_validator.cpython-311.pyc differ diff --git a/bracket_validator.py b/bracket_validator.py new file mode 100644 index 0000000..2863396 --- /dev/null +++ b/bracket_validator.py @@ -0,0 +1,24 @@ +def bracket_validator(input_string): + stack = [] + opening_brackets = "([{" + closing_brackets = ")]}" + + + bracket_map = { + ')': '(', + ']': '[', + '}': '{' + } + + for char in input_string: + if char in opening_brackets: + stack.append(char) + elif char in closing_brackets: + if not stack: + return False + + last_open_bracket = stack.pop() + if last_open_bracket != bracket_map[char]: + return False + + return not stack diff --git a/test_bracket_validator.py b/test_bracket_validator.py new file mode 100644 index 0000000..a3c320b --- /dev/null +++ b/test_bracket_validator.py @@ -0,0 +1,32 @@ +import unittest +from bracket_validator import bracket_validator + +class TestBracketValidator(unittest.TestCase): + def test_valid_basic(self): + self.assertTrue(bracket_validator("()")) + self.assertTrue(bracket_validator("[]")) + self.assertTrue(bracket_validator("{}")) + + def test_valid_nested(self): + self.assertTrue(bracket_validator("([])")) + self.assertTrue(bracket_validator("{[()]}")) + + def test_valid_with_other_chars(self): + self.assertTrue(bracket_validator("a(b[c]{d})e")) + + def test_invalid_unclosed(self): + self.assertFalse(bracket_validator("(()")) + self.assertFalse(bracket_validator("{[(")) + + def test_invalid_mismatched_pair(self): + self.assertFalse(bracket_validator("([)]")) + self.assertFalse(bracket_validator("(}")) + + def test_empty_string(self): + self.assertTrue(bracket_validator("")) + + def test_only_non_brackets(self): + self.assertTrue(bracket_validator("abc 123 def")) + +if __name__ == '__main__': + unittest.main()