Crates.io | ralgo-test-util |
lib.rs | ralgo-test-util |
version | 0.1.0 |
source | src |
created_at | 2024-06-22 14:12:52.646822 |
updated_at | 2024-06-22 14:12:52.646822 |
description | Test utils for competitive programming |
homepage | |
repository | https://github.com/MiSawa/ralgo/ |
max_upload_size | |
id | 1280480 |
size | 23,154 |
競プロでランダムテストするのに便利そうな関数たち.
assert_cmd
とかを使うほうが正しいと思います.
[!IMPORTANT]
cargo test -- --nocapture
のように--nocapture
を渡すか, nightly を使う必要があります
WA なコードとナイーブなコードを比較して WA になる入力ケースを探すには, 次のような感じのテストを書けばよい.
// 中身は
// 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);
}
}
RE なコードから RE する入力ケースを探すには, 次のような感じ.
// 中身は
// 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);
}
}
代わりに prop_
prefix の無いマクロを使う.
#[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);
}
}
}