#assert #better #arguments #macro #print #plugin #values

nightly bassert

更好的 Assert 宏 此宏将打印出表达式两边的值以及函数参数的值

3 个版本

使用旧的 Rust 2015

0.0.4 2015年1月12日
0.0.3 2015年1月8日
0.0.2 2014年11月28日

2673Rust 模式

MIT 许可证

14KB
248 行 代码

bassert

Rust 中的更好的 assert! 宏:bassert!

此宏通过手动解析 AST 来确定应进行的打印类型,从而消除了像 assert_eq 这样的宏的需求。它还可以做任何宏都无法做到的事情,例如打印出正在调用的函数的参数。

用法

#![feature(phase)]
#[phase(plugin)] extern crate bassert;

fn main() {
    if cfg!(first) {
        bassert!((1u8 + 1) << 2 < 3, "We are {} with math.", "AMAZING");
    } else {
        bassert!(stuff(123, "hello world"), "NOOO NOT STUFF!");
    }
}

fn stuff(i: u32, j: &'static str) -> bool {
    // STUFF
    false
}

使用 --cfg first 运行它将打印

task '<main>' panicked at 'assertion failed: ( 1u8 + 1 ) << 2 < 3:
left:  `( 1u8 + 1 ) << 2` = `8`
right: `3` = `3`
We are AMAZING with math.', test.rs:6

不使用该配置运行它将打印

task '<main>' panicked at 'assertion failed: stuff ( 123 , "hello world" ):
argument 0: 123
argument 1: hello world
NOOO NOT STUFF!', test.rs:8

致谢

这个库最初是基于 P1Start 的 assert_ng 开发的,尽管我重写了大部分内容,所以基本上没有剩下什么。测试在很大程度上保持不变,但 lib.rs 中的大部分内容都不是来自那个仓库。

无运行时依赖