Best Python code snippet using hypothesis
shrinker.py
Source:shrinker.py  
...945                return False946            return self.consider_new_buffer(attempt)947        find_integer(boost)948    @defines_shrink_pass()949    def lower_blocks_together(self, chooser):950        block = chooser.choose(self.blocks, lambda b: not b.all_zero)951        # Choose the next block to be up to eight blocks onwards. We don't952        # want to go too far (to avoid quadratic time) but it's worth a953        # reasonable amount of lookahead, especially as we expect most954        # blocks are zero by this point anyway.955        next_block = self.blocks[956            chooser.choose(957                range(block.index + 1, min(len(self.blocks), block.index + 9)),958                lambda j: not self.blocks[j].all_zero,959            )960        ]961        buffer = self.buffer962        m = int_from_bytes(buffer[block.start : block.end])963        n = int_from_bytes(buffer[next_block.start : next_block.end])...test_shrinker.py
Source:test_shrinker.py  
1# This file is part of Hypothesis, which may be found at2# https://github.com/HypothesisWorks/hypothesis/3#4# Most of this work is copyright (C) 2013-2020 David R. MacIver5# (david@drmaciver.com), but it contains contributions by others. See6# CONTRIBUTING.rst for a full list of people who may hold copyright, and7# consult the git log if you need to determine who owns an individual8# contribution.9#10# This Source Code Form is subject to the terms of the Mozilla Public License,11# v. 2.0. If a copy of the MPL was not distributed with this file, You can12# obtain one at https://mozilla.org/MPL/2.0/.13#14# END HEADER15import time16import pytest17from hypothesis.internal.compat import int_to_bytes18from hypothesis.internal.conjecture import floats as flt19from hypothesis.internal.conjecture.engine import ConjectureRunner20from hypothesis.internal.conjecture.shrinker import (21    Shrinker,22    ShrinkPass,23    StopShrinking,24    block_program,25)26from hypothesis.internal.conjecture.shrinking import Float27from hypothesis.internal.conjecture.utils import Sampler28from tests.conjecture.common import SOME_LABEL, run_to_buffer, shrinking_from29@pytest.mark.parametrize("n", [1, 5, 8, 15])30def test_can_shrink_variable_draws_with_just_deletion(n, monkeypatch):31    @shrinking_from([n] + [0] * (n - 1) + [1])32    def shrinker(data):33        n = data.draw_bits(4)34        b = [data.draw_bits(8) for _ in range(n)]35        if any(b):36            data.mark_interesting()37    shrinker.fixate_shrink_passes(["minimize_individual_blocks"])38    assert list(shrinker.shrink_target.buffer) == [1, 1]39def test_deletion_and_lowering_fails_to_shrink(monkeypatch):40    monkeypatch.setattr(41        Shrinker,42        "shrink",43        lambda self: self.fixate_shrink_passes(["minimize_individual_blocks"]),44    )45    def gen(self):46        self.cached_test_function(10)47    monkeypatch.setattr(ConjectureRunner, "generate_new_examples", gen)48    @run_to_buffer49    def x(data):50        for _ in range(10):51            data.draw_bytes(1)52        data.mark_interesting()53    assert x == bytes(10)54def test_duplicate_blocks_that_go_away():55    @shrinking_from([1, 1, 1, 2] * 2 + [5] * 2)56    def shrinker(data):57        x = data.draw_bits(32)58        y = data.draw_bits(32)59        if x != y:60            data.mark_invalid()61        b = [data.draw_bytes(1) for _ in range(x & 255)]62        if len(set(b)) <= 1:63            data.mark_interesting()64    shrinker.fixate_shrink_passes(["minimize_duplicated_blocks"])65    assert shrinker.shrink_target.buffer == bytes(8)66def test_accidental_duplication(monkeypatch):67    @shrinking_from([18] * 20)68    def shrinker(data):69        x = data.draw_bits(8)70        y = data.draw_bits(8)71        if x != y:72            data.mark_invalid()73        if x < 5:74            data.mark_invalid()75        b = [data.draw_bytes(1) for _ in range(x)]76        if len(set(b)) == 1:77            data.mark_interesting()78    shrinker.fixate_shrink_passes(["minimize_duplicated_blocks"])79    assert list(shrinker.buffer) == [5] * 780def test_can_zero_subintervals(monkeypatch):81    @shrinking_from(bytes([3, 0, 0, 0, 1]) * 10)82    def shrinker(data):83        for _ in range(10):84            data.start_example(SOME_LABEL)85            n = data.draw_bits(8)86            data.draw_bytes(n)87            data.stop_example()88            if data.draw_bits(8) != 1:89                return90        data.mark_interesting()91    shrinker.shrink()92    assert list(shrinker.buffer) == [0, 1] * 1093def test_can_pass_to_an_indirect_descendant(monkeypatch):94    def tree(data):95        data.start_example(1)96        n = data.draw_bits(1)97        label = data.draw_bits(8)98        if n:99            tree(data)100            tree(data)101        data.stop_example(1)102        return label103    initial = bytes([1, 10, 0, 0, 1, 0, 0, 10, 0, 0])104    target = bytes([0, 10])105    good = {initial, target}106    @shrinking_from(initial)107    def shrinker(data):108        tree(data)109        if bytes(data.buffer) in good:110            data.mark_interesting()111    shrinker.fixate_shrink_passes(["pass_to_descendant"])112    assert shrinker.shrink_target.buffer == target113def shrink(buffer, *passes):114    def accept(f):115        shrinker = shrinking_from(buffer)(f)116        shrinker.fixate_shrink_passes(passes)117        return list(shrinker.buffer)118    return accept119def test_shrinking_blocks_from_common_offset():120    @shrinking_from([11, 10])121    def shrinker(data):122        m = data.draw_bits(8)123        n = data.draw_bits(8)124        if abs(m - n) <= 1 and max(m, n) > 0:125            data.mark_interesting()126    shrinker.mark_changed(0)127    shrinker.mark_changed(1)128    shrinker.lower_common_block_offset()129    x = shrinker.shrink_target.buffer130    assert sorted(x) == [0, 1]131def test_handle_empty_draws():132    @run_to_buffer133    def x(data):134        while True:135            data.start_example(SOME_LABEL)136            n = data.draw_bits(1)137            data.start_example(SOME_LABEL)138            data.stop_example()139            data.stop_example(discard=n > 0)140            if not n:141                break142        data.mark_interesting()143    assert x == bytes([0])144def test_can_reorder_examples():145    @shrinking_from([1, 0, 1, 1, 0, 1, 0, 0, 0])146    def shrinker(data):147        total = 0148        for _ in range(5):149            data.start_example(0)150            if data.draw_bits(8):151                total += data.draw_bits(9)152            data.stop_example(0)153        if total == 2:154            data.mark_interesting()155    shrinker.fixate_shrink_passes(["reorder_examples"])156    assert list(shrinker.buffer) == [0, 0, 0, 1, 0, 1, 1, 0, 1]157def test_permits_but_ignores_raising_order(monkeypatch):158    monkeypatch.setattr(159        ConjectureRunner,160        "generate_new_examples",161        lambda runner: runner.cached_test_function([1]),162    )163    monkeypatch.setattr(164        Shrinker, "shrink", lambda self: self.incorporate_new_buffer(bytes([2]))165    )166    @run_to_buffer167    def x(data):168        data.draw_bits(2)169        data.mark_interesting()170    assert list(x) == [1]171def test_block_deletion_can_delete_short_ranges(monkeypatch):172    @shrinking_from([v for i in range(5) for _ in range(i + 1) for v in [0, i]])173    def shrinker(data):174        while True:175            n = data.draw_bits(16)176            for _ in range(n):177                if data.draw_bits(16) != n:178                    data.mark_invalid()179            if n == 4:180                data.mark_interesting()181    shrinker.fixate_shrink_passes([block_program("X" * i) for i in range(1, 5)])182    assert list(shrinker.shrink_target.buffer) == [0, 4] * 5183def test_try_shrinking_blocks_ignores_overrun_blocks(monkeypatch):184    monkeypatch.setattr(185        ConjectureRunner,186        "generate_new_examples",187        lambda runner: runner.cached_test_function([3, 3, 0, 1]),188    )189    monkeypatch.setattr(190        Shrinker,191        "shrink",192        lambda self: self.try_shrinking_blocks((0, 1, 5), bytes([2])),193    )194    @run_to_buffer195    def x(data):196        n1 = data.draw_bits(8)197        data.draw_bits(8)198        if n1 == 3:199            data.draw_bits(8)200        k = data.draw_bits(8)201        if k == 1:202            data.mark_interesting()203    assert list(x) == [2, 2, 1]204def test_dependent_block_pairs_is_up_to_shrinking_integers():205    # Unit test extracted from a failure in tests/nocover/test_integers.py206    distribution = Sampler([4.0, 8.0, 1.0, 1.0, 0.5])207    sizes = [8, 16, 32, 64, 128]208    @shrinking_from(b"\x03\x01\x00\x00\x00\x00\x00\x01\x00\x02\x01")209    def shrinker(data):210        size = sizes[distribution.sample(data)]211        result = data.draw_bits(size)212        sign = (-1) ** (result & 1)213        result = (result >> 1) * sign214        cap = data.draw_bits(8)215        if result >= 32768 and cap == 1:216            data.mark_interesting()217    shrinker.fixate_shrink_passes(["minimize_individual_blocks"])218    assert list(shrinker.shrink_target.buffer) == [1, 1, 0, 1, 0, 0, 1]219def test_finding_a_minimal_balanced_binary_tree():220    # Tests iteration while the shape of the thing being iterated over can221    # change. In particular the current example can go from trivial to non222    # trivial.223    def tree(data):224        # Returns height of a binary tree and whether it is height balanced.225        data.start_example("tree")226        n = data.draw_bits(1)227        if n == 0:228            result = (1, True)229        else:230            h1, b1 = tree(data)231            h2, b2 = tree(data)232            result = (1 + max(h1, h2), b1 and b2 and abs(h1 - h2) <= 1)233        data.stop_example("tree")234        return result235    # Starting from an unbalanced tree of depth six236    @shrinking_from([1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0])237    def shrinker(data):238        _, b = tree(data)239        if not b:240            data.mark_interesting()241    shrinker.shrink()242    assert list(shrinker.shrink_target.buffer) == [1, 0, 1, 0, 1, 0, 0]243def test_float_shrink_can_run_when_canonicalisation_does_not_work(monkeypatch):244    # This should be an error when called245    monkeypatch.setattr(Float, "shrink", None)246    base_buf = int_to_bytes(flt.base_float_to_lex(1000.0), 8) + bytes(1)247    @shrinking_from(base_buf)248    def shrinker(data):249        flt.draw_float(data)250        if bytes(data.buffer) == base_buf:251            data.mark_interesting()252    shrinker.fixate_shrink_passes(["minimize_floats"])253    assert shrinker.shrink_target.buffer == base_buf254def test_try_shrinking_blocks_out_of_bounds():255    @shrinking_from(bytes([1]))256    def shrinker(data):257        data.draw_bits(1)258        data.mark_interesting()259    assert not shrinker.try_shrinking_blocks((1,), bytes([1]))260def test_block_programs_are_adaptive():261    @shrinking_from(bytes(1000) + bytes([1]))262    def shrinker(data):263        while not data.draw_bits(1):264            pass265        data.mark_interesting()266    p = shrinker.add_new_pass(block_program("X"))267    shrinker.fixate_shrink_passes([p.name])268    assert len(shrinker.shrink_target.buffer) == 1269    assert shrinker.calls <= 60270def test_zero_examples_with_variable_min_size():271    @shrinking_from(bytes([255]) * 100)272    def shrinker(data):273        any_nonzero = False274        for i in range(1, 10):275            any_nonzero |= data.draw_bits(i * 8) > 0276        if not any_nonzero:277            data.mark_invalid()278        data.mark_interesting()279    shrinker.shrink()280    assert len([d for d in shrinker.shrink_target.blocks if not d.all_zero]) == 1281def test_zero_contained_examples():282    @shrinking_from(bytes([1]) * 8)283    def shrinker(data):284        for _ in range(4):285            data.start_example(1)286            if data.draw_bits(8) == 0:287                data.mark_invalid()288            data.start_example(1)289            data.draw_bits(8)290            data.stop_example()291            data.stop_example()292        data.mark_interesting()293    shrinker.shrink()294    assert list(shrinker.shrink_target.buffer) == [1, 0] * 4295def test_zig_zags_quickly():296    @shrinking_from(bytes([255]) * 4)297    def shrinker(data):298        m = data.draw_bits(16)299        n = data.draw_bits(16)300        if m == 0 or n == 0:301            data.mark_invalid()302        if abs(m - n) <= 1:303            data.mark_interesting(0)304        # Two different interesting origins for avoiding slipping in the305        # shrinker.306        if abs(m - n) <= 10:307            data.mark_interesting(1)308    shrinker.fixate_shrink_passes(["minimize_individual_blocks"])309    assert shrinker.engine.valid_examples <= 100310    assert list(shrinker.shrink_target.buffer) == [0, 1, 0, 1]311def test_zero_irregular_examples():312    @shrinking_from([255] * 6)313    def shrinker(data):314        data.start_example(1)315        data.draw_bits(8)316        data.draw_bits(16)317        data.stop_example()318        data.start_example(1)319        interesting = data.draw_bits(8) > 0 and data.draw_bits(16) > 0320        data.stop_example()321        if interesting:322            data.mark_interesting()323    shrinker.shrink()324    assert list(shrinker.shrink_target.buffer) == [0] * 3 + [1, 0, 1]325def test_retain_end_of_buffer():326    @shrinking_from([1, 2, 3, 4, 5, 6, 0])327    def shrinker(data):328        interesting = False329        while True:330            n = data.draw_bits(8)331            if n == 6:332                interesting = True333            if n == 0:334                break335        if interesting:336            data.mark_interesting()337    shrinker.shrink()338    assert list(shrinker.buffer) == [6, 0]339def test_can_expand_zeroed_region():340    @shrinking_from([255] * 5)341    def shrinker(data):342        seen_non_zero = False343        for _ in range(5):344            if data.draw_bits(8) == 0:345                if seen_non_zero:346                    data.mark_invalid()347            else:348                seen_non_zero = True349        data.mark_interesting()350    shrinker.shrink()351    assert list(shrinker.shrink_target.buffer) == [0] * 5352def test_can_expand_deleted_region():353    @shrinking_from([1, 2, 3, 4, 0, 0])354    def shrinker(data):355        def t():356            data.start_example(1)357            data.start_example(1)358            m = data.draw_bits(8)359            data.stop_example()360            data.start_example(1)361            n = data.draw_bits(8)362            data.stop_example()363            data.stop_example()364            return (m, n)365        v1 = t()366        if v1 == (1, 2):367            if t() != (3, 4):368                data.mark_invalid()369        if v1 == (0, 0) or t() == (0, 0):370            data.mark_interesting()371    shrinker.shrink()372    assert list(shrinker.buffer) == [0, 0]373def test_shrink_pass_method_is_idempotent():374    @shrinking_from([255])375    def shrinker(data):376        data.draw_bits(8)377        data.mark_interesting()378    sp = shrinker.shrink_pass(block_program("X"))379    assert isinstance(sp, ShrinkPass)380    assert shrinker.shrink_pass(sp) is sp381def test_will_terminate_stalled_shrinks():382    # Suppress the time based slow shrinking check - we only want383    # the one that checks if we're in a stall where we've shrunk384    # as far as we're going to get.385    time.freeze()386    @shrinking_from([255] * 100)387    def shrinker(data):388        count = 0389        for _ in range(100):390            if data.draw_bits(8) != 255:391                count += 1392                if count >= 10:393                    return394        data.mark_interesting()395    shrinker.shrink()396    assert shrinker.calls <= 1 + 2 * shrinker.max_stall397def test_will_let_fixate_shrink_passes_do_a_full_run_through():398    @shrinking_from(range(50))399    def shrinker(data):400        for i in range(50):401            if data.draw_bits(8) != i:402                data.mark_invalid()403        data.mark_interesting()404    shrinker.max_stall = 5405    passes = [block_program("X" * i) for i in range(1, 11)]406    with pytest.raises(StopShrinking):407        shrinker.fixate_shrink_passes(passes)408    assert shrinker.shrink_pass(passes[-1]).calls > 0409@pytest.mark.parametrize("n_gap", [0, 1, 2, 3])410def test_can_simultaneously_lower_non_duplicated_nearby_blocks(n_gap):411    @shrinking_from([1, 1] + [0] * n_gap + [0, 2])412    def shrinker(data):413        # Block off lowering the whole buffer414        if data.draw_bits(1) == 0:415            data.mark_invalid()416        m = data.draw_bits(8)417        for _ in range(n_gap):418            data.draw_bits(8)419        n = data.draw_bits(16)420        if n == m + 1:421            data.mark_interesting()422    shrinker.fixate_shrink_passes(["lower_blocks_together"])...Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!
