Skip to content

Commit 993a3eb

Browse files
committed
known gates tests
1 parent 3c2bac0 commit 993a3eb

6 files changed

Lines changed: 1319 additions & 122 deletions

File tree

mlir/unittests/Dialect/QC/IR/test_qc_ir.cpp

Lines changed: 112 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -129,11 +129,13 @@ INSTANTIATE_TEST_SUITE_P(
129129
QCTestCase{"NestedPow", MQT_NAMED_BUILDER(nestedPow),
130130
MQT_NAMED_BUILDER(powSingleExponent)},
131131
// // pow(p) { g } unchanged when no simplification applies
132-
// QCTestCase{"PowRxx", MQT_NAMED_BUILDER(powRxx),
133-
// MQT_NAMED_BUILDER(powRxx)},
132+
QCTestCase{"PowRxx", MQT_NAMED_BUILDER(powRxx),
133+
MQT_NAMED_BUILDER(powRxx)},
134134
// pow(-p) { g } => pow(p) { inv { g } } (NegPowToInvPow)
135135
QCTestCase{"NegPowRx", MQT_NAMED_BUILDER(negPowRx),
136136
MQT_NAMED_BUILDER(powRxNeg)},
137+
QCTestCase{"NegPowH", MQT_NAMED_BUILDER(negPowH),
138+
MQT_NAMED_BUILDER(negPowHRef)},
137139
// TODO should this maybe be in the inv tests?
138140
// inv { pow(p) { g } } => pow(p) { inv { g } }
139141
// (MovePowOutside)
@@ -221,6 +223,8 @@ INSTANTIATE_TEST_SUITE_P(
221223
MQT_NAMED_BUILDER(barrier)},
222224
QCTestCase{"InverseBarrier",
223225
MQT_NAMED_BUILDER(inverseBarrier),
226+
MQT_NAMED_BUILDER(barrier)},
227+
QCTestCase{"PowBarrier", MQT_NAMED_BUILDER(powBarrier),
224228
MQT_NAMED_BUILDER(barrier)}));
225229
/// @}
226230

@@ -271,7 +275,11 @@ INSTANTIATE_TEST_SUITE_P(
271275
MQT_NAMED_BUILDER(ecr)},
272276
QCTestCase{"InverseMultipleControlledECR",
273277
MQT_NAMED_BUILDER(inverseMultipleControlledEcr),
274-
MQT_NAMED_BUILDER(multipleControlledEcr)}));
278+
MQT_NAMED_BUILDER(multipleControlledEcr)},
279+
QCTestCase{"PowEvenECR", MQT_NAMED_BUILDER(powEvenEcr),
280+
MQT_NAMED_BUILDER(emptyQC)},
281+
QCTestCase{"PowOddECR", MQT_NAMED_BUILDER(powOddEcr),
282+
MQT_NAMED_BUILDER(ecr)}));
275283
/// @}
276284

277285
/// \name QC/Operations/StandardGates/GphaseOp.cpp
@@ -297,7 +305,11 @@ INSTANTIATE_TEST_SUITE_P(
297305
MQT_NAMED_BUILDER(globalPhase)},
298306
QCTestCase{"InverseMultipleControlledGlobalPhase",
299307
MQT_NAMED_BUILDER(inverseMultipleControlledGlobalPhase),
300-
MQT_NAMED_BUILDER(multipleControlledP)}));
308+
MQT_NAMED_BUILDER(multipleControlledP)},
309+
QCTestCase{"PowGphaseScaled", MQT_NAMED_BUILDER(powGphaseScaled),
310+
MQT_NAMED_BUILDER(powGphaseScaledRef)},
311+
QCTestCase{"NegPowGphase", MQT_NAMED_BUILDER(negPowGphase),
312+
MQT_NAMED_BUILDER(negPowGphaseRef)}));
301313
/// @}
302314

303315
/// \name QC/Operations/StandardGates/HOp.cpp
@@ -319,7 +331,11 @@ INSTANTIATE_TEST_SUITE_P(
319331
MQT_NAMED_BUILDER(h)},
320332
QCTestCase{"InverseMultipleControlledH",
321333
MQT_NAMED_BUILDER(inverseMultipleControlledH),
322-
MQT_NAMED_BUILDER(multipleControlledH)}));
334+
MQT_NAMED_BUILDER(multipleControlledH)},
335+
QCTestCase{"PowEvenH", MQT_NAMED_BUILDER(powEvenH),
336+
MQT_NAMED_BUILDER(emptyQC)},
337+
QCTestCase{"PowOddH", MQT_NAMED_BUILDER(powOddH),
338+
MQT_NAMED_BUILDER(h)}));
323339
/// @}
324340

325341
/// \name QC/Operations/StandardGates/IdOp.cpp
@@ -345,6 +361,8 @@ INSTANTIATE_TEST_SUITE_P(
345361
MQT_NAMED_BUILDER(identity)},
346362
QCTestCase{"InverseMultipleControlledIdentity",
347363
MQT_NAMED_BUILDER(inverseMultipleControlledIdentity),
364+
MQT_NAMED_BUILDER(identity)},
365+
QCTestCase{"PowId", MQT_NAMED_BUILDER(powId),
348366
MQT_NAMED_BUILDER(identity)}));
349367
/// @}
350368

@@ -370,7 +388,9 @@ INSTANTIATE_TEST_SUITE_P(
370388
MQT_NAMED_BUILDER(inverseIswap)},
371389
QCTestCase{"InverseMultipleControllediSWAP",
372390
MQT_NAMED_BUILDER(inverseMultipleControlledIswap),
373-
MQT_NAMED_BUILDER(inverseMultipleControlledIswap)}));
391+
MQT_NAMED_BUILDER(inverseMultipleControlledIswap)},
392+
QCTestCase{"PowHalfiSWAP", MQT_NAMED_BUILDER(powHalfIswap),
393+
MQT_NAMED_BUILDER(powHalfIswapRef)}));
374394
/// @}
375395

376396
/// \name QC/Operations/StandardGates/POp.cpp
@@ -414,7 +434,9 @@ INSTANTIATE_TEST_SUITE_P(
414434
MQT_NAMED_BUILDER(r)},
415435
QCTestCase{"InverseMultipleControlledR",
416436
MQT_NAMED_BUILDER(inverseMultipleControlledR),
417-
MQT_NAMED_BUILDER(multipleControlledR)}));
437+
MQT_NAMED_BUILDER(multipleControlledR)},
438+
QCTestCase{"PowRScaled", MQT_NAMED_BUILDER(powRScaled),
439+
MQT_NAMED_BUILDER(powRScaledRef)}));
418440
/// @}
419441

420442
/// \name QC/Operations/StandardGates/RxOp.cpp
@@ -437,7 +459,9 @@ INSTANTIATE_TEST_SUITE_P(
437459
MQT_NAMED_BUILDER(rx)},
438460
QCTestCase{"InverseMultipleControlledRX",
439461
MQT_NAMED_BUILDER(inverseMultipleControlledRx),
440-
MQT_NAMED_BUILDER(multipleControlledRx)}));
462+
MQT_NAMED_BUILDER(multipleControlledRx)},
463+
QCTestCase{"PowRxScaled", MQT_NAMED_BUILDER(powRxScaled),
464+
MQT_NAMED_BUILDER(rxScaled)}));
441465
/// @}
442466

443467
/// \name QC/Operations/StandardGates/RxxOp.cpp
@@ -605,7 +629,14 @@ INSTANTIATE_TEST_SUITE_P(
605629
MQT_NAMED_BUILDER(sdg)},
606630
QCTestCase{"InverseMultipleControlledS",
607631
MQT_NAMED_BUILDER(inverseMultipleControlledS),
608-
MQT_NAMED_BUILDER(multipleControlledSdg)}));
632+
MQT_NAMED_BUILDER(multipleControlledSdg)},
633+
QCTestCase{"PowTwoS", MQT_NAMED_BUILDER(powTwoS), MQT_NAMED_BUILDER(z)},
634+
QCTestCase{"PowFourSErase", MQT_NAMED_BUILDER(powFourS),
635+
MQT_NAMED_BUILDER(emptyQC)},
636+
QCTestCase{"PowHalfSToT", MQT_NAMED_BUILDER(powHalfS),
637+
MQT_NAMED_BUILDER(t_)},
638+
QCTestCase{"PowThirdSToP", MQT_NAMED_BUILDER(powThirdS),
639+
MQT_NAMED_BUILDER(powThirdSRef)}));
609640
/// @}
610641

611642
/// \name QC/Operations/StandardGates/SdgOp.cpp
@@ -630,7 +661,13 @@ INSTANTIATE_TEST_SUITE_P(
630661
MQT_NAMED_BUILDER(s)},
631662
QCTestCase{"InverseMultipleControlledSdg",
632663
MQT_NAMED_BUILDER(inverseMultipleControlledSdg),
633-
MQT_NAMED_BUILDER(multipleControlledS)}));
664+
MQT_NAMED_BUILDER(multipleControlledS)},
665+
QCTestCase{"PowTwoSdg", MQT_NAMED_BUILDER(powTwoSdg),
666+
MQT_NAMED_BUILDER(z)},
667+
QCTestCase{"PowHalfSdgToTdg", MQT_NAMED_BUILDER(powHalfSdg),
668+
MQT_NAMED_BUILDER(tdg)},
669+
QCTestCase{"PowThirdSdgToP", MQT_NAMED_BUILDER(powThirdSdg),
670+
MQT_NAMED_BUILDER(powThirdSdgRef)}));
634671
/// @}
635672

636673
/// \name QC/Operations/StandardGates/SwapOp.cpp
@@ -655,7 +692,11 @@ INSTANTIATE_TEST_SUITE_P(
655692
MQT_NAMED_BUILDER(swap)},
656693
QCTestCase{"InverseMultipleControlledSWAP",
657694
MQT_NAMED_BUILDER(inverseMultipleControlledSwap),
658-
MQT_NAMED_BUILDER(multipleControlledSwap)}));
695+
MQT_NAMED_BUILDER(multipleControlledSwap)},
696+
QCTestCase{"PowEvenSWAP", MQT_NAMED_BUILDER(powEvenSwap),
697+
MQT_NAMED_BUILDER(emptyQC)},
698+
QCTestCase{"PowOddSWAP", MQT_NAMED_BUILDER(powOddSwap),
699+
MQT_NAMED_BUILDER(swap)}));
659700
/// @}
660701

661702
/// \name QC/Operations/StandardGates/SxOp.cpp
@@ -678,32 +719,40 @@ INSTANTIATE_TEST_SUITE_P(
678719
MQT_NAMED_BUILDER(sxdg)},
679720
QCTestCase{"InverseMultipleControlledSX",
680721
MQT_NAMED_BUILDER(inverseMultipleControlledSx),
681-
MQT_NAMED_BUILDER(multipleControlledSxdg)}));
722+
MQT_NAMED_BUILDER(multipleControlledSxdg)},
723+
QCTestCase{"PowTwoSX", MQT_NAMED_BUILDER(powTwoSx),
724+
MQT_NAMED_BUILDER(powTwoSxRef)},
725+
QCTestCase{"PowThirdSxGeneral", MQT_NAMED_BUILDER(powThirdSx),
726+
MQT_NAMED_BUILDER(powThirdSxRef)}));
682727
/// @}
683728

684729
/// \name QC/Operations/StandardGates/SxdgOp.cpp
685730
/// @{
686731
INSTANTIATE_TEST_SUITE_P(
687732
QCSXdgOpTest, QCTest,
688-
testing::Values(QCTestCase{"SXdg", MQT_NAMED_BUILDER(sxdg),
689-
MQT_NAMED_BUILDER(sxdg)},
690-
QCTestCase{"SingleControlledSXdg",
691-
MQT_NAMED_BUILDER(singleControlledSxdg),
692-
MQT_NAMED_BUILDER(singleControlledSxdg)},
693-
QCTestCase{"MultipleControlledSXdg",
694-
MQT_NAMED_BUILDER(multipleControlledSxdg),
695-
MQT_NAMED_BUILDER(multipleControlledSxdg)},
696-
QCTestCase{"NestedControlledSXdg",
697-
MQT_NAMED_BUILDER(nestedControlledSxdg),
698-
MQT_NAMED_BUILDER(multipleControlledSxdg)},
699-
QCTestCase{"TrivialControlledSXdg",
700-
MQT_NAMED_BUILDER(trivialControlledSxdg),
701-
MQT_NAMED_BUILDER(sxdg)},
702-
QCTestCase{"InverseSXdg", MQT_NAMED_BUILDER(inverseSxdg),
703-
MQT_NAMED_BUILDER(sx)},
704-
QCTestCase{"InverseMultipleControlledSXdg",
705-
MQT_NAMED_BUILDER(inverseMultipleControlledSxdg),
706-
MQT_NAMED_BUILDER(multipleControlledSx)}));
733+
testing::Values(
734+
QCTestCase{"SXdg", MQT_NAMED_BUILDER(sxdg), MQT_NAMED_BUILDER(sxdg)},
735+
QCTestCase{"SingleControlledSXdg",
736+
MQT_NAMED_BUILDER(singleControlledSxdg),
737+
MQT_NAMED_BUILDER(singleControlledSxdg)},
738+
QCTestCase{"MultipleControlledSXdg",
739+
MQT_NAMED_BUILDER(multipleControlledSxdg),
740+
MQT_NAMED_BUILDER(multipleControlledSxdg)},
741+
QCTestCase{"NestedControlledSXdg",
742+
MQT_NAMED_BUILDER(nestedControlledSxdg),
743+
MQT_NAMED_BUILDER(multipleControlledSxdg)},
744+
QCTestCase{"TrivialControlledSXdg",
745+
MQT_NAMED_BUILDER(trivialControlledSxdg),
746+
MQT_NAMED_BUILDER(sxdg)},
747+
QCTestCase{"InverseSXdg", MQT_NAMED_BUILDER(inverseSxdg),
748+
MQT_NAMED_BUILDER(sx)},
749+
QCTestCase{"InverseMultipleControlledSXdg",
750+
MQT_NAMED_BUILDER(inverseMultipleControlledSxdg),
751+
MQT_NAMED_BUILDER(multipleControlledSx)},
752+
QCTestCase{"PowTwoSXdg", MQT_NAMED_BUILDER(powTwoSxdg),
753+
MQT_NAMED_BUILDER(powTwoSxdgRef)},
754+
QCTestCase{"PowThirdSxdgGeneral", MQT_NAMED_BUILDER(powThirdSxdg),
755+
MQT_NAMED_BUILDER(powThirdSxdgRef)}));
707756
/// @}
708757

709758
/// \name QC/Operations/StandardGates/TOp.cpp
@@ -725,7 +774,10 @@ INSTANTIATE_TEST_SUITE_P(
725774
MQT_NAMED_BUILDER(tdg)},
726775
QCTestCase{"InverseMultipleControlledT",
727776
MQT_NAMED_BUILDER(inverseMultipleControlledT),
728-
MQT_NAMED_BUILDER(multipleControlledTdg)}));
777+
MQT_NAMED_BUILDER(multipleControlledTdg)},
778+
QCTestCase{"PowTwoT", MQT_NAMED_BUILDER(powTwoT), MQT_NAMED_BUILDER(s)},
779+
QCTestCase{"PowThirdTToP", MQT_NAMED_BUILDER(powThirdT),
780+
MQT_NAMED_BUILDER(powThirdTRef)}));
729781
/// @}
730782

731783
/// \name QC/Operations/StandardGates/TdgOp.cpp
@@ -750,7 +802,11 @@ INSTANTIATE_TEST_SUITE_P(
750802
MQT_NAMED_BUILDER(t_)},
751803
QCTestCase{"InverseMultipleControlledTdg",
752804
MQT_NAMED_BUILDER(inverseMultipleControlledTdg),
753-
MQT_NAMED_BUILDER(multipleControlledT)}));
805+
MQT_NAMED_BUILDER(multipleControlledT)},
806+
QCTestCase{"PowTwoTdg", MQT_NAMED_BUILDER(powTwoTdg),
807+
MQT_NAMED_BUILDER(sdg)},
808+
QCTestCase{"PowThirdTdgToP", MQT_NAMED_BUILDER(powThirdTdg),
809+
MQT_NAMED_BUILDER(powThirdTdgRef)}));
754810
/// @}
755811

756812
/// \name QC/Operations/StandardGates/U2Op.cpp
@@ -817,7 +873,13 @@ INSTANTIATE_TEST_SUITE_P(
817873
MQT_NAMED_BUILDER(x)},
818874
QCTestCase{"InverseMultipleControlledX",
819875
MQT_NAMED_BUILDER(inverseMultipleControlledX),
820-
MQT_NAMED_BUILDER(multipleControlledX)}));
876+
MQT_NAMED_BUILDER(multipleControlledX)},
877+
QCTestCase{"PowHalfX", MQT_NAMED_BUILDER(powHalfX),
878+
MQT_NAMED_BUILDER(powHalfXRef)},
879+
QCTestCase{"PowNegHalfXToSXdg", MQT_NAMED_BUILDER(powNegHalfX),
880+
MQT_NAMED_BUILDER(sxdg)},
881+
QCTestCase{"PowThirdXGeneral", MQT_NAMED_BUILDER(powThirdX),
882+
MQT_NAMED_BUILDER(powThirdXRef)}));
821883
/// @}
822884

823885
/// \name QC/Operations/StandardGates/XxMinusYyOp.cpp
@@ -843,7 +905,9 @@ INSTANTIATE_TEST_SUITE_P(
843905
MQT_NAMED_BUILDER(xxMinusYY)},
844906
QCTestCase{"InverseMultipleControlledXXMinusYY",
845907
MQT_NAMED_BUILDER(inverseMultipleControlledXxMinusYY),
846-
MQT_NAMED_BUILDER(multipleControlledXxMinusYY)}));
908+
MQT_NAMED_BUILDER(multipleControlledXxMinusYY)},
909+
QCTestCase{"PowXxMinusYYScaled", MQT_NAMED_BUILDER(powXxMinusYYScaled),
910+
MQT_NAMED_BUILDER(powXxMinusYYScaledRef)}));
847911
/// @}
848912

849913
/// \name QC/Operations/StandardGates/XxPlusYyOp.cpp
@@ -869,7 +933,9 @@ INSTANTIATE_TEST_SUITE_P(
869933
MQT_NAMED_BUILDER(xxPlusYY)},
870934
QCTestCase{"InverseMultipleControlledXXPlusYY",
871935
MQT_NAMED_BUILDER(inverseMultipleControlledXxPlusYY),
872-
MQT_NAMED_BUILDER(multipleControlledXxPlusYY)}));
936+
MQT_NAMED_BUILDER(multipleControlledXxPlusYY)},
937+
QCTestCase{"PowXxPlusYYScaled", MQT_NAMED_BUILDER(powXxPlusYYScaled),
938+
MQT_NAMED_BUILDER(powXxPlusYYScaledRef)}));
873939
/// @}
874940

875941
/// \name QC/Operations/StandardGates/YOp.cpp
@@ -891,7 +957,9 @@ INSTANTIATE_TEST_SUITE_P(
891957
MQT_NAMED_BUILDER(y)},
892958
QCTestCase{"InverseMultipleControlledY",
893959
MQT_NAMED_BUILDER(inverseMultipleControlledY),
894-
MQT_NAMED_BUILDER(multipleControlledY)}));
960+
MQT_NAMED_BUILDER(multipleControlledY)},
961+
QCTestCase{"PowHalfY", MQT_NAMED_BUILDER(powHalfY),
962+
MQT_NAMED_BUILDER(powHalfYRef)}));
895963
/// @}
896964

897965
/// \name QC/Operations/StandardGates/ZOp.cpp
@@ -913,7 +981,13 @@ INSTANTIATE_TEST_SUITE_P(
913981
MQT_NAMED_BUILDER(z)},
914982
QCTestCase{"InverseMultipleControlledZ",
915983
MQT_NAMED_BUILDER(inverseMultipleControlledZ),
916-
MQT_NAMED_BUILDER(multipleControlledZ)}));
984+
MQT_NAMED_BUILDER(multipleControlledZ)},
985+
QCTestCase{"PowHalfZ", MQT_NAMED_BUILDER(powHalfZ),
986+
MQT_NAMED_BUILDER(s)},
987+
QCTestCase{"NormalizeAngleWrapZ", MQT_NAMED_BUILDER(powThreeHalvesZ),
988+
MQT_NAMED_BUILDER(sdg)},
989+
QCTestCase{"PowThirdZToP", MQT_NAMED_BUILDER(powThirdZ),
990+
MQT_NAMED_BUILDER(powThirdZRef)}));
917991
/// @}
918992

919993
/// \name QC/QubitManagement/QubitManagement.cpp

0 commit comments

Comments
 (0)