""" Benchmarking and performance tests. """ import pytest from pluggy import (_multicall, _legacymulticall, HookImpl, HookspecMarker, HookimplMarker) hookspec = HookspecMarker("example") hookimpl = HookimplMarker("example") def MC(methods, kwargs, callertype, firstresult=False): hookfuncs = [] for method in methods: f = HookImpl(None, "", method, method.example_impl) hookfuncs.append(f) return callertype(hookfuncs, kwargs, {"firstresult": firstresult}) @hookimpl def hook(arg1, arg2, arg3): return arg1, arg2, arg3 @hookimpl(hookwrapper=True) def wrapper(arg1, arg2, arg3): yield @pytest.fixture( params=[10, 100], ids="hooks={}".format, ) def hooks(request): return [hook for i in range(request.param)] @pytest.fixture( params=[10, 100], ids="wrappers={}".format, ) def wrappers(request): return [wrapper for i in range(request.param)] @pytest.fixture( params=[_multicall, _legacymulticall], ids=lambda item: item.__name__ ) def callertype(request): return request.param def inner_exec(methods, callertype): return MC(methods, {'arg1': 1, 'arg2': 2, 'arg3': 3}, callertype) def test_hook_and_wrappers_speed(benchmark, hooks, wrappers, callertype): benchmark(inner_exec, hooks + wrappers, callertype)