| 68 | |
| 69 | |
| 70 | void demo_setKrausMap() { |
| 71 | |
| 72 | // inline literal (C++ only) |
| 73 | KrausMap a = createKrausMap(1, 3); |
| 74 | setKrausMap(a, { |
| 75 | {{1,2},{3,4}}, |
| 76 | {{5,5},{6,6}}, |
| 77 | {{1_i,2_i},{-3_i,-4_i}} |
| 78 | }); |
| 79 | reportKrausMap(a); |
| 80 | destroyKrausMap(a); |
| 81 | |
| 82 | // 3D vector (C++ only) |
| 83 | vector<vector<vector<qcomp>>> vec { |
| 84 | { |
| 85 | {-9,-8, -8, -9}, |
| 86 | {7, 7, 6, 6}, |
| 87 | {0, -1, -2, -3}, |
| 88 | {-4_i, -5_i, 0, 0} |
| 89 | }, { |
| 90 | {1,2,3,4}, |
| 91 | {5,6,7,8}, |
| 92 | {1,1,1,1}, |
| 93 | {2,2,2,2} |
| 94 | } |
| 95 | }; |
| 96 | KrausMap b = createKrausMap(2, 2); |
| 97 | setKrausMap(b, vec); |
| 98 | reportKrausMap(b); |
| 99 | destroyKrausMap(b); |
| 100 | |
| 101 | // 3D nested pointers |
| 102 | int nQb = 2; |
| 103 | int nOps = 4; |
| 104 | int dim = 1 << nQb; |
| 105 | qcomp*** ptrs = (qcomp***) malloc(nOps * sizeof *ptrs); |
| 106 | for (int n=0; n<nOps; n++) { |
| 107 | ptrs[n] = (qcomp**) malloc(dim * sizeof **ptrs); |
| 108 | for (int i=0; i<dim; i++) { |
| 109 | ptrs[n][i] = (qcomp*) malloc(dim * sizeof ***ptrs); |
| 110 | for (int j=0; j<dim; j++) |
| 111 | ptrs[n][i][j] = (n==j) * (n+1) * -10_i; |
| 112 | } |
| 113 | } |
| 114 | KrausMap c = createKrausMap(nQb, nOps); |
| 115 | setKrausMap(c, ptrs); |
| 116 | reportKrausMap(c); |
| 117 | destroyKrausMap(c); |
| 118 | |
| 119 | // 1D array of 2D pointers (decays, so C++ supported) |
| 120 | qcomp** ptrArr[4]; |
| 121 | for (int n=0; n<nOps; n++) |
| 122 | ptrArr[n] = ptrs[n]; |
| 123 | KrausMap d = createKrausMap(nQb, nOps); |
| 124 | setKrausMap(d, ptrArr); |
| 125 | reportKrausMap(d); |
| 126 | destroyKrausMap(d); |
| 127 |
no test coverage detected