You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
92 lines
2.4 KiB
92 lines
2.4 KiB
#[test]
|
|
fn oneshot_send1() {
|
|
use futures::channel::oneshot;
|
|
use futures::future::TryFutureExt;
|
|
use futures_test::future::FutureTestExt;
|
|
use std::sync::mpsc;
|
|
use std::thread;
|
|
|
|
let (tx1, rx1) = oneshot::channel::<i32>();
|
|
let (tx2, rx2) = mpsc::channel();
|
|
|
|
let t = thread::spawn(|| tx1.send(1).unwrap());
|
|
rx1.map_ok(move |x| tx2.send(x)).run_in_background();
|
|
assert_eq!(1, rx2.recv().unwrap());
|
|
t.join().unwrap();
|
|
}
|
|
|
|
#[test]
|
|
fn oneshot_send2() {
|
|
use futures::channel::oneshot;
|
|
use futures::future::TryFutureExt;
|
|
use futures_test::future::FutureTestExt;
|
|
use std::sync::mpsc;
|
|
use std::thread;
|
|
|
|
let (tx1, rx1) = oneshot::channel::<i32>();
|
|
let (tx2, rx2) = mpsc::channel();
|
|
|
|
thread::spawn(|| tx1.send(1).unwrap()).join().unwrap();
|
|
rx1.map_ok(move |x| tx2.send(x).unwrap()).run_in_background();
|
|
assert_eq!(1, rx2.recv().unwrap());
|
|
}
|
|
|
|
#[test]
|
|
fn oneshot_send3() {
|
|
use futures::channel::oneshot;
|
|
use futures::future::TryFutureExt;
|
|
use futures_test::future::FutureTestExt;
|
|
use std::sync::mpsc;
|
|
use std::thread;
|
|
|
|
let (tx1, rx1) = oneshot::channel::<i32>();
|
|
let (tx2, rx2) = mpsc::channel();
|
|
|
|
rx1.map_ok(move |x| tx2.send(x).unwrap()).run_in_background();
|
|
thread::spawn(|| tx1.send(1).unwrap()).join().unwrap();
|
|
assert_eq!(1, rx2.recv().unwrap());
|
|
}
|
|
|
|
#[test]
|
|
fn oneshot_drop_tx1() {
|
|
use futures::channel::oneshot;
|
|
use futures::future::FutureExt;
|
|
use futures_test::future::FutureTestExt;
|
|
use std::sync::mpsc;
|
|
|
|
let (tx1, rx1) = oneshot::channel::<i32>();
|
|
let (tx2, rx2) = mpsc::channel();
|
|
|
|
drop(tx1);
|
|
rx1.map(move |result| tx2.send(result).unwrap()).run_in_background();
|
|
|
|
assert_eq!(Err(oneshot::Canceled), rx2.recv().unwrap());
|
|
}
|
|
|
|
#[test]
|
|
fn oneshot_drop_tx2() {
|
|
use futures::channel::oneshot;
|
|
use futures::future::FutureExt;
|
|
use futures_test::future::FutureTestExt;
|
|
use std::sync::mpsc;
|
|
use std::thread;
|
|
|
|
let (tx1, rx1) = oneshot::channel::<i32>();
|
|
let (tx2, rx2) = mpsc::channel();
|
|
|
|
let t = thread::spawn(|| drop(tx1));
|
|
rx1.map(move |result| tx2.send(result).unwrap()).run_in_background();
|
|
t.join().unwrap();
|
|
|
|
assert_eq!(Err(oneshot::Canceled), rx2.recv().unwrap());
|
|
}
|
|
|
|
#[test]
|
|
fn oneshot_drop_rx() {
|
|
use futures::channel::oneshot;
|
|
|
|
let (tx, rx) = oneshot::channel::<i32>();
|
|
drop(rx);
|
|
assert_eq!(Err(2), tx.send(2));
|
|
}
|