Skip to content

Commit 3142193

Browse files
author
Keefe Huang
committed
Add tests for CCZ and MCZ
1 parent 894add1 commit 3142193

File tree

1 file changed

+49
-0
lines changed

1 file changed

+49
-0
lines changed

test/zx/test_zx_functionality.cpp

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -244,6 +244,55 @@ TEST_F(ZXFunctionalityTest, CRZ) {
244244
EXPECT_TRUE(d.connected(d.getInput(0), d.getOutput(0)));
245245
}
246246

247+
TEST_F(ZXFunctionalityTest, MultiCZ) {
248+
using namespace qc::literals;
249+
qc = qc::QuantumComputation(3);
250+
qc.mcz({1, 2}, 0);
251+
252+
auto qcPrime = qc::QuantumComputation(3);
253+
qcPrime.h(0);
254+
qcPrime.mcx({1, 2}, 0);
255+
qcPrime.h(0);
256+
257+
auto d = FunctionalityConstruction::buildFunctionality(&qc);
258+
259+
auto dPrime = FunctionalityConstruction::buildFunctionality(&qcPrime);
260+
261+
d.concat(dPrime.invert());
262+
263+
fullReduce(d);
264+
265+
EXPECT_TRUE(d.isIdentity());
266+
EXPECT_TRUE(d.globalPhaseIsZero());
267+
EXPECT_TRUE(d.connected(d.getInput(0), d.getOutput(0)));
268+
}
269+
` TEST_F(ZXFunctionalityTest, CCZ) {
270+
using namespace qc::literals;
271+
const std::string testfile = "OPENQASM 2.0;"
272+
"include \"qelib1.inc\";"
273+
"qreg q[3];"
274+
"ccz q[0],q[1],q[2];\n";
275+
276+
qc = qasm3::Importer::imports(testfile);
277+
ZXDiagram diag = FunctionalityConstruction::buildFunctionality(&qc);
278+
auto qcPrime = qc::QuantumComputation(3);
279+
qcPrime.h(0);
280+
qcPrime.mcx({1, 2}, 0);
281+
qcPrime.h(0);
282+
283+
auto d = FunctionalityConstruction::buildFunctionality(&qc);
284+
285+
auto dPrime = FunctionalityConstruction::buildFunctionality(&qcPrime);
286+
287+
d.concat(dPrime.invert());
288+
289+
fullReduce(d);
290+
291+
EXPECT_TRUE(d.isIdentity());
292+
EXPECT_TRUE(d.globalPhaseIsZero());
293+
EXPECT_TRUE(d.connected(d.getInput(0), d.getOutput(0)));
294+
}
295+
247296
TEST_F(ZXFunctionalityTest, MultiControlX) {
248297
using namespace qc::literals;
249298
qc = qc::QuantumComputation(4);

0 commit comments

Comments
 (0)