mca*_*dre 7 testing quickcheck rust
我正在将QuickCheck移植到Rust,我写了一切,除非for_all我不确定类型签名应该是什么.
我知道,一般来说,for_all将接受属性lambda和生成器lambda的集合.它将评估生成器以创建随机测试用例以将属性作为输入.
它应该打印+++ OK, passed 100 tests.,如果属性返回true,否则要打印*** Failed!,打印违规测试用例值.
在Rust中,所有函数都使用固定数量的参数,因此apply在一般情况下不存在与Lisp等效的东西,但是宏可以为您提供所需的抽象.你可以写:
macro_rules! for_all {
( $tester:expr, $( $generator:expr ),* ) => {
$tester( $($generator() ),* )
}
}
Run Code Online (Sandbox Code Playgroud)
然后,for_all!(|a, b| a + b, || 4, || 7)产生11.
祝你的项目好运!
你能准确描述你想要什么吗?我认为你要求的是这样的:
fn for_all<A>(test: fn(A) -> bool, generators: &[fn() -> A]) -> bool {
generators.iter().all(|gen| test(gen()))
}
fn main() {
let generators: Vec<fn() -> (i32, i32)> = vec![
|| (1, 2),
|| (2, 3),
|| (3, 4),
];
for_all(|(a, b)| a < b, &generators);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2645 次 |
| 最近记录: |