about summary refs log tree commit diff
path: root/src/libcore/tests
diff options
context:
space:
mode:
authorBrad Gibson <b2b@humanenginuity.com>2018-04-30 12:51:43 -0700
committerBrad Gibson <b2b@humanenginuity.com>2018-04-30 13:56:52 -0700
commitc025fdebbada2757deccdd97219ff0313631f2ed (patch)
treea0c8e066a9bba0da4581c98e2e1a308f43ae9184 /src/libcore/tests
parent17124488c7c7582fb9ab22ed87b2759ee20a4602 (diff)
downloadrust-c025fdebbada2757deccdd97219ff0313631f2ed.tar.gz
rust-c025fdebbada2757deccdd97219ff0313631f2ed.zip
fixed some and added more tests
Diffstat (limited to 'src/libcore/tests')
-rw-r--r--src/libcore/tests/option.rs8
-rw-r--r--src/libcore/tests/result.rs102
2 files changed, 93 insertions, 17 deletions
diff --git a/src/libcore/tests/option.rs b/src/libcore/tests/option.rs
index e7e48b2daa2..ced7b03636a 100644
--- a/src/libcore/tests/option.rs
+++ b/src/libcore/tests/option.rs
@@ -304,7 +304,15 @@ fn test_option_deref() {
     let ref_option = &Some(&42);
     assert_eq!(ref_option.deref(), Some(&42));
 
+    let ref_option = &Some(String::from("a result"));
+    assert_eq!(ref_option.deref(), Some("a result"));
+
+    let ref_option = &Some(vec![1, 2, 3, 4, 5]);
+    assert_eq!(ref_option.deref(), Some(&[1, 2, 3, 4, 5][..]));
+
     // None: &Option<T: Deref>>::None -> None
     let ref_option: &Option<&i32> = &None;
     assert_eq!(ref_option.deref(), None);
+
+
 }
diff --git a/src/libcore/tests/result.rs b/src/libcore/tests/result.rs
index dd23467322d..fd0dd21401b 100644
--- a/src/libcore/tests/result.rs
+++ b/src/libcore/tests/result.rs
@@ -234,21 +234,89 @@ fn test_try() {
 
 #[test]
 fn test_result_deref() {
-    // Ok(T).deref_ok() -> Result<&T, &E::Deref::Target>::Ok(&T)
-    let ref_ok: &Result<&i32, &u8> = &Ok(&42);
-    assert_eq!(ref_ok.deref_ok(), Ok(&42));
-    assert_eq!(ref_ok.deref_ok(), Ok(&42));
-    assert_eq!(ref_ok.deref(), Ok(&42));
-
-    // Err(E) -> Result<&T, &E::Deref::Target>::Err(&*E)
-    let ref_err: &Result<&i32, &u8> = &Err(&41);
-    assert_eq!(ref_err.deref_err(), Err(&41));
-    assert_eq!(ref_err.deref_err(), Err(&41));
-    assert_eq!(ref_err.deref(), Err(&41));
-
-    // &Ok(T).deref_err() -> Result<&T, &E::Deref::Target>::Ok(&T)
-    assert_eq!(ref_ok.deref_err(), Ok(&&42));
-
-    // &Err(E) -> Result<&T::Deref::Target, &E>::Err(&E)
-    assert_eq!(ref_err.deref_ok(), Err(&&41));
+    // &Result<T: Deref, E>::Ok(T).deref_ok() ->
+    //      Result<&T::Deref::Target, &E>::Ok(&*T)
+    let ref_ok = &Result::Ok::<&i32, u8>(&42);
+    let expected_result = Result::Ok::<&i32, &u8>(&42);
+    assert_eq!(ref_ok.deref_ok(), expected_result);
+
+    let ref_ok = &Result::Ok::<String, u32>(String::from("a result"));
+    let expected_result = Result::Ok::<&str, &u32>("a result");
+    assert_eq!(ref_ok.deref_ok(), expected_result);
+
+    let ref_ok = &Result::Ok::<Vec<i32>, u32>(vec![1, 2, 3, 4, 5]);
+    let expected_result = Result::Ok::<&[i32], &u32>(&[1, 2, 3, 4, 5][..]);
+    assert_eq!(ref_ok.deref_ok(), expected_result);
+
+    // &Result<T: Deref, E: Deref>::Ok(T).deref() ->
+    //      Result<&T::Deref::Target, &E::Deref::Target>::Ok(&*T)
+    let ref_ok = &Result::Ok::<&i32, &u8>(&42);
+    let expected_result = Result::Ok::<&i32, &u8>(&42);
+    assert_eq!(ref_ok.deref(), expected_result);
+
+    let ref_ok = &Result::Ok::<String, &u32>(String::from("a result"));
+    let expected_result = Result::Ok::<&str, &u32>("a result");
+    assert_eq!(ref_ok.deref(), expected_result);
+
+    let ref_ok = &Result::Ok::<Vec<i32>, &u32>(vec![1, 2, 3, 4, 5]);
+    let expected_result = Result::Ok::<&[i32], &u32>(&[1, 2, 3, 4, 5][..]);
+    assert_eq!(ref_ok.deref(), expected_result);
+
+    // &Result<T, E: Deref>::Err(T).deref_err() ->
+    //      Result<&T, &E::Deref::Target>::Err(&*E)
+    let ref_err = &Result::Err::<u8, &i32>(&41);
+    let expected_result = Result::Err::<&u8, &i32>(&41);
+    assert_eq!(ref_err.deref_err(), expected_result);
+
+    let ref_err = &Result::Err::<u32, String>(String::from("an error"));
+    let expected_result = Result::Err::<&u32, &str>("an error");
+    assert_eq!(ref_err.deref_err(), expected_result);
+
+    let ref_err = &Result::Err::<u32, Vec<i32>>(vec![5, 4, 3, 2, 1]);
+    let expected_result = Result::Err::<&u32, &[i32]>(&[5, 4, 3, 2, 1][..]);
+    assert_eq!(ref_err.deref_err(), expected_result);
+
+    // &Result<T: Deref, E: Deref>::Err(T).deref_err() ->
+    //      Result<&T, &E::Deref::Target>::Err(&*E)
+    let ref_err = &Result::Err::<&u8, &i32>(&41);
+    let expected_result = Result::Err::<&u8, &i32>(&41);
+    assert_eq!(ref_err.deref(), expected_result);
+
+    let ref_err = &Result::Err::<&u32, String>(String::from("an error"));
+    let expected_result = Result::Err::<&u32, &str>("an error");
+    assert_eq!(ref_err.deref(), expected_result);
+
+    let ref_err = &Result::Err::<&u32, Vec<i32>>(vec![5, 4, 3, 2, 1]);
+    let expected_result = Result::Err::<&u32, &[i32]>(&[5, 4, 3, 2, 1][..]);
+    assert_eq!(ref_err.deref(), expected_result);
+
+    // *Odd corner cases (tested for completeness)*
+
+    // &Result<T, E: Deref>::Ok(T).deref_err() ->
+    //      Result<&T, &E::Deref::Target>::Ok(&T)
+    let ref_ok = &Result::Ok::<i32, &u8>(42);
+    let expected_result = Result::Ok::<&i32, &u8>(&42);
+    assert_eq!(ref_ok.deref_err(), expected_result);
+
+    let ref_ok = &Result::Ok::<&str, &u32>("a result");
+    let expected_result = Result::Ok::<&&str, &u32>(&"a result");
+    assert_eq!(ref_ok.deref_err(), expected_result);
+
+    let ref_ok = &Result::Ok::<[i32; 5], &u32>([1, 2, 3, 4, 5]);
+    let expected_result = Result::Ok::<&[i32; 5], &u32>(&[1, 2, 3, 4, 5]);
+    assert_eq!(ref_ok.deref_err(), expected_result);
+
+    // &Result<T: Deref, E>::Err(E).deref_ok() ->
+    //      Result<&T::Deref::Target, &E>::Err(&E)
+    let ref_err = &Result::Err::<&u8, i32>(41);
+    let expected_result = Result::Err::<&u8, &i32>(&41);
+    assert_eq!(ref_err.deref_ok(), expected_result);
+
+    let ref_err = &Result::Err::<&u32, &str>("an error");
+    let expected_result = Result::Err::<&u32, &&str>(&"an error");
+    assert_eq!(ref_err.deref_ok(), expected_result);
+
+    let ref_err = &Result::Err::<&u32, [i32; 5]>([5, 4, 3, 2, 1]);
+    let expected_result = Result::Err::<&u32, &[i32; 5]>(&[5, 4, 3, 2, 1]);
+    assert_eq!(ref_err.deref_ok(), expected_result);
 }