RapidFuzz/tests/distance/test_init.py

199 lines
4.5 KiB
Python

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import unittest
import pytest
from rapidfuzz.distance import Levenshtein, Editops, Opcodes
def test_editops_comparision():
"""
test comparision with Editops
"""
ops = Levenshtein.editops("aaabaaa", "abbaaabba")
assert ops == ops
assert not (ops != ops)
assert ops == ops.copy()
assert not (ops != ops.copy())
def test_editops_get_index():
"""
test __getitem__ with index of Editops
"""
ops = Editops(
[
("delete", 1, 1),
("replace", 2, 1),
("insert", 6, 5),
("insert", 6, 6),
("insert", 6, 7),
],
7,
9,
)
ops_list = [
("delete", 1, 1),
("replace", 2, 1),
("insert", 6, 5),
("insert", 6, 6),
("insert", 6, 7),
]
assert ops[0] == ops_list[0]
assert ops[1] == ops_list[1]
assert ops[2] == ops_list[2]
assert ops[3] == ops_list[3]
assert ops[4] == ops_list[4]
assert ops[-1] == ops_list[-1]
assert ops[-2] == ops_list[-2]
assert ops[-3] == ops_list[-3]
assert ops[-4] == ops_list[-4]
assert ops[-5] == ops_list[-5]
with pytest.raises(IndexError):
ops[5]
with pytest.raises(IndexError):
ops[-6]
def test_editops_inversion():
"""
test correct inversion of Editops
"""
ops = Editops(
[
("delete", 1, 1),
("replace", 2, 1),
("insert", 6, 5),
("insert", 6, 6),
("insert", 6, 7),
],
7,
9,
)
assert ops.inverse().as_list() == [
("insert", 1, 1),
("replace", 1, 2),
("delete", 5, 6),
("delete", 6, 6),
("delete", 7, 6),
]
def test_opcodes_comparision():
"""
test comparision with Opcodes
"""
ops = Levenshtein.opcodes("aaabaaa", "abbaaabba")
assert ops == ops
assert not (ops != ops)
assert ops == ops.copy()
assert not (ops != ops.copy())
def test_opcode_get_index():
"""
test __getitem__ with index of Opcodes
"""
ops = Opcodes(
[
("equal", 0, 1, 0, 1),
("delete", 1, 2, 1, 1),
("replace", 2, 3, 1, 2),
("equal", 3, 6, 2, 5),
("insert", 6, 6, 5, 8),
("equal", 6, 7, 8, 9),
],
7,
9,
)
ops_list = [
("equal", 0, 1, 0, 1),
("delete", 1, 2, 1, 1),
("replace", 2, 3, 1, 2),
("equal", 3, 6, 2, 5),
("insert", 6, 6, 5, 8),
("equal", 6, 7, 8, 9),
]
assert ops[0] == ops_list[0]
assert ops[1] == ops_list[1]
assert ops[2] == ops_list[2]
assert ops[3] == ops_list[3]
assert ops[4] == ops_list[4]
assert ops[5] == ops_list[5]
assert ops[-1] == ops_list[-1]
assert ops[-2] == ops_list[-2]
assert ops[-3] == ops_list[-3]
assert ops[-4] == ops_list[-4]
assert ops[-5] == ops_list[-5]
assert ops[-6] == ops_list[-6]
with pytest.raises(IndexError):
ops[6]
with pytest.raises(IndexError):
ops[-7]
def test_opcode_inversion():
"""
test correct inversion of Opcodes
"""
ops = Opcodes(
[
("equal", 0, 1, 0, 1),
("delete", 1, 2, 1, 1),
("replace", 2, 3, 1, 2),
("equal", 3, 6, 2, 5),
("insert", 6, 6, 5, 8),
("equal", 6, 7, 8, 9),
],
7,
9,
)
assert ops.inverse().as_list() == [
("equal", 0, 1, 0, 1),
("insert", 1, 1, 1, 2),
("replace", 1, 2, 2, 3),
("equal", 2, 5, 3, 6),
("delete", 5, 8, 6, 6),
("equal", 8, 9, 6, 7),
]
def test_list_initialization():
"""
test whether list initialization works correctly
"""
ops = Levenshtein.opcodes("aaabaaa", "abbaaabba")
ops2 = Opcodes(ops.as_list(), ops.src_len, ops.dest_len)
assert ops == ops2
ops = Levenshtein.editops("aaabaaa", "abbaaabba")
ops2 = Editops(ops.as_list(), ops.src_len, ops.dest_len)
assert ops == ops2
ops = Levenshtein.opcodes("aaabaaa", "abbaaabba")
ops2 = Editops(ops.as_list(), ops.src_len, ops.dest_len)
assert ops.as_editops() == ops2
ops = Levenshtein.editops("aaabaaa", "abbaaabba")
ops2 = Opcodes(ops.as_list(), ops.src_len, ops.dest_len)
assert ops.as_opcodes() == ops2
ops = Levenshtein.editops("skdsakldsakdlasda", "djkajkdfkdgkhdfjrmecsidjf")
ops2 = Opcodes(ops.as_list(), ops.src_len, ops.dest_len)
assert ops.as_opcodes() == ops2
if __name__ == "__main__":
unittest.main()