Skip to main content

oxiphysics_gpu/shaders/
functions_2.rs

1//! Auto-generated module
2//!
3//! 🤖 Generated with [SplitRS](https://github.com/cool-japan/splitrs)
4
5#[allow(unused_imports)]
6use super::functions::*;
7
8#[cfg(test)]
9mod shader_meta_tests {
10    use super::*;
11    use crate::shaders::BytecodeShaderCache;
12    use crate::shaders::ShaderMetaRegistry;
13    use crate::shaders::ShaderMetadata;
14    use crate::shaders::ShaderTemplateV2;
15    use crate::shaders::ShaderVariant;
16    use std::collections::HashMap;
17    #[test]
18    fn test_registry_lookup_after_register() {
19        let mut reg = ShaderMetaRegistry::new();
20        let meta = ShaderMetadata::new(ShaderVariant::Physics, "main", [64, 1, 1], 1);
21        reg.register("physics_kernel", meta);
22        let found = reg.lookup("physics_kernel");
23        assert!(found.is_some());
24        assert_eq!(found.unwrap().variant, ShaderVariant::Physics);
25        assert_eq!(found.unwrap().entry_point, "main");
26        assert!(reg.lookup("nonexistent").is_none());
27    }
28    #[test]
29    fn test_registry_all_names() {
30        let mut reg = ShaderMetaRegistry::new();
31        reg.register(
32            "a",
33            ShaderMetadata::new(ShaderVariant::Sph, "main", [64, 1, 1], 2),
34        );
35        reg.register(
36            "b",
37            ShaderMetadata::new(ShaderVariant::Lbm, "cs_main", [32, 1, 1], 3),
38        );
39        let mut names = reg.all_names();
40        names.sort();
41        assert_eq!(names, vec!["a", "b"]);
42    }
43    #[test]
44    fn test_bytecode_cache_insert_and_get() {
45        let mut cache = BytecodeShaderCache::new(1024);
46        cache.insert("kernel_a", vec![0u8; 100]);
47        assert!(cache.get("kernel_a").is_some());
48        assert_eq!(cache.get("kernel_a").unwrap().len(), 100);
49        assert_eq!(cache.total_bytes(), 100);
50    }
51    #[test]
52    fn test_bytecode_cache_eviction() {
53        let mut cache = BytecodeShaderCache::new(150);
54        cache.insert("a", vec![0u8; 100]);
55        cache.insert("b", vec![0u8; 100]);
56        assert!(cache.get("a").is_none(), "oldest entry should be evicted");
57        assert!(cache.get("b").is_some(), "newest entry should remain");
58        assert!(cache.total_bytes() <= 150);
59    }
60    #[test]
61    fn test_template_instantiation() {
62        let mut defines = HashMap::new();
63        defines.insert("WORKGROUP_SIZE".to_string(), "128".to_string());
64        defines.insert("DTYPE".to_string(), "f32".to_string());
65        let tmpl = ShaderTemplateV2::new(
66            "@compute @workgroup_size(WORKGROUP_SIZE)\nvar x: DTYPE;",
67            defines,
68        );
69        let out = tmpl.instantiate();
70        assert!(out.contains("128"), "WORKGROUP_SIZE should be replaced");
71        assert!(out.contains("f32"), "DTYPE should be replaced");
72        assert!(
73            !out.contains("WORKGROUP_SIZE"),
74            "placeholder should be gone"
75        );
76    }
77    #[test]
78    fn test_metadata_validation_valid() {
79        let meta = ShaderMetadata::new(ShaderVariant::Collision, "main", [64, 1, 1], 2);
80        assert!(validate_shader_metadata(&meta).is_ok());
81    }
82    #[test]
83    fn test_metadata_validation_zero_workgroup() {
84        let meta = ShaderMetadata::new(ShaderVariant::RigidBody, "main", [0, 1, 1], 1);
85        assert!(validate_shader_metadata(&meta).is_err());
86    }
87    #[test]
88    fn test_metadata_validation_too_many_threads() {
89        let meta = ShaderMetadata::new(ShaderVariant::NeuralInference, "main", [32, 32, 2], 1);
90        assert!(validate_shader_metadata(&meta).is_err());
91    }
92    #[test]
93    fn test_metadata_validation_too_many_bind_groups() {
94        let meta = ShaderMetadata::new(ShaderVariant::Sph, "main", [64, 1, 1], 5);
95        assert!(validate_shader_metadata(&meta).is_err());
96    }
97    #[test]
98    fn test_metadata_validation_empty_entry_point() {
99        let meta = ShaderMetadata::new(ShaderVariant::Lbm, "", [64, 1, 1], 1);
100        assert!(validate_shader_metadata(&meta).is_err());
101    }
102}