use std::ffi::CString;
const DATASET_SIZE: usize = 1 << 20;
#[test]
fn fill() {
let src = r#"
__kernel void add(__global float* buffer, float addend) {
buffer[get_global_id(0)] += addend;
}
"#;
let platform_id = crate::default_platform().unwrap();
let device_ids = crate::get_device_ids(&platform_id, None, None).unwrap();
let device = device_ids[0];
let context_properties = crate::ContextProperties::new().platform(platform_id);
let context = crate::create_context(Some(&context_properties), &[device], None, None).unwrap();
let src_cstring = CString::new(src).unwrap();
let program = crate::create_program_with_source(&context, &[src_cstring]).unwrap();
crate::build_program(
&program,
None::<&[()]>,
&CString::new("").unwrap(),
None,
None,
)
.unwrap();
let queue = crate::create_command_queue(&context, &device, Some(crate::QUEUE_PROFILING_ENABLE))
.unwrap();
let buffer = unsafe {
crate::create_buffer::<_, f32>(&context, crate::MEM_READ_WRITE, DATASET_SIZE, None).unwrap()
};
crate::enqueue_fill_buffer::<f32, _, _, _>(
&queue,
&buffer,
5.0f32,
0,
DATASET_SIZE,
None::<crate::Event>,
None::<&mut crate::Event>,
None,
)
.unwrap();
let mut vec = vec![0.0f32; DATASET_SIZE];
unsafe {
crate::enqueue_read_buffer::<f32, _, _, _>(
&queue,
&buffer,
true,
0,
&mut vec,
None::<crate::Event>,
None::<&mut crate::Event>,
)
.unwrap()
};
assert!(vec.iter().all(|x| *x == 5.0f32));
}