use super::*;

fn wait(stop: &AtomicBool) -> Result<u64, BenchError> {
    let bound = Instant::now() + Duration::from_secs(2);
    while !stop.load(Relaxed) {
        assert!(Instant::now() < bound, "worker failed to request stop");
        std::thread::yield_now();
    }
    Ok(0)
}
#[test]
fn partial_spawn_and_main_errors_join_every_started_worker() {
    for spawn_failure in [false, true] {
        let done = AtomicU64::new(0);
        let result = workers(
            2,
            &|_, stop| {
                while !stop.load(Relaxed) {
                    std::thread::yield_now();
                }
                done.fetch_add(1, Relaxed);
                Ok(1)
            },
            |_| Err(BenchError::InvalidInput("main failed")),
            |id| {
                if spawn_failure && id == 1 {
                    Err(std::io::Error::other("injected spawn failure"))
                } else {
                    Ok(())
                }
            },
        );
        if spawn_failure {
            assert!(matches!(result, Err(BenchError::WorkerSpawn(_))));
            assert_eq!(done.load(Relaxed), 1);
        } else {
            assert!(matches!(
                result,
                Err(BenchError::InvalidInput("main failed"))
            ));
            assert_eq!(done.load(Relaxed), 2);
        }
    }
}
#[test]
fn worker_failures_publish_after_joins_with_fixed_precedence() {
    assert!(matches!(
        workers(1, &|_, _| panic!("injected worker panic"), wait, |_| Ok(())),
        Err(BenchError::WorkerPanicked)
    ));
    assert!(matches!(
        workers(1, &|_, _| Err(Fault::Reference), wait, |_| Ok(())),
        Err(BenchError::InvalidInput(_))
    ));
    assert!(matches!(
        workers(
            2,
            &|id, _| Ok(if id == 0 { u64::MAX } else { 1 }),
            wait,
            |_| Ok(())
        ),
        Err(BenchError::CounterOverflow)
    ));
    assert!(matches!(
        workers(
            1,
            &|_, _| Err(Fault::Count),
            |_| Err(BenchError::InvalidInput("main")),
            |_| Ok(())
        ),
        Err(BenchError::InvalidInput("main"))
    ));
    assert!(matches!(
        workers(
            2,
            &|id, _| Err(if id == 0 {
                Fault::Count
            } else {
                Fault::Reference
            }),
            wait,
            |_| Ok(())
        ),
        Err(BenchError::CounterOverflow)
    ));
    assert!(matches!(
        workers(0, &|_, _| Ok(0), |_| Ok(0), |_| Ok(())),
        Err(BenchError::InvalidInput(_))
    ));
}
#[test]
fn invalid_durations_and_zero_batch_fail_without_work() {
    for seconds in [0.0, -1.0, f64::NAN, f64::INFINITY, f64::MAX] {
        assert!(deadline(seconds).is_err());
    }
    assert!(deadline(0.001).is_ok());
    let gpu = Gpu::open().unwrap();
    let table = RTable::open(&gpu, 1).unwrap();
    let mut owner = miner(&gpu, MineVariant::V1Single, &table, None).unwrap();
    assert!(matches!(
        gpu_loop(
            &mut owner,
            deadline(1.0).unwrap(),
            &AtomicBool::new(false),
            0,
            0,
            1
        ),
        Err(BenchError::InvalidInput(_))
    ));
    assert_eq!(owner.run(&M_TEST, 0, 0, 1).unwrap(), [0; 32]);
}

Homonyms

warriors/trisha/rs/lower/tests.rs
cyb/honeycrisp/aruminium/src/tests.rs
soft3/radio/iroh-blobs/src/tests.rs
neural/trident/src/neural/tests.rs
soft3/lens/cli/src/tests.rs
neural/trident/src/deploy/tests.rs
neural/trident/src/package/registry/tests.rs
neural/trident/src/lsp/semantic/tests.rs
neural/trident/src/verify/sym/tests.rs
cyb/wysm/crates/wasmi/src/tests.rs
soft3/radio/cyber-bao/src/tree/tests.rs
neural/trident/src/verify/report/tests.rs
neural/trident/src/config/resolve/tests.rs
neural/trident/src/verify/solve/tests.rs
neural/trident/src/syntax/grammar/tests.rs
neural/trident/src/package/hash/tests.rs
neural/trident/src/lsp/util/tests.rs
neural/trident/src/config/scaffold/tests.rs
neural/trident/src/verify/synthesize/tests.rs
neural/trident/src/package/manifest/tests.rs
neural/trident/src/verify/equiv/tests.rs
neural/trident/src/verify/smt/tests.rs
soft3/radio/quinn/quinn-udp/tests/tests.rs
cyb/honeycrisp/aruminium/src/render/tests.rs
warriors/trisha/rs/lower/legalize/tests.rs
soft3/radio/quinn/quinn/src/tests.rs
cyb/wysm/crates/collections/src/tests.rs
cyb/honeycrisp/unimem/src/block/tests.rs
cyb/wysm/crates/cli/src/tests.rs
neural/trident/src/package/store/tests.rs
warriors/trisha/rs/cost/stack_verifier/tests.rs
soft3/radio/cyber-bao/src/group/tests.rs
neural/trident/src/syntax/lexer/tests.rs
neural/trident/src/syntax/format/tests.rs
cyb/wysm/crates/core/src/table/tests.rs
soft3/radio/quinn/quinn-proto/src/range_set/tests.rs
neural/trident/src/neural/data/tir_graph/tests.rs
cyb/wysm/crates/wasmi/src/instance/tests.rs
warriors/erga/rs/mine-bench/src/texture_ffi/tests.rs
warriors/erga/rs/blake-bench/src/batch/tests.rs
neural/trident/src/ir/tir/optimize/tests.rs
soft3/zheng/rs/src/ccs/universal/tests.rs
neural/trident/src/ir/tir/stack/tests.rs
warriors/erga/rs/rtable-bench/src/table/tests.rs
cyb/evy/forks/bevy_ecs/src/bundle/tests.rs
warriors/erga/rs/rtable-bench/src/probe/tests.rs
warriors/erga/rs/mine-bench/src/owner/tests.rs
cyb/wysm/crates/core/src/memory/tests.rs
cyb/wysm/crates/wasmi/src/module/instantiate/tests.rs
cyb/wysm/crates/wasmi/src/engine/limits/tests.rs
cyb/evy/forks/naga/src/front/wgsl/tests.rs

Graph