def test_minor_variations_in_code_change_the_randomization(): table = StrategyTable() settings = hs.Settings(derandomize=True) settings.database = None table.define_specification_for(float, lambda *_: BrokenFloatStrategy()) v1 = Verifier(strategy_table=table, settings=settings) x1 = v1.falsify(lambda x: x == 42, float) x2 = v1.falsify(lambda x: x == 1, float) assert x1 != x2
def test_a_derandomized_verifier_produces_the_same_results_called_twice(): table = StrategyTable() settings = hs.Settings(derandomize=True) table.define_specification_for(float, lambda *_: BrokenFloatStrategy()) v1 = Verifier(strategy_table=table, settings=settings) foo = lambda x: False x1 = v1.falsify(foo, float) x2 = v1.falsify(foo, float) assert x1 == x2
def test_two_verifiers_produce_different_results_in_normal_mode(): settings = hs.Settings() settings.database = None table = StrategyTable() table.define_specification_for(float, lambda *_: BrokenFloatStrategy()) v1 = Verifier(strategy_table=table, settings=settings) v2 = Verifier(strategy_table=table, settings=settings) x1 = v1.falsify(lambda x: False, float) x2 = v2.falsify(lambda x: False, float) assert x1 != x2
def test_can_falsify_types_without_default_productions(): strategies = StrategyTable() strategies.define_specification_for( Bar, lambda s, d: BarStrategy( s.strategy(descriptors.integers_in_range(0, 100)))) with pytest.raises(MissingSpecification): StrategyTable.default().strategy(Bar) verifier = Verifier(strategy_table=strategies) assert verifier.falsify( lambda x: False, Bar, )[0] == Bar() assert verifier.falsify(lambda x: x.size() < 3, Bar)[0] == Bar(Bar(Bar()))
def test_storage_does_not_return_things_not_matching_strategy(): table = StrategyTable() strategy = JustStrategy(PickyStrategyLazyFormat()) strategy.could_have_produced = lambda *args: False table.define_specification_for(PickyStrategyLazyFormat, lambda s, d: strategy) converters = ConverterTable(strategy_table=table) converters.define_specification_for( PickyStrategyLazyFormat, lambda s, d: JustConverter(PickyStrategyLazyFormat())) database = ExampleDatabase( converters=converters, backend=SQLiteBackend(), ) stor = database.storage_for(PickyStrategyLazyFormat) database.backend.save(stor.key, 'null') assert list(database.backend.fetch(stor.key)) != [] assert list(stor.fetch()) == [] assert list(database.backend.fetch(stor.key)) == []