#%%
from extractor import NumberExtractor


def extractor():
    return NumberExtractor()


tests = [
    (
        "Я купил сорок пять килограмм картошки и 7 пудов моркови",
        "Я купил 45 килограмм картошки и 7 пудов моркови",
        [1, 1, 2, 1, 1, 1, 1, 1, 1],
    ),
    (
        "Выплаты за второго-третьего ребенка выросли на девять сотых процента",
        "Выплаты за 2-3 ребенка выросли на 0.09 процента",
        [1, 1, 1, 1, 1, 1, 2, 1],
    ),
    (
        "Девятьсот восемьдесят семь тысяч шестьсот пятьдесят четыре минус 321",
        "987654 минус 321",
        [7, 1, 1],
    ),
    (
        "Госдолг США в тысяча девятьсот пятидесятом году составил двести пятьдесят шесть миллиардов девятьсот миллионов долларов",
        "Госдолг США в 1950 году составил 256900000000 долларов",
        [1, 1, 1, 3, 1, 1, 6, 1],
    ),
    ("Один два три четыре пять", "1 2 3 4 5", [1, 1, 1, 1, 1]),
    ("Четыре три два один", "4 3 2 1", [1, 1, 1, 1]),
    ("", "", []),
    ("тридцать три", "33", [2]),
    ("тридцать пять один", "35 1", [2, 1]),
    ("десять два", "10 2", [1, 1]),
    ("два десять", "2 10", [1, 1]),
    ("семьсот двадцать один тридцать", "721 30", [3, 1]),
    ("шестьсот одиннадцать два два три", "611 2 2 3", [2, 1, 1, 1]),
    (
        "семьсот миллиардов один рубль, один, два, три три",
        "700000000001 рубль, 1, 2, 3 3",
        [3, 1, 1, 1, 1, 1],
    ),
    ("пять ноль шесть ноль ноль семь", "5 0 6 0 0 7", [1, 1, 1, 1, 1, 1]),
    (
        "мой телефон девятьсот десять ноль девяносто пять пятьдесят шесть десять",
        "мой телефон 910 0 95 56 10",
        [1, 1, 2, 1, 2, 2, 1],
    ),
    (
        "одна тысяча восемьсот тридцать первый и тысяча девятьсот пятьдесят четвертый",
        "1831 и 1954",
        [5, 1, 4],
    ),
    ("один, ,два", "1, ,2", [1, 1]),
    ("один  ,два", "1  ,2", [1, 1]),
    ("один, ,два три, четыре, пять", "1, ,2 3, 4, 5", [1, 1, 1, 1, 1]),
    ("один, ,два три, четыре,пять", "1, ,2 3, 4,5", [1, 1, 1, 1]),
    (
        "один два, тридцать три, пятьдесят пять,шестьдесят шесть сто двадцать четыре, привет как дела",
        "1 2, 33, 55,66 124, привет как дела",
        [1, 1, 2, 3, 3, 1, 1, 1],
    ),
    ("в этом предложении нет чисел", "в этом предложении нет чисел", [1, 1, 1, 1, 1]),
    ("", "", []),
]


def test_extractor(extractor, test):
    text, etalon, etalon_mask = test
    guess, mask = extractor.replace(text, apply_regrouping=True)
    assert guess == etalon
    assert sum(mask) == len(text.split())
    assert mask == etalon_mask


# %%
text = "Выплаты за второго-третьего ребенка выросли на пятьсот двадцать пять тысячных процента и составили 90 тысяч рублей"
extractor = NumberExtractor()

# %%
# print(extractor.replace_groups(text))
# %%
for test in tests:
    test_extractor(extractor, test)