aboutsummaryrefslogtreecommitdiff
path: root/tester/src
diff options
context:
space:
mode:
Diffstat (limited to 'tester/src')
-rw-r--r--tester/src/main.rs92
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);
}