# Path: string_utils/manipulation.py
# def roman_decode(input_string: str) -> int:
#     """
#     Decode a roman number string into an integer if the provided string is valid.
# 
#     *Example:*
# 
#     >>> roman_decode('VII') # returns 7
# 
#     :param input_string: (Assumed) Roman number
#     :type input_string: str
#     :return: Integer value
#     """
#     return __RomanNumbers.decode(input_string)


from unittest import TestCase
from string_utils.manipulation import roman_decode
        self.assertEqual(17, roman_decode('XVII'))
        self.assertEqual(18, roman_decode('XVIII'))
        self.assertEqual(19, roman_decode('XIX'))

        # 2x
        self.assertEqual(21, roman_decode('XXI'))
        self.assertEqual(22, roman_decode('XXII'))
        self.assertEqual(23, roman_decode('XXIII'))
        self.assertEqual(24, roman_decode('XXIV'))
        self.assertEqual(25, roman_decode('XXV'))
        self.assertEqual(26, roman_decode('XXVI'))
        self.assertEqual(27, roman_decode('XXVII'))
        self.assertEqual(28, roman_decode('XXVIII'))
        self.assertEqual(29, roman_decode('XXIX'))

        # 3x
        self.assertEqual(31, roman_decode('XXXI'))
        self.assertEqual(32, roman_decode('XXXII'))
        self.assertEqual(33, roman_decode('XXXIII'))
        self.assertEqual(34, roman_decode('XXXIV'))
        self.assertEqual(35, roman_decode('XXXV'))
        self.assertEqual(36, roman_decode('XXXVI'))
        self.assertEqual(37, roman_decode('XXXVII'))
        self.assertEqual(38, roman_decode('XXXVIII'))
        self.assertEqual(39, roman_decode('XXXIX'))

        # 4x
        self.assertEqual(41, roman_decode('XLI'))
        self.assertEqual(42, roman_decode('XLII'))
        self.assertEqual(43, roman_decode('XLIII'))

# Path: string_utils/manipulation.py
# def roman_decode(input_string: str) -> int:
#     """
#     Decode a roman number string into an integer if the provided string is valid.
# 
#     *Example:*
# 
#     >>> roman_decode('VII') # returns 7
# 
#     :param input_string: (Assumed) Roman number
#     :type input_string: str
#     :return: Integer value
#     """
#     return __RomanNumbers.decode(input_string)


# Path: tests/test_roman_decode.py
from unittest import TestCase
from string_utils.manipulation import roman_decode

        self.assertEqual(17, roman_decode('XVII'))
        self.assertEqual(18, roman_decode('XVIII'))
        self.assertEqual(19, roman_decode('XIX'))

        # 2x
        self.assertEqual(21, roman_decode('XXI'))
        self.assertEqual(22, roman_decode('XXII'))
        self.assertEqual(23, roman_decode('XXIII'))
        self.assertEqual(24, roman_decode('XXIV'))
        self.assertEqual(25, roman_decode('XXV'))
        self.assertEqual(26, roman_decode('XXVI'))
        self.assertEqual(27, roman_decode('XXVII'))
        self.assertEqual(28, roman_decode('XXVIII'))
        self.assertEqual(29, roman_decode('XXIX'))

        # 3x
        self.assertEqual(31, roman_decode('XXXI'))
        self.assertEqual(32, roman_decode('XXXII'))
        self.assertEqual(33, roman_decode('XXXIII'))
        self.assertEqual(34, roman_decode('XXXIV'))
        self.assertEqual(35, roman_decode('XXXV'))
        self.assertEqual(36, roman_decode('XXXVI'))
        self.assertEqual(37, roman_decode('XXXVII'))
        self.assertEqual(38, roman_decode('XXXVIII'))
        self.assertEqual(39, roman_decode('XXXIX'))

        # 4x
        self.assertEqual(41, roman_decode('XLI'))
        self.assertEqual(42, roman_decode('XLII'))
        self.assertEqual(43, roman_decode('XLIII'))

        self.assertEqual(44, roman_decode('XLIV'))