INNER CODE UNIT · C++
twoQubitsGate
aromanro/QCSim · QCSim/DensityMatrixTests.cpp:173
const bool twoQubitsGate = gates[g]->getQubitsNumber() == 2;
if (twoQubitsGate && nrQubits < 2)
continue;
int qubit1 = twoQubitsGate ? qubitDistr2(gen) : qubitDistr(gen);
int qubit2 = qubit1 + 1;
if (twoQubitsGate && dist_bool(gen))
std::swap(qubit1, qubit2);
dm.ApplyGate(*gates[g], qubit1, qubit2);
reg.ApplyGate(*gates[g], qubit1, qubit2);
if (!CompareWithStatevector(dm, reg, nrQubits))
return false;
}
// sanity: a pure state must have unit trace and purity 1
if (!approxEqual(dm.Trace().real(), 1., 1E-9) || !approxEqual(dm.Trace().imag(), 0., 1E-9))