2323/**
2424 * Test gate counts after Litinski transformation.
2525 */
26- static int test_counts (void ) {
26+ static int test_counts_litinski (void ) {
2727 QkCircuit * circuit = qk_circuit_new (4 , 0 );
2828 qk_circuit_gate (circuit , QkGate_H , (uint32_t [1 ]){0 }, NULL );
2929 qk_circuit_gate (circuit , QkGate_CX , (uint32_t [2 ]){0 , 1 }, NULL );
@@ -50,6 +50,7 @@ static int test_counts(void) {
5050 }
5151 }
5252 }
53+ qk_opcounts_clear (& op_counts );
5354cleanup :
5455 qk_circuit_free (circuit );
5556 return result ;
@@ -58,7 +59,7 @@ static int test_counts(void) {
5859/**
5960 * Test gate counts after converting to Pauli rotations.
6061 */
61- static int test_counts_pauli_rotations (void ) {
62+ static int test_counts_convert_to_pauli_rotations (void ) {
6263 QkCircuit * circuit = qk_circuit_new (4 , 2 );
6364 qk_circuit_gate (circuit , QkGate_H , (uint32_t [1 ]){0 }, NULL ); // 2 PPR gates
6465 qk_circuit_gate (circuit , QkGate_CX , (uint32_t [2 ]){0 , 1 }, NULL ); // 3 PPR gates
@@ -194,6 +195,9 @@ int check_pauli_rotation(QkCircuit *circuit, size_t index, enum Pauli *paulis, u
194195 return result ;
195196}
196197
198+ /**
199+ * A helper to check a PPM matches the expectation.
200+ */
197201int check_pauli_measurement (QkCircuit * circuit , size_t index , enum Pauli * paulis , uint32_t * qubits ,
198202 const size_t len , uint32_t clbit , bool flip_outcome ) {
199203 QkPauliProductMeasurement ppm ;
@@ -243,7 +247,7 @@ int check_pauli_measurement(QkCircuit *circuit, size_t index, enum Pauli *paulis
243247/**
244248 * Test concrete circuit after running the Litinski transformation.
245249 */
246- static int test_concrete (void ) {
250+ static int test_concrete_litinski (void ) {
247251 QkCircuit * circuit = qk_circuit_new (4 , 4 );
248252 qk_circuit_gate (circuit , QkGate_T , (uint32_t [1 ]){0 }, NULL );
249253 qk_circuit_gate (circuit , QkGate_CX , (uint32_t [2 ]){2 , 1 }, NULL );
@@ -304,17 +308,14 @@ static int test_concrete(void) {
304308/**
305309 * Test concrete circuit after running conversion to Pauli rotations.
306310 */
307- static int test_concrete_pauli_rotations (void ) {
311+ static int test_concrete_convert_to_pauli_rotations (void ) {
308312 QkCircuit * circuit = qk_circuit_new (4 , 1 );
309313 qk_circuit_gate (circuit , QkGate_T , (uint32_t [1 ]){0 }, NULL );
310314 qk_circuit_gate (circuit , QkGate_H , (uint32_t [2 ]){1 }, NULL );
311315 qk_circuit_gate (circuit , QkGate_RXX , (uint32_t [2 ]){2 , 3 }, (double [1 ]){1.0 });
312316 qk_circuit_gate (circuit , QkGate_SXdg , (uint32_t [1 ]){3 }, NULL );
313317 qk_circuit_measure (circuit , 0 , 0 );
314318
315- for (uint32_t i = 0 ; i < 4 ; i ++ ) {
316- }
317-
318319 qk_transpiler_pass_standalone_convert_to_pauli_rotations (circuit );
319320
320321 int result = Ok ;
@@ -341,13 +342,44 @@ static int test_concrete_pauli_rotations(void) {
341342 qk_circuit_free (circuit );
342343 return result ;
343344}
345+
346+ /**
347+ * Test Litinski not doing anything.
348+ */
349+ static int test_litinski_noop (void ) {
350+ QkCircuit * circuit = qk_circuit_new (1 , 0 );
351+ qk_circuit_gate (circuit , QkGate_H , (uint32_t [1 ]){0 }, NULL );
352+
353+ qk_transpiler_pass_standalone_litinski_transformation (circuit , true);
354+
355+ int result = Ok ;
356+ if (qk_circuit_num_instructions (circuit ) != 1 ) {
357+ printf ("Expected 1 instructions, but found %zu" , qk_circuit_num_instructions (circuit ));
358+ result = EqualityError ;
359+ goto cleanup ;
360+ }
361+
362+ QkCircuitInstruction inst ;
363+ qk_circuit_get_instruction (circuit , 0 , & inst );
364+ if (strcmp (inst .name , "h" ) != 0 ) {
365+ printf ("Instruction at index 0 should be 'h' but is '%s'" , inst .name );
366+ result = EqualityError ;
367+ }
368+ qk_circuit_instruction_clear (& inst );
369+
370+ cleanup :
371+ qk_circuit_free (circuit );
372+ return result ;
373+ }
374+
344375int test_pbc (void ) {
345376 int num_failed = 0 ;
346377
347- num_failed += RUN_TEST (test_counts );
348- num_failed += RUN_TEST (test_counts_pauli_rotations );
349- num_failed += RUN_TEST (test_concrete );
350- num_failed += RUN_TEST (test_concrete_pauli_rotations );
378+ num_failed += RUN_TEST (test_counts_litinski );
379+ num_failed += RUN_TEST (test_counts_convert_to_pauli_rotations );
380+ num_failed += RUN_TEST (test_concrete_litinski );
381+ num_failed += RUN_TEST (test_concrete_convert_to_pauli_rotations );
382+ num_failed += RUN_TEST (test_litinski_noop );
351383
352384 fflush (stderr );
353385 fprintf (stderr , "=== Number of failed subtests (PBC transformations): %i\n" , num_failed );
0 commit comments