]>
git.proxmox.com Git - rustc.git/blob - vendor/futures/tests_disabled/all.rs
1 use futures
::channel
::oneshot
::{self, Canceled}
;
2 use futures
::executor
::block_on
;
4 use std
::sync
::mpsc
::{channel, TryRecvError}
;
9 fn unselect
<T
, E
, A
, B
>(r
: Result
<Either
<(T
, B
), (T
, A
)>, Either
<(E
, B
), (E
, A
)>>) -> Result
<T
, E
> {
11 Ok(Either
::Left((t
, _
))) | Ok(Either
::Right((t
, _
))) => Ok(t
),
12 Err(Either
::Left((e
, _
))) | Err(Either
::Right((e
, _
))) => Err(e
),
18 fn is_future_v
<A
, B
, C
>(_
: C
)
22 C
: Future
<Item
= A
, Error
= B
>,
26 is_future_v
::<i32, u32, _
>(f_ok(1).map(|a
| a
+ 1));
27 is_future_v
::<i32, u32, _
>(f_ok(1).map_err(|a
| a
+ 1));
28 is_future_v
::<i32, u32, _
>(f_ok(1).and_then(Ok
));
29 is_future_v
::<i32, u32, _
>(f_ok(1).or_else(Err
));
30 is_future_v
::<(i32, i32), u32, _
>(f_ok(1).join(Err(3)));
31 is_future_v
::<i32, u32, _
>(f_ok(1).map(f_ok
).flatten());
33 assert_done(|| f_ok(1), r_ok(1));
34 assert_done(|| f_err(1), r_err(1));
35 assert_done(|| result(Ok(1)), r_ok(1));
36 assert_done(|| result(Err(1)), r_err(1));
37 assert_done(|| ok(1), r_ok(1));
38 assert_done(|| err(1), r_err(1));
39 assert_done(|| f_ok(1).map(|a
| a
+ 2), r_ok(3));
40 assert_done(|| f_err(1).map(|a
| a
+ 2), r_err(1));
41 assert_done(|| f_ok(1).map_err(|a
| a
+ 2), r_ok(1));
42 assert_done(|| f_err(1).map_err(|a
| a
+ 2), r_err(3));
43 assert_done(|| f_ok(1).and_then(|a
| Ok(a
+ 2)), r_ok(3));
44 assert_done(|| f_err(1).and_then(|a
| Ok(a
+ 2)), r_err(1));
45 assert_done(|| f_ok(1).and_then(|a
| Err(a
as u32 + 3)), r_err(4));
46 assert_done(|| f_err(1).and_then(|a
| Err(a
as u32 + 4)), r_err(1));
47 assert_done(|| f_ok(1).or_else(|a
| Ok(a
as i32 + 2)), r_ok(1));
48 assert_done(|| f_err(1).or_else(|a
| Ok(a
as i32 + 2)), r_ok(3));
49 assert_done(|| f_ok(1).or_else(|a
| Err(a
+ 3)), r_ok(1));
50 assert_done(|| f_err(1).or_else(|a
| Err(a
+ 4)), r_err(5));
51 assert_done(|| f_ok(1).select(f_err(2)).then(unselect
), r_ok(1));
52 assert_done(|| f_ok(1).select(Ok(2)).then(unselect
), r_ok(1));
53 assert_done(|| f_err(1).select(f_ok(1)).then(unselect
), r_err(1));
54 assert_done(|| f_ok(1).select(empty()).then(unselect
), Ok(1));
55 assert_done(|| empty().select(f_ok(1)).then(unselect
), Ok(1));
56 assert_done(|| f_ok(1).join(f_err(1)), Err(1));
57 assert_done(|| f_ok(1).join(Ok(2)), Ok((1, 2)));
58 assert_done(|| f_err(1).join(f_ok(1)), Err(1));
59 assert_done(|| f_ok(1).then(|_
| Ok(2)), r_ok(2));
60 assert_done(|| f_ok(1).then(|_
| Err(2)), r_err(2));
61 assert_done(|| f_err(1).then(|_
| Ok(2)), r_ok(2));
62 assert_done(|| f_err(1).then(|_
| Err(2)), r_err(2));
67 fn empty() -> Empty
<i32, u32> {
71 assert_empty(|| empty());
72 assert_empty(|| empty().select(empty()));
73 assert_empty(|| empty().join(empty()));
74 assert_empty(|| empty().join(f_ok(1)));
75 assert_empty(|| f_ok(1).join(empty()));
76 assert_empty(|| empty().or_else(move |_
| empty()));
77 assert_empty(|| empty().and_then(move |_
| empty()));
78 assert_empty(|| f_err(1).or_else(move |_
| empty()));
79 assert_empty(|| f_ok(1).and_then(move |_
| empty()));
80 assert_empty(|| empty().map(|a
| a
+ 1));
81 assert_empty(|| empty().map_err(|a
| a
+ 1));
82 assert_empty(|| empty().then(|a
| a
));
87 assert_done(|| ok(1), r_ok(1));
88 assert_done(|| err(1), r_err(1));
93 fn ok
<T
: Send
+ '
static>(a
: T
) -> FutureResult
<T
, u32> {
96 fn err
<E
: Send
+ '
static>(b
: E
) -> FutureResult
<i32, E
> {
100 assert_done(|| ok(ok(1)).flatten(), r_ok(1));
101 assert_done(|| ok(err(1)).flatten(), r_err(1));
102 assert_done(|| err(1u32).map(ok
).flatten(), r_err(1));
103 assert_done(|| future
::ok(future
::ok(1)).flatten(), r_ok(1));
104 assert_empty(|| ok(empty
::<i32, u32>()).flatten());
105 assert_empty(|| empty
::<i32, u32>().map(ok
).flatten());
112 let (c
, p
) = oneshot
::channel();
120 let (c
, p
) = oneshot
::channel
::<i32>();
126 let mut completes
= Vec
::new();
128 let (a
, b
) = oneshot
::channel
::<i32>();
133 let (c
, mut p
) = oneshot
::channel
::<i32>();
135 let res
= panic_waker_lw(|lw
| p
.poll(lw
));
136 assert
!(res
.is_err());
137 let (c
, p
) = oneshot
::channel
::<i32>();
139 let (tx
, rx
) = channel();
140 p
.then(move |_
| tx
.send(())).forget();
145 fn select_cancels() {
146 let ((a
, b
), (c
, d
)) = (oneshot
::channel
::<i32>(), oneshot
::channel
::<i32>());
147 let ((btx
, brx
), (dtx
, drx
)) = (channel(), channel());
148 let b
= b
.map(move |b
| {
149 btx
.send(b
).unwrap();
152 let d
= d
.map(move |d
| {
153 dtx
.send(d
).unwrap();
157 let mut f
= b
.select(d
).then(unselect
);
158 // assert!(f.poll(&mut Task::new()).is_pending());
159 assert
!(brx
.try_recv().is_err());
160 assert
!(drx
.try_recv().is_err());
163 let res
= f
.poll(lw
);
164 assert
!(res
.ok().unwrap().is_ready());
165 assert_eq
!(brx
.recv().unwrap(), 1);
167 assert
!(drx
.recv().is_err());
169 let ((a
, b
), (c
, d
)) = (oneshot
::channel
::<i32>(), oneshot
::channel
::<i32>());
170 let ((btx
, _brx
), (dtx
, drx
)) = (channel(), channel());
171 let b
= b
.map(move |b
| {
172 btx
.send(b
).unwrap();
175 let d
= d
.map(move |d
| {
176 dtx
.send(d
).unwrap();
180 let mut f
= b
.select(d
).then(unselect
);
181 assert
!(f
.poll(lw
).ok().unwrap().is_pending());
182 assert
!(f
.poll(lw
).ok().unwrap().is_pending());
184 assert
!(f
.poll(lw
).ok().unwrap().is_ready());
186 assert
!(drx
.recv().is_err());
192 let ((a
, b
), (c
, d
)) = (oneshot
::channel
::<i32>(), oneshot
::channel
::<i32>());
193 let ((btx
, _brx
), (dtx
, drx
)) = (channel(), channel());
194 let b
= b
.map(move |b
| {
195 btx
.send(b
).unwrap();
198 let d
= d
.map(move |d
| {
199 dtx
.send(d
).unwrap();
203 let mut f
= b
.join(d
);
205 let res
= panic_waker_lw(|lw
| f
.poll(lw
));
206 assert
!(res
.is_err());
208 assert
!(drx
.recv().is_err());
210 let ((a
, b
), (c
, d
)) = (oneshot
::channel
::<i32>(), oneshot
::channel
::<i32>());
211 let ((btx
, _brx
), (dtx
, drx
)) = (channel(), channel());
212 let b
= b
.map(move |b
| {
213 btx
.send(b
).unwrap();
216 let d
= d
.map(move |d
| {
217 dtx
.send(d
).unwrap();
221 let (tx
, rx
) = channel();
224 tx
.send(()).unwrap();
225 let res
: Result
<(), ()> = Ok(());
229 assert
!(rx
.try_recv().is_err());
233 assert
!(drx
.recv().is_err());
237 fn join_incomplete() {
238 let (a
, b
) = oneshot
::channel
::<i32>();
239 let (tx
, rx
) = channel();
241 let mut f
= ok(1).join(b
).map(move |r
| tx
.send(r
).unwrap());
242 assert
!(f
.poll(lw
).ok().unwrap().is_pending());
243 assert
!(rx
.try_recv().is_err());
245 assert
!(f
.poll(lw
).ok().unwrap().is_ready());
246 assert_eq
!(rx
.recv().unwrap(), (1, 2));
248 let (a
, b
) = oneshot
::channel
::<i32>();
249 let (tx
, rx
) = channel();
250 let mut f
= b
.join(Ok(2)).map(move |r
| tx
.send(r
).unwrap());
251 assert
!(f
.poll(lw
).ok().unwrap().is_pending());
252 assert
!(rx
.try_recv().is_err());
254 assert
!(f
.poll(lw
).ok().unwrap().is_ready());
255 assert_eq
!(rx
.recv().unwrap(), (1, 2));
257 let (a
, b
) = oneshot
::channel
::<i32>();
258 let (tx
, rx
) = channel();
259 let mut f
= ok(1).join(b
).map_err(move |_r
| tx
.send(2).unwrap());
260 assert
!(f
.poll(lw
).ok().unwrap().is_pending());
261 assert
!(rx
.try_recv().is_err());
263 assert
!(f
.poll(lw
).is_err());
264 assert_eq
!(rx
.recv().unwrap(), 2);
266 let (a
, b
) = oneshot
::channel
::<i32>();
267 let (tx
, rx
) = channel();
268 let mut f
= b
.join(Ok(2)).map_err(move |_r
| tx
.send(1).unwrap());
269 assert
!(f
.poll(lw
).ok().unwrap().is_pending());
270 assert
!(rx
.try_recv().is_err());
272 assert
!(f
.poll(lw
).is_err());
273 assert_eq
!(rx
.recv().unwrap(), 1);
279 assert_done(|| f_ok(2).select(empty()).then(unselect
), Ok(2));
280 assert_done(|| empty().select(f_ok(2)).then(unselect
), Ok(2));
281 assert_done(|| f_err(2).select(empty()).then(unselect
), Err(2));
282 assert_done(|| empty().select(f_err(2)).then(unselect
), Err(2));
286 f_ok(1).select(f_ok(2)).map_err(|_
| 0).and_then(|either_tup
| {
287 let (a
, b
) = either_tup
.into_inner();
288 b
.map(move |b
| a
+ b
)
294 // Finish one half of a select and then fail the second, ensuring that we
295 // get the notification of the second one.
297 let ((a
, b
), (c
, d
)) = (oneshot
::channel
::<i32>(), oneshot
::channel
::<i32>());
299 let (tx
, rx
) = channel();
300 f
.map(move |r
| tx
.send(r
).unwrap()).forget();
302 let (val
, next
) = rx
.recv().unwrap().into_inner();
304 let (tx
, rx
) = channel();
305 next
.map_err(move |_r
| tx
.send(2).unwrap()).forget();
306 assert_eq
!(rx
.try_recv().err().unwrap(), TryRecvError
::Empty
);
308 assert_eq
!(rx
.recv().unwrap(), 2);
311 // Fail the second half and ensure that we see the first one finish
313 let ((a
, b
), (c
, d
)) = (oneshot
::channel
::<i32>(), oneshot
::channel
::<i32>());
315 let (tx
, rx
) = channel();
316 f
.map_err(move |r
| tx
.send((1, r
.into_inner().1)).unwrap()).forget();
318 let (val
, next
) = rx
.recv().unwrap();
320 let (tx
, rx
) = channel();
321 next
.map(move |r
| tx
.send(r
).unwrap()).forget();
322 assert_eq
!(rx
.try_recv().err().unwrap(), TryRecvError
::Empty
);
324 assert_eq
!(rx
.recv().unwrap(), 2);
327 // Cancelling the first half should cancel the second
329 let ((_a
, b
), (_c
, d
)) = (oneshot
::channel
::<i32>(), oneshot
::channel
::<i32>());
330 let ((btx
, brx
), (dtx
, drx
)) = (channel(), channel());
331 let b
= b
.map(move |v
| {
332 btx
.send(v
).unwrap();
335 let d
= d
.map(move |v
| {
336 dtx
.send(v
).unwrap();
341 assert
!(drx
.recv().is_err());
342 assert
!(brx
.recv().is_err());
345 // Cancel after a schedule
347 let ((_a
, b
), (_c
, d
)) = (oneshot
::channel
::<i32>(), oneshot
::channel
::<i32>());
348 let ((btx
, brx
), (dtx
, drx
)) = (channel(), channel());
349 let b
= b
.map(move |v
| {
350 btx
.send(v
).unwrap();
353 let d
= d
.map(move |v
| {
354 dtx
.send(v
).unwrap();
357 let mut f
= b
.select(d
);
358 let _res
= noop_waker_lw(|lw
| f
.poll(lw
));
360 assert
!(drx
.recv().is_err());
361 assert
!(brx
.recv().is_err());
366 let ((a
, b
), (_c
, d
)) = (oneshot
::channel
::<i32>(), oneshot
::channel
::<i32>());
367 let ((btx
, brx
), (dtx
, drx
)) = (channel(), channel());
368 let b
= b
.map(move |v
| {
369 btx
.send(v
).unwrap();
372 let d
= d
.map(move |v
| {
373 dtx
.send(v
).unwrap();
376 let (tx
, rx
) = channel();
377 b
.select(d
).map(move |_
| tx
.send(()).unwrap()).forget();
379 assert
!(drx
.recv().is_err());
380 assert
!(brx
.recv().is_err());
381 assert
!(rx
.recv().is_err());
384 // Cancel on early drop
386 let (tx
, rx
) = channel();
387 let f
= f_ok(1).select(empty
::<_
, ()>().map(move |()| {
388 tx
.send(()).unwrap();
392 assert
!(rx
.recv().is_err());
398 assert_eq
!(Ok(Some(())), block_on(Some(ok
::<(), ()>(())).into_future()));
399 assert_eq
!(Ok
::<_
, ()>(None
::<()>), block_on(None
::<FutureResult
<(), ()>>.into_future()));