use proptest::prelude::*;
use vyre::ir::validate;
use vyre::lower::wgsl::lower;
use crate::support::arb_program;
fn gpu_device() -> &'static (wgpu::Device, wgpu::Queue) {
vyre_wgpu::runtime::cached_device()
.unwrap_or_else(|error| panic!("Fix: GPU is mandatory for generated lower tests: {error}"))
}
fn compile_wgsl(device: &wgpu::Device, wgsl: &str) -> wgpu::ComputePipeline {
let module = device.create_shader_module(wgpu::ShaderModuleDescriptor {
label: Some("lower_generated_test"),
source: wgpu::ShaderSource::Wgsl(wgsl.into()),
});
device.create_compute_pipeline(&wgpu::ComputePipelineDescriptor {
label: Some("lower_generated_test"),
layout: None,
module: &module,
entry_point: Some("main"),
compilation_options: wgpu::PipelineCompilationOptions::default(),
cache: None,
})
}
proptest! {
#![proptest_config(ProptestConfig::with_cases(100))]
#[test]
fn valid_programs_lower_and_compile(program in arb_program()) {
let errors = validate(&program);
prop_assume!(errors.is_empty(), "program failed validation: {:?}", errors);
let wgsl = lower(&program).expect("valid program must lower to WGSL");
let (device, _queue) = gpu_device();
let _pipeline = compile_wgsl(device, &wgsl);
}
}