def test_learns_to_bridge_only_two_with_overlap(): u = [50, 0, 0, 0, 50] v = [50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50] def test_function(data): for i in range(len(u)): c = data.draw_bits(8) if c != u[i]: if c != v[i]: return break else: data.mark_interesting() for j in range(i + 1, len(v)): if data.draw_bits(8) != v[j]: return data.mark_interesting() runner = ConjectureRunner(test_function, settings=settings(database=None), ignore_limits=True) dfa = dfas.learn_a_new_dfa( runner, u, v, lambda d: d.status == Status.INTERESTING, ) assert list(islice(dfa.all_matching_strings(), 3)) == [b"", bytes(len(v) - len(u))]
def test_learns_to_bridge_only_two_with_suffix(): u = [7] v = [0] * 10 + [7] def test_function(data): n = data.draw_bits(8) if n == 7: data.mark_interesting() elif n != 0: return for _ in range(9): if data.draw_bits(8) != 0: return if data.draw_bits(8) == 7: data.mark_interesting() runner = ConjectureRunner(test_function, settings=settings(database=None), ignore_limits=True) dfa = dfas.learn_a_new_dfa( runner, u, v, lambda d: d.status == Status.INTERESTING, ) assert list(islice(dfa.all_matching_strings(), 3)) == [b"", bytes(len(v) - len(u))]
def test_learns_to_bridge_only_two(): def test_function(data): m = data.draw_bits(8) n = data.draw_bits(8) if (m, n) in ((10, 100), (2, 8)): data.mark_interesting() runner = ConjectureRunner(test_function, settings=settings(database=None), ignore_limits=True) dfa = dfas.learn_a_new_dfa( runner, [10, 100], [2, 8], lambda d: d.status == Status.INTERESTING, ) assert dfa.max_length(dfa.start) == 2 assert list(map(list, dfa.all_matching_strings())) == [ [2, 8], [10, 100], ]