Skip to content

Commit aaa7096

Browse files
committed
add simple 2 gate merge tests
1 parent e978fad commit aaa7096

File tree

1 file changed

+100
-0
lines changed

1 file changed

+100
-0
lines changed

mlir/unittests/Dialect/QCO/Transforms/test_qco_quaternion_merge.cpp

Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,3 +97,103 @@ class QCOQuaternionMergeTest : public ::testing::Test {
9797
return pm.run(module);
9898
}
9999
};
100+
101+
// Test Two Gates merge Successfully
102+
// RX RY -> merges to U
103+
TEST_F(QCOQuaternionMergeTest, quaternionMergeRXRYGates) {
104+
ASSERT_TRUE(testGateMerge({{rx, {1.}}, {ry, {1.}}}).succeeded());
105+
EXPECT_EQ(countOps<UOp>(), 1);
106+
EXPECT_EQ(countOps<RXOp>(), 0);
107+
EXPECT_EQ(countOps<RYOp>(), 0);
108+
}
109+
110+
// RX RZ -> merges to U
111+
TEST_F(QCOQuaternionMergeTest, quaternionMergeRXRZGates) {
112+
ASSERT_TRUE(testGateMerge({{rx, {1.}}, {rz, {1.}}}).succeeded());
113+
EXPECT_EQ(countOps<UOp>(), 1);
114+
EXPECT_EQ(countOps<RXOp>(), 0);
115+
EXPECT_EQ(countOps<RZOp>(), 0);
116+
}
117+
118+
// RY RX -> merges to U
119+
TEST_F(QCOQuaternionMergeTest, quaternionMergeRYRXGates) {
120+
ASSERT_TRUE(testGateMerge({{ry, {1.}}, {rx, {1.}}}).succeeded());
121+
EXPECT_EQ(countOps<UOp>(), 1);
122+
EXPECT_EQ(countOps<RYOp>(), 0);
123+
EXPECT_EQ(countOps<RXOp>(), 0);
124+
}
125+
126+
// RY RZ -> merges to U
127+
TEST_F(QCOQuaternionMergeTest, quaternionMergeRYRZGates) {
128+
ASSERT_TRUE(testGateMerge({{ry, {1.}}, {rz, {1.}}}).succeeded());
129+
EXPECT_EQ(countOps<UOp>(), 1);
130+
EXPECT_EQ(countOps<RYOp>(), 0);
131+
EXPECT_EQ(countOps<RZOp>(), 0);
132+
}
133+
134+
// RZ RX -> merges to U
135+
TEST_F(QCOQuaternionMergeTest, quaternionMergeRZRXGates) {
136+
ASSERT_TRUE(testGateMerge({{rz, {1.}}, {rx, {1.}}}).succeeded());
137+
EXPECT_EQ(countOps<UOp>(), 1);
138+
EXPECT_EQ(countOps<RZOp>(), 0);
139+
EXPECT_EQ(countOps<RXOp>(), 0);
140+
}
141+
142+
// RZ RY -> merges to U
143+
TEST_F(QCOQuaternionMergeTest, quaternionMergeRZRYGates) {
144+
ASSERT_TRUE(testGateMerge({{rz, {1.}}, {ry, {1.}}}).succeeded());
145+
EXPECT_EQ(countOps<UOp>(), 1);
146+
EXPECT_EQ(countOps<RZOp>(), 0);
147+
EXPECT_EQ(countOps<RYOp>(), 0);
148+
}
149+
150+
// U U -> merges to U
151+
TEST_F(QCOQuaternionMergeTest, quaternionMergeUUGates) {
152+
ASSERT_TRUE(
153+
testGateMerge({{u, {1., 2., .3}}, {u, {4., 5., 6.}}}).succeeded());
154+
EXPECT_EQ(countOps<UOp>(), 1);
155+
EXPECT_EQ(countOps<RZOp>(), 0);
156+
EXPECT_EQ(countOps<RYOp>(), 0);
157+
}
158+
159+
// U RX -> merges to U
160+
TEST_F(QCOQuaternionMergeTest, quaternionMergeURXGates) {
161+
ASSERT_TRUE(testGateMerge({{u, {1., 2., .3}}, {rx, {1.}}}).succeeded());
162+
EXPECT_EQ(countOps<UOp>(), 1);
163+
EXPECT_EQ(countOps<RXOp>(), 0);
164+
}
165+
166+
// U RY -> merges to U
167+
TEST_F(QCOQuaternionMergeTest, quaternionMergeURYGates) {
168+
ASSERT_TRUE(testGateMerge({{u, {1., 2., .3}}, {ry, {1.}}}).succeeded());
169+
EXPECT_EQ(countOps<UOp>(), 1);
170+
EXPECT_EQ(countOps<RYOp>(), 0);
171+
}
172+
173+
// U RZ -> merges to U
174+
TEST_F(QCOQuaternionMergeTest, quaternionMergeURZGates) {
175+
ASSERT_TRUE(testGateMerge({{u, {1., 2., .3}}, {rx, {1.}}}).succeeded());
176+
EXPECT_EQ(countOps<UOp>(), 1);
177+
EXPECT_EQ(countOps<RZOp>(), 0);
178+
}
179+
180+
// RX U -> merges to U
181+
TEST_F(QCOQuaternionMergeTest, quaternionMergeRXUGates) {
182+
ASSERT_TRUE(testGateMerge({{rx, {1.}}, {u, {1., 2., .3}}}).succeeded());
183+
EXPECT_EQ(countOps<UOp>(), 1);
184+
EXPECT_EQ(countOps<RXOp>(), 0);
185+
}
186+
187+
// RY U -> merges to U
188+
TEST_F(QCOQuaternionMergeTest, quaternionMergeRYUGates) {
189+
ASSERT_TRUE(testGateMerge({{ry, {1.}}, {u, {1., 2., .3}}}).succeeded());
190+
EXPECT_EQ(countOps<UOp>(), 1);
191+
EXPECT_EQ(countOps<RYOp>(), 0);
192+
}
193+
194+
// RZ U -> merges to U
195+
TEST_F(QCOQuaternionMergeTest, quaternionMergeRZUGates) {
196+
ASSERT_TRUE(testGateMerge({{rz, {1.}}, {u, {1., 2., .3}}}).succeeded());
197+
EXPECT_EQ(countOps<UOp>(), 1);
198+
EXPECT_EQ(countOps<RZOp>(), 0);
199+
}

0 commit comments

Comments
 (0)