#numbers #arguments #equals #panics #u32 #assert-ne-all #assert-all

assert_eq_all

接受任意数量的参数,如果它们不相等则引发恐慌

2 个版本

0.1.1 2022 年 9 月 18 日
0.1.0 2022 年 9 月 17 日

#1117 in 开发工具

Apache-2.0 OR MIT

7KB

assert_eq_all 宏

接受任意数量的参数,如果它们不相等则引发恐慌。参数的数量也可以是奇数。每个参数将与前面的和后面的进行比较。

此外,该宏会打印出导致错误的参数名称,而不仅仅是它们的值。

如果您想测试不同的实现是否确实返回相同的结果,这很有用。

Hello world!
thread 'main' panicked at 'assertion failed: `(left == right)`
  left: `20`,
 right: `21`: 
(my_func_impl_6(x) != my_func_impl_7(x))', main.rs:18:5
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

main.rs

use assert_eq_all::{assert_eq_all, assert_ne_all};

// Benchmarked functions
fn my_func_impl_1(x: u32) -> u32 { x }
fn my_func_impl_2(x: u32) -> u32 { x }
fn my_func_impl_3(x: u32) -> u32 { x }
fn my_func_impl_4(x: u32) -> u32 { x }
fn my_func_impl_5(x: u32) -> u32 { x }
fn my_func_impl_6(x: u32) -> u32 { x }
fn my_func_impl_7(x: u32) -> u32 { x + 1 }
//                                   ^^^
// An error in one of the options for an alternative
// implementation of the algorithm.

fn main() {
    println!("Hello world!");              
    let x = 20;
    assert_eq_all!(
        my_func_impl_1(x), // 20
        my_func_impl_2(x), // 20
        my_func_impl_3(x), // 20
        my_func_impl_4(x), // 20
        my_func_impl_5(x), // 20
        my_func_impl_6(x), // 20
        my_func_impl_7(x), // 21 <--
    );

    assert_ne_all!(
        my_func_impl_6(x), // 20
        my_func_impl_7(x), // 21
    );
}

无运行时依赖