diff options
| author | Mazdak Farrokhzad <twingoow@gmail.com> | 2019-05-29 08:15:48 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2019-05-29 08:15:48 +0200 |
| commit | d67d1f24dc8b7ba8c00dacde3ee86c75aa85e91e (patch) | |
| tree | 969814388705377c8cecbf68e70d12ace3667853 /src/libcore/tests | |
| parent | 4b9d80325a65b0375eea526409a0f3aaf1cbc23c (diff) | |
| parent | 9f8d934f271fcaf9c34aefa8062b7563cfd34721 (diff) | |
| download | rust-d67d1f24dc8b7ba8c00dacde3ee86c75aa85e91e.tar.gz rust-d67d1f24dc8b7ba8c00dacde3ee86c75aa85e91e.zip | |
Rollup merge of #58975 - jtdowney:iter_arith_traits_option, r=dtolnay
Implement `iter::Sum` and `iter::Product` for `Option` This is similar to the existing implementation for `Result`. It will take each item into the accumulator unless a `None` is returned. I based a lot of this on #38580. From that discussion it didn't seem like this addition would be too controversial or difficult. One thing I still don't understand is picking the values for the `stable` attribute. This is my first non-documentation PR for rust so I am open to any feedback on improvements.
Diffstat (limited to 'src/libcore/tests')
| -rw-r--r-- | src/libcore/tests/iter.rs | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/src/libcore/tests/iter.rs b/src/libcore/tests/iter.rs index 7dfb1adad9e..bedb9e75612 100644 --- a/src/libcore/tests/iter.rs +++ b/src/libcore/tests/iter.rs @@ -1085,6 +1085,14 @@ fn test_iterator_sum_result() { } #[test] +fn test_iterator_sum_option() { + let v: &[Option<i32>] = &[Some(1), Some(2), Some(3), Some(4)]; + assert_eq!(v.iter().cloned().sum::<Option<i32>>(), Some(10)); + let v: &[Option<i32>] = &[Some(1), None, Some(3), Some(4)]; + assert_eq!(v.iter().cloned().sum::<Option<i32>>(), None); +} + +#[test] fn test_iterator_product() { let v: &[i32] = &[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; assert_eq!(v[..4].iter().cloned().product::<i32>(), 0); @@ -1127,6 +1135,14 @@ impl Ord for Mod3 { } #[test] +fn test_iterator_product_option() { + let v: &[Option<i32>] = &[Some(1), Some(2), Some(3), Some(4)]; + assert_eq!(v.iter().cloned().product::<Option<i32>>(), Some(24)); + let v: &[Option<i32>] = &[Some(1), None, Some(3), Some(4)]; + assert_eq!(v.iter().cloned().product::<Option<i32>>(), None); +} + +#[test] fn test_iterator_max() { let v: &[_] = &[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; assert_eq!(v[..4].iter().cloned().max(), Some(3)); |
