use crate::store::{
config::AdapterConfig,
error::Result as StoreResult,
};
#[derive(Debug, Clone, Default)]
pub struct OntologyConfig {
pub strict: bool,
}
impl OntologyConfig {
pub fn strict() -> Self {
Self { strict: true }
}
pub fn soft() -> Self {
Self { strict: false }
}
}
impl AdapterConfig for OntologyConfig {
fn adapter_name(&self) -> &'static str {
"ontology"
}
fn validate(&self) -> StoreResult<()> {
Ok(())
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
pub enum MaterializationStrategy {
#[default]
Union,
Intersection,
Precedence,
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn default_is_not_strict() {
assert!(!OntologyConfig::default().strict);
}
#[test]
fn strict_constructor() {
assert!(OntologyConfig::strict().strict);
}
#[test]
fn soft_constructor() {
assert!(!OntologyConfig::soft().strict);
}
#[test]
fn adapter_name() {
assert_eq!(OntologyConfig::default().adapter_name(), "ontology");
}
#[test]
fn validate_always_passes() {
assert!(OntologyConfig::default().validate().is_ok());
assert!(OntologyConfig::strict().validate().is_ok());
}
#[test]
fn materialization_strategy_default_is_union() {
assert_eq!(MaterializationStrategy::default(), MaterializationStrategy::Union);
}
#[test]
fn materialization_strategies_are_distinct() {
assert_ne!(MaterializationStrategy::Union, MaterializationStrategy::Intersection);
assert_ne!(MaterializationStrategy::Union, MaterializationStrategy::Precedence);
assert_ne!(MaterializationStrategy::Intersection, MaterializationStrategy::Precedence);
}
}