| 1 | use futures::executor::block_on; |
| 2 | use futures::pin_mut; |
| 3 | use futures::stream::{self, Peekable, StreamExt}; |
| 4 | |
| 5 | #[test] |
| 6 | fn peekable() { |
| 7 | block_on(async { |
| 8 | let peekable: Peekable<_> = stream::iter(vec![1u8, 2, 3]).peekable(); |
| 9 | pin_mut!(peekable); |
| 10 | assert_eq!(peekable.as_mut().peek().await, Some(&1u8)); |
| 11 | assert_eq!(peekable.collect::<Vec<u8>>().await, vec![1, 2, 3]); |
| 12 | |
| 13 | let s = stream::once(async { 1 }).peekable(); |
| 14 | pin_mut!(s); |
| 15 | assert_eq!(s.as_mut().peek().await, Some(&1u8)); |
| 16 | assert_eq!(s.collect::<Vec<u8>>().await, vec![1]); |
| 17 | }); |
| 18 | } |
| 19 | |
| 20 | #[test] |
| 21 | fn peekable_mut() { |
| 22 | block_on(async { |
| 23 | let s = stream::iter(vec![1u8, 2, 3]).peekable(); |
| 24 | pin_mut!(s); |
| 25 | if let Some(p) = s.as_mut().peek_mut().await { |
| 26 | if *p == 1 { |
| 27 | *p = 5; |
| 28 | } |
| 29 | } |
| 30 | assert_eq!(s.collect::<Vec<_>>().await, vec![5, 2, 3]); |
| 31 | }); |
| 32 | } |
| 33 | |
| 34 | #[test] |
| 35 | fn peekable_next_if_eq() { |
| 36 | block_on(async { |
| 37 | // first, try on references |
| 38 | let s = stream::iter(vec!["Heart" , "of" , "Gold" ]).peekable(); |
| 39 | pin_mut!(s); |
| 40 | // try before `peek()` |
| 41 | assert_eq!(s.as_mut().next_if_eq(&"trillian" ).await, None); |
| 42 | assert_eq!(s.as_mut().next_if_eq(&"Heart" ).await, Some("Heart" )); |
| 43 | // try after peek() |
| 44 | assert_eq!(s.as_mut().peek().await, Some(&"of" )); |
| 45 | assert_eq!(s.as_mut().next_if_eq(&"of" ).await, Some("of" )); |
| 46 | assert_eq!(s.as_mut().next_if_eq(&"zaphod" ).await, None); |
| 47 | // make sure `next()` still behaves |
| 48 | assert_eq!(s.next().await, Some("Gold" )); |
| 49 | |
| 50 | // make sure comparison works for owned values |
| 51 | let s = stream::iter(vec![String::from("Ludicrous" ), "speed" .into()]).peekable(); |
| 52 | pin_mut!(s); |
| 53 | // make sure basic functionality works |
| 54 | assert_eq!(s.as_mut().next_if_eq("Ludicrous" ).await, Some("Ludicrous" .into())); |
| 55 | assert_eq!(s.as_mut().next_if_eq("speed" ).await, Some("speed" .into())); |
| 56 | assert_eq!(s.as_mut().next_if_eq("" ).await, None); |
| 57 | }); |
| 58 | } |
| 59 | |