from __future__ import division, print_function

import math

from .. import word_error_rate, words


def test_words():
    result = list(
        words("Der schnelle [„braune“] Fuchs kann keine 3,14 Meter springen, oder?")
    )
    expected = [
        "Der",
        "schnelle",
        "braune",
        "Fuchs",
        "kann",
        "keine",
        "3,14",
        "Meter",
        "springen",
        "oder",
    ]
    assert result == expected


def test_words_private_use_area():
    result = list(
        words(
            "ber die vielen Sorgen wegen deelben vergaß Hartkopf, der Frau Amtmnnin das ver⸗\n"
            "ſproene zu berliefern."
        )
    )
    expected = [
        "ber",
        "die",
        "vielen",
        "Sorgen",
        "wegen",
        "deelben",
        "vergaß",
        "Hartkopf",
        "der",
        "Frau",
        "Amtmnnin",
        "das",
        "ver",
        "ſproene",
        "zu",
        "berliefern",
    ]
    assert result == expected


def test_word_error_rate():
    assert (
        word_error_rate("Dies ist ein Beispielsatz!", "Dies ist ein Beispielsatz!") == 0
    )
    assert (
        word_error_rate("Dies. ist ein Beispielsatz!", "Dies ist ein Beispielsatz!")
        == 0
    )
    assert (
        word_error_rate("Dies. ist ein Beispielsatz!", "Dies ist ein Beispielsatz.")
        == 0
    )

    assert (
        word_error_rate("Dies ist ein Beispielsatz!", "Dies ist ein Beispielsarz:")
        == 1 / 4
    )
    assert (
        word_error_rate("Dies ist ein Beispielsatz!", "Dies ein ist Beispielsatz!")
        == 2 / 4
    )

    assert word_error_rate("Dies ist ein Beispielsatz!", "") == 4 / 4
    assert math.isinf(word_error_rate("", "Dies ist ein Beispielsatz!"))
    assert word_error_rate("", "") == 0

    assert (
        word_error_rate(
            "Schlyñ lorem ipsum dolor sit amet,", "Schlym̃ lorem ipsum dolor sit amet."
        )
        == 1 / 6
    )
