Exemplo n.º 1
0
def check_diff_sequence_and_patch(a, b):
    d = diff_sequence(a, b)
    assert is_valid_diff(d)
    assert patch(a, d) == b
    d = diff_sequence(b, a)
    assert is_valid_diff(d)
    assert patch(b, d) == a
Exemplo n.º 2
0
def test_diff_sequence_bruteforce():
    examples = [
        ([], []),
        ([1], [1]),
        ([1, 2], [1, 2]),
        ([2, 1], [1, 2]),
        ([1, 2, 3], [1, 2]),
        ([2, 1, 3], [1, 2]),
        ([1, 2], [1, 2, 3]),
        ([2, 1], [1, 2, 3]),
        ([1, 2], [1, 2, 1, 2]),
        ([1, 2, 1, 2], [1, 2]),
        ([1, 2, 3, 4, 1, 2], [3, 4, 2, 3]),
        (list("abcab"), list("ayb")),
        (list("xaxcxabc"), list("abcy")),
    ]
    for a, b in examples:
        G = bruteforce_compare_grid(a, b)
        assert all(
            bool(G[i][j]) == (a[i] == b[j]) for i in range(len(a))
            for j in range(len(b)))

        R = bruteforce_llcs_grid(G)
        for i in range(len(a)):
            for j in range(len(b)):
                assert R[i + 1][j + 1] >= R[i][j]
                assert R[i + 1][j] >= R[i][j]
                assert R[i][j + 1] >= R[i][j]
                assert R[i + 1][j + 1] - R[i][j] <= 1
                assert R[i + 1][j] - R[i][j] <= 1
                assert R[i][j + 1] - R[i][j] <= 1
        llcs = R[len(a)][len(b)]

        A_indices, B_indices = bruteforce_lcs_indices(a, b, G, R)
        assert len(A_indices) == len(B_indices)
        assert len(A_indices) == llcs
        assert all(a[A_indices[r]] == b[B_indices[r]] for r in range(llcs))

        d = diff_from_lcs(a, b, A_indices, B_indices)
        assert is_valid_diff(d)
        assert patch(a, d) == b

        # Test combined function (repeats the above pieces)
        assert patch(a, diff_sequence_bruteforce(a, b)) == b
def test_diff_sequence_bruteforce():
    examples = [
        ([], []),
        ([1], [1]),
        ([1, 2], [1, 2]),
        ([2, 1], [1, 2]),
        ([1, 2, 3], [1, 2]),
        ([2, 1, 3], [1, 2]),
        ([1, 2], [1, 2, 3]),
        ([2, 1], [1, 2, 3]),
        ([1, 2], [1, 2, 1, 2]),
        ([1, 2, 1, 2], [1, 2]),
        ([1, 2, 3, 4, 1, 2], [3, 4, 2, 3]),
        (list("abcab"), list("ayb")),
        (list("xaxcxabc"), list("abcy")),
        ]
    for a, b in examples:
        G = bruteforce_compare_grid(a, b)
        assert all(bool(G[i][j]) == (a[i] == b[j]) for i in range(len(a)) for j in range(len(b)))

        R = bruteforce_llcs_grid(G)
        for i in range(len(a)):
            for j in range(len(b)):
                assert R[i+1][j+1] >= R[i][j]
                assert R[i+1][j] >= R[i][j]
                assert R[i][j+1] >= R[i][j]
                assert R[i+1][j+1] - R[i][j] <= 1
                assert R[i+1][j] - R[i][j] <= 1
                assert R[i][j+1] - R[i][j] <= 1
        llcs = R[len(a)][len(b)]

        A_indices, B_indices = bruteforce_lcs_indices(a, b, G, R)
        assert len(A_indices) == len(B_indices)
        assert len(A_indices) == llcs
        assert all(a[A_indices[r]] == b[B_indices[r]] for r in range(llcs))

        d = diff_from_lcs(a, b, A_indices, B_indices)
        assert is_valid_diff(d)
        assert patch(a, d) == b

        # Test combined function (repeats the above pieces)
        assert patch(a, diff_sequence_bruteforce(a, b)) == b
Exemplo n.º 4
0
def check_diff_and_patch(a, b):
    "Check that patch(a, diff(a,b)) reproduces b."
    d = diff(a, b)
    assert is_valid_diff(d)
    assert patch(a, d) == b
Exemplo n.º 5
0
def check_diff_and_patch(a, b):
    "Check that patch(a, diff(a,b)) reproduces b."
    d = diff(a, b)
    assert is_valid_diff(d)
    assert patch(a, d) == b