def test_lexmin_of_mutated_regex_is_refutation(x, data): assume(rd.has_matches(x)) accepting, transitions = rd.build_dfa(x) j = data.draw(st.integers(0, len(accepting) - 1)) assume(transitions[j]) c = data.draw(st.sampled_from(sorted(transitions[j]))) transitions[j][c] = data.draw(st.integers(0, len(accepting) - 1)) y = rd.decompile_dfa(accepting, transitions) assume(rd.has_matches(y)) assume(not rd.equivalent(x, y)) w = rd.lexmin(symdiff(x, y)) assert w is not None assert w == rd.witness_difference(x, y)
def test_no_refutation_for_decompilation(re): dec = rd.decompile_dfa(*rd.build_dfa(re)) assert rd.witness_difference(dec, re) is None
def test_lexmin_of_symmetric_difference_is_refutation(x, y): assume(not rd.equivalent(x, y)) w = rd.lexmin(symdiff(x, y)) assert w is not None assert w == rd.witness_difference(x, y)
def test_witness_difference_of_literals_is_smaller_of_two(): assert rd.witness_difference(rd.literal(b'00'), rd.literal(b'01')) == b'00'
def test_difference_of_epsilon_and_non_nullable_is_epsilon(): assert rd.witness_difference(rd.char(0), rd.Epsilon) is b''
def test_difference_of_same_is_none(): x = rd.char(0) assert rd.witness_difference(x, x) is None