Description
We need to make sure all the function tests test the default values for keyword arguments, that is, calling the function without passing the keyword argument. This explicitly isn't tested in the signature tests because those tests aren't sophisticated enough to check that the correct default value is used.
I think we can abstract this somewhat in the hypothesis helpers. Something like
class DefaultValue:
"""
Stand-in value for a keyword argument not being passed
"""
def kwarg(default, kwarg_values):
return one_of(DefaultValue, just(default), kwarg_values)
with a strategy helper kwarg
that would work like
@given(x=arrays(), offset=kwarg(0, integers()))
def test_diagonal(x, offset):
if offset is DefaultValue:
res = diagonal(x)
offset = 0
else:
res = diagonal(x, offset=offset)
# Test behavior here
Maybe we could even abstract this further by generating using the function stubs. I'm not sure. The stubs won't contain enough information to infer what strategy values should be drawn from (even with type hints, it won't contain things like bounds or only specific sets of dtypes), but it does have the default values.