Best Python code snippet using hypothesis
recursive.py
Source:recursive.py  
1# coding=utf-82#3# This file is part of Hypothesis, which may be found at4# https://github.com/HypothesisWorks/hypothesis-python5#6# Most of this work is copyright (C) 2013-2015 David R. MacIver7# (david@drmaciver.com), but it contains contributions by others. See8# CONTRIBUTING.rst for a full list of people who may hold copyright, and9# consult the git log if you need to determine who owns an individual10# contribution.11#12# This Source Code Form is subject to the terms of the Mozilla Public License,13# v. 2.0. If a copy of the MPL was not distributed with this file, You can14# obtain one at http://mozilla.org/MPL/2.0/.15#16# END HEADER17from __future__ import division, print_function, absolute_import18from contextlib import contextmanager19from hypothesis.searchstrategy.wrappers import WrapperStrategy20from hypothesis.searchstrategy.strategies import OneOfStrategy, \21    SearchStrategy22class LimitReached(BaseException):23    pass24class LimitedStrategy(WrapperStrategy):25    def __init__(self, strategy):26        super(LimitedStrategy, self).__init__(strategy)27        self.marker = 028        self.currently_capped = False29    def do_draw(self, data):30        assert self.currently_capped31        if self.marker <= 0:32            raise LimitReached()33        self.marker -= 134        return super(LimitedStrategy, self).do_draw(data)35    @contextmanager36    def capped(self, max_templates):37        assert not self.currently_capped38        try:39            self.currently_capped = True40            self.marker = max_templates41            yield42        finally:43            self.currently_capped = False44class RecursiveStrategy(SearchStrategy):45    def __init__(self, base, extend, max_leaves):46        self.max_leaves = max_leaves47        self.base = LimitedStrategy(base)48        self.extend = extend49        strategies = [self.base, self.extend(self.base)]50        while 2 ** len(strategies) <= max_leaves:51            strategies.append(52                extend(OneOfStrategy(tuple(strategies), bias=0.8)))53        self.strategy = OneOfStrategy(strategies)54    def validate(self):55        self.base.validate()56        self.extend(self.base).validate()57    def do_draw(self, data):58        while True:59            try:60                with self.base.capped(self.max_leaves):61                    return data.draw(self.strategy)62            except LimitReached:...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!!
