Esempio n. 1
0
def test_infer():
    assert Alignment.infer('test', 'test') == Alignment.identity(4)
    assert Alignment.infer('asdf', 'jkl;') == Alignment.identity(4)

    assert Alignment.infer('color', 'colour') == Alignment([
        (0, 0),
        (1, 1),
        (2, 2),
        (3, 3),
        (4, 4),
        (4, 5),
        (5, 6),
    ])

    assert Alignment.infer('color',
                           'colour') == Alignment.infer('colour',
                                                        'color').inverse()

    assert Alignment.infer("ab---", "ab") == Alignment([
        (0, 0),
        (1, 1),
        (2, 2),
        (3, 2),
        (4, 2),
        (5, 2),
    ])
Esempio n. 2
0
def test_append():
    builder = BistrBuilder('hello WORLD')
    builder.append(bistr(builder.peek(5)).upper('en_US'))
    builder.skip(1)
    builder.append(bistr(builder.peek(5)).lower('en_US'))

    bs = builder.build()
    assert bs[1:4] == bistr('ell', 'ELL', Alignment.identity(3))
    assert bs[7:10] == bistr('ORL', 'orl', Alignment.identity(3))
Esempio n. 3
0
def test_canonicalization():
    assert Alignment([(0, 0), (1, 2), (1, 2), (2, 4)]) == Alignment([(0, 0),
                                                                     (1, 2),
                                                                     (2, 4)])

    assert Alignment([(0, 0),
                      (1, 2)]) + Alignment([(1, 2),
                                            (2, 4)]) == Alignment([(0, 0),
                                                                   (1, 2),
                                                                   (2, 4)])
Esempio n. 4
0
def test_identity():
    alignment = Alignment.identity(1, 16)

    assert alignment == Alignment((i, i) for i in range(1, 17))
    assert list(alignment) == [(i, i) for i in range(1, 17)]

    assert alignment.original_bounds() == (1, 16)
    assert alignment.modified_bounds() == (1, 16)

    assert alignment.original_bounds(4, 7) == (4, 7)
    assert alignment.modified_bounds(4, 7) == (4, 7)
Esempio n. 5
0
def test_compose_identity():
    alignment = Alignment([
        (0, 2),
        (2, 2),
        (4, 4),
        (6, 6),
        (8, 6),
    ])

    # Modified sequence is smaller
    _test_identity_composition(alignment)

    # Original sequence is smaller
    _test_identity_composition(alignment.inverse())
Esempio n. 6
0
def test_capitalize():
    bs = bistr('hello WORLD').capitalize('en_US')
    assert bs.original == 'hello WORLD'
    assert bs.modified == 'Hello world'
    assert bs.alignment == Alignment.identity(11)

    bs = bistr('τελικός').capitalize('el_GR')
    assert bs.original == 'τελικός'
    assert bs.modified == 'Τελικός'
    assert bs.alignment == Alignment.identity(7)

    bs = bistr('ἴΣ').capitalize('el_GR')
    assert bs.original == 'ἴΣ'
    assert bs.modified == 'Ἴς'
    assert bs.alignment == Alignment.identity(2)
Esempio n. 7
0
def test_swapcase():
    bs = bistr('hello WORLD').swapcase('en_US')
    assert bs.original == 'hello WORLD'
    assert bs.modified == 'HELLO world'
    assert bs.alignment == Alignment.identity(11)

    # Ligatures/digraphs in title case don't have a swapped form
    bs = bistr('Ljepòta').swapcase('hr_HR')
    assert bs.original == 'Ljepòta'
    assert bs.modified == 'LjEPÒTA'
    assert bs.alignment == Alignment.identity(6)

    bs = bistr('Ljepòta').normalize('NFKC').swapcase('hr_HR')
    assert bs.original == 'Ljepòta'
    assert bs.modified == 'lJEPÒTA'
    assert bs[0:2] == bistr('Lj', 'lJ')
Esempio n. 8
0
def test_infer():
    bs = bistr.infer('test', 'test')
    assert bs == bistr('test', 'test', Alignment.identity(4))

    bs = bistr.infer('color', 'colour')
    assert bs[3:5].original == 'o'

    assert bs.inverse() == bistr.infer('colour', 'color')
Esempio n. 9
0
def test_infer():
    bs = bistr.infer('test', 'test')
    assert bs == bistr('test', 'test', Alignment.identity(4))

    bs = bistr.infer('color', 'colour')
    assert bs[3:5].original == 'o'

    assert bs.inverse() == bistr.infer('colour', 'color')

    bs = bistr.infer("--Hello, world!--", "hello world")
    assert bs[:5] == bistr("Hello", "hello", Alignment.identity(5))
    assert bs[6:] == bistr("world")

    bs = bistr.infer(
        '🅃🄷🄴 🅀🅄🄸🄲🄺, 🄱🅁🄾🅆🄽 🦊 🄹🅄🄼🄿🅂 🄾🅅🄴🅁 🅃🄷🄴 🄻🄰🅉🅈 🐶',
        'the quick brown fox jumps over the lazy dog',
    )
    assert bs[0:3] == bistr('🅃🄷🄴', 'the', Alignment.identity(3))
    assert bs[4:9] == bistr('🅀🅄🄸🄲🄺', 'quick', Alignment.identity(5))
    assert bs[10:15] == bistr('🄱🅁🄾🅆🄽', 'brown', Alignment.identity(5))
    assert bs[16:19].original == '🦊'
    assert bs[16:19].modified == 'fox'
    assert bs[20:25] == bistr('🄹🅄🄼🄿🅂', 'jumps', Alignment.identity(5))
    assert bs[40:43].original == '🐶'
    assert bs[40:43].modified == 'dog'

    bs = bistr.infer(
        'Ṫḧë qüïċḳ, ḅṛöẅṅ 🦊 jüṁṗṡ öṿëṛ ẗḧë ḷäżÿ 🐶',
        'the quick brown fox jumps over the lazy dog',
    )
    assert bs[0:3] == bistr('Ṫḧë', 'the', Alignment.identity(3))
    assert bs[4:9] == bistr('qüïċḳ', 'quick', Alignment.identity(5))
    assert bs[10:15] == bistr('ḅṛöẅṅ', 'brown', Alignment.identity(5))
    assert bs[16:19].original == '🦊'
    assert bs[16:19].modified == 'fox'
    assert bs[20:25] == bistr('jüṁṗṡ', 'jumps', Alignment.identity(5))
    assert bs[40:43].original == '🐶'
    assert bs[40:43].modified == 'dog'

    bs = bistr.infer(
        'Z̴̡̪̫̖̥̔̿̃̈̏̎͠͝á̸̪̠̖̻̬̖̪̞͙͇̮̠͎̆͋́̐͌̒͆̓l̶͉̭̳̤̬̮̩͎̟̯̜͇̥̠̘͑͐̌͂̄́̀̂̌̈͛̊̄̚͜ģ̸̬̼̞̙͇͕͎̌̾̒̐̿̎̆̿̌̃̏̌́̾̈͘͜o̶̢̭͕͔̩͐ ̴̡̡̜̥̗͔̘̦͉̣̲͚͙̐̈́t̵͈̰̉̀͒̎̈̿̔̄̽͑͝͠ẹ̵̫̲̫̄͜͜x̵͕̳͈̝̤̭̼̼̻͓̿̌̽̂̆̀̀̍̒͐́̈̀̚͝t̸̡̨̥̺̣̟͎̝̬̘̪͔͆́̄̅̚',
        'Zalgo text')
    for i, c in enumerate(bs):
        assert bs[i:i + 1].original.startswith(c)
Esempio n. 10
0
def test_empty():
    pytest.raises(ValueError, Alignment, [])

    alignment = Alignment.identity(0)
    assert list(alignment) == [(0, 0)]

    assert alignment.original_bounds() == (0, 0)
    assert alignment.modified_bounds() == (0, 0)

    assert alignment.original_bounds(0, 0) == (0, 0)
    assert alignment.modified_bounds(0, 0) == (0, 0)
Esempio n. 11
0
def test_new():
    pytest.raises(TypeError, bistr, 42)
    pytest.raises(TypeError, bistr, 'fourty-two', 42)
    pytest.raises(TypeError, bistr, 'fourty-two', '42', 42)

    pytest.raises(ValueError, bistr, 'fourty-two', '42', Alignment([
        (0, 0),
        (9, 2),
    ]))
    pytest.raises(ValueError, bistr, 'fourty-two', '42', Alignment([
        (0, 0),
        (10, 1),
    ]))

    bistr('42')
    bistr('fourty-two', '42')
    bistr('fourty-two', '42', Alignment([
        (0, 0),
        (6, 1),
        (7, 1),
        (10, 2),
    ]))
Esempio n. 12
0
def test_indexing():
    data = [
        (0, 1),
        (1, 2),
        (2, 4),
        (3, 8),
        (4, 16),
    ]
    length = len(data)
    alignment = Alignment(data)

    assert len(alignment) == length

    for i in range(length):
        assert alignment[i] == data[i]
        assert alignment[i - length] == data[i - length]

        for j in range(i + 1, length + 1):
            assert list(alignment[i:j]) == data[i:j]
Esempio n. 13
0
def test_equality():
    bs1 = bistr('  Hello world  ').strip().casefold()
    bs2 = bistr('  Hello world  ', 'hello world', Alignment([
        (0, 0),
        (2, 0),
        (3, 1),
        (4, 2),
        (5, 3),
        (6, 4),
        (7, 5),
        (8, 6),
        (9, 7),
        (10, 8),
        (11, 9),
        (12, 10),
        (13, 11),
        (15, 11),
    ]))
    assert bs1 == bs2
Esempio n. 14
0
def _test_identity_composition(alignment):
    _test_composition(alignment, Alignment.identity(alignment.modified_range()))
    _test_composition(Alignment.identity(alignment.original_range()), alignment)
Esempio n. 15
0
def test_compose():
    first = Alignment((i, 2 * i) for i in range(4))
    second = Alignment((i, 2 * i) for i in range(7))
    _test_composition(first, second)
Esempio n. 16
0
def test_aligning():
    alignment = Alignment([(0, 0), (1, 2), (2, 4), (3, 6)])

    assert alignment.original_bounds() == (0, 3)
    assert alignment.modified_bounds() == (0, 6)

    assert alignment.original_bounds(0, 0) == (0, 0)
    assert alignment.original_bounds(0, 1) == (0, 1)
    assert alignment.original_bounds(0, 2) == (0, 1)
    assert alignment.original_bounds(0, 3) == (0, 2)
    assert alignment.original_bounds(1, 1) == (0, 1)
    assert alignment.original_bounds(1, 3) == (0, 2)
    assert alignment.original_bounds(1, 4) == (0, 2)
    assert alignment.original_bounds(2, 2) == (1, 1)
    assert alignment.original_bounds(2, 4) == (1, 2)
    assert alignment.original_bounds(2, 5) == (1, 3)
    assert alignment.original_bounds(3, 3) == (1, 2)

    assert alignment.modified_bounds(0, 0) == (0, 0)
    assert alignment.modified_bounds(0, 1) == (0, 2)
    assert alignment.modified_bounds(0, 2) == (0, 4)
    assert alignment.modified_bounds(0, 3) == (0, 6)
    assert alignment.modified_bounds(1, 1) == (2, 2)
    assert alignment.modified_bounds(2, 2) == (4, 4)