narust_158/util/
testing.rs

1//! 测试用
2//! * ❌【2024-06-20 02:02:25】莫尝试「模块封装+自动导出」省`test::`
3//!   * ⚠️报警:`private item shadows public glob re-export`
4
5/// 测试用类型,增强[`anyhow::Result`]
6#[cfg(test)]
7pub type AResult<T = ()> = anyhow::Result<T>;
8
9/// 测试用宏,简化`Ok(())`
10#[cfg(test)]
11#[macro_export]
12macro_rules! ok {
13    () => {
14        Ok(())
15    };
16    ($($code:tt)*) => {
17        Ok($($code)*)
18    };
19}
20
21/// 测试用宏,用于简化调试模式断言
22#[macro_export]
23macro_rules! debug_assert_matches {
24    ($value:expr, $pattern:pat $(, $($tail:tt)*)?) => {
25        debug_assert!(matches!($value, $pattern) $(, $($tail)*)?)
26    };
27}
28
29/// 用「上抛`Err`」代替直接panic
30/// * 🎯允许调用者「假定失败」并自行处置错误
31/// * 🚩【2024-08-12 21:49:05】提取到crate根目录,以便用于测试
32///   * 否则会有`mods!`的「绝对路径导出问题」
33#[cfg(test)]
34#[macro_export]
35macro_rules! assert_try {
36    ($bool:expr) => {
37        if !$bool {
38            return Err(anyhow::anyhow!("assertion failed with {}", stringify!($bool)));
39        }
40    };
41    ($bool:expr, $($fmt_params:tt)*) => {
42        if !$bool {
43            return Err(anyhow::anyhow!($($fmt_params)*));
44        }
45    };
46}
47
48/// 用「上抛`Err`」代替直接panic
49/// * 🎯允许调用者「假定失败」并自行处置错误
50/// * 🚩【2024-08-12 21:49:05】提取到crate根目录,以便用于测试
51///   * 否则会有`mods!`的「绝对路径导出问题」
52#[cfg(test)]
53#[macro_export]
54macro_rules! assert_eq_try {
55    ($left:expr, $right:expr $(, $($fmt_params:tt)*)?) => {
56        $crate::assert_try!($left == $right $(, $($fmt_params)*)?)
57    };
58}