std: use a `match` in `assert_eq!` to extend the lifetime of the args.

This enables

    assert_eq!(foo.collect::<Vec<...>>().as_slice(), &[1,2,3,4]);

to work, by extending the lifetime of the .as_slice() rvalue.
This commit is contained in:
Huon Wilson 2014-04-07 22:32:49 +10:00
parent 8801d891c4
commit d3c831ba4a
1 changed files with 9 additions and 7 deletions

View File

@ -117,13 +117,15 @@ macro_rules! assert(
#[macro_export]
macro_rules! assert_eq(
($given:expr , $expected:expr) => ({
let given_val = &($given);
let expected_val = &($expected);
// check both directions of equality....
if !((*given_val == *expected_val) &&
(*expected_val == *given_val)) {
fail!("assertion failed: `(left == right) && (right == left)` \
(left: `{}`, right: `{}`)", *given_val, *expected_val)
match (&($given), &($expected)) {
(given_val, expected_val) => {
// check both directions of equality....
if !((*given_val == *expected_val) &&
(*expected_val == *given_val)) {
fail!("assertion failed: `(left == right) && (right == left)` \
(left: `{}`, right: `{}`)", *given_val, *expected_val)
}
}
}
})
)