Skip to content
Snippets Groups Projects
main.rs 1.86 KiB
#![feature(concat_idents)]

use hercules_rt::runner;

juno_build::juno!("fork_join_tests");

fn main() {
    #[cfg(not(feature = "cuda"))]
    let assert = |correct: &Vec<i32>, output: hercules_rt::HerculesCPURefMut<'_>| {
        assert_eq!(output.as_slice::<i32>(), correct);
    };

    #[cfg(feature = "cuda")]
    let assert = |correct: &Vec<i32>, output: hercules_rt::HerculesCUDARefMut<'_>| {
        let mut dst = vec![0i32; correct.len()];
        let output = output.to_cpu_ref(&mut dst);
        assert_eq!(output.as_slice::<i32>(), correct);
    };

    async_std::task::block_on(async {
        let mut r = runner!(test1);
        let output = r.run(5).await;
        let correct = vec![5i32; 16];
        assert(&correct, output);

        let mut r = runner!(test2);
        let output = r.run(3).await;
        let correct = vec![24i32; 20];
        assert(&correct, output);

        let mut r = runner!(test3);
        let output = r.run(0).await;
        let correct = vec![11, 10, 9, 10, 9, 8, 9, 8, 7];
        assert(&correct, output);

        let mut r = runner!(test4);
        let output = r.run(9).await;
        let correct = vec![63i32; 16];
        assert(&correct, output);

        let mut r = runner!(test5);
        let output = r.run(4).await;
        let correct = vec![7i32; 4];
        assert(&correct, output);

        let mut r = runner!(test6);
        let output = r.run(73).await;
        let correct = (73i32..73i32+1024i32).collect();
        assert(&correct, output);

        let mut r = runner!(test7);
        let output = r.run(42).await;
        let correct: i32 = (42i32..42i32+32i32).sum();
        assert_eq!(correct, output);

        let mut r = runner!(test8);
        let output = r.run(0).await;
        let correct = vec![10, 17, 24, 31, 38, 45, 52, 59];
        assert(&correct, output);
    });
}

#[test]
fn fork_join_test() {
    main();
}