mod support;
#[path = "gpu/cases.rs"]
mod gpu;
#[test]
fn test_eval_shader_compiles() {
let _ = pollster::block_on(async {
let instance = wgpu::Instance::new(&wgpu::InstanceDescriptor::default());
let adapter = instance.request_adapter(&wgpu::RequestAdapterOptions::default()).await.unwrap();
let (device, _) = adapter.request_device(&wgpu::DeviceDescriptor::default(), None).await.unwrap();
let shader_src = rulefire::shaders::eval_shader::build_eval_shader(64);
let shader = device.create_shader_module(wgpu::ShaderModuleDescriptor {
label: Some("test eval shader"),
source: wgpu::ShaderSource::Wgsl(shader_src.into()),
});
let pipeline = device.create_compute_pipeline(&wgpu::ComputePipelineDescriptor {
label: Some("test eval pipeline"),
layout: None,
module: &shader,
entry_point: Some("main"),
compilation_options: Default::default(),
cache: None,
});
let _ = pipeline.get_bind_group_layout(0);
});
}
use rulefire::index::CompiledRuleIndex;
use rulefire::vm::bytecode::{Opcode, Program};
#[test]
fn test_execute_gpu_direct() {
let program = Program {
instructions: vec![
rulefire::vm::bytecode::Instruction::new(Opcode::PushTrue, 0),
rulefire::vm::bytecode::Instruction::new(Opcode::Halt, 0),
],
};
let index = CompiledRuleIndex::from_programs(vec![("rule1".to_string(), program)], &[]).unwrap();
let (device, queue) = pollster::block_on(async {
let instance = wgpu::Instance::new(&wgpu::InstanceDescriptor::default());
let adapter = instance.request_adapter(&wgpu::RequestAdapterOptions::default()).await.unwrap();
adapter.request_device(&wgpu::DeviceDescriptor::default(), None).await.unwrap()
});
let file_ctx = rulefire::FileContext::from_bytes(b"test");
let hits = rulefire::gpu::gpu_pipeline::execute_gpu(&device, &queue, &index, &[], b"test", file_ctx).unwrap();
assert_eq!(hits.len(), 1);
assert!(hits[0]);
}