Files
wifi-densepose/examples/exo-ai-2025/crates/exo-backend-classical/tests/transfer_pipeline_test.rs
ruv d803bfe2b1 Squashed 'vendor/ruvector/' content from commit b64c2172
git-subtree-dir: vendor/ruvector
git-subtree-split: b64c21726f2bb37286d9ee36a7869fef60cc6900
2026-02-28 14:39:40 -05:00

122 lines
3.9 KiB
Rust

//! End-to-end integration test for the full 5-phase transfer pipeline.
//!
//! This test exercises `ExoTransferOrchestrator` which wires together:
//! - Phase 1: Thompson-sampling domain bridge
//! - Phase 2: Transfer manifold (exo-manifold)
//! - Phase 3: Transfer timeline (exo-temporal)
//! - Phase 4: Transfer CRDT (exo-federation)
//! - Phase 5: Emergent detection (exo-exotic)
use exo_backend_classical::transfer_orchestrator::ExoTransferOrchestrator;
#[test]
fn test_full_transfer_pipeline_single_cycle() {
let mut orch = ExoTransferOrchestrator::new("e2e_node");
// Before any cycle, no prior should be known.
assert!(orch.best_prior().is_none());
assert_eq!(orch.cycle(), 0);
// Run first cycle: establishes a baseline.
let result = orch.run_cycle();
assert_eq!(result.cycle, 1, "cycle counter should increment");
assert!(
result.eval_score >= 0.0 && result.eval_score <= 1.0,
"eval_score must be in [0, 1]: got {}",
result.eval_score
);
assert!(
result.manifold_entries >= 1,
"at least one prior should be stored in the manifold"
);
// Phase 4: CRDT should now have a prior for the (src, dst) pair.
assert!(
orch.best_prior().is_some(),
"CRDT should hold a prior after the first cycle"
);
}
#[test]
fn test_full_transfer_pipeline_multi_cycle() {
let mut orch = ExoTransferOrchestrator::new("e2e_multi");
// Run several cycles to let all phases accumulate state.
for expected_cycle in 1..=6u64 {
let result = orch.run_cycle();
assert_eq!(result.cycle, expected_cycle);
assert!(result.eval_score >= 0.0 && result.eval_score <= 1.0);
}
// After 6 cycles:
// - Manifold should hold (src, dst) prior from every cycle.
let last = orch.run_cycle();
assert_eq!(last.cycle, 7);
assert!(last.manifold_entries >= 1);
// - Emergence detector should be active (score is a valid float).
assert!(last.emergence_score.is_finite());
// - CRDT should know both domain IDs.
let prior = orch.best_prior().expect("CRDT must hold a prior");
assert_eq!(prior.src_domain, "exo-retrieval");
assert_eq!(prior.dst_domain, "exo-graph");
assert!(prior.improvement >= 0.0 && prior.improvement <= 1.0);
assert!(prior.confidence >= 0.0 && prior.confidence <= 1.0);
assert!(prior.cycle >= 1);
}
#[test]
fn test_transfer_emergence_increases_with_cycles() {
let mut orch = ExoTransferOrchestrator::new("e2e_emergence");
// Baseline (cycle 1 records baseline score, emergence = initial detection).
orch.run_cycle();
// Subsequent cycles contribute post-transfer scores.
let mut scores: Vec<f64> = Vec::new();
for _ in 0..5 {
let r = orch.run_cycle();
scores.push(r.emergence_score);
}
// All emergence scores must be finite non-negative values.
for score in &scores {
assert!(score.is_finite(), "emergence score must be finite");
assert!(*score >= 0.0, "emergence score must be non-negative");
}
}
#[test]
fn test_transfer_manifold_accumulates() {
let mut orch = ExoTransferOrchestrator::new("e2e_manifold");
// Each cycle stores a prior in the manifold.
for i in 1..=5 {
let result = orch.run_cycle();
// Manifold stores one entry per (src, dst) pair; repeated writes
// update the same entry, so count stays at 1.
assert!(
result.manifold_entries >= 1,
"cycle {}: manifold must hold ≥1 entry",
i
);
}
}
#[test]
fn test_crdt_prior_consistency() {
let mut orch = ExoTransferOrchestrator::new("e2e_crdt");
// Run 3 cycles; the CRDT should consistently return a valid prior.
for _ in 0..3 {
orch.run_cycle();
}
let prior = orch.best_prior().expect("prior must exist after 3 cycles");
assert_eq!(prior.src_domain, "exo-retrieval");
assert_eq!(prior.dst_domain, "exo-graph");
assert!(prior.cycle >= 1 && prior.cycle <= 3);
}