@@ -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