@@ -234,21 +234,89 @@ fn test_try() {
234
234
235
235
#[ test]
236
236
fn 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) ;
254
322
}
0 commit comments