Пример #1
0
def test_bounds_propagate_through_intersections():
    x = rd.star(rd.char(b'\0\1'))
    y = rd.star(rd.char(b'\1\2'))
    assert isinstance(
        rd.bounded(rd.intersection(x, y), 3),
        rd.Intersection
    )
Пример #2
0
def test_merges_multiple_subtracts():
    x = rd.star(rd.char(b'012'))
    y = rd.star(rd.char(b'0'))
    z = rd.star(rd.char(b'1'))

    t = rd.subtract(rd.subtract(x, y), z)
    assert t is rd.subtract(x, rd.union(y, z))

    t = rd.subtract(x, rd.subtract(y, z))
    assert t.nullable
    assert isinstance(t, rd.Union)
Пример #3
0
def test_bounds_propagate_through_subtraction():
    x = rd.star(rd.char(b'\0\1'))
    y = rd.literal(b'\0\0\0\1')
    z = rd.subtract(x, y)
    b = rd.bounded(z, 10)
    assert isinstance(b, rd.Subtraction)
    assert isinstance(b.left, rd.Bounded)
Пример #4
0
def test_bounds_are_not_nested():
    x = rd.bounded(rd.star(rd.char(0)), 7)
    y = rd.bounded(x, 5)

    assert x.bound == 7
    assert y.bound == 5
    assert isinstance(y.child, rd.Star)
Пример #5
0
def test_derivatives_of_intersection():
    x = rd.star(rd.char(b'\0\1'))
    y = rd.star(rd.literal(b'\0\1'))
    z = rd.intersection(x, y)
    d1 = rd.derivative(z, 0)
    d2 = rd.derivative(d1, 1)
    assert d2 is z
Пример #6
0
def test_difference_of_same_is_none():
    x = rd.char(0)
    assert rd.witness_difference(x, x) is None
Пример #7
0
def test_valid_starts_of_subtraction():
    x = rd.star(rd.char(b'\0\1'))
    y = rd.char(b'\1')
    z = rd.subtract(x, y)
    assert rd.valid_starts(z) == pset([0, 1])
Пример #8
0
def test_removes_empty_from_unions():
    c = rd.char(0)
    assert c is rd.union(rd.Empty, c)
Пример #9
0
def test_two_phase_dfa():
    re = rd.concatenate(rd.star(rd.char(0)), rd.star(rd.char(1)))
    accepting, transitions = rd.build_dfa(re)
    assert accepting == [True, True]
    assert transitions == [{0: 0, 1: 1}, {1: 1}]
Пример #10
0
def test_complex_graphs_may_be_finite():
    x = to_basic(rd.bounded(
        rd.union(rd.star(rd.char(0)), rd.star(rd.char(1))), 20))

    assert not rd.is_infinite(x)
Пример #11
0
def test_can_walk_graph_for_infintiy():
    assert rd.is_infinite(rd.intersection(
        rd.star(rd.char(b'01')), rd.star(rd.char(b'12'))
    ))
Пример #12
0
def test_basic_finite_are_not_infinite():
    assert not rd.is_infinite(rd.Epsilon)
    assert not rd.is_infinite(rd.char(0))
Пример #13
0
def test_empty_subtraction_is_identity():
    x = rd.char(0)
    assert rd.subtract(x, rd.Empty) is x
Пример #14
0
def test_self_subtraction_is_empty():
    x = rd.char(0)
    assert rd.subtract(x, x) is rd.Empty
Пример #15
0
def test_rebalances_concatenation():
    x = rd.char(0)
    y = rd.star(rd.char(1))
    z = rd.char(2)
    assert rd.concatenate(x, rd.concatenate(y, z)) is \
        rd.concatenate(rd.concatenate(x, y), z)
Пример #16
0
def test_single_concatenation_is_self():
    assert rd.concatenate(rd.char(0)) is rd.char(0)
Пример #17
0
def test_valid_starts_of_nullable_cat():
    x = rd.concatenate(rd.star(rd.char(0)), rd.char(1))
    assert rd.valid_starts(x) == pset([0, 1])
Пример #18
0
def test_self_intersection_is_identity():
    x = rd.char(0)
    assert rd.intersection(x, x, x) is x
Пример #19
0
def test_epsilon_prunes_down_intersections():
    assert rd.intersection(rd.Epsilon, rd.star(rd.char(0))) is rd.Epsilon
    assert rd.intersection(rd.Epsilon, rd.char(0)) is rd.Empty
Пример #20
0
def test_difference_of_epsilon_and_non_nullable_is_epsilon():
    assert rd.witness_difference(rd.char(0), rd.Epsilon) is b''
Пример #21
0
def test_lexmin_of_star_is_empty():
    assert rd.lexmin(rd.star(rd.char(b'0'))) is b''
Пример #22
0
def test_subtraction_from_empty_is_empty():
    x = rd.char(0)
    assert rd.subtract(rd.Empty, x) is rd.Empty
Пример #23
0
def test_union_of_infinite_and_finite_is_infinite():
    assert rd.is_infinite(rd.union(rd.char(1), rd.star(rd.char(0))))
Пример #24
0
def test_subtraction_from_epsilon_checks_nullability():
    assert rd.subtract(rd.Epsilon, rd.char(0)) is rd.Epsilon
    assert rd.subtract(rd.Epsilon, rd.star(rd.char(0))) is rd.Empty
Пример #25
0
def test_bounded_is_not_infinite():
    assert not rd.is_infinite(rd.bounded(rd.star(rd.char(0)), 10 ** 6))
Пример #26
0
def test_flattens_unions():
    x = rd.star(rd.char(0))
    y = rd.star(rd.char(1))
    z = rd.star(rd.char(2))
    assert rd.union(x, rd.union(y, z)) is rd.union(rd.union(x, z), y)
Пример #27
0
def test_non_empty_star_dfa():
    accepting, _ = rd.build_dfa(rd.nonempty(rd.star(rd.char(0))))
    assert accepting == [False, True]
Пример #28
0
def test_derivatives_of_unions():
    assert rd.derivative(
        rd.union(rd.star(rd.char(0)), rd.star(rd.char(1))), 0
    ) is rd.star(rd.char(0))
Пример #29
0
def test_trival_dfa_from_intersection():
    assert rd.build_dfa(
        rd.intersection(rd.char(b'\x00'), rd.char(b'\x00\x01'))) == (
        [False, True], [{0: 1}, {}]
    )
Пример #30
0
def test_flattens_intersections():
    x = rd.star(rd.char(b'01'))
    y = rd.star(rd.char(b'02'))
    z = rd.star(rd.char(b'03'))
    assert rd.intersection(x, rd.intersection(y, z)) is \
        rd.intersection(rd.intersection(x, z), y)