python-假设如何缩小延迟策略
How does python-hypothesis shrink a deferred strategy
我目前正在为 Matlab 实现 PBB,并且在某种程度上受到假设的影响。
我不明白假设如何处理延期策略的收缩。
在文档中有代码片段
import hypothesis.strategies as st
x = st.deferred(lambda: st.booleans() | st.tuples(x, x))
x.example()
>>> (((False, (True, True)), (False, True)), (True, True))
现在,这个例子很可能会通过减少递归的深度来缩小。但是,hypothesis 是如何知道如何操纵 lambda 来缩小样本的?
DRMacIver 回答后的问题:
- hypothesis存储哪些选择属于哪个策略?例如:
(False,(False,False))
可以构造为 10010000
(深度优先)。如果我们采用子序列 01
(其中第一个 0
属于策略 booleans
而不是现在 tuples
),我们将得到示例 True
,这可能不算是前者的缩小版。
缩减延迟策略与缩减任何其他策略的工作原理相同,因为假设中的缩减对基础表示统一起作用,而不需要了解所使用策略的任何信息。
假设不是操纵生成的值,而是修改用于构造它们的选择。您可以将其视为进行一系列抛硬币。例如(True, False)
可能由序列 10100
生成,即 1
(选择 |
的第二个分支),然后是 01
,然后选择第一个分支生成一个 True
和 00
,它选择第一个分支然后生成一个 False。我们可以通过将 10100
替换为 01
来将 (True, False)
减少到 True
,或者通过将其替换为 00
来减少到 False
,我们可以找到两者原始选择序列的子序列。
如果您想了解更多相关信息,可以阅读有关它的论文(或观看演讲):https://2020.ecoop.org/details/ecoop-2020-papers/13/Test-Case-Reduction-via-Test-Case-Generation-Insights-From-the-Hypothesis-Reducer
Is hypothesis storing which choices belong to which strategy? E.g.: (False,(False,False)) can be constructed as 10010000 (depth first). If we take the subsequence 01 (where the first 0 belongs to the strategy booleans instead to tuples now) we would get the example True, which probably does not count as a shrinked version of the former.
不,Hypothesis 没有任何关于选择“所有权”的特定概念,并且认为 True
是 (False, (False, False))
的完全有效缩减!毕竟它更小更简单。
我目前正在为 Matlab 实现 PBB,并且在某种程度上受到假设的影响。
我不明白假设如何处理延期策略的收缩。 在文档中有代码片段
import hypothesis.strategies as st
x = st.deferred(lambda: st.booleans() | st.tuples(x, x))
x.example()
>>> (((False, (True, True)), (False, True)), (True, True))
现在,这个例子很可能会通过减少递归的深度来缩小。但是,hypothesis 是如何知道如何操纵 lambda 来缩小样本的?
DRMacIver 回答后的问题:
- hypothesis存储哪些选择属于哪个策略?例如:
(False,(False,False))
可以构造为10010000
(深度优先)。如果我们采用子序列01
(其中第一个0
属于策略booleans
而不是现在tuples
),我们将得到示例True
,这可能不算是前者的缩小版。
缩减延迟策略与缩减任何其他策略的工作原理相同,因为假设中的缩减对基础表示统一起作用,而不需要了解所使用策略的任何信息。
假设不是操纵生成的值,而是修改用于构造它们的选择。您可以将其视为进行一系列抛硬币。例如(True, False)
可能由序列 10100
生成,即 1
(选择 |
的第二个分支),然后是 01
,然后选择第一个分支生成一个 True
和 00
,它选择第一个分支然后生成一个 False。我们可以通过将 10100
替换为 01
来将 (True, False)
减少到 True
,或者通过将其替换为 00
来减少到 False
,我们可以找到两者原始选择序列的子序列。
如果您想了解更多相关信息,可以阅读有关它的论文(或观看演讲):https://2020.ecoop.org/details/ecoop-2020-papers/13/Test-Case-Reduction-via-Test-Case-Generation-Insights-From-the-Hypothesis-Reducer
Is hypothesis storing which choices belong to which strategy? E.g.: (False,(False,False)) can be constructed as 10010000 (depth first). If we take the subsequence 01 (where the first 0 belongs to the strategy booleans instead to tuples now) we would get the example True, which probably does not count as a shrinked version of the former.
不,Hypothesis 没有任何关于选择“所有权”的特定概念,并且认为 True
是 (False, (False, False))
的完全有效缩减!毕竟它更小更简单。