diff options
Diffstat (limited to 'tester/main.c')
| -rw-r--r-- | tester/main.c | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/tester/main.c b/tester/main.c index cba5d28..8885afa 100644 --- a/tester/main.c +++ b/tester/main.c @@ -77,5 +77,33 @@ int main(void) psi_free_vector(&hs0); psi_free_quantum_gate(&gate); + const char *names[] = { "q0", "q1" }; + struct PsiQuantumRegister reg = psi_new_quantum_register("bell", names, 2); + + struct PsiMatrix h2 = psi_matrix(2, 2, + psi_new_complex(inv_sqrt2, 0.0), psi_new_complex(inv_sqrt2, 0.0), + psi_new_complex(inv_sqrt2, 0.0), psi_new_complex(-inv_sqrt2, 0.0)); + struct PsiQuantumGate hadamard = psi_new_quantum_gate_from_matrix("H", h2); + + struct PsiMatrix cnot_m = psi_matrix(4, 4, + psi_new_complex(1.0, 0.0), psi_new_complex(0.0, 0.0), psi_new_complex(0.0, 0.0), psi_new_complex(0.0, 0.0), + psi_new_complex(0.0, 0.0), psi_new_complex(1.0, 0.0), psi_new_complex(0.0, 0.0), psi_new_complex(0.0, 0.0), + psi_new_complex(0.0, 0.0), psi_new_complex(0.0, 0.0), psi_new_complex(0.0, 0.0), psi_new_complex(1.0, 0.0), + psi_new_complex(0.0, 0.0), psi_new_complex(0.0, 0.0), psi_new_complex(1.0, 0.0), psi_new_complex(0.0, 0.0)); + struct PsiQuantumGate cnot = psi_new_quantum_gate_from_matrix("CNOT", cnot_m); + + size_t t0[] = { 0 }; + size_t t01[] = { 0, 1 }; + psi_apply_gate(®, hadamard, t0, 1); + psi_apply_gate(®, cnot, t01, 2); + + printf("bell = [%g, %g, %g, %g]\n", + reg.state_vector.data[0].real, reg.state_vector.data[1].real, + reg.state_vector.data[2].real, reg.state_vector.data[3].real); + + psi_free_quantum_gate(&hadamard); + psi_free_quantum_gate(&cnot); + psi_free_quantum_register(®); + return 0; } |
