#[cfg(test)]
mod tests {
use crate::{QuantumDebugConfig, QuantumDebugger};
use anyhow::Result;
use scirs2_core::ndarray::Array2;
#[test]
fn test_quantum_debugger_creation() {
let config = QuantumDebugConfig::default();
let debugger = QuantumDebugger::new(config);
assert_eq!(debugger.config.num_qubits, 16);
}
#[test]
fn test_quantum_analysis() -> Result<()> {
let mut debugger = QuantumDebugger::new(QuantumDebugConfig::default());
let weights = Array2::<f32>::ones((4, 4)).into_dyn();
let analysis = debugger.analyze_layer_quantum("test_layer", &weights)?;
assert_eq!(analysis.layer_name, "test_layer");
assert!(analysis.coherence_score >= 0.0 && analysis.coherence_score <= 1.0);
assert!(analysis.quantum_advantage_score >= 0.0 && analysis.quantum_advantage_score <= 1.0);
Ok(())
}
#[test]
fn test_quantum_state_conversion() -> Result<()> {
let debugger = QuantumDebugger::new(QuantumDebugConfig::default());
let weights = Array2::<f32>::from_elem((2, 2), 0.5).into_dyn();
let quantum_state = debugger.weights_to_quantum_state(&weights)?;
assert!(!quantum_state.amplitudes.is_empty());
assert_eq!(quantum_state.amplitudes.len(), quantum_state.phases.len());
assert!(quantum_state.fidelity >= 0.0 && quantum_state.fidelity <= 1.0);
assert!(quantum_state.coherence_time > 0.0);
Ok(())
}
#[test]
fn test_entanglement_analysis() -> Result<()> {
let debugger = QuantumDebugger::new(QuantumDebugConfig::default());
let weights = Array2::<f32>::from_elem((4, 4), 0.25).into_dyn();
let quantum_state = debugger.weights_to_quantum_state(&weights)?;
let entanglement = debugger.analyze_entanglement(&quantum_state)?;
assert!(!entanglement.von_neumann_entropy.is_empty());
assert!(entanglement.quantum_mutual_information >= 0.0);
Ok(())
}
#[test]
fn test_interference_analysis() -> Result<()> {
let debugger = QuantumDebugger::new(QuantumDebugConfig::default());
let weights = Array2::<f32>::from_elem((3, 3), 0.33).into_dyn();
let quantum_state = debugger.weights_to_quantum_state(&weights)?;
let interference = debugger.analyze_interference(&quantum_state)?;
assert!(interference.visibility >= 0.0 && interference.visibility <= 1.0);
assert!(!interference.phase_coherence.is_empty());
assert!(!interference.patterns.is_empty());
Ok(())
}
#[test]
fn test_error_correction_analysis() -> Result<()> {
let debugger = QuantumDebugger::new(QuantumDebugConfig::default());
let weights = Array2::<f32>::from_elem((5, 5), 0.2).into_dyn();
let quantum_state = debugger.weights_to_quantum_state(&weights)?;
let error_correction = debugger.analyze_error_correction(&quantum_state)?;
assert!(!error_correction.correction_codes.is_empty());
assert!(error_correction.success_rate >= 0.0 && error_correction.success_rate <= 1.0);
assert!(
error_correction.logical_error_rate >= 0.0
&& error_correction.logical_error_rate <= 1.0
);
Ok(())
}
}