trustformers_debug/quantum_debugging/
functions.rs1#[cfg(test)]
6mod tests {
7
8 use crate::{QuantumDebugConfig, QuantumDebugger};
9 use anyhow::Result;
10 use scirs2_core::ndarray::Array2;
11 #[test]
12 fn test_quantum_debugger_creation() {
13 let config = QuantumDebugConfig::default();
14 let debugger = QuantumDebugger::new(config);
15 assert_eq!(debugger.config.num_qubits, 16);
16 }
17 #[test]
18 fn test_quantum_analysis() -> Result<()> {
19 let mut debugger = QuantumDebugger::new(QuantumDebugConfig::default());
20 let weights = Array2::<f32>::ones((4, 4)).into_dyn();
21 let analysis = debugger.analyze_layer_quantum("test_layer", &weights)?;
22 assert_eq!(analysis.layer_name, "test_layer");
23 assert!(analysis.coherence_score >= 0.0 && analysis.coherence_score <= 1.0);
24 assert!(analysis.quantum_advantage_score >= 0.0 && analysis.quantum_advantage_score <= 1.0);
25 Ok(())
26 }
27 #[test]
28 fn test_quantum_state_conversion() -> Result<()> {
29 let debugger = QuantumDebugger::new(QuantumDebugConfig::default());
30 let weights = Array2::<f32>::from_elem((2, 2), 0.5).into_dyn();
31 let quantum_state = debugger.weights_to_quantum_state(&weights)?;
32 assert!(!quantum_state.amplitudes.is_empty());
33 assert_eq!(quantum_state.amplitudes.len(), quantum_state.phases.len());
34 assert!(quantum_state.fidelity >= 0.0 && quantum_state.fidelity <= 1.0);
35 assert!(quantum_state.coherence_time > 0.0);
36 Ok(())
37 }
38 #[test]
39 fn test_entanglement_analysis() -> Result<()> {
40 let debugger = QuantumDebugger::new(QuantumDebugConfig::default());
41 let weights = Array2::<f32>::from_elem((4, 4), 0.25).into_dyn();
42 let quantum_state = debugger.weights_to_quantum_state(&weights)?;
43 let entanglement = debugger.analyze_entanglement(&quantum_state)?;
44 assert!(!entanglement.von_neumann_entropy.is_empty());
45 assert!(entanglement.quantum_mutual_information >= 0.0);
46 Ok(())
47 }
48 #[test]
49 fn test_interference_analysis() -> Result<()> {
50 let debugger = QuantumDebugger::new(QuantumDebugConfig::default());
51 let weights = Array2::<f32>::from_elem((3, 3), 0.33).into_dyn();
52 let quantum_state = debugger.weights_to_quantum_state(&weights)?;
53 let interference = debugger.analyze_interference(&quantum_state)?;
54 assert!(interference.visibility >= 0.0 && interference.visibility <= 1.0);
55 assert!(!interference.phase_coherence.is_empty());
56 assert!(!interference.patterns.is_empty());
57 Ok(())
58 }
59 #[test]
60 fn test_error_correction_analysis() -> Result<()> {
61 let debugger = QuantumDebugger::new(QuantumDebugConfig::default());
62 let weights = Array2::<f32>::from_elem((5, 5), 0.2).into_dyn();
63 let quantum_state = debugger.weights_to_quantum_state(&weights)?;
64 let error_correction = debugger.analyze_error_correction(&quantum_state)?;
65 assert!(!error_correction.correction_codes.is_empty());
66 assert!(error_correction.success_rate >= 0.0 && error_correction.success_rate <= 1.0);
67 assert!(
68 error_correction.logical_error_rate >= 0.0
69 && error_correction.logical_error_rate <= 1.0
70 );
71 Ok(())
72 }
73}