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