aboutsummaryrefslogtreecommitdiff
path: root/tester/src/clifford.rs
diff options
context:
space:
mode:
authorhachem <im@hachem.wtf>2025-12-10 06:27:29 +0100
committerhachem <im@hachem.wtf>2025-12-10 06:27:29 +0100
commit140daa490485812ef50756796435538b9f6d9428 (patch)
tree635d792ae7d4db123d538ef30304bc65cde739b2 /tester/src/clifford.rs
parente77aef153c8676ff90659433ac0ca157a3c585c2 (diff)
[add]: add support for non-clifford gates
Diffstat (limited to 'tester/src/clifford.rs')
-rw-r--r--tester/src/clifford.rs126
1 files changed, 126 insertions, 0 deletions
diff --git a/tester/src/clifford.rs b/tester/src/clifford.rs
new file mode 100644
index 0000000..5c0b453
--- /dev/null
+++ b/tester/src/clifford.rs
@@ -0,0 +1,126 @@
+use crate::common::{benchmark_circuit, print_circuit, print_section, BenchmarkResult};
+use libpsi_core::QuantumCircuit;
+
+pub fn run_all(results: &mut Vec<BenchmarkResult>) {
+ println!("═══════════════════════════════════════════════════════════════");
+ println!(" CLIFFORD GATES TESTS");
+ println!("═══════════════════════════════════════════════════════════════\n");
+
+ test_bell_state(results);
+ test_ghz_state(results);
+ test_swap_via_cnots(results);
+ test_toffoli(results);
+ test_hadamard_measure(results);
+ test_complex_circuit(results);
+}
+
+pub fn test_bell_state(results: &mut Vec<BenchmarkResult>) {
+ print_section("Bell State with Measurement");
+
+ let builder = || {
+ let mut circuit = QuantumCircuit::with_classical(2, 2);
+ circuit.h(0).cnot(0, 1).measure(0, 0).measure(1, 1);
+ circuit
+ };
+
+ print_circuit(&builder());
+ results.push(benchmark_circuit("Bell State (2 qubits)", builder));
+
+ let mut display = builder();
+ display.compute();
+ println!("{}\n", display);
+}
+
+pub fn test_ghz_state(results: &mut Vec<BenchmarkResult>) {
+ print_section("GHZ State");
+
+ let builder = || {
+ let mut circuit = QuantumCircuit::new(3);
+ circuit.h(0).cnot(0, 1).cnot(0, 2);
+ circuit
+ };
+
+ print_circuit(&builder());
+ results.push(benchmark_circuit("GHZ State (3 qubits)", builder));
+
+ let mut display = builder();
+ display.compute();
+ println!("{}\n", display);
+}
+
+pub fn test_swap_via_cnots(results: &mut Vec<BenchmarkResult>) {
+ print_section("SWAP via 3 CNOTs");
+
+ let builder = || {
+ let mut circuit = QuantumCircuit::new(2);
+ circuit.x(0).cnot(0, 1).cnot(1, 0).cnot(0, 1);
+ circuit
+ };
+
+ print_circuit(&builder());
+ results.push(benchmark_circuit("SWAP via CNOTs (2 qubits)", builder));
+
+ let mut display = builder();
+ display.compute();
+ println!("{}\n", display);
+}
+
+pub fn test_toffoli(results: &mut Vec<BenchmarkResult>) {
+ print_section("Toffoli Gate");
+
+ let builder = || {
+ let mut circuit = QuantumCircuit::new(3);
+ circuit.x(0).x(1).toffoli(0, 1, 2);
+ circuit
+ };
+
+ print_circuit(&builder());
+ results.push(benchmark_circuit("Toffoli (3 qubits)", builder));
+
+ let mut display = builder();
+ display.compute();
+ println!("{}\n", display);
+}
+
+pub fn test_hadamard_measure(results: &mut Vec<BenchmarkResult>) {
+ print_section("Full Circuit with Measurements");
+
+ let builder = || {
+ let mut circuit = QuantumCircuit::with_classical(3, 3);
+ circuit.h(0).h(1).h(2).measure_all();
+ circuit
+ };
+
+ print_circuit(&builder());
+ results.push(benchmark_circuit("3-qubit Hadamard + Measure", builder));
+
+ let mut display = builder();
+ display.compute();
+ println!("{}\n", display);
+}
+
+pub fn test_complex_circuit(results: &mut Vec<BenchmarkResult>) {
+ print_section("Complex Circuit");
+
+ let builder = || {
+ let mut circuit = QuantumCircuit::with_classical(4, 2);
+ circuit
+ .h(0)
+ .h(1)
+ .cnot(0, 2)
+ .cnot(1, 3)
+ .cz(2, 3)
+ .swap(0, 1)
+ .measure(0, 0)
+ .measure(1, 1);
+ circuit
+ };
+
+ print_circuit(&builder());
+ results.push(benchmark_circuit("Complex (4 qubits)", builder));
+
+ let mut display = builder();
+ display.compute();
+ println!("{}\n", display);
+}
+