// 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.

use fuchsia_async as fasync;
use futures::{self, task::Poll, FutureExt};
use waitgroup::*;

#[fasync::run_singlethreaded]
#[test]
async fn does_not_terminate_early() {
    let mut wg = WaitGroup::new();

    {
        let _waiter = wg.new_waiter();
    }
    let _waiter = wg.new_waiter();

    let wait_fut = wg.wait().fuse();
    fasync::pin_mut!(wait_fut);
    assert_eq!(futures::poll!(wait_fut), Poll::Pending);
}

#[fasync::run_singlethreaded]
#[test]
async fn terminates_with_dropped_waiters() {
    let mut wg = WaitGroup::new();

    {
        let _waiter = wg.new_waiter();
        let _other_waiter = wg.new_waiter();
    }

    let wait_fut = wg.wait().fuse();
    fasync::pin_mut!(wait_fut);
    assert_eq!(futures::poll!(wait_fut), Poll::Ready(()));
}
