Skip to content

Numeric overlap tests failing #676

@hardbyte

Description

@hardbyte

With recent changes to hypothesis, the two test_numeric_overlaps tests are now regularly failing. An example failure:

    @given(thresh_dist=integers(min_value=1),
           resolution=integers(min_value=1, max_value=512),
           candidate=integers())
    def test_numeric_overlaps_with_integers(thresh_dist, resolution, candidate):
        comp = NumericComparison(threshold_distance=thresh_dist, resolution=resolution, fractional_precision=0)
        other = candidate + thresh_dist
        cand_tokens = comp.tokenize(str(candidate))
        other_tokens = comp.tokenize(str(other))
        if other != candidate:
            assert len(set(cand_tokens).intersection(
                set(other_tokens))) == 1, "numbers exactly thresh_dist apart have 1 token in common"
        other = candidate + thresh_dist + int(math.ceil(thresh_dist/2))
        other_tokens = comp.tokenize(str(other))
        assert len(set(cand_tokens).intersection(
            set(other_tokens))) == 0, "numbers more than thresh_dist apart have no tokens in common"
        modulus = int(thresh_dist / (2 * resolution))
        if modulus > 0:
            other = candidate + random.randrange(modulus)
            other_tokens = comp.tokenize(str(other))
            assert len(set(cand_tokens).intersection(
                set(other_tokens))) >= len(
                cand_tokens) - 2, "numbers that are not more than the modulus apart have all or all - 2 tokens in common"
    
        if thresh_dist < 20:
            numbers = [candidate + i for i in range(thresh_dist + 10)]
        else:
            numbers = [candidate + int(thresh_dist * (i * 0.1)) for i in range(20)]
        def overlap(other):
            other_tokens = comp.tokenize(str(other))
            return len(set(cand_tokens).intersection(set(other_tokens)))
        overlaps = [overlap(num) for num in numbers]
        assert overlaps[0] == len(cand_tokens)
>       assert overlaps[-1] == 0
E       assert 1 == 0

tests/test_comparators.py:230: AssertionError
---------------------------------- Hypothesis ----------------------------------
Falsifying example: test_numeric_overlaps_with_integers(
    thresh_dist=19, resolution=1, candidate=-52,
)

You can reproduce this example by temporarily adding @reproduce_failure('6.43.3', b'AAAAJAAAAABp') as a decorator on your test case

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions