def test_garbage_collects_the_database(): key = b'hi there' n = 200 db = ExampleDatabase(':memory:') assert list(db.fetch(key)) == [] seen = set() go = True def f(data): x = hbytes(data.draw_bytes(512)) if not go: return if sum(x) >= 5000 and len(seen) < n: seen.add(x) if x in seen: data.mark_interesting() runner = TestRunner(f, settings=settings(database=db, max_shrinks=2 * n), database_key=key) runner.run() assert runner.last_data.status == Status.INTERESTING assert len(seen) == n assert set(db.fetch(key)) == seen go = False runner = TestRunner(f, settings=settings(database=db, max_shrinks=2 * n), database_key=key) runner.run() assert 0 < len(set(db.fetch(key))) < n
def test_garbage_collects_the_database(): key = b'hi there' n = 200 db = ExampleDatabase(':memory:') assert list(db.fetch(key)) == [] seen = set() go = True def f(data): x = hbytes(data.draw_bytes(512)) if not go: return if sum(x) >= 5000 and len(seen) < n: seen.add(x) if x in seen: data.mark_interesting() runner = TestRunner( f, settings=settings(database=db, max_shrinks=2 * n), database_key=key) runner.run() assert runner.last_data.status == Status.INTERESTING assert len(seen) == n assert set(db.fetch(key)) == seen go = False runner = TestRunner( f, settings=settings(database=db, max_shrinks=2 * n), database_key=key) runner.run() assert 0 < len(set(db.fetch(key))) < n
def test_database_not_created_when_not_used(tmp_path_factory, key, value): path = tmp_path_factory.mktemp("hypothesis") / "examples" assert not os.path.exists(str(path)) database = ExampleDatabase(path) assert not list(database.fetch(key)) assert not os.path.exists(str(path)) database.save(key, value) assert os.path.exists(str(path)) assert list(database.fetch(key)) == [value]
def test_saves_data_while_shrinking(): key = b'hi there' n = 5 db = ExampleDatabase(':memory:') assert list(db.fetch(key)) == [] seen = set() def f(data): x = data.draw_bytes(512) if sum(x) >= 5000 and len(seen) < n: seen.add(hbytes(x)) if hbytes(x) in seen: data.mark_interesting() runner = ConjectureRunner( f, settings=settings(database=db), database_key=key) runner.run() assert runner.last_data.status == Status.INTERESTING assert len(seen) == n in_db = set( v for vs in db.data.values() for v in vs ) assert in_db.issubset(seen) assert in_db == seen
def test_saves_data_while_shrinking(): key = b'hi there' n = 5 db = ExampleDatabase(':memory:') assert list(db.fetch(key)) == [] seen = set() def f(data): x = data.draw_bytes(512) if sum(x) >= 5000 and len(seen) < n: seen.add(hbytes(x)) if hbytes(x) in seen: data.mark_interesting() runner = ConjectureRunner( f, settings=settings(database=db), database_key=key) runner.run() assert runner.last_data.status == Status.INTERESTING assert len(seen) == n in_db = set( v for vs in db.data.values() for v in vs ) assert in_db.issubset(seen) assert in_db == seen
def test_garbage_collects_the_database(): key = b'hi there' n = 200 db = ExampleDatabase(':memory:') assert list(db.fetch(key)) == [] seen = set() go = True counter = [0] def f(data): """This function is designed to shrink very badly. So we only occasionally mark things as interesting, and require a certain amount of complexity to do so. """ x = hbytes(data.draw_bytes(512)) if not go: return if counter[0] % 10 == 0 and len(seen) < n and sum(x) > 1000: seen.add(x) counter[0] += 1 if x in seen: data.mark_interesting() local_settings = settings(database=db, max_shrinks=2 * n, timeout=unlimited) runner = ConjectureRunner(f, settings=local_settings, database_key=key) runner.run() assert runner.last_data.status == Status.INTERESTING assert len(seen) == n assert set(db.fetch(key)) == seen go = False runner = ConjectureRunner(f, settings=local_settings, database_key=key) runner.run() assert 0 < len(set(db.fetch(key))) < n
def test_can_load_data_from_a_corpus(): key = b'hi there' db = ExampleDatabase() value = b'=\xc3\xe4l\x81\xe1\xc2H\xc9\xfb\x1a\xb6bM\xa8\x7f' db.save(key, value) def f(data): if data.draw_bytes(len(value)) == value: data.mark_interesting() runner = ConjectureRunner( f, settings=settings(database=db), database_key=key) runner.run() last_data, = runner.interesting_examples.values() assert last_data.buffer == value assert len(list(db.fetch(key))) == 1
def test_can_load_data_from_a_corpus(): key = b"hi there" db = ExampleDatabase() value = b"=\xc3\xe4l\x81\xe1\xc2H\xc9\xfb\x1a\xb6bM\xa8\x7f" db.save(key, value) def f(data): if data.draw_bytes(len(value)) == value: data.mark_interesting() runner = TestRunner(f, settings=settings(database=db), database_key=key) runner.run() assert runner.last_data.status == Status.INTERESTING assert runner.last_data.buffer == value assert len(list(db.fetch(key))) == 1