4 个版本
0.2.1 | 2024年3月1日 |
---|---|
0.2.0 | 2024年3月1日 |
0.1.1 | 2023年6月26日 |
0.1.0 | 2023年6月26日 |
101 在 测试 分类中
7,210 每月下载量
在 6 个 crate 中使用
20KB
350 代码行
sample-test: 样本测试工具
创建测试以对任意数据进行抽样,以生成给定命题的反例
use sample_std::VecSampler;
use sample_test::{sample_test, TestResult};
#[sample_test]
fn age_range(#[sample(VecSampler { el: 1..25, length: 0..50 })] ages: Vec<u8>) -> TestResult {
if ages.iter().all(|a| *a < 5) {
TestResult::discard()
} else {
TestResult::from_bool(ages.iter().all(|a| *a < 25))
}
}
前期工作
这个库受到了 quickcheck
和 proptest
的极大启发。
以下是不同之处
quickcheck
在类型级别工作,因此创建新的抽样策略需要全新的类型。对于复杂类型和多种不同的抽样策略,这会变得非常冗长。proptest
使用宏来创建策略,并创建一个种子值树来缩小数据。对于递归数据,这个树可以变得非常大,而且宏难以处理。
这个库试图取二者之长。它允许用户定义 Sample
策略,这些策略被输入到测试中。与 quickcheck
一样,缩小操作直接在生成的值上操作。这避免了使用 proptest
所使用的种子树的需要,并允许这个库扩展到更大的生成数据大小。
这个库及其下游用户大量依赖 Sample
组合子,而不是宏。这受到 Iterator
组合的启发,它既高效又简洁,而且无需任何宏。
权衡是
sample-test
比quickcheck
略微复杂,但定义抽样策略更容易。sample-test
在缩小方面不如proptest
,因为它不记录用于生成给定输出的种子值。
依赖项
~6MB
~120K SLoC