diff --git a/Standard/tests/QcvvTests.cs b/Standard/tests/QcvvTests.cs index 190ff00fd8f..fea185ab484 100644 --- a/Standard/tests/QcvvTests.cs +++ b/Standard/tests/QcvvTests.cs @@ -2,15 +2,9 @@ // Licensed under the MIT License. using System; -using System.Linq; -using System.Runtime.InteropServices; -using Microsoft.Quantum.Intrinsic; -using Microsoft.Quantum.Simulation; using Microsoft.Quantum.Simulation.Common; -using Microsoft.Quantum.Simulation.Core; using Microsoft.Quantum.Simulation.Simulators; -using Microsoft.Quantum.Standard.Emulation; using Xunit; using Assert = Xunit.Assert; @@ -36,5 +30,19 @@ void TestOne(SimulatorBase sim, int expected) TestOne(new QuantumSimulator(), 1); TestOne(new ToffoliSimulator(), 2000); } + + [Fact] + public void TestEstimateFrequencyBinomial() + { + using var sim = new QuantumSimulator(randomNumberGeneratorSeed: 655321); + TestEstimateFrequencyBinomialInner.Run(sim).Wait(); + } + + [Fact] + public void TestRobustPhaseEstimation() + { + using var sim = new QuantumSimulator(randomNumberGeneratorSeed: 655321); + TestRobustPhaseEstimationInner.Run(sim).Wait(); + } } } diff --git a/Standard/tests/QcvvTests.qs b/Standard/tests/QcvvTests.qs index 1655d411684..3c00e88a6f2 100644 --- a/Standard/tests/QcvvTests.qs +++ b/Standard/tests/QcvvTests.qs @@ -2,16 +2,16 @@ // Licensed under the MIT License. namespace Microsoft.Quantum.Tests { - open Microsoft.Quantum.Intrinsic; + open Microsoft.Quantum.Arrays; open Microsoft.Quantum.Canon; - open Microsoft.Quantum.Convert; - open Microsoft.Quantum.Oracles; open Microsoft.Quantum.Characterization; - open Microsoft.Quantum.Preparation; + open Microsoft.Quantum.Convert; open Microsoft.Quantum.Diagnostics; - open Microsoft.Quantum.Arrays; + open Microsoft.Quantum.Intrinsic; open Microsoft.Quantum.Math; open Microsoft.Quantum.Measurement as Meas; + open Microsoft.Quantum.Oracles; + open Microsoft.Quantum.Preparation; @Test("QuantumSimulator") operation TestChoiState() : Unit { @@ -20,8 +20,8 @@ namespace Microsoft.Quantum.Tests { // As usual, the same confusion about {+1, -1} and {0, 1} // labeling bites us here. - AssertMeasurement([PauliX, PauliX], register, Zero, $"XX"); - AssertMeasurement([PauliZ, PauliZ], register, Zero, $"ZZ"); + AssertMeasurement([PauliX, PauliX], register, Zero, "XX"); + AssertMeasurement([PauliZ, PauliZ], register, Zero, "ZZ"); ResetAll(register); } @@ -38,7 +38,7 @@ namespace Microsoft.Quantum.Tests { EqualityWithinToleranceFact(freq2, 0.5, 0.1); } - operation PrepareBiasedCoin(successProbability : Double, qubit : Qubit) : Unit is Adj { + internal operation PrepareBiasedCoin(successProbability : Double, qubit : Qubit) : Unit is Adj { let rotationAngle = 2.0 * ArcCos(Sqrt(successProbability)); Ry(rotationAngle, qubit); } @@ -57,8 +57,7 @@ namespace Microsoft.Quantum.Tests { EqualityWithinToleranceFact(expectation, actualFreq, tolerance); } - @Test("QuantumSimulator") - operation TestEstimateFrequencyBinomial() : Unit { + operation TestEstimateFrequencyBinomialInner() : Unit { // If this is larger, tests fail less often, but more false negatives // slip through. let nStdDevs = 3.0; @@ -90,7 +89,7 @@ namespace Microsoft.Quantum.Tests { Exp([PauliZ], phase * IntAsDouble(power), qubits); } - operation RobustPhaseEstimationDemoImpl (phaseSet : Double, bitsPrecision : Int) : Double { + internal operation RobustPhaseEstimationDemoImpl (phaseSet : Double, bitsPrecision : Int) : Double { let op = DiscreteOracle(RobustPhaseEstimationTestOp(phaseSet, _, _)); use q = Qubit(); @@ -99,9 +98,7 @@ namespace Microsoft.Quantum.Tests { return phaseEst; } - // Probabilistic test. Might fail occasionally - @Test("QuantumSimulator") - operation TestRobustPhaseEstimation() : Unit { + operation TestRobustPhaseEstimationInner() : Unit { let bitsPrecision = 10; for idxTest in 0 .. 9 { @@ -125,13 +122,13 @@ namespace Microsoft.Quantum.Tests { @Test("QuantumSimulator") operation TestSingleQubitProcessTomographyMeasurement() : Unit { - EqualityFactR(SingleQubitProcessTomographyMeasurement(PauliI, PauliI, H), Zero, $"Failed at ⟪I | H | I⟫."); - EqualityFactR(SingleQubitProcessTomographyMeasurement(PauliX, PauliI, H), Zero, $"Failed at ⟪I | H | X⟫."); - EqualityFactR(SingleQubitProcessTomographyMeasurement(PauliY, PauliI, H), Zero, $"Failed at ⟪I | H | Y⟫."); - EqualityFactR(SingleQubitProcessTomographyMeasurement(PauliZ, PauliI, H), Zero, $"Failed at ⟪I | H | Z⟫."); - EqualityFactR(SingleQubitProcessTomographyMeasurement(PauliX, PauliZ, H), Zero, $"Failed at ⟪Z | H | X⟫."); - EqualityFactR(SingleQubitProcessTomographyMeasurement(PauliY, PauliY, H), One, $"Failed at -⟪Y | H | Y⟫."); - EqualityFactR(SingleQubitProcessTomographyMeasurement(PauliX, PauliZ, H), Zero, $"Failed at ⟪Z | H | X⟫."); + EqualityFactR(SingleQubitProcessTomographyMeasurement(PauliI, PauliI, H), Zero, "Failed at ⟪I | H | I⟫."); + EqualityFactR(SingleQubitProcessTomographyMeasurement(PauliX, PauliI, H), Zero, "Failed at ⟪I | H | X⟫."); + EqualityFactR(SingleQubitProcessTomographyMeasurement(PauliY, PauliI, H), Zero, "Failed at ⟪I | H | Y⟫."); + EqualityFactR(SingleQubitProcessTomographyMeasurement(PauliZ, PauliI, H), Zero, "Failed at ⟪I | H | Z⟫."); + EqualityFactR(SingleQubitProcessTomographyMeasurement(PauliX, PauliZ, H), Zero, "Failed at ⟪Z | H | X⟫."); + EqualityFactR(SingleQubitProcessTomographyMeasurement(PauliY, PauliY, H), One, "Failed at -⟪Y | H | Y⟫."); + EqualityFactR(SingleQubitProcessTomographyMeasurement(PauliX, PauliZ, H), Zero, "Failed at ⟪Z | H | X⟫."); } }