pub mod error;
pub mod session;
pub mod stage_i;
pub mod stage_ii;
pub mod stage_iii;
pub mod stage_iv;
pub mod stage_v;
pub mod stage_vi;
pub mod types;
pub use error::{CrvError, CrvResult};
pub use session::CrvSessionManager;
pub use stage_i::StageIEncoder;
pub use stage_ii::StageIIEncoder;
pub use stage_iii::StageIIIEncoder;
pub use stage_iv::StageIVEncoder;
pub use stage_v::StageVEngine;
pub use stage_vi::StageVIModeler;
pub use types::{
AOLDetection, ConvergenceResult, CrossReference, CrvConfig, CrvSessionEntry,
GeometricKind, GestaltType, SensoryModality, SignalLineProbe, SketchElement,
SpatialRelationType, SpatialRelationship, StageIData, StageIIData, StageIIIData,
StageIVData, StageVData, StageVIData, TargetPartition,
};
pub const VERSION: &str = env!("CARGO_PKG_VERSION");
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_version() {
assert!(!VERSION.is_empty());
}
#[test]
fn test_end_to_end_session() {
let config = CrvConfig {
dimensions: 32,
..CrvConfig::default()
};
let mut manager = CrvSessionManager::new(config);
manager
.create_session("viewer-a".to_string(), "target-001".to_string())
.unwrap();
manager
.create_session("viewer-b".to_string(), "target-001".to_string())
.unwrap();
let s1_a = StageIData {
stroke: vec![(0.0, 0.0), (1.0, 1.0), (2.0, 0.5), (3.0, 0.0)],
spontaneous_descriptor: "tall angular".to_string(),
classification: GestaltType::Manmade,
confidence: 0.85,
};
manager.add_stage_i("viewer-a", &s1_a).unwrap();
let s1_b = StageIData {
stroke: vec![(0.0, 0.0), (0.5, 1.2), (1.5, 0.8), (2.5, 0.0)],
spontaneous_descriptor: "structured upward".to_string(),
classification: GestaltType::Manmade,
confidence: 0.78,
};
manager.add_stage_i("viewer-b", &s1_b).unwrap();
let s2_a = StageIIData {
impressions: vec![
(SensoryModality::Texture, "rough stone".to_string()),
(SensoryModality::Temperature, "cool".to_string()),
(SensoryModality::Color, "gray".to_string()),
],
feature_vector: None,
};
manager.add_stage_ii("viewer-a", &s2_a).unwrap();
let s2_b = StageIIData {
impressions: vec![
(SensoryModality::Texture, "grainy rough".to_string()),
(SensoryModality::Color, "dark gray".to_string()),
(SensoryModality::Luminosity, "dim".to_string()),
],
feature_vector: None,
};
manager.add_stage_ii("viewer-b", &s2_b).unwrap();
assert_eq!(manager.session_entry_count("viewer-a"), 2);
assert_eq!(manager.session_entry_count("viewer-b"), 2);
let entries_a = manager.get_session_embeddings("viewer-a").unwrap();
let entries_b = manager.get_session_embeddings("viewer-b").unwrap();
assert_eq!(entries_a.len(), 2);
assert_eq!(entries_b.len(), 2);
for entry in entries_a.iter().chain(entries_b.iter()) {
assert_eq!(entry.embedding.len(), 32);
}
}
}