File: test_from_string.py

package info (click to toggle)
roman-numerals 4.1.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 236 kB
  • sloc: python: 393; sh: 6; makefile: 2
file content (62 lines) | stat: -rw-r--r-- 1,860 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
import pytest

from roman_numerals import (
    InvalidRomanNumeralError,
    RomanNumeral,
)

from tests.utils import TEST_NUMERALS_LOWER, TEST_NUMERALS_UPPER


@pytest.mark.parametrize(('n', 'roman_str'), enumerate(TEST_NUMERALS_UPPER, start=1))
def test_uppercase(n: int, roman_str: str) -> None:
    expected = RomanNumeral(n)
    parsed = RomanNumeral.from_string(roman_str)
    assert expected == parsed


@pytest.mark.parametrize(('n', 'roman_str'), enumerate(TEST_NUMERALS_LOWER, start=1))
def test_lowercase(n: int, roman_str: str) -> None:
    expected = RomanNumeral(n)
    parsed = RomanNumeral.from_string(roman_str)
    assert expected == parsed


def test_special() -> None:
    parsed = RomanNumeral.from_string('MDLXXXIII')
    assert RomanNumeral(1583) == parsed

    parsed = RomanNumeral.from_string('mdlxxxiii')
    assert RomanNumeral(1583) == parsed

    parsed = RomanNumeral.from_string('MCMLXXXIV')
    assert RomanNumeral(1984) == parsed

    parsed = RomanNumeral.from_string('mcmlxxxiv')
    assert RomanNumeral(1984) == parsed

    parsed = RomanNumeral.from_string('MM')
    assert RomanNumeral(2000) == parsed

    parsed = RomanNumeral.from_string('mm')
    assert RomanNumeral(2000) == parsed

    parsed = RomanNumeral.from_string('MMMCMXCIX')
    assert RomanNumeral(3_999) == parsed

    parsed = RomanNumeral.from_string('mmmcmxcix')
    assert RomanNumeral(3_999) == parsed


def test_invalid() -> None:
    with pytest.raises(InvalidRomanNumeralError) as ctx:
        RomanNumeral.from_string('Not a Roman numeral!')
    msg = str(ctx.value)
    assert msg == 'Invalid Roman numeral: Not a Roman numeral!'


def test_mixed_case() -> None:
    with pytest.raises(InvalidRomanNumeralError) as ctx:
        RomanNumeral.from_string('McMlXxXiV')
    msg = str(ctx.value)
    assert msg == 'Invalid Roman numeral: McMlXxXiV'