Sha256: 2a41533a5f7f113d19cd2bdafcc2abf86509109652274156efdd74abd00896b6

Contents?: true

Size: 1.42 KB

Versions: 20

Compression:

Stored size: 1.42 KB

Contents

use std::sync::mpsc;
use std::thread;
use std::time::Duration;

use crossbeam_utils::sync::WaitGroup;

const THREADS: usize = 10;

#[test]
fn wait() {
    let wg = WaitGroup::new();
    let (tx, rx) = mpsc::channel();

    for _ in 0..THREADS {
        let wg = wg.clone();
        let tx = tx.clone();

        thread::spawn(move || {
            wg.wait();
            tx.send(()).unwrap();
        });
    }

    thread::sleep(Duration::from_millis(100));

    // At this point, all spawned threads should be blocked, so we shouldn't get anything from the
    // channel.
    assert!(rx.try_recv().is_err());

    wg.wait();

    // Now, the wait group is cleared and we should receive messages.
    for _ in 0..THREADS {
        rx.recv().unwrap();
    }
}

#[test]
fn wait_and_drop() {
    let wg = WaitGroup::new();
    let wg2 = WaitGroup::new();
    let (tx, rx) = mpsc::channel();

    for _ in 0..THREADS {
        let wg = wg.clone();
        let wg2 = wg2.clone();
        let tx = tx.clone();

        thread::spawn(move || {
            wg2.wait();
            tx.send(()).unwrap();
            drop(wg);
        });
    }

    // At this point, no thread has gotten past `wg2.wait()`, so we shouldn't get anything from the
    // channel.
    assert!(rx.try_recv().is_err());
    drop(wg2);

    wg.wait();

    // Now, the wait group is cleared and we should receive messages.
    for _ in 0..THREADS {
        rx.try_recv().unwrap();
    }
}

Version data entries

20 entries across 20 versions & 1 rubygems

Version Path
wasmtime-30.0.2 ./ext/cargo-vendor/crossbeam-utils-0.8.21/tests/wait_group.rs
wasmtime-29.0.0 ./ext/cargo-vendor/crossbeam-utils-0.8.21/tests/wait_group.rs
wasmtime-28.0.0 ./ext/cargo-vendor/crossbeam-utils-0.8.21/tests/wait_group.rs
wasmtime-27.0.0 ./ext/cargo-vendor/crossbeam-utils-0.8.20/tests/wait_group.rs
wasmtime-26.0.0 ./ext/cargo-vendor/crossbeam-utils-0.8.20/tests/wait_group.rs
wasmtime-25.0.2 ./ext/cargo-vendor/crossbeam-utils-0.8.20/tests/wait_group.rs
wasmtime-25.0.1 ./ext/cargo-vendor/crossbeam-utils-0.8.20/tests/wait_group.rs
wasmtime-25.0.0 ./ext/cargo-vendor/crossbeam-utils-0.8.20/tests/wait_group.rs
wasmtime-24.0.0 ./ext/cargo-vendor/crossbeam-utils-0.8.20/tests/wait_group.rs
wasmtime-23.0.2 ./ext/cargo-vendor/crossbeam-utils-0.8.18/tests/wait_group.rs
wasmtime-22.0.0 ./ext/cargo-vendor/crossbeam-utils-0.8.18/tests/wait_group.rs
wasmtime-21.0.1 ./ext/cargo-vendor/crossbeam-utils-0.8.18/tests/wait_group.rs
wasmtime-20.0.2 ./ext/cargo-vendor/crossbeam-utils-0.8.18/tests/wait_group.rs
wasmtime-20.0.0 ./ext/cargo-vendor/crossbeam-utils-0.8.18/tests/wait_group.rs
wasmtime-18.0.3 ./ext/cargo-vendor/crossbeam-utils-0.8.18/tests/wait_group.rs
wasmtime-17.0.1 ./ext/cargo-vendor/crossbeam-utils-0.8.18/tests/wait_group.rs
wasmtime-17.0.0 ./ext/cargo-vendor/crossbeam-utils-0.8.18/tests/wait_group.rs
wasmtime-16.0.0 ./ext/cargo-vendor/crossbeam-utils-0.8.18/tests/wait_group.rs
wasmtime-15.0.1 ./ext/cargo-vendor/crossbeam-utils-0.8.18/tests/wait_group.rs
wasmtime-15.0.0 ./ext/cargo-vendor/crossbeam-utils-0.8.18/tests/wait_group.rs