Rollup merge of #82169 - not-an-aardvark:assert-lazy-format-expressions, r=sfackler
Document that `assert!` format arguments are evaluated lazily It can be useful to do some computation in `assert!` format arguments, in order to get better error messages. For example: ```rust assert!( some_condition, "The state is invalid. Details: {}", expensive_call_to_get_debugging_info(), ); ``` It seems like `assert!` only evaluates the format arguments if the assertion fails, which is useful but doesn't appear to be documented anywhere. This PR documents the behavior and adds some tests.
This commit is contained in:
commit
16481a2857
@ -1209,7 +1209,8 @@ pub(crate) mod builtin {
|
|||||||
///
|
///
|
||||||
/// This macro has a second form, where a custom panic message can
|
/// This macro has a second form, where a custom panic message can
|
||||||
/// be provided with or without arguments for formatting. See [`std::fmt`]
|
/// be provided with or without arguments for formatting. See [`std::fmt`]
|
||||||
/// for syntax for this form.
|
/// for syntax for this form. Expressions used as format arguments will only
|
||||||
|
/// be evaluated if the assertion fails.
|
||||||
///
|
///
|
||||||
/// [`std::fmt`]: ../std/fmt/index.html
|
/// [`std::fmt`]: ../std/fmt/index.html
|
||||||
///
|
///
|
||||||
|
12
src/test/ui/macros/assert-format-lazy.rs
Normal file
12
src/test/ui/macros/assert-format-lazy.rs
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
// run-pass
|
||||||
|
// compile-flags: -C debug_assertions=yes
|
||||||
|
|
||||||
|
#[allow(unreachable_code)]
|
||||||
|
fn main() {
|
||||||
|
assert!(true, "Failed: {:?}", panic!("assert! evaluated format expressions"));
|
||||||
|
debug_assert!(true, "Failed: {:?}", panic!("debug_assert! evaluated format expressions"));
|
||||||
|
assert_eq!(1, 1, "Failed: {:?}", panic!("assert_eq! evaluated format expressions"));
|
||||||
|
debug_assert_eq!(1, 1, "Failed: {:?}", panic!("debug_assert_eq! evaluated format expressions"));
|
||||||
|
assert_ne!(1, 2, "Failed: {:?}", panic!("assert_ne! evaluated format expressions"));
|
||||||
|
debug_assert_ne!(1, 2, "Failed: {:?}", panic!("debug_assert_ne! evaluated format expressions"));
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user