#[cfg(feature = "shader-gen")]
use cgpu::*;
#[cfg(feature = "shader-gen")]
#[test]
fn builder_generates_inline_wgsl() {
let shader = ShaderBuilder::new()
.workgroup_size(64, 1, 1)
.add_binding(BindingDesc::storage_buffer_read_only(
0,
"items",
"array<u32>",
))
.add_binding(BindingDesc::storage_buffer(1, "results", "array<u32>"))
.main_block(
r#"
let idx = global_id.x;
if idx < arrayLength(&items) {
results[idx] = items[idx] * 2u;
}
"#,
)
.build();
assert!(shader.contains("@workgroup_size(64, 1, 1)"));
assert!(shader.contains("var<storage, read> items: array<u32>;"));
assert!(shader.contains("results[idx] = items[idx] * 2u;"));
}
#[cfg(feature = "shader-gen")]
#[test]
fn source_builder_reuses_common_chunks() {
let shader = ShaderSourceBuilder::new("tokenize")
.with_batch_metadata()
.with_common_compute_utils()
.with_source("@compute @workgroup_size(64) fn main() {}")
.finish();
assert_eq!(shader.label, "tokenize");
assert!(shader.source.contains("struct BatchMeta"));
assert!(shader.source.contains("ceil_div_u32"));
assert!(shader.source.contains("@compute"));
}