diff options
| author | hachem <im@hachem.wtf> | 2025-12-06 21:20:43 +0100 |
|---|---|---|
| committer | hachem <im@hachem.wtf> | 2025-12-06 21:20:43 +0100 |
| commit | 609f7276fc1fb484be34b232d35426f91ddb9b71 (patch) | |
| tree | 8cfc9a68ac184cb01111ddbef1f3a77b0b62b91f /tester/src/main.rs | |
| parent | 1fef726728a14cc923c7cbaf80d337b4eb35db3c (diff) | |
[add]: complete horizonal renderer
Diffstat (limited to 'tester/src/main.rs')
| -rw-r--r-- | tester/src/main.rs | 92 |
1 files changed, 43 insertions, 49 deletions
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); + swap_circuit.x(0).cnot(0, 1).cnot(1, 0).cnot(0, 1); + + println!("{}", HorizontalRenderer::new(&swap_circuit)); + + swap_circuit.compute(); println!("{}", swap_circuit); print!("------\n\n"); - println!("Toffoli Gate (Reversible AND)"); - println!(" CCNOT flips q2 only when q0=1 AND q1=1"); + println!("Toffoli Gate\n"); let mut toffoli_circuit = QuantumCircuit::new(3); - toffoli_circuit - .x(0) - .x(1) // Set to |110⟩ - .toffoli(0, 1, 2); - println!("{}", toffoli_circuit); + toffoli_circuit.x(0).x(1).toffoli(0, 1, 2); - print!("------\n\n"); + println!("{}", HorizontalRenderer::new(&toffoli_circuit)); - 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); + toffoli_circuit.compute(); + println!("{}", toffoli_circuit); print!("------\n\n"); - 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); + 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!("Full Superposition (H on all qubits)"); - let mut super_circuit = QuantumCircuit::new(3); - super_circuit.h(0).h(1).h(2); - println!("{}", super_circuit); + full.compute(); + println!("{}", full); print!("------\n\n"); - println!("Probability Test"); - let mut prob_circuit = QuantumCircuit::new(2); - prob_circuit.h(0).cnot(0, 1); - prob_circuit.print_probabilities(); - println!(); + 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); - print!("------\n\n"); + println!("{}", HorizontalRenderer::new(&complex)); - 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); + complex.compute(); println!("{}", complex); } |
