aboutsummaryrefslogtreecommitdiff
path: root/tester
diff options
context:
space:
mode:
Diffstat (limited to 'tester')
-rw-r--r--tester/main.c26
1 files changed, 26 insertions, 0 deletions
diff --git a/tester/main.c b/tester/main.c
index 020b230..57fc7ca 100644
--- a/tester/main.c
+++ b/tester/main.c
@@ -166,5 +166,31 @@ int main(void)
psi_free_vector(&state);
psi_free_kernel_batch(&batch);
+
+ struct PsiStructureAwareBatch sa = psi_new_structure_aware_batch(2);
+ struct PsiQuantumGate hg2 = psi_hadamard_gate();
+ struct PsiQuantumGate xg2 = psi_pauli_x_gate();
+ size_t q0[] = { 0 };
+ size_t q1[] = { 1 };
+ psi_add_structure_aware_kernel(&sa, psi_new_kernel("H", psi_clone_matrix(hg2.matrix), q0, 1));
+ psi_add_structure_aware_kernel(&sa, psi_new_kernel("X", psi_clone_matrix(xg2.matrix), q1, 1));
+ psi_add_structure_aware_kernel(&sa, psi_new_kernel("H", psi_clone_matrix(hg2.matrix), q0, 1));
+ psi_free_quantum_gate(&hg2);
+ psi_free_quantum_gate(&xg2);
+
+ psi_optimize_structure_aware_batch(&sa);
+ struct PsiKernelStats stats = psi_structure_aware_batch_stats(sa);
+
+ struct PsiQuantumRegister r = psi_new_quantum_register("r", names, 2);
+ struct PsiVector sast = psi_clone_vector(r.state_vector);
+ psi_free_quantum_register(&r);
+ psi_execute_structure_aware_batch_layered(sa, &sast);
+
+ printf("sa = %zu kernels, %zu layers -> [%g, %g, %g, %g]\n",
+ stats.total_kernels, stats.execution_layers,
+ sast.data[0].real, sast.data[1].real, sast.data[2].real, sast.data[3].real);
+
+ psi_free_vector(&sast);
+ psi_free_structure_aware_batch(&sa);
}