Skip to content

Commit dea5014

Browse files
taiki-ecramertj
authored andcommitted
Move futures-util tests into futures/tests
1 parent c552885 commit dea5014

12 files changed

+194
-214
lines changed

futures-util/src/sink/fanout.rs

Lines changed: 0 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -104,34 +104,3 @@ impl<Si1, Si2, Item> Sink<Item> for Fanout<Si1, Si2>
104104
if ready { Poll::Ready(Ok(())) } else { Poll::Pending }
105105
}
106106
}
107-
108-
#[cfg(test)]
109-
#[cfg(feature = "std")]
110-
mod tests {
111-
use crate::future::join3;
112-
use crate::sink::SinkExt;
113-
use crate::stream::{self, StreamExt};
114-
use futures_executor::block_on;
115-
use futures_channel::mpsc;
116-
use std::iter::Iterator;
117-
use std::vec::Vec;
118-
119-
#[test]
120-
fn it_works() {
121-
let (tx1, rx1) = mpsc::channel(1);
122-
let (tx2, rx2) = mpsc::channel(2);
123-
let tx = tx1.fanout(tx2).sink_map_err(|_| ());
124-
125-
let src = stream::iter((0..10).map(Ok));
126-
let fwd = src.forward(tx);
127-
128-
let collect_fut1 = rx1.collect::<Vec<_>>();
129-
let collect_fut2 = rx2.collect::<Vec<_>>();
130-
let (_, vec1, vec2) = block_on(join3(fwd, collect_fut1, collect_fut2));
131-
132-
let expected = (0..10).collect::<Vec<_>>();
133-
134-
assert_eq!(vec1, expected);
135-
assert_eq!(vec2, expected);
136-
}
137-
}

futures-util/src/task/arc_wake.rs

Lines changed: 0 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -82,53 +82,3 @@ pub(super) unsafe fn wake_by_ref_arc_raw<T: ArcWake>(data: *const ()) {
8282
ArcWake::wake_by_ref(&arc);
8383
mem::forget(arc);
8484
}
85-
86-
#[cfg(test)]
87-
mod tests {
88-
use super::*;
89-
use std::sync::Mutex;
90-
91-
struct CountingWaker {
92-
nr_wake: Mutex<i32>,
93-
}
94-
95-
impl CountingWaker {
96-
fn new() -> CountingWaker {
97-
CountingWaker {
98-
nr_wake: Mutex::new(0),
99-
}
100-
}
101-
102-
pub fn wakes(&self) -> i32 {
103-
*self.nr_wake.lock().unwrap()
104-
}
105-
}
106-
107-
impl ArcWake for CountingWaker {
108-
fn wake_by_ref(arc_self: &Arc<Self>) {
109-
let mut lock = arc_self.nr_wake.lock().unwrap();
110-
*lock += 1;
111-
}
112-
}
113-
114-
#[test]
115-
fn create_waker_from_arc() {
116-
let some_w = Arc::new(CountingWaker::new());
117-
118-
let w1: Waker = ArcWake::into_waker(some_w.clone());
119-
assert_eq!(2, Arc::strong_count(&some_w));
120-
w1.wake_by_ref();
121-
assert_eq!(1, some_w.wakes());
122-
123-
let w2 = w1.clone();
124-
assert_eq!(3, Arc::strong_count(&some_w));
125-
126-
w2.wake_by_ref();
127-
assert_eq!(2, some_w.wakes());
128-
129-
drop(w2);
130-
assert_eq!(2, Arc::strong_count(&some_w));
131-
drop(w1);
132-
assert_eq!(1, Arc::strong_count(&some_w));
133-
}
134-
}

futures-util/src/try_stream/into_async_read.rs

Lines changed: 0 additions & 99 deletions
Original file line numberDiff line numberDiff line change
@@ -155,102 +155,3 @@ where
155155
}
156156
}
157157
}
158-
159-
#[cfg(test)]
160-
mod tests {
161-
use super::*;
162-
use futures::stream::{self, TryStreamExt};
163-
use futures_io::AsyncRead;
164-
use futures_test::{task::noop_context, stream::StreamTestExt};
165-
166-
macro_rules! assert_read {
167-
($reader:expr, $buf:expr, $item:expr) => {
168-
let mut cx = noop_context();
169-
loop {
170-
match Pin::new(&mut $reader).poll_read(&mut cx, $buf) {
171-
Poll::Ready(Ok(x)) => {
172-
assert_eq!(x, $item);
173-
break;
174-
}
175-
Poll::Ready(Err(err)) => {
176-
panic!("assertion failed: expected value but got {}", err);
177-
}
178-
Poll::Pending => {
179-
continue;
180-
}
181-
}
182-
}
183-
};
184-
}
185-
186-
macro_rules! assert_fill_buf {
187-
($reader:expr, $buf:expr) => {
188-
let mut cx = noop_context();
189-
loop {
190-
match Pin::new(&mut $reader).poll_fill_buf(&mut cx) {
191-
Poll::Ready(Ok(x)) => {
192-
assert_eq!(x, $buf);
193-
break;
194-
}
195-
Poll::Ready(Err(err)) => {
196-
panic!("assertion failed: expected value but got {}", err);
197-
}
198-
Poll::Pending => {
199-
continue;
200-
}
201-
}
202-
}
203-
};
204-
}
205-
206-
#[test]
207-
fn test_into_async_read() {
208-
let stream = stream::iter((1..=3).flat_map(|_| vec![Ok(vec![]), Ok(vec![1, 2, 3, 4, 5])]));
209-
let mut reader = stream.interleave_pending().into_async_read();
210-
let mut buf = vec![0; 3];
211-
212-
assert_read!(reader, &mut buf, 3);
213-
assert_eq!(&buf, &[1, 2, 3]);
214-
215-
assert_read!(reader, &mut buf, 2);
216-
assert_eq!(&buf[..2], &[4, 5]);
217-
218-
assert_read!(reader, &mut buf, 3);
219-
assert_eq!(&buf, &[1, 2, 3]);
220-
221-
assert_read!(reader, &mut buf, 2);
222-
assert_eq!(&buf[..2], &[4, 5]);
223-
224-
assert_read!(reader, &mut buf, 3);
225-
assert_eq!(&buf, &[1, 2, 3]);
226-
227-
assert_read!(reader, &mut buf, 2);
228-
assert_eq!(&buf[..2], &[4, 5]);
229-
230-
assert_read!(reader, &mut buf, 0);
231-
}
232-
233-
#[test]
234-
fn test_into_async_bufread() -> std::io::Result<()> {
235-
let stream = stream::iter((1..=2).flat_map(|_| vec![Ok(vec![]), Ok(vec![1, 2, 3, 4, 5])]));
236-
let mut reader = stream.interleave_pending().into_async_read();
237-
238-
let mut reader = Pin::new(&mut reader);
239-
240-
assert_fill_buf!(reader, &[1, 2, 3, 4, 5][..]);
241-
reader.as_mut().consume(3);
242-
243-
assert_fill_buf!(reader, &[4, 5][..]);
244-
reader.as_mut().consume(2);
245-
246-
assert_fill_buf!(reader, &[1, 2, 3, 4, 5][..]);
247-
reader.as_mut().consume(2);
248-
249-
assert_fill_buf!(reader, &[3, 4, 5][..]);
250-
reader.as_mut().consume(3);
251-
252-
assert_fill_buf!(reader, &[][..]);
253-
254-
Ok(())
255-
}
256-
}

futures-util/tests/futures_unordered.rs

Lines changed: 0 additions & 33 deletions
This file was deleted.

futures/tests/arc_wake.rs

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
use futures::task::{ArcWake, Waker};
2+
use std::sync::{Arc, Mutex};
3+
4+
struct CountingWaker {
5+
nr_wake: Mutex<i32>,
6+
}
7+
8+
impl CountingWaker {
9+
fn new() -> CountingWaker {
10+
CountingWaker {
11+
nr_wake: Mutex::new(0),
12+
}
13+
}
14+
15+
fn wakes(&self) -> i32 {
16+
*self.nr_wake.lock().unwrap()
17+
}
18+
}
19+
20+
impl ArcWake for CountingWaker {
21+
fn wake_by_ref(arc_self: &Arc<Self>) {
22+
let mut lock = arc_self.nr_wake.lock().unwrap();
23+
*lock += 1;
24+
}
25+
}
26+
27+
#[test]
28+
fn create_waker_from_arc() {
29+
let some_w = Arc::new(CountingWaker::new());
30+
31+
let w1: Waker = ArcWake::into_waker(some_w.clone());
32+
assert_eq!(2, Arc::strong_count(&some_w));
33+
w1.wake_by_ref();
34+
assert_eq!(1, some_w.wakes());
35+
36+
let w2 = w1.clone();
37+
assert_eq!(3, Arc::strong_count(&some_w));
38+
39+
w2.wake_by_ref();
40+
assert_eq!(2, some_w.wakes());
41+
42+
drop(w2);
43+
assert_eq!(2, Arc::strong_count(&some_w));
44+
drop(w1);
45+
assert_eq!(1, Arc::strong_count(&some_w));
46+
}
File renamed without changes.

futures/tests/futures_unordered.rs

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,39 @@
11
use futures::channel::oneshot;
22
use futures::executor::{block_on, block_on_stream};
33
use futures::future::{self, join, Future, FutureExt};
4-
use futures::stream::{StreamExt, FuturesUnordered};
4+
use futures::stream::{FusedStream, FuturesUnordered, StreamExt};
55
use futures::task::Poll;
66
use futures_test::{assert_stream_done, assert_stream_next};
77
use futures_test::future::FutureTestExt;
88
use futures_test::task::noop_context;
99

10+
#[test]
11+
fn is_terminated() {
12+
let mut cx = noop_context();
13+
let mut tasks = FuturesUnordered::new();
14+
15+
assert_eq!(tasks.is_terminated(), false);
16+
assert_eq!(tasks.poll_next_unpin(&mut cx), Poll::Ready(None));
17+
assert_eq!(tasks.is_terminated(), true);
18+
19+
// Test that the sentinel value doesn't leak
20+
assert_eq!(tasks.is_empty(), true);
21+
assert_eq!(tasks.len(), 0);
22+
assert_eq!(tasks.iter_mut().len(), 0);
23+
24+
tasks.push(future::ready(1));
25+
26+
assert_eq!(tasks.is_empty(), false);
27+
assert_eq!(tasks.len(), 1);
28+
assert_eq!(tasks.iter_mut().len(), 1);
29+
30+
assert_eq!(tasks.is_terminated(), false);
31+
assert_eq!(tasks.poll_next_unpin(&mut cx), Poll::Ready(Some(1)));
32+
assert_eq!(tasks.is_terminated(), false);
33+
assert_eq!(tasks.poll_next_unpin(&mut cx), Poll::Ready(None));
34+
assert_eq!(tasks.is_terminated(), true);
35+
}
36+
1037
#[test]
1138
fn works_1() {
1239
let (a_tx, a_rx) = oneshot::channel::<i32>();
File renamed without changes.

futures/tests/sink_fanout.rs

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
use futures::channel::mpsc;
2+
use futures::executor::block_on;
3+
use futures::future::join3;
4+
use futures::sink::SinkExt;
5+
use futures::stream::{self, StreamExt};
6+
7+
#[test]
8+
fn it_works() {
9+
let (tx1, rx1) = mpsc::channel(1);
10+
let (tx2, rx2) = mpsc::channel(2);
11+
let tx = tx1.fanout(tx2).sink_map_err(|_| ());
12+
13+
let src = stream::iter((0..10).map(Ok));
14+
let fwd = src.forward(tx);
15+
16+
let collect_fut1 = rx1.collect::<Vec<_>>();
17+
let collect_fut2 = rx2.collect::<Vec<_>>();
18+
let (_, vec1, vec2) = block_on(join3(fwd, collect_fut1, collect_fut2));
19+
20+
let expected = (0..10).collect::<Vec<_>>();
21+
22+
assert_eq!(vec1, expected);
23+
assert_eq!(vec2, expected);
24+
}

0 commit comments

Comments
 (0)