1 个不稳定版本

0.1.0 2024年6月6日

#699开发工具

Download history 84/week @ 2024-05-31 48/week @ 2024-06-07 5/week @ 2024-06-14 11/week @ 2024-07-19 62/week @ 2024-07-26 4/week @ 2024-08-02 323/week @ 2024-08-09 911/week @ 2024-08-16

每月 1,302 次下载

MIT 许可证

7KB
99

cmp

cmp 是一个 Rust 包,它提供了一个宏,用于比较结构体中的字段,这在编写 assert! 测试时特别有用。

用法

要使用此包,将以下内容添加到您的 Cargo.toml

[dependencies]
cmp = "0.1.0"

然后,在您的 Rust 文件中

use cmp::compare_structs;

compare_structs!

compare_structs! 宏比较两个结构体中指定的字段。如果字段不匹配,宏将引发 panic 并输出不匹配的字段。

示例

use cmp::compare_structs;

struct A<'a> {
    a: i32,
    b: &'a str,
    c: [(f64, f32); 2],
}

struct B<'a> {
    a: i32,
    b: &'a str,
    c: [(f64, f32); 2],
}

let struct_a = A {
    a: 10,
    b: "str",
    c: [(1.0, 1.0), (2.0, 2.0)],
};

let struct_b = B {
    a: 10,
    b: "diff str",
    c: [(1.0, 1.0), (2.0, 2.0)],
};

compare_structs!(struct_a, struct_b, a, c);

在这个示例中,compare_structs! 宏比较了 struct_astruct_b 中的 ac 字段。如果不匹配,宏将引发 panic 并输出不匹配的字段。

输出

compare_structs! 宏的输出会单独列出结构体中不匹配的字段。例如

thread 'tests::compare_different_structs' panicked at src/lib.rs:135:9:
c: [
    (
        1.0,
        1.0,
    ),
    (
        2.0,
        3.0,
    ),
] != [
    (
        1.0,
        1.0,
    ),
    (
        2.0,
        2.0,
    ),
]

note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

在这个输出中,两个结构体的 c 字段不匹配,宏输出了不同的值。

无运行时依赖