Test Pauli-X and non-adjacent controls for NCU.
118 const std::size_t max_qubits = 8;
125 std::vector<std::size_t> vals0 {0,1}, vals1 {0,2}, vals2 {1,2};
126 SECTION(
"3 qubit test"){
127 for(std::size_t state = 0; state < (std::size_t) (0b1<<(
num_qubits-1)); state++){
128 DYNAMIC_SECTION(
"CTRLs {0,1} STATE VALUE=" << state){
131 for(std::size_t ctrl_idx = 0; ctrl_idx <
num_qubits; ctrl_idx++){
132 unsigned int window_select = (state >> ctrl_idx) & 0b1;
133 if(window_select == 1){
134 sim.applyGateX(vals0[ctrl_idx]);
140 sim.applyGateNCU(
sim.getGateX(), vals0, 2,
"X");
142 if(state == (std::size_t) (0b1<<(
num_qubits-1)) - 1)
143 CHECK(
sim.applyMeasurementToRegister(vals0,
true) == 7);
145 CHECK(
sim.applyMeasurementToRegister(vals0,
true) != 7);
147 DYNAMIC_SECTION(
"CTRLs {0,2} STATE VALUE=" << state){
149 for(std::size_t ctrl_idx = 0; ctrl_idx <
num_qubits; ctrl_idx++){
150 unsigned int window_select = (state >> ctrl_idx) & 0b1;
151 if(window_select == 1){
152 sim.applyGateX(vals1[ctrl_idx]);
155 sim.applyGateNCU(
sim.getGateX(), vals1, 1,
"X");
160 if(state == (std::size_t) (0b1<<(
num_qubits-1)) - 1)
161 CHECK(
sim.applyMeasurementToRegister(vals1,
true) == 7);
163 CHECK(
sim.applyMeasurementToRegister(vals1,
true) != 7);
165 DYNAMIC_SECTION(
"CTRLs {1,2} STATE VALUE=" << state){
167 for(std::size_t ctrl_idx = 0; ctrl_idx <
num_qubits; ctrl_idx++){
168 unsigned int window_select = (state >> ctrl_idx) & 0b1;
169 if(window_select == 1){
170 sim.applyGateX(vals2[ctrl_idx]);
173 sim.applyGateNCU(
sim.getGateX(), vals2, 0,
"X");
175 if(state == (std::size_t) (0b1<<(
num_qubits-1)) - 1)
176 CHECK(
sim.applyMeasurementToRegister(vals2,
true) == 7);
178 CHECK(
sim.applyMeasurementToRegister(vals2,
true) != 7);
185 std::vector<std::size_t> vals0 {0,1,2}, vals1 {0,1,3}, vals2 {0,2};
186 SECTION(
"4 qubit test"){
187 for(std::size_t state = 0; state < (std::size_t) (0b1<<(
num_qubits-1)); state++){
188 DYNAMIC_SECTION(
"CTRLs {0,1,2} STATE VALUE=" << state){
190 for(std::size_t ctrl_idx = 0; ctrl_idx <
num_qubits; ctrl_idx++){
191 unsigned int window_select = (state >> ctrl_idx) & 0b1;
192 if(window_select == 1){
193 sim.applyGateX(vals0[ctrl_idx]);
196 sim.applyGateNCU(
sim.getGateX(), vals0, 3,
"X");
198 if(state == (std::size_t)(0b1<<(
num_qubits-1)) - 1)
199 CHECK(
sim.applyMeasurementToRegister(vals0,
true) == 15);
201 CHECK(
sim.applyMeasurementToRegister(vals0,
true) != 15);
203 DYNAMIC_SECTION(
"CTRLs {0,1,3} STATE VALUE=" << state){
205 for(std::size_t ctrl_idx = 0; ctrl_idx <
num_qubits; ctrl_idx++){
206 unsigned int window_select = (state >> ctrl_idx) & 0b1;
207 if(window_select == 1){
208 sim.applyGateX(vals1[ctrl_idx]);
211 sim.applyGateNCU(
sim.getGateX(), vals1, 2,
"X");
214 if(state == (std::size_t) (0b1<<(
num_qubits-1)) - 1)
215 CHECK(
sim.applyMeasurementToRegister(vals1,
true) == 15);
217 CHECK(
sim.applyMeasurementToRegister(vals1,
true) != 15);
225 std::vector<std::size_t> vals0 {0,1,2,3}, vals1 {0,1,3,4};
226 SECTION(
"5 qubit test"){
227 for(std::size_t state = 0; state < (std::size_t) (0b1<<(
num_qubits-1)); state++){
228 DYNAMIC_SECTION(
"CTRLs {0,1,2,3} STATE VALUE=" << state){
230 for(std::size_t ctrl_idx = 0; ctrl_idx <
num_qubits; ctrl_idx++){
231 unsigned int window_select = (state >> ctrl_idx) & 0b1;
232 if(window_select == 1){
233 sim.applyGateX(vals0[ctrl_idx]);
236 sim.applyGateNCU(
sim.getGateX(), vals0, 4,
"X");
238 if(state == (std::size_t)(0b1<<(
num_qubits-1)) - 1)
239 CHECK(
sim.applyMeasurementToRegister(vals0,
true) == 31);
241 CHECK(
sim.applyMeasurementToRegister(vals0,
true) != 31);
243 DYNAMIC_SECTION(
"CTRLs {0,1,3,4} STATE VALUE=" << state){
245 for(std::size_t ctrl_idx = 0; ctrl_idx <
num_qubits; ctrl_idx++){
246 unsigned int window_select = (state >> ctrl_idx) & 0b1;
247 if(window_select == 1){
248 sim.applyGateX(vals1[ctrl_idx]);
251 sim.applyGateNCU(
sim.getGateX(), vals1, 2,
"X");
254 if(state == (std::size_t) (0b1<<(
num_qubits-1)) - 1)
255 CHECK(
sim.applyMeasurementToRegister(vals1,
true) == 31);
257 CHECK(
sim.applyMeasurementToRegister(vals1,
true) != 31);
Class definition for IntelSimulator. The purpose of this class is to map the functionality of the und...