def test_two_bit_adder(self, a, b, length): log.info("Testing 'DraperAdder' with a=%d(%s), b=%d(%s).", a, "{0:b}".format(a), b, "{0:b}".format(b)) length = dc_qiskit_algorithms.DraperAdderGate.compute_length( a, b, length) qubit_a = QuantumRegister(length, "a") qubit_b = QuantumRegister(length, "b") readout_a = ClassicalRegister(length, "c_a") readout_b = ClassicalRegister(length, "c_b") qc = QuantumCircuit(qubit_a, qubit_b, readout_a, readout_b, name="draper adder") qc.add_draper(a, b, list(qubit_a) + list(qubit_b), length) qc.measure(qubit_a, readout_a) qc.measure(qubit_b, readout_b) backend = qiskit.Aer.get_backend('qasm_simulator') # type: AerBackend job = qiskit.execute(qc, backend, shots=8192) counts = job.result().get_counts() result_list = [{ 'b': k[::-1].split(' ')[1], 'a': k[::-1].split(' ')[0], 'counts': v } for k, v in counts.items()] log.info(result_list) self.assertEqual(len(result_list), 1) data = result_list[0] # type: dict self.assertEqual(int(data['b'], 2), b, "Register b must be unchanged!") self.assertEqual(int(data['a'], 2), (a + b) % 2**length, "Addition must be correctly performed!")