from spacy.util import align_tokens


def test_perfect_align():
    ref = ['I', 'align', 'perfectly']
    indices = []
    i = 0
    for token in ref:
        indices.append((i, i + len(token)))
        i += len(token)
    aligned = list(align_tokens(ref, indices))
    assert aligned[0] == ('I', [(0, 1)])
    assert aligned[1] == ('align', [(1, 6)])
    assert aligned[2] == ('perfectly', [(6, 15)])


def test_hyphen_align():
    ref = ['I', 'must', 're-align']
    indices = [(0, 1), (1, 5), (5, 7), (7, 8), (8, 13)]
    aligned = list(align_tokens(ref, indices))
    assert aligned[0] == ('I', [(0, 1)])
    assert aligned[1] == ('must', [(1, 5)])
    assert aligned[2] == ('re-align', [(5, 7), (7, 8), (8, 13)])


def test_align_continue():
    ref = ['I', 'must', 're-align', 'and', 'continue']
    indices = [(0, 1), (1, 5), (5, 7), (7, 8), (8, 13), (13, 16), (16, 24)]
    aligned = list(align_tokens(ref, indices))
    assert aligned[2] == ('re-align', [(5, 7), (7, 8), (8, 13)])
    assert aligned[3] == ('and', [(13, 16)])
    assert aligned[4] == ('continue', [(16, 24)])
