85TEST_CASE(
"createCloneQureg",
"[data_structures]" ) {
87 SECTION(
"state-vector" ) {
93 REQUIRE( b.isMultithreaded == a.isMultithreaded );
94 REQUIRE( b.isGpuAccelerated == a.isGpuAccelerated );
95 REQUIRE( b.isDistributed == a.isDistributed );
97 REQUIRE( b.rank == a.rank );
98 REQUIRE( b.numNodes == a.numNodes );
99 REQUIRE( b.logNumNodes == a.logNumNodes );
101 REQUIRE( b.isDensityMatrix == a.isDensityMatrix );
102 REQUIRE( b.numQubits == a.numQubits );
103 REQUIRE( b.numAmps == a.numAmps );
104 REQUIRE( b.logNumAmps == a.logNumAmps );
106 REQUIRE( b.numAmpsPerNode == a.numAmpsPerNode );
107 REQUIRE( b.logNumAmpsPerNode == a.logNumAmpsPerNode );
108 REQUIRE( b.logNumColsPerNode == a.logNumColsPerNode );
116 SECTION(
"density-matrix" ) {
122 REQUIRE( b.isMultithreaded == a.isMultithreaded );
123 REQUIRE( b.isGpuAccelerated == a.isGpuAccelerated );
124 REQUIRE( b.isDistributed == a.isDistributed );
126 REQUIRE( b.rank == a.rank );
127 REQUIRE( b.numNodes == a.numNodes );
128 REQUIRE( b.logNumNodes == a.logNumNodes );
130 REQUIRE( b.isDensityMatrix == a.isDensityMatrix );
131 REQUIRE( b.numQubits == a.numQubits );
132 REQUIRE( b.numAmps == a.numAmps );
133 REQUIRE( b.logNumAmps == a.logNumAmps );
135 REQUIRE( b.numAmpsPerNode == a.numAmpsPerNode );
136 REQUIRE( b.logNumAmpsPerNode == a.logNumAmpsPerNode );
137 REQUIRE( b.logNumColsPerNode == a.logNumColsPerNode );
153TEST_CASE(
"createComplexMatrixN",
"[data_structures]" ) {
155 SECTION(
"correctness" ) {
157 int numQb = GENERATE( range(1,10+1) );
158 ComplexMatrixN m = createComplexMatrixN(numQb);
163 destroyComplexMatrixN(m);
165 SECTION(
"input validation" ) {
167 SECTION(
"number of qubits" ) {
169 int numQb = GENERATE( -1, 0 );
170 REQUIRE_THROWS_WITH( createComplexMatrixN(numQb), ContainsSubstring(
"must target one or more qubits") );
256 int minNumQb =
calcLog2(env.numNodes);
260 SECTION(
"correctness" ) {
263 int numQb = GENERATE_COPY( range(minNumQb, minNumQb+10) );
264 DiagonalOp op = createDiagonalOp(numQb, env);
267 REQUIRE( op.numQubits == numQb );
268 REQUIRE( op.numElemsPerNode == (1LL << numQb) / (op.isDistributed? env.numNodes : 1) );
269 REQUIRE( op.cpuElems != NULL );
276 destroyDiagonalOp(op, env);
278 SECTION(
"input validation" ) {
280 SECTION(
"number of qubits" ) {
282 int numQb = GENERATE( -1, 0 );
283 REQUIRE_THROWS_WITH( createDiagonalOp(numQb, env), ContainsSubstring(
"must target one or more qubits") );
285 SECTION(
"number of elements" ) {
288 int maxQb = (int)
calcLog2(SIZE_MAX);
289 REQUIRE_THROWS_WITH( createDiagonalOp(maxQb+1, env),
290 ContainsSubstring(
"the matrix would contain more elements") && ContainsSubstring(
"than the maximum which can be addressed by the qindex type") );
306 SECTION(
"available memory" ) {
763TEST_CASE(
"createSubDiagonalOp",
"[data_structures]" ) {
765 SECTION(
"correctness" ) {
767 int numQb = GENERATE( range(1,10+1) );
768 SubDiagonalOp op = createSubDiagonalOp(numQb);
773 destroySubDiagonalOp(op);
775 SECTION(
"input validation" ) {
777 SECTION(
"number of qubits" ) {
779 int numQb = GENERATE( -1, 0 );
780 REQUIRE_THROWS_WITH( createSubDiagonalOp(numQb), ContainsSubstring(
"must target one or more qubits") );
783 REQUIRE_THROWS_WITH( createSubDiagonalOp(numQb),
784 ContainsSubstring(
"the matrix would contain more elements") &&
785 ContainsSubstring(
"than the maximum which can be addressed by the qindex type") );
1205 SECTION(
"correctness" ) {
1208 int numQb = GENERATE_COPY( range(minNumQb, minNumQb+10) );
1219 for (n=0; n<op.numElemsPerNode; n++)
1220 op.cpuElems[n] = qcomp(n, -2*n);
1225 for (
long long int i=0; i<qureg.numAmpsPerNode; i++)
1226 qureg.cpuAmps[i] = qcomp(1,1);
1227 copyStateToGPU(qureg);
1230 applyDiagonalOp(qureg, op);
1231 copyStateFromGPU(qureg);
1232 for (n=0; n<qureg.numAmpsPerNode; n++) {
1233 REQUIRE( real(qureg.cpuAmps[n]) == 3*n );
1234 REQUIRE( imag(qureg.cpuAmps[n]) == -n );