1 个不稳定版本
0.1.0 | 2024年6月22日 |
---|
#4 in #important
12KB
201 行
ralgo-test-util
为竞技编程中的随机测试提供方便的函数。
我认为使用assert_cmd
等方法更正确。
[!重要] 需要传递
--nocapture
或使用 nightly,例如cargo test -- --nocapture
为什么
- 编写随机测试时修改答案文件很麻烦
- 最好在相同的过程中执行
与 proptest 一起使用的示例
要比较错误代码和简单代码并找到导致错误的输入案例,可以编写如下测试。
// 中身は
// pub fn main() {
// proconio::input! { a: i32, b: i32 }
// println!("{}", a.wrapping_add(b));
// }
// . `main` の `pub` に注意.
#[path = "../src/wa-solution.rs"]
mod wa;
mod ac {
pub fn main() {
proconio::input! { a: i64, b: i64 };
println!("{}", a + b);
}
}
proptest! {
#[test]
fn ac_vs_wa(a: i32, b: i32) {
ralgo_test_util::prop_assert_eq_output_for_input!(format!("{} {}", a, b), ac::main, wa::main);
}
}
要从错误代码中找到正确的输入案例,可以按照以下方式。
// 中身は
// pub fn main() {
// proconio::input! { a: i32, b: i32 }
// println!("{}", a + b);
// }
// . `main` の `pub` に注意.
#[path = "../src/re-solution.rs"]
mod re;
proptest! {
#[test]
fn locate_re(a: i32, b: i32) {
ralgo_test_util::prop_assert_success_with_input!(format!("{} {}", a, b), re::main);
}
}
不使用 proptest 的示例
可以使用没有 prop_
前缀的宏。
#[path = "../src/wa-solution.rs"]
mod wa;
#[path = "../src/naive-solution.rs"]
mod naive;
#[test]
fn test() {
for a in 0..100 {
for b in 0..100 {
ralgo_test_util::assert_eq_output_for_input!(format!("{} {}", a, b), ac::main, wa::main);
}
}
}
依赖项
~4–14MB
~173K SLoC