1#[macro_export]
55macro_rules! assert_ok_eq {
56 ($cond:expr, $expected:expr $(,)?) => {
57 match $cond {
58 ::core::result::Result::Ok(t) => {
59 ::core::assert_eq!(t, $expected);
60 t
61 },
62 e @ ::core::result::Result::Err(_) => {
63 ::core::panic!("assertion failed, expected Ok(_), got {:?}", e);
64 }
65 }
66 };
67 ($cond:expr, $expected:expr, $($arg:tt)+) => {
68 match $cond {
69 ::core::result::Result::Ok(t) => {
70 ::core::assert_eq!(t, $expected, $($arg)+);
71 t
72 },
73 e @ ::core::result::Result::Err(_) => {
74 ::core::panic!("assertion failed, expected Ok(_), got {:?}: {}", e, ::core::format_args!($($arg)+));
75 }
76 }
77 };
78}
79
80#[macro_export]
88macro_rules! debug_assert_ok_eq {
89 ($($arg:tt)*) => {
90 #[cfg(debug_assertions)]
91 $crate::assert_ok_eq!($($arg)*);
92 }
93}
94
95#[cfg(test)]
96mod tests {
97 #[test]
98 fn equal() {
99 assert_ok_eq!(Ok::<_, ()>(42), 42);
100 }
101
102 #[test]
103 #[should_panic]
104 fn not_equal() {
105 assert_ok_eq!(Ok::<_, ()>(42), 100);
106 }
107
108 #[test]
109 #[should_panic(expected = "assertion failed, expected Ok(_), got Err(())")]
110 fn not_ok() {
111 assert_ok_eq!(Err::<usize, _>(()), 42);
112 }
113
114 #[test]
115 #[should_panic(expected = "foo")]
116 fn not_equal_custom_message() {
117 assert_ok_eq!(Ok::<_, ()>(1), 2, "foo");
118 }
119
120 #[test]
121 #[should_panic(expected = "assertion failed, expected Ok(_), got Err(()): foo")]
122 fn not_ok_custom_message() {
123 assert_ok_eq!(Err::<usize, ()>(()), 2, "foo");
124 }
125
126 #[test]
127 #[cfg_attr(not(debug_assertions), ignore = "only run in debug mode")]
128 fn debug_equal() {
129 debug_assert_ok_eq!(Ok::<_, ()>(42), 42);
130 }
131
132 #[test]
133 #[cfg_attr(not(debug_assertions), ignore = "only run in debug mode")]
134 #[should_panic]
135 fn debug_not_equal() {
136 debug_assert_ok_eq!(Ok::<_, ()>(42), 100);
137 }
138
139 #[test]
140 #[cfg_attr(not(debug_assertions), ignore = "only run in debug mode")]
141 #[should_panic(expected = "assertion failed, expected Ok(_), got Err(())")]
142 fn debug_not_ok() {
143 debug_assert_ok_eq!(Err::<usize, _>(()), 42);
144 }
145
146 #[test]
147 #[cfg_attr(not(debug_assertions), ignore = "only run in debug mode")]
148 #[should_panic(expected = "foo")]
149 fn debug_not_equal_custom_message() {
150 debug_assert_ok_eq!(Ok::<_, ()>(1), 2, "foo");
151 }
152
153 #[test]
154 #[cfg_attr(not(debug_assertions), ignore = "only run in debug mode")]
155 #[should_panic(expected = "assertion failed, expected Ok(_), got Err(()): foo")]
156 fn debug_not_ok_custom_message() {
157 debug_assert_ok_eq!(Err::<usize, ()>(()), 2, "foo");
158 }
159
160 #[test]
161 #[cfg_attr(debug_assertions, ignore = "only run in release mode")]
162 fn debug_release_not_equal() {
163 debug_assert_ok_eq!(Ok::<_, ()>(42), 100);
164 }
165
166 #[test]
167 #[cfg_attr(debug_assertions, ignore = "only run in release mode")]
168 fn debug_release_not_ok() {
169 debug_assert_ok_eq!(Err::<usize, _>(()), 42);
170 }
171}