| // run-rustfix |
| #![warn(clippy::assertions_on_result_states)] |
| |
| use std::result::Result; |
| |
| struct Foo; |
| |
| #[derive(Debug)] |
| struct DebugFoo; |
| |
| #[derive(Copy, Clone, Debug)] |
| struct CopyFoo; |
| |
| macro_rules! get_ok_macro { |
| () => { |
| Ok::<_, DebugFoo>(Foo) |
| }; |
| } |
| |
| fn main() { |
| // test ok |
| let r: Result<Foo, DebugFoo> = Ok(Foo); |
| debug_assert!(r.is_ok()); |
| r.unwrap(); |
| |
| // test ok with non-debug error type |
| let r: Result<Foo, Foo> = Ok(Foo); |
| assert!(r.is_ok()); |
| |
| // test ok with some messages |
| let r: Result<Foo, DebugFoo> = Ok(Foo); |
| assert!(r.is_ok(), "oops"); |
| |
| // test ok with unit error |
| let r: Result<Foo, ()> = Ok(Foo); |
| assert!(r.is_ok()); |
| |
| // test temporary ok |
| fn get_ok() -> Result<Foo, DebugFoo> { |
| Ok(Foo) |
| } |
| get_ok().unwrap(); |
| |
| // test macro ok |
| get_ok_macro!().unwrap(); |
| |
| // test ok that shouldn't be moved |
| let r: Result<CopyFoo, DebugFoo> = Ok(CopyFoo); |
| fn test_ref_unmoveable_ok(r: &Result<CopyFoo, DebugFoo>) { |
| assert!(r.is_ok()); |
| } |
| test_ref_unmoveable_ok(&r); |
| assert!(r.is_ok()); |
| r.unwrap(); |
| |
| // test ok that is copied |
| let r: Result<CopyFoo, CopyFoo> = Ok(CopyFoo); |
| r.unwrap(); |
| r.unwrap(); |
| |
| // test reference to ok |
| let r: Result<CopyFoo, CopyFoo> = Ok(CopyFoo); |
| fn test_ref_copy_ok(r: &Result<CopyFoo, CopyFoo>) { |
| r.unwrap(); |
| } |
| test_ref_copy_ok(&r); |
| r.unwrap(); |
| |
| // test err |
| let r: Result<DebugFoo, Foo> = Err(Foo); |
| debug_assert!(r.is_err()); |
| r.unwrap_err(); |
| |
| // test err with non-debug value type |
| let r: Result<Foo, Foo> = Err(Foo); |
| assert!(r.is_err()); |
| } |