python - 假设检验 : how to sample_from values from another strategy?

标签 python python-hypothesis

我必须使用示例数据测试某些功能:

data = [
    [[10, 20, 30], 10],
    [[20, 30], 20],
    [[40], 30],
]

其中每行中的第一个元素列出,包含 N=(1 到 5)个通过以下方式生成的随机整数元素:

st.lists(
          st.integers(min_value=10),
          min_size=2,
          max_size=5,
          unique=True)

每行中的第二个元素包含来自所有生成列表的一组所有唯一整数的随机样本。

对于我的数据示例:

  • 列表包含唯一集合 (10,20,30,40) 中的值;
  • 每行中的第二个元素包含该集合中的随机整数样本;

如何使用假设检验框架实现这样的策略?

这个不起作用:

int_list = st.integers(min_value=10)

@given(st.lists(
    elements=st.tuples(
        int_list, 
        st.sampled_from(int_list))

最佳答案

查看the docs on adapting strategies - 您可以使用 .flatmap(...) 执行此操作,但使用 @composite 定义自定义策略可能会更简单。

# With flatmap
elem_strat = lists(
    integers(), min_size=2, max_size=5, unique=True
).flatmap(
    lambda xs: tuples(just(xs), sampled_from(xs)).map(list)
)

# With @composite
@composite
def elem_strat_func(draw):
    xs = draw(lists(
        integers(), min_size=2, max_size=5, unique=True
    )
    an_int = draw(sampled_from(xs))
    return [xs, an_int]
elem_strat = elem_strat_func()

# then use either as
@given(lists(elem_strat))
def test_something(xs): ...

关于python - 假设检验 : how to sample_from values from another strategy?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52404844/

相关文章:

python - 如何在 python 中迭代/操作类对象列表(分散网络模拟中的节点爬行)

python - 需要帮助使用 SimPy 对火车系统进行建模

python - 使用 Twisted 创建和部署 Python 聊天应用程序

python - '\t' 在 python 正则表达式对象中匹配什么?

python - 跟踪打印发生的位置?

python - 使用假设生成随机对象列表

python-hypothesis - 假设能否缩小假设未发现的失败测试用例?

python - 假设随机抽样

python - 假设 - 在测试之间重用@given