quantrs2_circuit/debugger/
functions.rs1use crate::builder::Circuit;
6
7use super::types::{DebuggerConfig, ExecutionStatus, QuantumDebugger, StepResult};
8
9#[cfg(test)]
10mod tests {
11 use super::*;
12 use quantrs2_core::gate::multi::CNOT;
13 use quantrs2_core::gate::single::Hadamard;
14 use quantrs2_core::qubit::QubitId;
15 #[test]
16 fn test_debugger_creation() {
17 let circuit = Circuit::<2>::new();
18 let debugger = QuantumDebugger::new(circuit);
19 assert_eq!(debugger.get_execution_status(), ExecutionStatus::Ready);
20 }
21 #[test]
22 fn test_breakpoint_management() {
23 let circuit = Circuit::<2>::new();
24 let mut debugger = QuantumDebugger::new(circuit);
25 debugger
26 .add_gate_breakpoint(0)
27 .expect("add_gate_breakpoint should succeed");
28 let breakpoints = debugger
29 .breakpoints
30 .read()
31 .expect("breakpoints lock should not be poisoned");
32 assert!(breakpoints.gate_breakpoints.contains(&0));
33 }
34 #[test]
35 fn test_step_execution() {
36 let mut circuit = Circuit::<1>::new();
37 circuit
38 .add_gate(Hadamard { target: QubitId(0) })
39 .expect("add_gate should succeed");
40 let mut debugger = QuantumDebugger::new(circuit);
41 debugger
42 .start_session()
43 .expect("start_session should succeed");
44 let result = debugger.step_next().expect("step_next should succeed");
45 match result {
46 StepResult::Success => {}
47 _ => panic!("Expected successful step execution"),
48 }
49 }
50 #[test]
51 fn test_visualization_configuration() {
52 let circuit = Circuit::<2>::new();
53 let config = DebuggerConfig {
54 enable_auto_visualization: true,
55 ..Default::default()
56 };
57 let debugger = QuantumDebugger::with_config(circuit, config);
58 let visualizer = debugger
59 .visualizer
60 .read()
61 .expect("visualizer lock should not be poisoned");
62 assert!(visualizer.config.enable_realtime);
63 }
64 #[test]
65 fn test_performance_profiling() {
66 let mut circuit = Circuit::<2>::new();
67 circuit
68 .add_gate(Hadamard { target: QubitId(0) })
69 .expect("add_gate Hadamard should succeed");
70 circuit
71 .add_gate(CNOT {
72 control: QubitId(0),
73 target: QubitId(1),
74 })
75 .expect("add_gate CNOT should succeed");
76 let config = DebuggerConfig {
77 enable_profiling: true,
78 ..Default::default()
79 };
80 let mut debugger = QuantumDebugger::with_config(circuit, config);
81 let _summary = debugger.run().expect("debugger run should succeed");
82 let analysis = debugger
83 .get_performance_analysis()
84 .expect("get_performance_analysis should succeed");
85 assert!(!analysis.suggestions.is_empty() || analysis.suggestions.is_empty());
86 }
87 #[test]
88 fn test_error_detection() {
89 let circuit = Circuit::<1>::new();
90 let config = DebuggerConfig {
91 enable_error_detection: true,
92 ..Default::default()
93 };
94 let debugger = QuantumDebugger::with_config(circuit, config);
95 let detector = debugger
96 .error_detector
97 .read()
98 .expect("error_detector lock should not be poisoned");
99 assert!(detector.config.enable_auto_detection);
100 }
101}