Skip to content

Commit

Permalink
Add a baseline set of _MultiCall performance tests
Browse files Browse the repository at this point in the history
This begins an effort to incorporate run-time speed tests using
`pytest-benchmark`. This initial test set audits the `_MultiCall`
loop with hookimpls, hookwrappers and the combination of both.
The intention is to eventually have a reliable set of tests which
enable making core component modifications without disrupting
performance as per #37.
  • Loading branch information
Tyler Goodlet committed Jul 5, 2017
1 parent 4a2478c commit d1f7d43
Showing 1 changed file with 38 additions and 1 deletion.
39 changes: 38 additions & 1 deletion testing/test_multicall.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ def MC(methods, kwargs, firstresult=False):
for method in methods:
f = HookImpl(None, "<temp>", method, method.example_impl)
hookfuncs.append(f)
return _MultiCall(hookfuncs, kwargs, {"firstresult": firstresult})
return _MultiCall(hookfuncs, kwargs, firstresult=firstresult)


def test_call_passing():
Expand Down Expand Up @@ -197,3 +197,40 @@ def m2():
with pytest.raises(exc):
MC([m2, m1], {}).execute()
assert l == ["m1 init", "m1 finish"]


@hookimpl(hookwrapper=True)
def m1(arg1, arg2, arg3):
yield


@hookimpl
def m2(arg1, arg2, arg3):
return arg1, arg2, arg3


@hookimpl(hookwrapper=True)
def w1(arg1, arg2, arg3):
yield


@hookimpl(hookwrapper=True)
def w2(arg1, arg2, arg3):
yield


def inner_exec(methods):
return MC(methods, {'arg1': 1, 'arg2': 2, 'arg3': 3}).execute()

@pytest.mark.benchmark
def test_hookimpls_speed(benchmark):
benchmark(inner_exec, [m1, m2])


@pytest.mark.benchmark
def test_hookwrapper_speed(benchmark):
benchmark(inner_exec, [w1, w2])

@pytest.mark.benchmark
def test_impl_and_wrapper_speed(benchmark):
benchmark(inner_exec, [m1, m2, w1, w2])

0 comments on commit d1f7d43

Please sign in to comment.