diff options
| author | bors <bors@rust-lang.org> | 2020-05-29 19:50:22 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2020-05-29 19:50:22 +0000 |
| commit | 4bd32c98047a809ba5fd1fac2aa044638e5f2105 (patch) | |
| tree | 2ab4b52a13d0ec1df564fac39c011993112c9709 /src/libcore/tests | |
| parent | 96dd4690c3aa70ec312448c3f2d50e6dc6fb87df (diff) | |
| parent | 180a92cad72fc6fa9fad5a0f97db24703fe280bf (diff) | |
| download | rust-4bd32c98047a809ba5fd1fac2aa044638e5f2105.tar.gz rust-4bd32c98047a809ba5fd1fac2aa044638e5f2105.zip | |
Auto merge of #72747 - Dylan-DPC:rollup-vvydkgl, r=Dylan-DPC
Rollup of 9 pull requests Successful merges: - #72310 (Add Peekable::next_if) - #72383 (Suggest using std::mem::drop function instead of explicit destructor call) - #72398 (SocketAddr and friends now correctly pad its content) - #72465 (Warn about unused captured variables) - #72568 (Implement total_cmp for f32, f64) - #72572 (Add some regression tests) - #72591 (librustc_middle: Rename upvar_list to closure_captures) - #72701 (Fix grammar in liballoc raw_vec) - #72731 (Add missing empty line in E0619 explanation) Failed merges: r? @ghost
Diffstat (limited to 'src/libcore/tests')
| -rw-r--r-- | src/libcore/tests/iter.rs | 24 | ||||
| -rw-r--r-- | src/libcore/tests/lib.rs | 1 |
2 files changed, 25 insertions, 0 deletions
diff --git a/src/libcore/tests/iter.rs b/src/libcore/tests/iter.rs index 52cf068f0a5..0265235a65a 100644 --- a/src/libcore/tests/iter.rs +++ b/src/libcore/tests/iter.rs @@ -813,6 +813,30 @@ fn test_iterator_peekable_rfold() { assert_eq!(i, xs.len()); } +#[test] +fn test_iterator_peekable_next_if_eq() { + // first, try on references + let xs = vec!["Heart", "of", "Gold"]; + let mut it = xs.into_iter().peekable(); + // try before `peek()` + assert_eq!(it.next_if_eq(&"trillian"), None); + assert_eq!(it.next_if_eq(&"Heart"), Some("Heart")); + // try after peek() + assert_eq!(it.peek(), Some(&"of")); + assert_eq!(it.next_if_eq(&"of"), Some("of")); + assert_eq!(it.next_if_eq(&"zaphod"), None); + // make sure `next()` still behaves + assert_eq!(it.next(), Some("Gold")); + + // make sure comparison works for owned values + let xs = vec![String::from("Ludicrous"), "speed".into()]; + let mut it = xs.into_iter().peekable(); + // make sure basic functionality works + assert_eq!(it.next_if_eq("Ludicrous"), Some("Ludicrous".into())); + assert_eq!(it.next_if_eq("speed"), Some("speed".into())); + assert_eq!(it.next_if_eq(""), None); +} + /// This is an iterator that follows the Iterator contract, /// but it is not fused. After having returned None once, it will start /// producing elements if .next() is called again. diff --git a/src/libcore/tests/lib.rs b/src/libcore/tests/lib.rs index 6a8e908b9c6..37ebf411280 100644 --- a/src/libcore/tests/lib.rs +++ b/src/libcore/tests/lib.rs @@ -43,6 +43,7 @@ #![feature(leading_trailing_ones)] #![feature(const_forget)] #![feature(option_unwrap_none)] +#![feature(peekable_next_if)] extern crate test; |
