def test_iterates_over_learned_strings(): upper_bound = bytes([1, 2]) learner = LStar(lambda s: len(s) == 2 and max(s) <= 5 and s <= upper_bound) learner.learn(upper_bound) prev = -1 while learner.generation != prev: prev = learner.generation learner.learn([1, 2, 0]) learner.learn([6, 1, 2]) learner.learn([1, 3]) for i in range(7): learner.learn([0, i]) learner.learn([1, i]) learner.learn([2, 0]) learner.learn([2, 0, 0, 0]) learner.learn([2, 0, 0]) learner.learn([0, 6, 0, 0]) learner.learn([1, 3, 0, 0]) learner.learn([1, 6, 0, 0]) learner.learn([0, 0, 0, 0, 0]) dfa = learner.dfa n = 9 matches = list(itertools.islice(dfa.all_matching_strings(), n + 1)) for m in matches: assert learner.member(m), list(m) assert len(matches) == n
def test_learning_always_changes_generation(chars, order): learner = LStar(lambda s: len(s) == 1 and s[0] in chars) for c in order: prev = learner.generation s = bytes([c]) if learner.dfa.matches(s) != learner.member(s): learner.learn(s) assert learner.generation > prev