blob: 388206863ea63706c928f67bee20731111cfbf95 [file] [log] [blame]
// Copyright 2019 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#![feature(async_await)]
use fuchsia_async as fasync;
use futures::StreamExt;
use mpmc::*;
#[fasync::run_singlethreaded]
#[test]
async fn it_works() {
let s = Sender::default();
let mut r1 = s.new_receiver();
let mut r2 = r1.clone();
s.send(20).await;
assert_eq!(r1.next().await, Some(20));
assert_eq!(r2.next().await, Some(20));
}
#[fasync::run_singlethreaded]
#[test]
async fn dropping_sender_terminates_stream() {
let s = Sender::default();
let mut r1 = s.new_receiver();
let mut r2 = r1.clone();
s.send(20).await;
drop(s);
assert_eq!(r1.next().await, Some(20));
assert_eq!(r2.next().await, Some(20));
assert_eq!(r1.next().await, None);
assert_eq!(r2.next().await, None);
}
#[fasync::run_singlethreaded]
#[test]
async fn receivers_cloned_after_termination_yield_none() {
let s = Sender::default();
let mut r1 = s.new_receiver();
s.send(20).await;
drop(s);
let mut r2 = r1.clone();
assert_eq!(r1.next().await, Some(20));
assert_eq!(r1.next().await, None);
assert_eq!(r2.next().await, None);
}
#[fasync::run_singlethreaded]
#[test]
async fn sender_side_initialization() {
let s = Sender::default();
let mut r1 = s.new_receiver();
let mut r2 = s.new_receiver();
s.send(20).await;
assert_eq!(r1.next().await, Some(20));
assert_eq!(r2.next().await, Some(20));
}