#[allow(unused_imports)] use pretty_assertions::{assert_eq, assert_ne}; #[test] #[should_panic(expected = r#"assertion failed: `(left != right)` Both sides: Some( Foo { lorem: "Hello World!", ipsum: 42, dolor: Ok( "hey" ) } ) "#)] fn assert_ne() { #[derive(Debug, PartialEq)] struct Foo { lorem: &'static str, ipsum: u32, dolor: Result, } let x = Some(Foo { lorem: "Hello World!", ipsum: 42, dolor: Ok("hey".to_string()), }); assert_ne!(x, x); } #[test] #[should_panic( expected = r#"assertion failed: `(left != right)`: custom panic message Both sides: Some( Foo { lorem: "Hello World!", ipsum: 42, dolor: Ok( "hey" ) } ) "# )] fn assert_ne_custom() { #[derive(Debug, PartialEq)] struct Foo { lorem: &'static str, ipsum: u32, dolor: Result, } let x = Some(Foo { lorem: "Hello World!", ipsum: 42, dolor: Ok("hey".to_string()), }); assert_ne!(x, x, "custom panic message"); } #[test] #[should_panic] fn assert_ne_non_empty_return() { fn not_zero(x: u32) -> u32 { assert_ne!(x, 0); x }; not_zero(0); } #[test] #[should_panic(expected = r#"assertion failed: `(left != right)` Diff < left / right > : <-0.0 >0.0 Note: According to the `PartialEq` implementation, both of the values are partially equivalent, even if the `Debug` outputs differ. "#)] fn assert_ne_partial() { // Workaround for https://github.com/rust-lang/rust/issues/47619 // can be removed, when we require rust 1.25 or higher struct Foo(f32); use ::std::fmt; impl fmt::Debug for Foo { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { write!(f, "{:.1?}", self.0) } } impl PartialEq for Foo { fn eq(&self, other: &Self) -> bool { self.0 == other.0 } } assert_ne!(Foo(-0.0), Foo(0.0)); } #[test] #[should_panic(expected = r#"assertion failed: `(left != right)` Both sides: Some( Foo { lorem: "Hello World!", ipsum: 42, dolor: Ok( "hey" ) } ) "#)] fn assert_ne_trailing_comma() { #[derive(Debug, PartialEq)] struct Foo { lorem: &'static str, ipsum: u32, dolor: Result, } let x = Some(Foo { lorem: "Hello World!", ipsum: 42, dolor: Ok("hey".to_string()), }); assert_ne!(x, x,); } #[test] #[should_panic( expected = r#"assertion failed: `(left != right)`: custom panic message Both sides: Some( Foo { lorem: "Hello World!", ipsum: 42, dolor: Ok( "hey" ) } ) "# )] fn assert_ne_custom_trailing_comma() { #[derive(Debug, PartialEq)] struct Foo { lorem: &'static str, ipsum: u32, dolor: Result, } let x = Some(Foo { lorem: "Hello World!", ipsum: 42, dolor: Ok("hey".to_string()), }); assert_ne!(x, x, "custom panic message",); }