public void FactoriseReturnsFactors() { var numberToFactorise = 15; _randomNumberHelper.Setup(s => s.GetRandomGreaterThanTwoLessThanN(numberToFactorise, It.IsAny <List <int> >())) .Returns(7); _modularExponentHelpler.Setup(s => s.GetGCD(It.IsAny <int>(), It.IsAny <int>())) .Returns(1); _modularExponentHelpler.Setup(s => s.FindPeriod(It.IsAny <int>(), It.IsAny <int>(), false)) .Returns(6); _modularExponentHelpler.Setup(s => s.GetExponentModN(It.IsAny <int>(), It.IsAny <int>(), It.IsAny <int>())) .Returns(4); //half period exponent is not minus 1 - so the half period exponent +-1 is used to get factors var firstExpectedFactor = 23; var secondExpectedFactor = 17; _modularExponentHelpler.Setup(s => s.GetGCD(3, 15)) .Returns(firstExpectedFactor); _modularExponentHelpler.Setup(s => s.GetGCD(5, 15)) .Returns(secondExpectedFactor); var factoriser = new Factoriser(_randomNumberHelper.Object, _modularExponentHelpler.Object); var result = factoriser.Factorise(numberToFactorise, false); Assert.Contains(firstExpectedFactor, result); Assert.Contains(secondExpectedFactor, result); }
public void WhenPeriodIsEvenAndHalfPeriodNotMinusOneFactoriseGetsGCDs() { var numberToFactorise = 15; _randomNumberHelper.Setup(s => s.GetRandomGreaterThanTwoLessThanN(numberToFactorise, It.IsAny <List <int> >())) .Returns(7); _modularExponentHelpler.Setup(s => s.GetGCD(It.IsAny <int>(), It.IsAny <int>())) .Returns(1); _modularExponentHelpler.Setup(s => s.FindPeriod(It.IsAny <int>(), It.IsAny <int>(), false)) .Returns(6); _modularExponentHelpler.Setup(s => s.GetExponentModN(It.IsAny <int>(), It.IsAny <int>(), It.IsAny <int>())) .Returns(4); //half period exponent is not minus 1 - so the half period exponent +-1 is used to get factors _modularExponentHelpler.Setup(s => s.GetGCD(3, 15)) .Returns(0) .Verifiable(); _modularExponentHelpler.Setup(s => s.GetGCD(5, 15)) .Returns(0) .Verifiable(); var factoriser = new Factoriser(_randomNumberHelper.Object, _modularExponentHelpler.Object); var result = factoriser.Factorise(numberToFactorise, false); _modularExponentHelpler.VerifyAll(); }
public void WhenHalfPeriodExponentIsMinusOneFactoriseGetsADifferentRandomNumber() { var numberToFactorise = 15; _randomNumberHelper.Setup(s => s.GetRandomGreaterThanTwoLessThanN(numberToFactorise, It.IsAny <List <int> >())) .Returns(7); _modularExponentHelpler.Setup(s => s.GetGCD(It.IsAny <int>(), It.IsAny <int>())) .Returns(1); _modularExponentHelpler.Setup(s => s.FindPeriod(7, 15, false)) .Returns(6); _modularExponentHelpler.Setup(s => s.GetExponentModN(7, 3, 15)) .Returns(14); _randomNumberHelper.Setup(s => s.GetRandomGreaterThanTwoLessThanN(numberToFactorise , It.Is <List <int> >(exclusions => exclusions != null && exclusions.Count > 0 && exclusions.Single() == 7))) .Returns(2) .Verifiable(); var factoriser = new Factoriser(_randomNumberHelper.Object, _modularExponentHelpler.Object); var result = factoriser.Factorise(numberToFactorise, false); _randomNumberHelper.VerifyAll(); }
public void EndToEndTestsOfClassicalShorImplementation(int numberToFactorise , int expectedFactor1, int expectedFactor2) { var factoriser = new Factoriser(new RandomNumberHelper() , new ModularExponentHelper()); var result = factoriser.Factorise(numberToFactorise, false); Assert.Contains(expectedFactor1, result); Assert.Contains(expectedFactor2, result); }
static void Main(string[] args) { //15 = 3 * 5 //1517 = 39 * 41 //5537 = 113 * 49 //19043 = 139 * 137 //804509 = 887 * 907 var factoriser = new Factoriser(new RandomNumberHelper() , new ModularExponentHelper()); factoriser.Factorise(15, true); }
public void WhenRandomNumberDiviedsNWeAreDone() { var numberToFactorise = 15; _randomNumberHelper.Setup(s => s.GetRandomGreaterThanTwoLessThanN(numberToFactorise, It.IsAny <List <int> >())) .Returns(5); _modularExponentHelpler.Setup(s => s.GetGCD(It.IsAny <int>(), It.IsAny <int>())) .Returns(5); var factoriser = new Factoriser(_randomNumberHelper.Object, _modularExponentHelpler.Object); var result = factoriser.Factorise(numberToFactorise, false); Assert.Contains(3, result); Assert.Contains(5, result); Assert.True(result.Count() == 2); }
public void FactoriseGetsARandomNumberLessThanN() { var numberToFactorise = 15; _randomNumberHelper.Setup(s => s.GetRandomGreaterThanTwoLessThanN(numberToFactorise, It.IsAny <List <int> >())) .Returns(2) .Verifiable(); _modularExponentHelpler.Setup(s => s.GetGCD(It.IsAny <int>(), It.IsAny <int>())) .Returns(1); var factoriser = new Factoriser(_randomNumberHelper.Object, _modularExponentHelpler.Object); factoriser.Factorise(numberToFactorise, false); _randomNumberHelper.VerifyAll(); }
public void WhenNotAFactorFactoriseFindsPeriodOfAmodN() { var numberToFactorise = 15; _randomNumberHelper.Setup(s => s.GetRandomGreaterThanTwoLessThanN(numberToFactorise, It.IsAny <List <int> >())) .Returns(4); _modularExponentHelpler.Setup(s => s.GetGCD(It.IsAny <int>(), It.IsAny <int>())) .Returns(1); _modularExponentHelpler.Setup(s => s.FindPeriod(4, 15, false)) .Returns(4) .Verifiable(); var factoriser = new Factoriser(_randomNumberHelper.Object, _modularExponentHelpler.Object); var result = factoriser.Factorise(numberToFactorise, false); _modularExponentHelpler.VerifyAll(); }
public void WhenPeriodIsEvenFactoriseChecksHalfPeriod() { var numberToFactorise = 15; _randomNumberHelper.Setup(s => s.GetRandomGreaterThanTwoLessThanN(numberToFactorise, It.IsAny <List <int> >())) .Returns(7); _modularExponentHelpler.Setup(s => s.GetGCD(It.IsAny <int>(), It.IsAny <int>())) .Returns(1); _modularExponentHelpler.Setup(s => s.FindPeriod(7, 15, false)) .Returns(6); _modularExponentHelpler.Setup(s => s.GetExponentModN(7, 3, 15)) .Returns(12) .Verifiable(); var factoriser = new Factoriser(_randomNumberHelper.Object, _modularExponentHelpler.Object); var result = factoriser.Factorise(numberToFactorise, false); _modularExponentHelpler.VerifyAll(); }