Search code examples
python-hypothesis

How do I use composite strategies in hypothesis (hypothesis.errors.InvalidArgument: Expected SearchStrategy but got function)


This example is a variation of the one in the docs:

import hypothesis.strategies as st
    
from hypothesis import given
    
@st.composite
def s(draw):
    x = draw(st.text(), min_size=1)
    y = draw(st.text(alphabet=x))
    return (x, y)
    
    
    
@given(s1=s, s2=s)
def test_subtraction(s1, s2):
    
    print(s1, s2)
    
    assert 0

It fails:

E hypothesis.errors.InvalidArgument: Expected SearchStrategy but got <function accept.<locals>.s at 0x7fd7e5c05620> (type=function)

/mnt/work/unfuncat/software/anaconda/lib/python3.6/site-packages/hypothesis/internal/validation.py:40: InvalidArgument

What am I doing wrong?


Solution

  • You need to call the composite functions. This is not explained in the docs, but there is an example in a 2016 blog post.

    @given(s1=s(), s2=s()) # <===== change
    def test_subtraction(s1, s2):
        
        print(s1, s2)
        
        assert 0