From 609f7276fc1fb484be34b232d35426f91ddb9b71 Mon Sep 17 00:00:00 2001 From: hachem Date: Sat, 6 Dec 2025 21:20:43 +0100 Subject: [add]: complete horizonal renderer --- tester/src/main.rs | 96 +++++++++++++++++++++++++----------------------------- 1 file changed, 45 insertions(+), 51 deletions(-) (limited to 'tester/src/main.rs') diff --git a/tester/src/main.rs b/tester/src/main.rs index 4bab72d..497e286 100644 --- a/tester/src/main.rs +++ b/tester/src/main.rs @@ -1,82 +1,76 @@ use libpsi_core::*; +use libpsi_visualizer::*; fn main() { - println!("Bell State Creation: |Φ+⟩ = (|00⟩ + |11⟩)/√2"); - println!(" Circuit: H(q0) → CNOT(q0, q1)"); - let mut bell = QuantumCircuit::new(2); - bell.h(0).cnot(0, 1); + println!("Bell State with Measurement\n"); + let mut bell = QuantumCircuit::with_classical(2, 2); + bell.h(0).cnot(0, 1).measure(0, 0).measure(1, 1); + + println!("{}", HorizontalRenderer::new(&bell)); + + bell.compute(); println!("{}", bell); print!("------\n\n"); - println!("GHZ State (3-qubit entanglement): |GHZ> = (|000⟩ + |111⟩)/√2"); - println!(" Circuit: H(q0) → CNOT(q0, q1) → CNOT(q0, q2)"); + println!("GHZ State\n"); let mut ghz = QuantumCircuit::new(3); ghz.h(0).cnot(0, 1).cnot(0, 2); + + println!("{}", HorizontalRenderer::new(&ghz)); + + ghz.compute(); println!("{}", ghz); print!("------\n\n"); - println!("SWAP via 3 CNOTs"); - println!(" Start with |10>, apply CNOT chain"); + println!("SWAP via 3 CNOTs\n"); let mut swap_circuit = QuantumCircuit::new(2); - swap_circuit - .x(0) // Set to |10⟩ - .cnot(0, 1) - .cnot(1, 0) - .cnot(0, 1); - println!("{}", swap_circuit); + swap_circuit.x(0).cnot(0, 1).cnot(1, 0).cnot(0, 1); - print!("------\n\n"); + println!("{}", HorizontalRenderer::new(&swap_circuit)); - println!("Toffoli Gate (Reversible AND)"); - println!(" CCNOT flips q2 only when q0=1 AND q1=1"); - let mut toffoli_circuit = QuantumCircuit::new(3); - toffoli_circuit - .x(0) - .x(1) // Set to |110⟩ - .toffoli(0, 1, 2); - println!("{}", toffoli_circuit); + swap_circuit.compute(); + println!("{}", swap_circuit); print!("------\n\n"); - println!("Fredkin Gate (Controlled SWAP)"); - println!(" CSWAP swaps q1 and q2 only when q0=1"); - let mut fredkin_circuit = QuantumCircuit::new(3); - fredkin_circuit - .x(0) - .x(1) // Set to |110⟩ - .fredkin(0, 1, 2); - println!("{}", fredkin_circuit); + println!("Toffoli Gate\n"); + let mut toffoli_circuit = QuantumCircuit::new(3); + toffoli_circuit.x(0).x(1).toffoli(0, 1, 2); - print!("------\n\n"); + println!("{}", HorizontalRenderer::new(&toffoli_circuit)); - println!("6. Non-contiguous CNOT (q0 controls q2, skipping q1)"); - let mut nc_circuit = QuantumCircuit::new(3); - nc_circuit - .x(0) // |100⟩ - .cnot(0, 2); // CNOT with control=q0, target=q2 - println!("{}", nc_circuit); + toffoli_circuit.compute(); + println!("{}", toffoli_circuit); print!("------\n\n"); - println!("Full Superposition (H on all qubits)"); - let mut super_circuit = QuantumCircuit::new(3); - super_circuit.h(0).h(1).h(2); - println!("{}", super_circuit); + println!("Full Circuit with Measurements\n"); + let mut full = QuantumCircuit::with_classical(3, 3); + full.h(0).h(1).h(2).measure_all(); - print!("------\n\n"); + println!("{}", HorizontalRenderer::new(&full)); - println!("Probability Test"); - let mut prob_circuit = QuantumCircuit::new(2); - prob_circuit.h(0).cnot(0, 1); - prob_circuit.print_probabilities(); - println!(); + full.compute(); + println!("{}", full); print!("------\n\n"); - println!("Complex Circuit with Method Chaining"); - let mut complex = QuantumCircuit::new(4); - complex.h(0).h(1).cnot(0, 2).cnot(1, 3).cz(2, 3).swap(0, 1); + println!("Complex Circuit\n"); + let mut complex = QuantumCircuit::with_classical(4, 2); + complex + .h(0) + .h(1) + .cnot(0, 2) + .cnot(1, 3) + .cz(2, 3) + .swap(0, 1) + .measure(0, 0) + .measure(1, 1); + + println!("{}", HorizontalRenderer::new(&complex)); + + complex.compute(); println!("{}", complex); } -- cgit v1.3