@@ -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