Rust Proptest:生成向量向量的策略

Rust Proptest:生成向量向量的策略,rust,property-based-testing,proptest,Rust,Property Based Testing,Proptest,我想使用生成DAG。我选择的算法是。我已经编写了下面的简单算法——但我需要帮助将其转换为proptest 与下面代码相同但不使用随机数生成器的策略需要看起来像什么?(毫无疑问,随机数生成器不利于基于属性的测试。) 无测试策略的标准代码: () 使用rand::Rng; fn main(){ println!(“{:?}”,随机向量的向量); } fn随机向量的向量()->vec{ 常数N:u16=30; 常数K:usize=3; 让mut rng=rand::thread_rng(); let长

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

与下面代码相同但不使用随机数生成器的策略需要看起来像什么?(毫无疑问,随机数生成器不利于基于属性的测试。)

无测试策略的标准代码: ()

使用rand::Rng;
fn main(){
println!(“{:?}”,随机向量的向量);
}
fn随机向量的向量()->vec{
常数N:u16=30;
常数K:usize=3;
让mut rng=rand::thread_rng();
let长度:u16=额定发电机范围(0,N);
让mut outer=vec![];
对于1..length中的索引{
让mut-inner=vec![0u16;rng.gen_范围(0,K)];
对于e in和mut内部{
*e=额定发电量范围(0,指数);
}
//消除重复元素。特别是'index
以前的工作 我尝试使用该函数,但需要嵌套两个
vec
函数。而且,内部向量函数只能生成外部向量中的索引值

使用proptest::collection::vec;
//索引应该是内部向量位置的值
//在外向量中。怎么能找到那辆车?
让策略=vec(vec(1..INDEX,0..K),0..N);

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

一种方法是用策略替换每个
rng.gen_range()
调用。然后,嵌套策略必须与连接

在下面的代码中,我替换了我的模式
let length=rng.gen_范围(0,N);对于1..length{..}
中的i,使用一个新函数
vec_from_length(length:usize)
,该函数返回一个策略

#[cfg(测试)]
模试验{
使用超级::*;
使用proptest::collection::hash\u集;
使用proptest::前奏::*;
使用std::collections::HashSet;
测试{
#[测试]
fn无意义的_测试(v在_vec()的vec_中){
设s=sum(&v);//所有向量之和的和。
主张(s<15);
}
}
fn vec_of_vec()->实施策略{
常数N:u16=10;
设长度=0..N;
长度.prop\u平面图(vec\u from\u length).prop\u图(convert)
}
fn vec_from_length(长度:u16)->impl策略{
常数K:usize=5;
让mut result=vec![];
对于1..length中的索引{
//使用hash_集而不是vec,因为元素应该是唯一的。
let inner=hash_集(0..index,0..K);
结果:推动(内部);
}
后果
}
///将Vec转换为Vec
fn转换(输入:Vec)->Vec{
让mut output=vec![];
用于内部输入{
output.push(内部.into_iter().collect())
}
输出
}
}

还有一件事:
impl策略
可以通过
vec
函数(向量策略)或策略向量生成!在上面的代码中,我通过使用
result
be
push
ed
hash\u set(…)
来实现这一点,这是一种策略。因此,这种类型类似于
Vec
而不是
Strategy
(学究:战略可能不是一种类型)。

这里的问题是什么?它是?或者是更具体的东西?正如我在上一篇评论中所写的,我知道这些文件、这本书和这本书。不知道为什么那条评论被删除了——毕竟是别人在骂我。接下来我将回答您的问题。@Jmb我在开始proptest时没有遇到任何问题。这一战略的问题是,三种战略必须在不同层次上结合起来。我将发布一个答案——因为我成功地解决了这个问题。对我来说,这样做的方法是保持基于rand的代码的结构。