#[cfg(feature = "alloc")] // channel
#[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();
}

#[cfg(feature = "alloc")] // channel
#[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());
}

#[cfg(feature = "alloc")] // channel
#[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());
}

#[cfg(feature = "alloc")] // channel
#[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());
}

#[cfg(feature = "alloc")] // channel
#[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());
}

#[cfg(feature = "alloc")] // channel
#[test]
fn oneshot_drop_rx() {
    use futures::channel::oneshot;

    let (tx, rx) = oneshot::channel::<i32>();
    drop(rx);
    assert_eq!(Err(2), tx.send(2));
}
