@@ -234,21 +234,89 @@ fn test_try() {
234234
235235#[ test]
236236fn test_result_deref ( ) {
237- // Ok(T).deref_ok() -> Result<&T, &E::Deref::Target>::Ok(&T)
238- let ref_ok: & Result < & i32 , & u8 > = & Ok ( & 42 ) ;
239- assert_eq ! ( ref_ok. deref_ok( ) , Ok ( & 42 ) ) ;
240- assert_eq ! ( ref_ok. deref_ok( ) , Ok ( & 42 ) ) ;
241- assert_eq ! ( ref_ok. deref( ) , Ok ( & 42 ) ) ;
242-
243- // Err(E) -> Result<&T, &E::Deref::Target>::Err(&*E)
244- let ref_err: & Result < & i32 , & u8 > = & Err ( & 41 ) ;
245- assert_eq ! ( ref_err. deref_err( ) , Err ( & 41 ) ) ;
246- assert_eq ! ( ref_err. deref_err( ) , Err ( & 41 ) ) ;
247- assert_eq ! ( ref_err. deref( ) , Err ( & 41 ) ) ;
248-
249- // &Ok(T).deref_err() -> Result<&T, &E::Deref::Target>::Ok(&T)
250- assert_eq ! ( ref_ok. deref_err( ) , Ok ( &&42 ) ) ;
251-
252- // &Err(E) -> Result<&T::Deref::Target, &E>::Err(&E)
253- assert_eq ! ( ref_err. deref_ok( ) , Err ( &&41 ) ) ;
237+ // &Result<T: Deref, E>::Ok(T).deref_ok() ->
238+ // Result<&T::Deref::Target, &E>::Ok(&*T)
239+ let ref_ok = & Result :: Ok :: < & i32 , u8 > ( & 42 ) ;
240+ let expected_result = Result :: Ok :: < & i32 , & u8 > ( & 42 ) ;
241+ assert_eq ! ( ref_ok. deref_ok( ) , expected_result) ;
242+
243+ let ref_ok = & Result :: Ok :: < String , u32 > ( String :: from ( "a result" ) ) ;
244+ let expected_result = Result :: Ok :: < & str , & u32 > ( "a result" ) ;
245+ assert_eq ! ( ref_ok. deref_ok( ) , expected_result) ;
246+
247+ let ref_ok = & Result :: Ok :: < Vec < i32 > , u32 > ( vec ! [ 1 , 2 , 3 , 4 , 5 ] ) ;
248+ let expected_result = Result :: Ok :: < & [ i32 ] , & u32 > ( & [ 1 , 2 , 3 , 4 , 5 ] [ ..] ) ;
249+ assert_eq ! ( ref_ok. deref_ok( ) , expected_result) ;
250+
251+ // &Result<T: Deref, E: Deref>::Ok(T).deref() ->
252+ // Result<&T::Deref::Target, &E::Deref::Target>::Ok(&*T)
253+ let ref_ok = & Result :: Ok :: < & i32 , & u8 > ( & 42 ) ;
254+ let expected_result = Result :: Ok :: < & i32 , & u8 > ( & 42 ) ;
255+ assert_eq ! ( ref_ok. deref( ) , expected_result) ;
256+
257+ let ref_ok = & Result :: Ok :: < String , & u32 > ( String :: from ( "a result" ) ) ;
258+ let expected_result = Result :: Ok :: < & str , & u32 > ( "a result" ) ;
259+ assert_eq ! ( ref_ok. deref( ) , expected_result) ;
260+
261+ let ref_ok = & Result :: Ok :: < Vec < i32 > , & u32 > ( vec ! [ 1 , 2 , 3 , 4 , 5 ] ) ;
262+ let expected_result = Result :: Ok :: < & [ i32 ] , & u32 > ( & [ 1 , 2 , 3 , 4 , 5 ] [ ..] ) ;
263+ assert_eq ! ( ref_ok. deref( ) , expected_result) ;
264+
265+ // &Result<T, E: Deref>::Err(T).deref_err() ->
266+ // Result<&T, &E::Deref::Target>::Err(&*E)
267+ let ref_err = & Result :: Err :: < u8 , & i32 > ( & 41 ) ;
268+ let expected_result = Result :: Err :: < & u8 , & i32 > ( & 41 ) ;
269+ assert_eq ! ( ref_err. deref_err( ) , expected_result) ;
270+
271+ let ref_err = & Result :: Err :: < u32 , String > ( String :: from ( "an error" ) ) ;
272+ let expected_result = Result :: Err :: < & u32 , & str > ( "an error" ) ;
273+ assert_eq ! ( ref_err. deref_err( ) , expected_result) ;
274+
275+ let ref_err = & Result :: Err :: < u32 , Vec < i32 > > ( vec ! [ 5 , 4 , 3 , 2 , 1 ] ) ;
276+ let expected_result = Result :: Err :: < & u32 , & [ i32 ] > ( & [ 5 , 4 , 3 , 2 , 1 ] [ ..] ) ;
277+ assert_eq ! ( ref_err. deref_err( ) , expected_result) ;
278+
279+ // &Result<T: Deref, E: Deref>::Err(T).deref_err() ->
280+ // Result<&T, &E::Deref::Target>::Err(&*E)
281+ let ref_err = & Result :: Err :: < & u8 , & i32 > ( & 41 ) ;
282+ let expected_result = Result :: Err :: < & u8 , & i32 > ( & 41 ) ;
283+ assert_eq ! ( ref_err. deref( ) , expected_result) ;
284+
285+ let ref_err = & Result :: Err :: < & u32 , String > ( String :: from ( "an error" ) ) ;
286+ let expected_result = Result :: Err :: < & u32 , & str > ( "an error" ) ;
287+ assert_eq ! ( ref_err. deref( ) , expected_result) ;
288+
289+ let ref_err = & Result :: Err :: < & u32 , Vec < i32 > > ( vec ! [ 5 , 4 , 3 , 2 , 1 ] ) ;
290+ let expected_result = Result :: Err :: < & u32 , & [ i32 ] > ( & [ 5 , 4 , 3 , 2 , 1 ] [ ..] ) ;
291+ assert_eq ! ( ref_err. deref( ) , expected_result) ;
292+
293+ // *Odd corner cases (tested for completeness)*
294+
295+ // &Result<T, E: Deref>::Ok(T).deref_err() ->
296+ // Result<&T, &E::Deref::Target>::Ok(&T)
297+ let ref_ok = & Result :: Ok :: < i32 , & u8 > ( 42 ) ;
298+ let expected_result = Result :: Ok :: < & i32 , & u8 > ( & 42 ) ;
299+ assert_eq ! ( ref_ok. deref_err( ) , expected_result) ;
300+
301+ let ref_ok = & Result :: Ok :: < & str , & u32 > ( "a result" ) ;
302+ let expected_result = Result :: Ok :: < & & str , & u32 > ( & "a result" ) ;
303+ assert_eq ! ( ref_ok. deref_err( ) , expected_result) ;
304+
305+ let ref_ok = & Result :: Ok :: < [ i32 ; 5 ] , & u32 > ( [ 1 , 2 , 3 , 4 , 5 ] ) ;
306+ let expected_result = Result :: Ok :: < & [ i32 ; 5 ] , & u32 > ( & [ 1 , 2 , 3 , 4 , 5 ] ) ;
307+ assert_eq ! ( ref_ok. deref_err( ) , expected_result) ;
308+
309+ // &Result<T: Deref, E>::Err(E).deref_ok() ->
310+ // Result<&T::Deref::Target, &E>::Err(&E)
311+ let ref_err = & Result :: Err :: < & u8 , i32 > ( 41 ) ;
312+ let expected_result = Result :: Err :: < & u8 , & i32 > ( & 41 ) ;
313+ assert_eq ! ( ref_err. deref_ok( ) , expected_result) ;
314+
315+ let ref_err = & Result :: Err :: < & u32 , & str > ( "an error" ) ;
316+ let expected_result = Result :: Err :: < & u32 , & & str > ( & "an error" ) ;
317+ assert_eq ! ( ref_err. deref_ok( ) , expected_result) ;
318+
319+ let ref_err = & Result :: Err :: < & u32 , [ i32 ; 5 ] > ( [ 5 , 4 , 3 , 2 , 1 ] ) ;
320+ let expected_result = Result :: Err :: < & u32 , & [ i32 ; 5 ] > ( & [ 5 , 4 , 3 , 2 , 1 ] ) ;
321+ assert_eq ! ( ref_err. deref_ok( ) , expected_result) ;
254322}
0 commit comments