MST
星途 面试题库

面试题:Rust测试框架扩展:如何自定义一个测试断言宏

在Rust中,基于现有的测试框架,设计并实现一个自定义的测试断言宏,该宏用于检查一个浮点数是否在另一个浮点数的某个误差范围内,例如 `assert_float_within_error!(actual, expected, error)`。
40.7万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试
macro_rules! assert_float_within_error {
    ($actual:expr, $expected:expr, $error:expr) => {
        let diff = ($actual - $expected).abs();
        if diff > $error {
            panic!(
                "assertion failed: `(left within right)`\n  left: `{}`,\n right: `{}`,\n error: `{}`",
                $actual,
                $expected,
                $error
            );
        }
    };
}

你可以这样使用这个宏:

fn main() {
    assert_float_within_error!(1.05, 1.0, 0.1);
    assert_float_within_error!(1.2, 1.0, 0.1); // 这一行会导致panic
}