From 23715d344de0377624be95b48830582594aed7ff Mon Sep 17 00:00:00 2001 From: Jake Goulding Date: Fri, 23 Dec 2016 14:30:37 -0500 Subject: Implement `iter::Sum` and `iter::Product` for `Result` This introduces a private iterator adapter `ResultShunt`, which allows treating an iterator of `Result` as an iterator of `T`. --- src/libcoretest/iter.rs | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (limited to 'src/libcoretest') diff --git a/src/libcoretest/iter.rs b/src/libcoretest/iter.rs index 274539dfa66..99d31293053 100644 --- a/src/libcoretest/iter.rs +++ b/src/libcoretest/iter.rs @@ -614,6 +614,14 @@ fn test_iterator_sum() { assert_eq!(v[..0].iter().cloned().sum::(), 0); } +#[test] +fn test_iterator_sum_result() { + let v: &[Result] = &[Ok(1), Ok(2), Ok(3), Ok(4)]; + assert_eq!(v.iter().cloned().sum::>(), Ok(10)); + let v: &[Result] = &[Ok(1), Err(()), Ok(3), Ok(4)]; + assert_eq!(v.iter().cloned().sum::>(), Err(())); +} + #[test] fn test_iterator_product() { let v: &[i32] = &[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; @@ -622,6 +630,14 @@ fn test_iterator_product() { assert_eq!(v[..0].iter().cloned().product::(), 1); } +#[test] +fn test_iterator_product_result() { + let v: &[Result] = &[Ok(1), Ok(2), Ok(3), Ok(4)]; + assert_eq!(v.iter().cloned().product::>(), Ok(24)); + let v: &[Result] = &[Ok(1), Err(()), Ok(3), Ok(4)]; + assert_eq!(v.iter().cloned().product::>(), Err(())); +} + #[test] fn test_iterator_max() { let v: &[_] = &[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; -- cgit 1.4.1-3-g733a5