use voxora_engine::BackendKind;
#[derive(Debug, Clone, PartialEq, Eq)]
#[non_exhaustive]
pub struct Capabilities {
pub compiled: Vec<BackendKind>,
pub available: Vec<BackendKind>,
}
impl Capabilities {
pub fn new(compiled: Vec<BackendKind>) -> Self {
let available = compiled.clone();
Self {
compiled,
available,
}
}
pub fn is_compiled(&self, kind: BackendKind) -> bool {
self.compiled.contains(&kind)
}
pub fn is_available(&self, kind: BackendKind) -> bool {
self.available.contains(&kind)
}
pub fn iter_compiled(&self) -> std::slice::Iter<'_, BackendKind> {
self.compiled.iter()
}
pub fn iter_available(&self) -> std::slice::Iter<'_, BackendKind> {
self.available.iter()
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn empty_capabilities_reports_nothing_compiled() {
let caps = Capabilities::new(Vec::new());
assert!(!caps.is_compiled(BackendKind::Cpu));
assert!(!caps.is_available(BackendKind::Cpu));
}
#[test]
fn compiled_and_available_match_in_phase_1() {
let caps = Capabilities::new(vec![BackendKind::Cpu, BackendKind::Cuda]);
assert!(caps.is_compiled(BackendKind::Cpu));
assert!(caps.is_available(BackendKind::Cpu));
assert!(caps.is_compiled(BackendKind::Cuda));
assert!(caps.is_available(BackendKind::Cuda));
assert!(!caps.is_compiled(BackendKind::Metal));
}
}