[−][src]Macro chain_cmp::chmp
chmp!() { /* proc-macro */ }
Use the chmp
macro to chain comparison operators.
You can use all of these operators: <
, <=
, >
, >=
, ==
, !=
.
Examples
Basic usage
use chain_cmp::chmp; let (a, b, c) = (1, 2, 3); let verbose = a < b && b <= c; let concise = chmp!(a < b <= c); assert_eq!(concise, verbose); // You can use equality operators as well: assert!(chmp!(a != b != c)); // And you can even chain more than three operators: assert!(chmp!(a != b != c != a)); // making sure these values are pairwise distinct // And of course mix and match operators: assert!(chmp!(a < b <= c != a == a));
Short-circuiting
chmp
will short-circuit to evaluate the fewest expressions
possible.
fn panics() -> i32 { panic!(); } assert!(!chmp!(i32::MAX < i32::MIN < panics())); // this **won't** panic
Comparing arbitrary expressions
As long as the comparison operators have the lowest precedence,
chmp
will evaluate any expression, like variables, blocks,
function calls, etc.
const ANSWER: u32 = 42; assert!(chmp!({ println!("Life, the Universe, and Everything"); ANSWER } != 6 * 9 == 54));