Skip to content
This repository was archived by the owner on Aug 21, 2024. It is now read-only.

Commit 5f7605b

Browse files
committed
Add tests for the last two tasks.
1 parent 4db4659 commit 5f7605b

4 files changed

Lines changed: 52 additions & 12 deletions

File tree

KeyDistribution_E91/KeyDistribution_E91.ipynb

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -277,7 +277,7 @@
277277
{
278278
"cell_type": "markdown",
279279
"source": [
280-
"#### Task 3.1 CHSH Correlation Check\n",
280+
"#### Task 3.1 CHSH Correlation Value\n",
281281
"\n",
282282
"**Inputs:**\n",
283283
"1) `basesAlice`: Alice's measurement bases indices,\n",
@@ -293,9 +293,9 @@
293293
"cell_type": "code",
294294
"execution_count": null,
295295
"source": [
296-
"%kata T31_CorrelationCheck\n",
296+
"%kata T31_CorrelationValue\n",
297297
"\n",
298-
"function CorrelationCheck(basesAlice: Int[], basesBob: Int[], resultsAlice: Result[], resultsBob: Result[]) : Double {\n",
298+
"function CorrelationValue(basesAlice: Int[], basesBob: Int[], resultsAlice: Result[], resultsBob: Result[]) : Double {\n",
299299
" // ...\n",
300300
"\n",
301301
" return 0.0;\n",

KeyDistribution_E91/ReferenceImplementation.qs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -120,8 +120,8 @@ namespace Quantum.Kata.KeyDistributionE91 {
120120
// Part III. Eavesdropping
121121
//////////////////////////////////////////////////////////////////
122122

123-
// Task 3.1 CHSH Correlation Check
124-
function CorrelationCheck_Reference (basesAlice: Int[], basesBob: Int[], resultsAlice: Result[], resultsBob: Result[]) : Double {
123+
// Task 3.1 CHSH Correlation Value
124+
function CorrelationValue_Reference (basesAlice: Int[], basesBob: Int[], resultsAlice: Result[], resultsBob: Result[]) : Double {
125125
mutable expectationValues = new Double[0];
126126

127127
for (i, j) in [(1,2), (1, 4), (3, 2), (3, 4)] {
@@ -172,7 +172,7 @@ namespace Quantum.Kata.KeyDistributionE91 {
172172

173173
// Eve eavesdrops on all qubits, guessing the basis at random
174174
for (qAlice, qBob) in Zipped(qsAlice, qsBob) {
175-
let _ = Eavesdrop_Reference(qAlice, qBob, DrawRandomInt(1,2));
175+
let _ = Eavesdrop_Reference(qAlice, qBob, DrawRandomInt(2,3));
176176
}
177177

178178
// 2. Alice and Bob choose random measurement bases
@@ -190,7 +190,7 @@ namespace Quantum.Kata.KeyDistributionE91 {
190190
Message($"Bob's Key: {keyBob}\n");
191191

192192
// 5. Compute the CHSH correlation value
193-
let s = CorrelationCheck_Reference(basesAlice, basesBob, resultsAlice, resultsBob);
193+
let s = CorrelationValue_Reference(basesAlice, basesBob, resultsAlice, resultsBob);
194194
Message($"S = {s}");
195195

196196
// Reset all qubits to |0⟩

KeyDistribution_E91/Tasks.qs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -85,8 +85,8 @@ namespace Quantum.Kata.KeyDistributionE91 {
8585
// Part III. Eavesdropping
8686
//////////////////////////////////////////////////////////////////
8787

88-
// Task 3.1. CHSH Correlation Check
89-
function CorrelationCheck(basesAlice: Int[], basesBob: Int[], resultsAlice: Result[], resultsBob: Result[]) : Double {
88+
// Task 3.1. CHSH Correlation Value
89+
function CorrelationValue(basesAlice: Int[], basesBob: Int[], resultsAlice: Result[], resultsBob: Result[]) : Double {
9090
// ...
9191

9292
return 0.0;

KeyDistribution_E91/Tests.qs

Lines changed: 43 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -131,13 +131,53 @@ namespace Quantum.Kata.KeyDistributionE91 {
131131
//////////////////////////////////////////////////////////////////
132132

133133
@Test("QuantumSimulator")
134-
function T31_CorrelationCheck() : Unit {
135-
// ...
134+
operation T31_CorrelationValue() : Unit {
135+
let N = 10;
136+
use (qsAlice, qsBob) = (Qubit[N] ,Qubit[N]);
137+
EntangledPairs_Reference(qsAlice, qsBob);
138+
139+
for (qAlice, qBob) in Zipped(qsAlice, qsBob) {
140+
let _ = Eavesdrop_Reference(qAlice, qBob, DrawRandomInt(2,3));
141+
}
142+
143+
let basesAlice = RandomBasesArray_Reference([1,2,3], N);
144+
let basesBob = RandomBasesArray_Reference([2,3,4], N);
145+
146+
let resultsAlice = MeasureQubitArray_Reference(qsAlice, basesAlice);
147+
let resultsBob = MeasureQubitArray_Reference(qsBob, basesBob);
148+
149+
let actual = CorrelationValue(basesAlice, basesBob, resultsAlice, resultsBob);
150+
let expected = CorrelationValue_Reference(basesAlice, basesBob, resultsAlice, resultsBob);
151+
152+
Fact(actual == expected, $"Correlation value {actual} does not match the expected value {expected}.");
153+
154+
ResetAll(qsAlice + qsBob);
136155
}
137156

138157
@Test("QuantumSimulator")
139158
operation T32_Eavesdrop() : Unit {
140-
// ...
159+
for basisIndex in 2..3 {
160+
use (qAlice, qBob) = (Qubit(), Qubit());
161+
EntangledPairs_Reference([qAlice], [qBob]);
162+
163+
let (r1, r2) = Eavesdrop_Reference(qAlice, qBob, basisIndex);
164+
165+
// Make sure entanglement was not disturbed until measurement
166+
Fact(r1 == r2, "Measurement outcomes do not match for given qubits.");
167+
168+
for q in [qAlice, qBob] {
169+
let rotationAngle = PI() * IntAsDouble(basisIndex - 1) / 4.0;
170+
171+
// Make sure of the wavefunction collapse
172+
within {
173+
Ry(rotationAngle, q);
174+
} apply {
175+
AssertQubitWithinTolerance(r1, q, 1e-5);
176+
}
177+
}
178+
179+
ResetAll([qAlice, qBob]);
180+
}
141181
}
142182

143183
}

0 commit comments

Comments
 (0)