use scirs2_core::ndarray::*;
use scirs2_core::random::prelude::*;
use super::types::{
EntanglementConfig, EntanglementManager, ExpertArchitecture, ExpertSpecialization,
InterferencePattern, LoadBalancer, LoadBalancingStrategy, QuantumExpert, QuantumGateNetwork,
QuantumMixtureOfExperts, QuantumMixtureOfExpertsConfig, QuantumRouter, QuantumRoutingStrategy,
RoutingType,
};
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_quantum_mixture_of_experts_creation() {
let config = QuantumMixtureOfExpertsConfig::default();
let moe = QuantumMixtureOfExperts::new(config);
assert!(moe.is_ok());
}
#[test]
fn test_expert_creation() {
let config = QuantumMixtureOfExpertsConfig::default();
let expert = QuantumExpert::new(0, &config);
assert!(expert.is_ok());
}
#[test]
fn test_quantum_routing() {
let config = QuantumMixtureOfExpertsConfig::default();
let mut router = QuantumRouter::new(&config).expect("Router creation should succeed");
let input = Array1::from_vec(vec![0.1, 0.2, 0.3, 0.4]);
let result = router.route(&input);
assert!(result.is_ok());
let routing_result = result.expect("Routing should succeed");
assert_eq!(routing_result.expert_weights.len(), 8);
assert!(routing_result.routing_confidence >= 0.0);
assert!(routing_result.routing_confidence <= 1.0);
}
#[test]
fn test_forward_pass() {
let config = QuantumMixtureOfExpertsConfig {
input_dim: 4,
output_dim: 2,
num_experts: 3,
..Default::default()
};
let mut moe = QuantumMixtureOfExperts::new(config).expect("MoE creation should succeed");
let input = Array1::from_vec(vec![0.1, 0.2, 0.3, 0.4]);
let result = moe.forward(&input);
assert!(result.is_ok());
let output = result.expect("Forward pass should succeed");
assert_eq!(output.expert_weights.len(), 3);
assert!(output.routing_decision.routing_confidence >= 0.0);
}
#[test]
fn test_load_balancing() {
let config = QuantumMixtureOfExpertsConfig {
load_balancing: LoadBalancingStrategy::Uniform,
..Default::default()
};
let mut balancer =
LoadBalancer::new(&config).expect("LoadBalancer creation should succeed");
let weights = Array1::from_vec(vec![0.8, 0.1, 0.1]);
let balanced = balancer.balance_loads(&weights);
assert!(balanced.is_ok());
let balanced_weights = balanced.expect("Balance loads should succeed");
assert_eq!(balanced_weights.len(), 3);
}
#[test]
fn test_sparsity_computation() {
let config = QuantumMixtureOfExpertsConfig::default();
let gate_network =
QuantumGateNetwork::new(&config).expect("GateNetwork creation should succeed");
let weights = Array1::from_vec(vec![0.8, 0.0, 0.2, 0.0]);
let sparsity = gate_network.compute_sparsity(&weights);
assert!(sparsity.is_ok());
assert_eq!(sparsity.expect("Sparsity computation should succeed"), 0.5);
}
#[test]
fn test_quantum_interference() {
let config = QuantumMixtureOfExpertsConfig {
routing_strategy: QuantumRoutingStrategy::QuantumSuperposition {
superposition_strength: 0.8,
interference_pattern: InterferencePattern::Constructive,
},
..Default::default()
};
let moe = QuantumMixtureOfExperts::new(config).expect("MoE creation should succeed");
let weights = Array1::from_vec(vec![0.5, 0.3, 0.2]);
let interference = moe.compute_interference_factor(0, &weights);
assert!(interference.is_ok());
assert!(interference.expect("Interference computation should succeed") > 0.0);
}
#[test]
fn test_entanglement_management() {
let config = QuantumMixtureOfExpertsConfig {
entanglement_config: EntanglementConfig {
enable_expert_entanglement: true,
entanglement_strength: 0.7,
..Default::default()
},
..Default::default()
};
let mut manager =
EntanglementManager::new(&config).expect("EntanglementManager creation should succeed");
let expert_weights = Array1::from_vec(vec![0.4, 0.6, 0.0]);
let result = manager.update_entanglement(&expert_weights);
assert!(result.is_ok());
let utilization = manager.get_utilization();
assert!(utilization >= 0.0);
}
#[test]
fn test_expert_specialization() {
let config = QuantumMixtureOfExpertsConfig {
expert_architecture: ExpertArchitecture::SpecializedExperts {
expert_specializations: vec![
ExpertSpecialization::TextProcessing,
ExpertSpecialization::ImageProcessing,
],
specialization_strength: 0.8,
},
..Default::default()
};
let moe = QuantumMixtureOfExperts::new(config);
assert!(moe.is_ok());
}
#[test]
fn test_hierarchical_routing() {
let config = QuantumMixtureOfExpertsConfig {
routing_strategy: QuantumRoutingStrategy::HierarchicalRouting {
hierarchy_levels: 2,
routing_per_level: RoutingType::Quantum,
},
..Default::default()
};
let moe = QuantumMixtureOfExperts::new(config);
assert!(moe.is_ok());
}
}