use super::*;
#[test]
fn test_cuda_error_string_success() {
assert_eq!(cuda_error_string(CUDA_SUCCESS), "CUDA_SUCCESS");
}
#[test]
fn test_cuda_error_string_oom() {
assert_eq!(cuda_error_string(CUDA_ERROR_OUT_OF_MEMORY), "CUDA_ERROR_OUT_OF_MEMORY");
}
#[test]
fn test_cuda_error_string_unknown() {
assert_eq!(cuda_error_string(99999), "CUDA_ERROR_UNKNOWN");
}
#[test]
fn test_cuda_constants() {
assert_eq!(CUDA_SUCCESS, 0);
assert_eq!(CUDA_ERROR_NO_DEVICE, 100);
assert_eq!(CUDA_ERROR_INVALID_PTX, 218);
}
#[test]
fn test_custream_flags() {
assert_eq!(CU_STREAM_DEFAULT, 0);
assert_eq!(CU_STREAM_NON_BLOCKING, 1);
}
#[test]
#[cfg(not(feature = "cuda"))]
fn test_driver_load_without_feature() {
assert!(CudaDriver::load().is_none());
}
#[test]
#[cfg(not(feature = "cuda"))]
fn test_check_without_feature() {
let result = CudaDriver::check(CUDA_SUCCESS);
assert!(result.is_err());
}
#[test]
fn test_all_error_strings() {
assert_eq!(cuda_error_string(CUDA_ERROR_INVALID_VALUE), "CUDA_ERROR_INVALID_VALUE");
assert_eq!(cuda_error_string(CUDA_ERROR_NOT_INITIALIZED), "CUDA_ERROR_NOT_INITIALIZED");
assert_eq!(cuda_error_string(CUDA_ERROR_DEINITIALIZED), "CUDA_ERROR_DEINITIALIZED");
assert_eq!(cuda_error_string(CUDA_ERROR_INVALID_DEVICE), "CUDA_ERROR_INVALID_DEVICE");
assert_eq!(cuda_error_string(CUDA_ERROR_NOT_FOUND), "CUDA_ERROR_NOT_FOUND");
}
#[test]
fn test_error_codes_are_distinct() {
let codes = [
CUDA_SUCCESS,
CUDA_ERROR_INVALID_VALUE,
CUDA_ERROR_OUT_OF_MEMORY,
CUDA_ERROR_NOT_INITIALIZED,
CUDA_ERROR_DEINITIALIZED,
CUDA_ERROR_NO_DEVICE,
CUDA_ERROR_INVALID_DEVICE,
CUDA_ERROR_INVALID_PTX,
CUDA_ERROR_NOT_FOUND,
];
for i in 0..codes.len() {
for j in (i + 1)..codes.len() {
assert_ne!(codes[i], codes[j], "Error codes at {} and {} are equal", i, j);
}
}
}
#[test]
fn test_type_sizes() {
assert_eq!(std::mem::size_of::<CUresult>(), std::mem::size_of::<i32>());
assert_eq!(std::mem::size_of::<CUdevice>(), std::mem::size_of::<i32>());
assert_eq!(std::mem::size_of::<CUdeviceptr>(), std::mem::size_of::<u64>());
assert_eq!(std::mem::size_of::<CUcontext>(), std::mem::size_of::<*mut ()>());
assert_eq!(std::mem::size_of::<CUmodule>(), std::mem::size_of::<*mut ()>());
assert_eq!(std::mem::size_of::<CUfunction>(), std::mem::size_of::<*mut ()>());
assert_eq!(std::mem::size_of::<CUstream>(), std::mem::size_of::<*mut ()>());
}
#[test]
fn test_null_pointers() {
use std::ptr;
let ctx: CUcontext = ptr::null_mut();
let module: CUmodule = ptr::null_mut();
let func: CUfunction = ptr::null_mut();
let stream: CUstream = ptr::null_mut();
assert!(ctx.is_null());
assert!(module.is_null());
assert!(func.is_null());
assert!(stream.is_null());
}