问题标签 [proptest]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
78 浏览

testing - 如何处理将可变借用的结构传递给函数闭包?

我正在使用 proptest crate 在 no_std 环境中运行一些属性测试。proptest 的默认test_runner::TestRunner::run()实现采用一些输入(作为proptest 中定义StrategyValueTree对象)和函数闭包作为参数,因此您可以使用值树或策略中的值运行任意数量的测试。

我需要测试一个函数调用,该函数调用将可变借用的结构作为参数。这不会编译:

obj是通过函数调用传递给test_runner上一级的结构,作为可变借用对象。

深入研究 proptest 的源代码,很明显编译错误是由于函数签名引起的test_runner::TestRunner::run()

该参数需要FnMut使捕获的变量在函数调用中是可变的。我的问题是:有没有一种惯用的 rust 方式来做到这一点?

这是从条件编译的运行函数传递的函数:

mod::test::test_page_map获取obj,使用结构中的相关元数据,相应地更新该数据,并将页面映射到输入地址。它根据映射是否成功返回结果。值得注意的是,我无法克隆该对象。

有没有人看到符合“Rust 方式”的解决这个问题的方法?在 no_std 领域中是否有一些可用的机制,Cell或者我可以用它来包装可变对象,使其具有内部可变性但可以作为捕获的变量传递给“Fn”闭包?我对 Rust 很陌生,所以不确定通常如何处理这种事情。

0 投票
1 回答
165 浏览

testing - 如何将任意 proptest 值的转换排除在测试用例主体之外?

我想彻底测试两个BTreeSets 的交集的实现。我可以写:

但这具有较差的代码覆盖率,因为代码在某些情况下是专门的,随机集不太可能命中。一种特殊情况是元素范围几乎不相交的集合(一个集合的值 <= x,另一个集合的值 >= x)。在带有假设的 Python 中(我不是一个新手),我会写:

在 Rust 中,我只需要将所有内容都塞入体内:

如何将任意值的转换排除在测试用例主体之外?我无法理解我发现的有关策略的任何代码示例,而且 Stack Overflow 几乎没有与 proptest 相关的问题。

0 投票
1 回答
300 浏览

rust - Proptest:生成向量向量的策略

我想用proptest生成 DAG 。我选择的算法是this。我在下面编写了简单的算法——但我需要帮助将其转换为proptest 策略

与以下代码相同但不使用随机数生成器的策略需要看起来像什么?(不言而喻,随机数生成器不适合基于属性的测试。)

没有 proptest 策略的标准代码:(https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=2de4a757a96d123bf83b5157e0633d33

之前的工作

我尝试使用vec函数,但我需要嵌套两个vec函数。而且,内部 vec 函数只能生成直到外部向量中索引的值。

index方法没有帮助,因为仍然不知道正确的大小。