coaster 0.2.0

high-performance computation on any hardware
Documentation
extern crate coaster as co;
extern crate libc;

#[cfg(test)]
mod backend_spec {
    #[cfg(feature = "native")]
    mod native {
        use crate::co::prelude::*;
        use std::rc::Rc;

        #[test]
        fn it_can_create_default_backend() {
            assert!(Backend::<Native>::default().is_ok());
        }

        #[test]
        fn it_can_use_ibackend_trait_object() {
            let framework = Native::new();
            let hardwares = framework.hardwares().to_vec();
            let backend_config = BackendConfig::new(framework, &hardwares);
            let backend = Rc::new(Backend::new(backend_config).unwrap());
            use_ibackend(backend);
        }

        fn use_ibackend<B: IBackend>(backend: Rc<B>) {
            let backend: Rc<dyn IBackend<F = B::F>> = backend.clone();
            backend.device();
        }
    }

    #[cfg(feature = "cuda")]
    mod cuda {
        use crate::co::*;

        #[test]
        fn it_can_create_default_backend() {
            assert!(Backend::<Cuda>::default().is_ok());
        }
    }

    #[cfg(feature = "opencl")]
    mod opencl {
        use co::*;

        #[test]
        fn it_can_create_default_backend() {
            assert!(Backend::<OpenCL>::default().is_ok());
        }

        #[test]
        fn it_can_manually_create_backend() {
            let framework = OpenCL::new();
            let hardwares = framework.hardwares().to_vec();
            let backend_config = BackendConfig::new(framework, &hardwares);
            let backend = Backend::new(backend_config);
            println!("{:?}", backend);
        }
    }
}