Пример #1
0
        private static int GetSPPRounds(BigInteger bi, ConfidenceFactor confidence)
        {
            int num  = bi.BitCount();
            int num2 = (num <= 100) ? 27 : ((num <= 150) ? 18 : ((num <= 200) ? 15 : ((num <= 250) ? 12 : ((num <= 300) ? 9 : ((num <= 350) ? 8 : ((num <= 400) ? 7 : ((num <= 500) ? 6 : ((num <= 600) ? 5 : ((num <= 800) ? 4 : ((num > 1250) ? 2 : 3))))))))));

            switch (confidence)
            {
            case ConfidenceFactor.ExtraLow:
                num2 >>= 2;
                return((num2 == 0) ? 1 : num2);

            case ConfidenceFactor.Low:
                num2 >>= 1;
                return((num2 == 0) ? 1 : num2);

            case ConfidenceFactor.Medium:
                return(num2);

            case ConfidenceFactor.High:
                return(num2 << 1);

            case ConfidenceFactor.ExtraHigh:
                return(num2 << 2);

            case ConfidenceFactor.Provable:
                throw new Exception("The Rabin-Miller test can not be executed in a way such that its results are provable");

            default:
                throw new ArgumentOutOfRangeException("confidence");
            }
        }
Пример #2
0
        public void AssignedatchFactorLessThanOneTest()
        {
            MyLineSr.Setup(x => x.GetAllLiabilities("0*" + LineSr.TOURN_CONF_RATING)).Returns(new LiabilityLn()
            {
                factor = 1
            });
            MyLineSr.Setup(x => x.GetAllLiabilities("1*" + LineSr.CONF_RATING_VALUES)).Returns(new LiabilityLn()
            {
                factor = 250
            });
            MyLineSr.Setup(x => x.GetAllLiabilities("2*" + LineSr.MATCH_FACTOR)).Returns(new LiabilityLn()
            {
                factor = 0.5m
            });
            ConfidenceFactor confidenceFactor = new ConfidenceFactor();
            var ticket = new Ticket();

            ticket.TipItems.Add(TestTipItem.CreateTipItem());

            ticket.TipItems.Add(TestTipItem.CreateTipItem());
            ticket.TipItems.Add(TestTipItem.CreateTipItem());
            ticket.TipItems[0].Match.MatchId = 2;
            ticket.TipItems[1].Match.MatchId = 2;
            ticket.TipItems[1].Match.MatchId = 3;
            ticket.TotalOddDisplay           = 7.5m;
            var maxbet = confidenceFactor.CalculateFactor(ticket);

            Assert.AreEqual(19.230769230769230769230769231M, maxbet);
        }
Пример #3
0
        /// <summary>
        ///     Probabilistic prime test based on Rabin-Miller's test
        /// </summary>
        /// <param name="bi" type="BigInteger.BigInteger">
        ///     <para>
        ///         The number to test.
        ///     </para>
        /// </param>
        /// <param name="confidence" type="int">
        ///     <para>
        ///	The number of chosen bases. The test has at least a
        ///	1/4^confidence chance of falsely returning True.
        ///     </para>
        /// </param>
        /// <returns>
        ///	<para>
        ///		True if "this" is a strong pseudoprime to randomly chosen bases.
        ///	</para>
        ///	<para>
        ///		False if "this" is definitely NOT prime.
        ///	</para>
        /// </returns>
        public static bool RabinMillerTest(BigInteger bi, ConfidenceFactor confidence)
        {
            int Rounds = GetSPPRounds(bi, confidence);

            // calculate values of s and t
            BigInteger p_sub1 = bi - 1;
            int        s      = p_sub1.LowestSetBit();

            BigInteger t = p_sub1 >> s;

            int                   bits = bi.bitCount();
            BigInteger            a    = null;
            RandomNumberGenerator rng  = RandomNumberGenerator.Create();
            var                   mr   = new BigInteger.ModulusRing(bi);

            for (int round = 0; round < Rounds; round++)
            {
                while (true)
                {
                    // generate a < n
                    a = BigInteger.genRandom(bits, rng);

                    // make sure "a" is not 0
                    if (a > 1 && a < bi)
                    {
                        break;
                    }
                }

                if (a.gcd(bi) != 1)
                {
                    return(false);
                }

                BigInteger b = mr.Pow(a, t);

                if (b == 1)
                {
                    continue;         // a^t mod p = 1
                }
                bool result = false;
                for (int j = 0; j < s; j++)
                {
                    if (b == p_sub1)
                    {
                        // a^((2^j)*t) mod p = p-1 for some 0 <= j <= s-1
                        result = true;
                        break;
                    }

                    b = (b * b) % bi;
                }

                if (result == false)
                {
                    return(false);
                }
            }
            return(true);
        }
Пример #4
0
        private static int GetSPPRounds(BigInteger bi, ConfidenceFactor confidence)
        {
            int num1 = bi.BitCount();
            int num2 = num1 > 100 ? (num1 > 150 ? (num1 > 200 ? (num1 > 250 ? (num1 > 300 ? (num1 > 350 ? (num1 > 400 ? (num1 > 500 ? (num1 > 600 ? (num1 > 800 ? (num1 > 1250 ? 2 : 3) : 4) : 5) : 6) : 7) : 8) : 9) : 12) : 15) : 18) : 27;

            switch (confidence)
            {
            case ConfidenceFactor.ExtraLow:
                int num3 = num2 >> 2;
                return(num3 != 0 ? num3 : 1);

            case ConfidenceFactor.Low:
                int num4 = num2 >> 1;
                return(num4 != 0 ? num4 : 1);

            case ConfidenceFactor.Medium:
                return(num2);

            case ConfidenceFactor.High:
                return(num2 << 1);

            case ConfidenceFactor.ExtraHigh:
                return(num2 << 2);

            case ConfidenceFactor.Provable:
                throw new Exception("The Rabin-Miller test can not be executed in a way such that its results are provable");

            default:
                throw new ArgumentOutOfRangeException(nameof(confidence));
            }
        }
Пример #5
0
        public void NoSportFactorTest()
        {
            MyLineSr.Setup(x => x.GetAllLiabilities("0*" + LineSr.TOURN_CONF_RATING)).Returns(new LiabilityLn()
            {
                factor = 1
            });
            MyLineSr.Setup(x => x.GetAllLiabilities("1*" + LineSr.CONF_RATING_VALUES)).Returns(new LiabilityLn()
            {
                factor = 250
            });
            MyLineSr.Setup(x => x.GetAllLiabilities("SPORT|1|DEFAULT*" + LineSr.LIMIT_FACTORS)).Returns(new LiabilityLn()
            {
                factor = 1.5m
            });
            ConfidenceFactor confidenceFactor = new ConfidenceFactor();
            var ticket = new Ticket();

            ticket.TipItems.Add(TestTipItem.CreateTipItem());

            ticket.TipItems.Add(TestTipItem.CreateTipItem());
            ticket.TipItems[0].Match.MatchId = 2;
            ticket.TipItems[0].Match.MatchView.SportView.LineObject.SvrGroupId = 1;
            ticket.TotalOddDisplay = 7.5m;
            var maxbet = confidenceFactor.CalculateFactor(ticket);

            Assert.AreEqual(38.461538461538461538461538462m, maxbet);
        }
Пример #6
0
        public static bool SmallPrimeSppTest(BigInteger bi, ConfidenceFactor confidence)
        {
            int        sppRounds   = PrimalityTests.GetSPPRounds(bi, confidence);
            BigInteger bigInteger1 = bi - (BigInteger)1;
            int        num         = bigInteger1.LowestSetBit();
            BigInteger exp         = bigInteger1 >> num;

            BigInteger.ModulusRing modulusRing = new BigInteger.ModulusRing(bi);
            for (int index1 = 0; index1 < sppRounds; ++index1)
            {
                BigInteger bigInteger2 = modulusRing.Pow(BigInteger.smallPrimes[index1], exp);
                if (!(bigInteger2 == 1U))
                {
                    bool flag = false;
                    for (int index2 = 0; index2 < num; ++index2)
                    {
                        if (bigInteger2 == bigInteger1)
                        {
                            flag = true;
                            break;
                        }
                        bigInteger2 = bigInteger2 * bigInteger2 % bi;
                    }
                    if (!flag)
                    {
                        return(false);
                    }
                }
            }
            return(true);
        }
Пример #7
0
        /// <summary>
        ///     Probabilistic prime test based on Rabin-Miller's test
        /// </summary>
        /// <param name="n" type="BigInteger.BigInteger">
        ///     <para>
        ///         The number to test.
        ///     </para>
        /// </param>
        /// <param name="confidence" type="int">
        ///     <para>
        ///	The number of chosen bases. The test has at least a
        ///	1/4^confidence chance of falsely returning True.
        ///     </para>
        /// </param>
        /// <returns>
        ///	<para>
        ///		True if "this" is a strong pseudoprime to randomly chosen bases.
        ///	</para>
        ///	<para>
        ///		False if "this" is definitely NOT prime.
        ///	</para>
        /// </returns>
        public static bool RabinMillerTest(BigInteger n, ConfidenceFactor confidence)
        {
            int bits = n.BitCount();
            int t    = GetSPPRounds(bits, confidence);

            // n - 1 == 2^s * r, r is odd
            BigInteger n_minus_1 = n - 1;
            int        s         = n_minus_1.LowestSetBit();
            BigInteger r         = n_minus_1 >> s;

            BigInteger.ModulusRing mr = new BigInteger.ModulusRing(n);

            // Applying optimization from HAC section 4.50 (base == 2)
            // not a really random base but an interesting (and speedy) one
            BigInteger y = null;

            // FIXME - optimization disable for small primes due to bug #81857
            if (n.BitCount() > 100)
            {
                y = mr.Pow(2, r);
            }

            // still here ? start at round 1 (round 0 was a == 2)
            for (int round = 0; round < t; round++)
            {
                if ((round > 0) || (y == null))
                {
                    BigInteger a = null;

                    // check for 2 <= a <= n - 2
                    // ...but we already did a == 2 previously as an optimization
                    do
                    {
                        a = BigInteger.GenerateRandom(bits);
                    } while ((a <= 2) && (a >= n_minus_1));

                    y = mr.Pow(a, r);
                }

                if (y == 1)
                {
                    continue;
                }

                for (int j = 0; ((j < s) && (y != n_minus_1)); j++)
                {
                    y = mr.Pow(y, 2);
                    if (y == 1)
                    {
                        return(false);
                    }
                }

                if (y != n_minus_1)
                {
                    return(false);
                }
            }
            return(true);
        }
Пример #8
0
        public static bool SmallPrimeSppTest(BigInteger bi, ConfidenceFactor confidence)
        {
            int        spprounds  = PrimalityTests.GetSPPRounds(bi, confidence);
            BigInteger bigInteger = bi - 1;
            int        num        = bigInteger.LowestSetBit();
            BigInteger exp        = bigInteger >> num;

            BigInteger.ModulusRing modulusRing = new BigInteger.ModulusRing(bi);
            for (int i = 0; i < spprounds; i++)
            {
                BigInteger bigInteger2 = modulusRing.Pow(BigInteger.smallPrimes[i], exp);
                if (!(bigInteger2 == 1u))
                {
                    bool flag = false;
                    for (int j = 0; j < num; j++)
                    {
                        if (bigInteger2 == bigInteger)
                        {
                            flag = true;
                            break;
                        }
                        bigInteger2 = bigInteger2 * bigInteger2 % bi;
                    }
                    if (!flag)
                    {
                        return(false);
                    }
                }
            }
            return(true);
        }
Пример #9
0
 public static bool Test(BigInteger n, ConfidenceFactor confidence)
 {
     if (n.BitCount() < 33)
     {
         return(PrimalityTests.SmallPrimeSppTest(n, confidence));
     }
     return(PrimalityTests.RabinMillerTest(n, confidence));
 }
Пример #10
0
 public static bool Test(BigInteger n, ConfidenceFactor confidence)
 {
     // Rabin-Miller fails with smaller primes (at least with our BigInteger code)
     if (n.BitCount() < 33)
     {
         return(SmallPrimeSppTest(n, confidence));
     }
     return(RabinMillerTest(n, confidence));
 }
Пример #11
0
        /// <summary>
        ///     Probabilistic prime test based on Rabin-Miller's test
        /// </summary>
        /// <param name="bi" type="BigInteger.BigInteger">
        ///     <para>
        ///         The number to test.
        ///     </para>
        /// </param>
        /// <param name="confidence" type="int">
        ///     <para>
        ///	The number of chosen bases. The test has at least a
        ///	1/4^confidence chance of falsely returning True.
        ///     </para>
        /// </param>
        /// <returns>
        ///	<para>
        ///		True if "this" is a strong pseudoprime to randomly chosen bases.
        ///	</para>
        ///	<para>
        ///		False if "this" is definitely NOT prime.
        ///	</para>
        /// </returns>
        public static bool RabinMillerTest(BigInteger bi, ConfidenceFactor confidence)
        {
            int Rounds = GetSPPRounds(bi, confidence);

            // calculate values of s and t
            BigInteger p_sub1 = bi - 1;
            int s = p_sub1.LowestSetBit();

            BigInteger t = p_sub1 >> s;

            int bits = bi.bitCount();
            BigInteger a = null;
            RandomNumberGenerator rng = RandomNumberGenerator.Create();
            BigInteger.ModulusRing mr = new BigInteger.ModulusRing(bi);

            for (int round = 0; round < Rounds; round++)
            {
                while (true)
                {		           // generate a < n
                    a = BigInteger.genRandom(bits, rng);

                    // make sure "a" is not 0
                    if (a > 1 && a < bi)
                        break;
                }

                if (a.gcd(bi) != 1) return false;

                BigInteger b = mr.Pow(a, t);

                if (b == 1) continue;              // a^t mod p = 1

                bool result = false;
                for (int j = 0; j < s; j++)
                {

                    if (b == p_sub1)
                    {         // a^((2^j)*t) mod p = p-1 for some 0 <= j <= s-1
                        result = true;
                        break;
                    }

                    b = (b * b) % bi;
                }

                if (result == false)
                    return false;
            }
            return true;
        }
Пример #12
0
        public static bool RabinMillerTest(BigInteger n, ConfidenceFactor confidence)
        {
            int        num         = n.BitCount();
            int        sPPRounds   = GetSPPRounds(num, confidence);
            BigInteger bigInteger  = n - 1;
            int        num2        = bigInteger.LowestSetBit();
            BigInteger bigInteger2 = bigInteger >> num2;

            BigInteger.ModulusRing modulusRing = new BigInteger.ModulusRing(n);
            BigInteger             bigInteger3 = null;

            if (n.BitCount() > 100)
            {
                bigInteger3 = modulusRing.Pow(2u, bigInteger2);
            }
            for (int i = 0; i < sPPRounds; i++)
            {
                if (i > 0 || bigInteger3 == null)
                {
                    BigInteger bigInteger4 = null;
                    do
                    {
                        bigInteger4 = BigInteger.GenerateRandom(num);
                    }while (bigInteger4 <= 2 && bigInteger4 >= bigInteger);
                    bigInteger3 = modulusRing.Pow(bigInteger4, bigInteger2);
                }
                if (bigInteger3 == 1u)
                {
                    continue;
                }
                for (int j = 0; j < num2; j++)
                {
                    if (!(bigInteger3 != bigInteger))
                    {
                        break;
                    }
                    bigInteger3 = modulusRing.Pow(bigInteger3, 2);
                    if (bigInteger3 == 1u)
                    {
                        return(false);
                    }
                }
                if (bigInteger3 != bigInteger)
                {
                    return(false);
                }
            }
            return(true);
        }
Пример #13
0
        /// <summary>
        ///     Probabilistic prime test based on Rabin-Miller's test
        /// </summary>
        /// <param name="n" type="BigInteger.BigInteger">
        ///     <para>
        ///         The number to test.
        ///     </para>
        /// </param>
        /// <param name="confidence" type="int">
        ///     <para>
        ///	The number of chosen bases. The test has at least a
        ///	1/4^confidence chance of falsely returning True.
        ///     </para>
        /// </param>
        /// <returns>
        ///	<para>
        ///		True if "this" is a strong pseudoprime to randomly chosen bases.
        ///	</para>
        ///	<para>
        ///		False if "this" is definitely NOT prime.
        ///	</para>
        /// </returns>
        public static bool RabinMillerTest(BigInteger n, ConfidenceFactor confidence)
        {
            int bits = n.BitCount ();
            int t = GetSPPRounds (bits, confidence);

            // n - 1 == 2^s * r, r is odd
            BigInteger n_minus_1 = n - 1;
            int s = n_minus_1.LowestSetBit ();
            BigInteger r = n_minus_1 >> s;

            BigInteger.ModulusRing mr = new BigInteger.ModulusRing (n);

            // Applying optimization from HAC section 4.50 (base == 2)
            // not a really random base but an interesting (and speedy) one
            BigInteger y = null;
            // FIXME - optimization disable for small primes due to bug #81857
            if (n.BitCount () > 100)
                y = mr.Pow (2, r);

            // still here ? start at round 1 (round 0 was a == 2)
            for (int round = 0; round < t; round++) {

                if ((round > 0) || (y == null)) {
                    BigInteger a = null;

                    // check for 2 <= a <= n - 2
                    // ...but we already did a == 2 previously as an optimization
                    do {
                        a = BigInteger.GenerateRandom (bits);
                    } while ((a <= 2) && (a >= n_minus_1));

                    y = mr.Pow (a, r);
                }

                if (y == 1)
                    continue;

                for (int j = 0; ((j < s) && (y != n_minus_1)); j++) {

                    y = mr.Pow (y, 2);
                    if (y == 1)
                        return false;
                }

                if (y != n_minus_1)
                    return false;
            }
            return true;
        }
Пример #14
0
        public static bool RabinMillerTest(BigInteger n, ConfidenceFactor confidence)
        {
            int        bits        = n.BitCount();
            int        sppRounds   = PrimalityTests.GetSPPRounds((BigInteger)bits, confidence);
            BigInteger bigInteger1 = n - (BigInteger)1;
            int        num         = bigInteger1.LowestSetBit();
            BigInteger bigInteger2 = bigInteger1 >> num;

            BigInteger.ModulusRing modulusRing = new BigInteger.ModulusRing(n);
            BigInteger             a           = (BigInteger)null;

            if (n.BitCount() > 100)
            {
                a = modulusRing.Pow(2U, bigInteger2);
            }
            for (int index1 = 0; index1 < sppRounds; ++index1)
            {
                if (index1 > 0 || a == (BigInteger)null)
                {
                    BigInteger random;
                    do
                    {
                        random = BigInteger.GenerateRandom(bits);
                    }while (random <= (BigInteger)2 && random >= bigInteger1);
                    a = modulusRing.Pow(random, bigInteger2);
                }
                if (!(a == 1U))
                {
                    for (int index2 = 0; index2 < num && a != bigInteger1; ++index2)
                    {
                        a = modulusRing.Pow(a, (BigInteger)2);
                        if (a == 1U)
                        {
                            return(false);
                        }
                    }
                    if (a != bigInteger1)
                    {
                        return(false);
                    }
                }
            }
            return(true);
        }
Пример #15
0
        public static bool RabinMillerTest(BigInteger bi, ConfidenceFactor confidence)
        {
            int                   sPPRounds   = GetSPPRounds(bi, confidence);
            BigInteger            bigInteger  = bi - 1;
            int                   num         = bigInteger.LowestSetBit();
            BigInteger            exp         = bigInteger >> num;
            int                   bits        = bi.bitCount();
            BigInteger            bigInteger2 = null;
            RandomNumberGenerator rng         = RandomNumberGenerator.Create();

            BigInteger.ModulusRing modulusRing = new BigInteger.ModulusRing(bi);
            for (int i = 0; i < sPPRounds; i++)
            {
                do
                {
                    bigInteger2 = BigInteger.genRandom(bits, rng);
                }while (!(bigInteger2 > 1) || !(bigInteger2 < bi));
                if (bigInteger2.gcd(bi) != 1u)
                {
                    return(false);
                }
                BigInteger bigInteger3 = modulusRing.Pow(bigInteger2, exp);
                if (bigInteger3 == 1u)
                {
                    continue;
                }
                bool flag = false;
                for (int j = 0; j < num; j++)
                {
                    if (bigInteger3 == bigInteger)
                    {
                        flag = true;
                        break;
                    }
                    bigInteger3 = bigInteger3 * bigInteger3 % bi;
                }
                if (!flag)
                {
                    return(false);
                }
            }
            return(true);
        }
Пример #16
0
        public static bool SmallPrimeSppTest(BigInteger bi, ConfidenceFactor confidence)
        {
            int Rounds = GetSPPRounds(bi, confidence);

            // calculate values of s and t
            BigInteger p_sub1 = bi - 1;
            int        s      = p_sub1.LowestSetBit();

            BigInteger t = p_sub1 >> s;


            var mr = new BigInteger.ModulusRing(bi);

            for (int round = 0; round < Rounds; round++)
            {
                BigInteger b = mr.Pow(BigInteger.smallPrimes[round], t);

                if (b == 1)
                {
                    continue;         // a^t mod p = 1
                }
                bool result = false;
                for (int j = 0; j < s; j++)
                {
                    if (b == p_sub1)
                    {
                        // a^((2^j)*t) mod p = p-1 for some 0 <= j <= s-1
                        result = true;
                        break;
                    }

                    b = (b * b) % bi;
                }

                if (result == false)
                {
                    return(false);
                }
            }
            return(true);
        }
Пример #17
0
        private static int GetSPPRounds(BigInteger bi, ConfidenceFactor confidence)
        {
            int bc = bi.BitCount();

            int Rounds;

            // Data from HAC, 4.49
            if (bc <= 100) Rounds = 27;
            else if (bc <= 150) Rounds = 18;
            else if (bc <= 200) Rounds = 15;
            else if (bc <= 250) Rounds = 12;
            else if (bc <= 300) Rounds = 9;
            else if (bc <= 350) Rounds = 8;
            else if (bc <= 400) Rounds = 7;
            else if (bc <= 500) Rounds = 6;
            else if (bc <= 600) Rounds = 5;
            else if (bc <= 800) Rounds = 4;
            else if (bc <= 1250) Rounds = 3;
            else Rounds = 2;

            switch (confidence)
            {
                case ConfidenceFactor.ExtraLow:
                    Rounds >>= 2;
                    return Rounds != 0 ? Rounds : 1;
                case ConfidenceFactor.Low:
                    Rounds >>= 1;
                    return Rounds != 0 ? Rounds : 1;
                case ConfidenceFactor.Medium:
                    return Rounds;
                case ConfidenceFactor.High:
                    return Rounds << 1;
                case ConfidenceFactor.ExtraHigh:
                    return Rounds << 2;
                case ConfidenceFactor.Provable:
                    throw new Exception(
                        "The Rabin-Miller test can not be executed in a way such that its results are provable");
                default:
                    throw new ArgumentOutOfRangeException("confidence");
            }
        }
Пример #18
0
        public void OpenUserTicketsTest()
        {
            AuthorizationService = MockRepository.GenerateStub <IAuthorizationService>();
            StationRepository    = MockRepository.GenerateStub <IStationRepository>();
            LanguageRepository   = MockRepository.GenerateStub <ILanguageRepository>();
            LineProvider         = MockRepository.GenerateStub <ILineProvider>();
            BusinessPropsHelper  = MockRepository.GenerateStub <IBusinessPropsHelper>();
            DataBinding          = MockRepository.GenerateStub <IDataBinding>();
            ConfidenceFactor     = MockRepository.GenerateStub <IConfidenceFactor>();


            IoCContainer.Kernel.Bind <IDataBinding>().ToConstant <IDataBinding>(DataBinding).InSingletonScope();
            IoCContainer.Kernel.Bind <IAuthorizationService>().ToConstant <IAuthorizationService>(AuthorizationService).InSingletonScope();
            IoCContainer.Kernel.Bind <IStationRepository>().ToConstant <IStationRepository>(StationRepository).InSingletonScope();
            IoCContainer.Kernel.Bind <ILanguageRepository>().ToConstant <ILanguageRepository>(LanguageRepository).InSingletonScope();
            IoCContainer.Kernel.Bind <ILineProvider>().ToConstant <ILineProvider>(LineProvider).InSingletonScope();
            IoCContainer.Kernel.Bind <IBusinessPropsHelper>().ToConstant <IBusinessPropsHelper>(BusinessPropsHelper).InSingletonScope();
            IoCContainer.Kernel.Bind <IConfidenceFactor>().ToConstant <IConfidenceFactor>(ConfidenceFactor).InSingletonScope();

            ConfidenceFactor.Expect(x => x.CalculateFactor(new Ticket())).Return(1000000).IgnoreArguments();

            StationRepository.TurnOffCashInInit = true;
            StationRepository.Expect(x => x.AllowAnonymousBetting).Return(true);
            StationRepository.Expect(x => x.IsReady).Return(true);
            StationRepository.Expect(x => x.StationNumber).Return("0024");
            StationRepository.Expect(x => x.HubSettings).Return(new Dictionary <string, string>());
            StationRepository.Currency = "EUR";

            ChangeTracker                           = IoCContainer.Kernel.Get <IChangeTracker>();
            ChangeTracker.CurrentUser               = new AnonymousUser("1", 1);
            ChangeTracker.CurrentUser.Cashpool      = 100000;
            ChangeTracker.CurrentUser.AvailableCash = 100000;


            Dispatcher.Invoke(() =>
            {
                Window = MyRegionManager.FindWindowByViewModel <MainViewModel>();
                Window.Show();
            });

            Thread.Sleep(1000);

            ChangeTracker.CurrentUser = new LoggedInUser(1, "111", 1000)
            {
                Username = "******"
            };

            var header = MyRegionManager.CurrentViewModelInRegion(RegionNames.HeaderRegion) as HeaderViewModel;

            header.OpenAuthorizationCommand.Execute("");

            Thread.Sleep(1000);

            var userProfileMenuViewModel = MyRegionManager.CurrentViewModelInRegion(RegionNames.UserProfileMenuRegion) as UserProfileMenuViewModel;

            var ticket = new UserTicket()
            {
                checkSum = "1234", createdAt = DateTime.Now, ticketNumber = "1241252352346"
            };
            string total;

            WsdlRepository.Expect(x => x.GetUserTickets("1", (ticketCategory)1, new AccountTicketSorting()
            {
                field = AccountTicketSortingFields.DateCreated, value = AccountTicketSortingValues.Desc
            }, 0, 20, out total)).Return(new UserTicket[] { ticket }).OutRef("1000").IgnoreArguments();

            userProfileMenuViewModel.ShowTicketsCommand.Execute("");

            Thread.Sleep(1000);



            Assert.AreEqual(1, ChangeTracker.Tickets.Count);


            var userTicketsViewModel = MyRegionManager.CurrentViewModelInRegion(RegionNames.UserProfileContentRegion) as UserTicketsViewModel;

            Assert.AreEqual(1, userTicketsViewModel.TicketsStartPage);

            Dispatcher.Invoke(() =>
            {
                userTicketsViewModel.SelectedType = userTicketsViewModel.TicketType[3];
            });
            Dispatcher.Invoke(() =>
            {
                userTicketsViewModel.NextPage.Execute("");
            });



            Assert.AreEqual(2, userTicketsViewModel.TicketsStartPage);
            Assert.AreEqual(1, userTicketsViewModel.Tickets.Count);

            if (1000 % userTicketsViewModel.Pagesize > 0)
            {
                Assert.AreEqual(1000 / userTicketsViewModel.Pagesize + 1, userTicketsViewModel.AllPages);
            }

            if (1000 % userTicketsViewModel.Pagesize == 0)
            {
                Assert.AreEqual(1000 / userTicketsViewModel.Pagesize, userTicketsViewModel.AllPages);
            }

            Assert.AreEqual(2, userTicketsViewModel.TicketsStartPage);
            Assert.AreEqual(3, userTicketsViewModel.SelectedType.Id);

            userTicketsViewModel.ShowTicketCommand.Execute(userTicketsViewModel.Tickets[0]);

            var nextModel = MyRegionManager.CurrentViewModelType(RegionNames.UserProfileContentRegion);

            Assert.AreEqual(typeof(TicketDetailsViewModel), nextModel);

            UserProfileViewModel userprofileWindow = null;

            Dispatcher.Invoke(() =>
                              { userprofileWindow = ChangeTracker.UserProfileWindow.DataContext as UserProfileViewModel; });

            WsdlRepository.BackToRecord();

            WsdlRepository.Expect(x => x.GetUserTickets("1", (ticketCategory)1, new AccountTicketSorting()
            {
                field = AccountTicketSortingFields.DateCreated, value = AccountTicketSortingValues.Desc
            }, 0, 20, out total)).Return(new UserTicket[] { ticket, ticket, ticket, ticket }).OutRef("1000").IgnoreArguments();

            WsdlRepository.Replay();
            Dispatcher.Invoke(() =>
                              { userprofileWindow.BackCommand.Execute(""); });

            var prevModel = MyRegionManager.CurrentViewModelInRegion(RegionNames.UserProfileContentRegion);

            Thread.Sleep(1000);

            Assert.AreEqual(4, ((UserTicketsViewModel)prevModel).Tickets.Count);
            Assert.IsTrue(((UserTicketsViewModel)prevModel).AllPages > 0);
            Assert.AreEqual(2, userTicketsViewModel.TicketsStartPage);
            Assert.AreEqual(3, userTicketsViewModel.SelectedType.Id);


            userProfileMenuViewModel.LogoutCommand.Execute("");


            Thread.Sleep(1000);
            WsdlRepository.BackToRecord();
            Dispatcher.Invoke(() =>
            {
                Window.Close();
            });
        }
Пример #19
0
        /// <summary>
        ///     Probabilistic prime test based on Rabin-Miller's test
        /// </summary>
        /// <param name="bi" type="BigInteger.BigInteger">
        ///     <para>
        ///         The number to test.
        ///     </para>
        /// </param>
        /// <param name="confidence" type="int">
        ///     <para>
        ///	The number of chosen bases. The test has at least a
        ///	1/4^confidence chance of falsely returning True.
        ///     </para>
        /// </param>
        /// <returns>
        ///	<para>
        ///		True if "this" is a strong pseudoprime to randomly chosen bases.
        ///	</para>
        ///	<para>
        ///		False if "this" is definitely NOT prime.
        ///	</para>
        /// </returns>
        public static bool RabinMillerTest(BigInteger bi, ConfidenceFactor confidence)
        {
            int Rounds = GetSPPRounds(bi, confidence);

            // calculate values of s and t
            BigInteger p_sub1 = bi - 1;
            int        s      = p_sub1.LowestSetBit();

            BigInteger t = p_sub1 >> s;

            int        bits = bi.BitCount();
            BigInteger a    = null;

            BigInteger.ModulusRing mr = new BigInteger.ModulusRing(bi);

            // Applying optimization from HAC section 4.50 (base == 2)
            // not a really random base but an interesting (and speedy) one
            BigInteger b = mr.Pow(2, t);

            if (b != 1)
            {
                bool result = false;
                for (int j = 0; j < s; j++)
                {
                    if (b == p_sub1)
                    {         // a^((2^j)*t) mod p = p-1 for some 0 <= j <= s-1
                        result = true;
                        break;
                    }

                    b = b * b % bi;
                }
                if (!result)
                {
                    return(false);
                }
            }

            // still here ? start at round 1 (round 0 was a == 2)
            for (int round = 1; round < Rounds; round++)
            {
                while (true)
                {                  // generate a < n
                    a = BigInteger.GenerateRandom(bits);

                    // make sure "a" is not 0 (and not 2 as we have already tested that)
                    if (a > 2 && a < bi)
                    {
                        break;
                    }
                }

                if (a.GCD(bi) != 1)
                {
                    return(false);
                }

                b = mr.Pow(a, t);

                if (b == 1)
                {
                    continue;              // a^t mod p = 1
                }

                bool result = false;
                for (int j = 0; j < s; j++)
                {
                    if (b == p_sub1)
                    {         // a^((2^j)*t) mod p = p-1 for some 0 <= j <= s-1
                        result = true;
                        break;
                    }

                    b = b * b % bi;
                }

                if (!result)
                {
                    return(false);
                }
            }
            return(true);
        }
Пример #20
0
        public void MultyTicketWsAndPrintTest()
        {
            IoCContainer.Kernel.Unbind <IConfidenceFactor>();
            IoCContainer.Kernel.Bind <IConfidenceFactor>().ToConstant <IConfidenceFactor>(ConfidenceFactor.Object).InSingletonScope();
            ConfidenceFactor.Setup(x => x.CalculateFactor(It.IsAny <Ticket>())).Returns(1000000);

            IoCContainer.Kernel.Unbind <IStationRepository>();
            IoCContainer.Kernel.Unbind <IChangeTracker>();
            IoCContainer.Kernel.Bind <IChangeTracker>().To <ChangeTracker>().InSingletonScope();
            var ChangeTracker = IoCContainer.Kernel.Get <IChangeTracker>();

            IoCContainer.Kernel.Unbind <ITicketHandler>();
            IoCContainer.Kernel.Bind <ITicketHandler>().To <TicketHandler>().InSingletonScope();
            var TicketHandler = IoCContainer.Kernel.Get <ITicketHandler>();

            BusinessPropsHelper.Setup(x => x.GetNextTransactionId()).Returns("123");

            IoCContainer.Kernel.Unbind <IDataBinding>();
            var DataBinding = new DataBinding();

            IoCContainer.Kernel.Bind <IDataBinding>().ToConstant <IDataBinding>(DataBinding).InSingletonScope();

            var stationRepository = new StationRepository();

            IoCContainer.Kernel.Bind <IStationRepository>().ToConstant <IStationRepository>(stationRepository).InSingletonScope();
            stationRepository.MaxOdd            = 1000;
            stationRepository.MaxCombination    = 1000;
            stationRepository.MaxStakeSystemBet = 1000;
            stationRepository.MaxStakeCombi     = 1000;
            stationRepository.MaxSystemBet      = 1000;
            stationRepository.MaxWinSystemBet   = 10000;
            stationRepository.IsReady           = true;
            stationRepository.BonusFromOdd      = 3.0m;
            long[] tipLock;
            long[] tournamentlock;
            WsdlRepository.Setup(x => x.SaveTicket(It.IsAny <string>(), It.IsAny <uid>(), It.IsAny <TicketWS>(), It.IsAny <bool>(), It.IsAny <string>(), out tipLock, out tournamentlock)).Returns("1");

            TicketHandler.TicketsInBasket.Add(new Ticket());

            TicketHandler.TicketsInBasket[0].TipItems.Add(new TipItemVw(new TestOdd {
                OutcomeId = 1, OddId = { Value = 1 }, OddView = new TestOddVw()
                {
                    Value = 1
                }, BetDomain = new TestBetDomain {
                    BetDomainNumber = new ObservableProperty <int>(new BetDomainLn(), new ObservablePropertyList(), "test"), BetDomainId = 1, Match = new TestMatchLn {
                        MatchId = 1, Code = { Value = 1 }, MatchView = new TestMatchVw {
                            LineObject = new MatchLn()
                        }
                    }
                }, Value = { Value = 2.80M }
            }));
            TicketHandler.TicketsInBasket[0].TipItems.Add(new TipItemVw(new TestOdd {
                OutcomeId = 2, OddId = { Value = 2 }, OddView = new TestOddVw()
                {
                    Value = 2
                }, BetDomain = new TestBetDomain {
                    BetDomainNumber = new ObservableProperty <int>(new BetDomainLn(), new ObservablePropertyList(), "test"), BetDomainId = 2, Match = new TestMatchLn {
                        MatchId = 2, Code = { Value = 2 }, MatchView = new TestMatchVw {
                            LineObject = new MatchLn()
                        }
                    }
                }, Value = { Value = 2.10M }
            }));
            TicketHandler.TicketsInBasket[0].TipItems.Add(new TipItemVw(new TestOdd {
                OutcomeId = 3, OddId = { Value = 3 }, OddView = new TestOddVw()
                {
                    Value = 3
                }, BetDomain = new TestBetDomain {
                    BetDomainNumber = new ObservableProperty <int>(new BetDomainLn(), new ObservablePropertyList(), "test"), BetDomainId = 3, Match = new TestMatchLn {
                        MatchId = 3, Code = { Value = 3 }, MatchView = new TestMatchVw {
                            LineObject = new MatchLn()
                        }
                    }
                }, Value = { Value = 3.30M }
            }));
            TicketHandler.TicketsInBasket[0].TipItems.Add(new TipItemVw(new TestOdd {
                OutcomeId = 4, OddId = { Value = 4 }, OddView = new TestOddVw()
                {
                    Value = 4
                }, BetDomain = new TestBetDomain {
                    BetDomainNumber = new ObservableProperty <int>(new BetDomainLn(), new ObservablePropertyList(), "test"), BetDomainId = 4, Match = new TestMatchLn {
                        MatchId = 4, Code = { Value = 4 }, MatchView = new TestMatchVw {
                            LineObject = new MatchLn()
                        }
                    }
                }, Value = { Value = 2.70M }
            }));
            TicketHandler.TicketsInBasket[0].TipItems.Add(new TipItemVw(new TestOdd {
                OutcomeId = 5, OddId = { Value = 5 }, OddView = new TestOddVw()
                {
                    Value = 5
                }, BetDomain = new TestBetDomain {
                    BetDomainNumber = new ObservableProperty <int>(new BetDomainLn(), new ObservablePropertyList(), "test"), BetDomainId = 5, Match = new TestMatchLn {
                        MatchId = 5, Code = { Value = 5 }, MatchView = new TestMatchVw {
                            LineObject = new MatchLn()
                        }
                    }
                }, Value = { Value = 3.10M }
            }));


            TicketHandler.TicketsInBasket[0].Stake = 10;
            stationRepository.BonusRangeList.Add(new BonusRangeWS {
                tipSize = 1, bonus = 5
            });
            stationRepository.BonusRangeList.Add(new BonusRangeWS {
                tipSize = 2, bonus = 10
            });

            ChangeTracker.CurrentUser = new LoggedInUser(0, "", 100, 10, 10, 10);

            TicketHandler.TicketState = TicketStates.Multy;

            TicketHandler.TicketsInBasket[0].Stake = 10;


            TicketHandler.UpdateTicket();

            Assert.AreEqual(10m, TicketHandler.Stake);
            Assert.AreEqual(1786.52628000000m, TicketHandler.CurrentTicketPossibleWin);
            Assert.AreEqual(10m, TicketHandler.BonusPercentage);
            Assert.AreEqual(162.41148000000m, TicketHandler.BonusValue);

            var      ticketActions = new TicketActions();
            TicketWS ticket        = ticketActions.CreateNewTicketWS(TicketHandler.TicketsInBasket[0]);

            ticketActions.SaveTicket(ref ticket, ChangeTracker.CurrentUser);
            Assert.AreEqual(5, ticket.bets[0].bankTips.Length);
            Assert.AreEqual(10m, ticket.stake);
            Assert.AreEqual(1.1m, ticket.superBonus);
            stationRepository.UsePrinter = true;
            Repository.Expect(x => x.GetOddBySvrId(It.IsAny <long>())).Returns(new OddVw(new OddLn {
                NameTag = { Value = "test" }
            }));
            TranslationProvider.Object.PrintingLanguage = "EN";
            TranslationProvider.Setup(x => x.Translate(It.IsAny <MultistringTag>())).Returns("{0}");
            PrinterHandler printerHandler = new PrinterHandler();
            var            xml            = printerHandler.CreateTicketXmlForPrinting(ticket, false, null);
            var            stringxml      = xml.ToString();

            if (CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator == ".")
            {
                Assert.IsTrue(stringxml.Contains("162.4"));
            }
            if (CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator == ",")
            {
                Assert.IsTrue(stringxml.Contains("162,4"));
            }
        }
Пример #21
0
        public void CreateTicketWsTest()
        {
            DatabaseManager.EnsureDatabase(false);
            IoCContainer.Kernel.Unbind <IConfidenceFactor>();
            IoCContainer.Kernel.Bind <IConfidenceFactor>().ToConstant <IConfidenceFactor>(ConfidenceFactor.Object).InSingletonScope();
            ConfidenceFactor.Expect(x => x.CalculateFactor(It.IsAny <Ticket>())).Returns(1000000);

            IoCContainer.Kernel.Rebind <IChangeTracker>().To <ChangeTracker>().InSingletonScope();
            var ChangeTracker = IoCContainer.Kernel.Get <IChangeTracker>();

            IoCContainer.Kernel.Rebind <ITicketHandler>().To <TicketHandler>().InSingletonScope();
            var TicketHandler = IoCContainer.Kernel.Get <ITicketHandler>();

            BusinessPropsHelper.Expect(x => x.GetNextTransactionId()).Returns("123");

            var DataBinding = new DataBinding();

            IoCContainer.Kernel.Rebind <IDataBinding>().ToConstant <IDataBinding>(DataBinding).InSingletonScope();

            var stationRepository = new StationRepository();

            IoCContainer.Kernel.Rebind <IStationRepository>().ToConstant <IStationRepository>(stationRepository).InSingletonScope();
            stationRepository.MaxOdd            = 1000;
            stationRepository.MaxCombination    = 1000;
            stationRepository.MaxStakeSystemBet = 1000;
            stationRepository.MaxSystemBet      = 1000;
            stationRepository.MaxWinSystemBet   = 10000;
            stationRepository.IsReady           = true;
            stationRepository.BonusFromOdd      = 3.0m;

            TicketHandler.TicketsInBasket.Add(new Ticket());

            TicketHandler.TicketsInBasket[0].TipItems.Add(new TipItemVw(new TestOdd()
            {
                OutcomeId = 1, OddId = { Value = 1 }, OddView = new TestOddVw()
                {
                    Value = 1
                }, BetDomain = new TestBetDomain()
                {
                    BetDomainNumber = new ObservableProperty <int>(new BetDomainLn(), new ObservablePropertyList(), "test"), BetDomainId = 1, Match = new TestMatchLn()
                    {
                        MatchId = 1, MatchView = new TestMatchVw()
                        {
                            LineObject = new MatchLn()
                        }
                    }
                }, Value = { Value = 2.80M }
            }));
            TicketHandler.TicketsInBasket[0].TipItems.Add(new TipItemVw(new TestOdd()
            {
                OutcomeId = 2, OddId = { Value = 2 }, OddView = new TestOddVw()
                {
                    Value = 2
                }, BetDomain = new TestBetDomain()
                {
                    BetDomainNumber = new ObservableProperty <int>(new BetDomainLn(), new ObservablePropertyList(), "test"), BetDomainId = 2, Match = new TestMatchLn()
                    {
                        MatchId = 2, MatchView = new TestMatchVw()
                        {
                            LineObject = new MatchLn()
                        }
                    }
                }, Value = { Value = 2.10M }
            }));
            TicketHandler.TicketsInBasket[0].TipItems.Add(new TipItemVw(new TestOdd()
            {
                OutcomeId = 3, OddId = { Value = 3 }, OddView = new TestOddVw()
                {
                    Value = 3
                }, BetDomain = new TestBetDomain()
                {
                    BetDomainNumber = new ObservableProperty <int>(new BetDomainLn(), new ObservablePropertyList(), "test"), BetDomainId = 3, Match = new TestMatchLn()
                    {
                        MatchId = 3, MatchView = new TestMatchVw()
                        {
                            LineObject = new MatchLn()
                        }
                    }
                }, Value = { Value = 3.30M }
            }));
            TicketHandler.TicketsInBasket[0].TipItems.Add(new TipItemVw(new TestOdd()
            {
                OutcomeId = 4, OddId = { Value = 4 }, OddView = new TestOddVw()
                {
                    Value = 4
                }, BetDomain = new TestBetDomain()
                {
                    BetDomainNumber = new ObservableProperty <int>(new BetDomainLn(), new ObservablePropertyList(), "test"), BetDomainId = 4, Match = new TestMatchLn()
                    {
                        MatchId = 4, MatchView = new TestMatchVw()
                        {
                            LineObject = new MatchLn()
                        }
                    }
                }, Value = { Value = 2.70M }
            }));
            TicketHandler.TicketsInBasket[0].TipItems.Add(new TipItemVw(new TestOdd()
            {
                OutcomeId = 5, OddId = { Value = 5 }, OddView = new TestOddVw()
                {
                    Value = 5
                }, BetDomain = new TestBetDomain()
                {
                    BetDomainNumber = new ObservableProperty <int>(new BetDomainLn(), new ObservablePropertyList(), "test"), BetDomainId = 5, Match = new TestMatchLn()
                    {
                        MatchId = 5, MatchView = new TestMatchVw()
                        {
                            LineObject = new MatchLn()
                        }
                    }
                }, Value = { Value = 3.10M }
            }));


            TicketHandler.TicketsInBasket[0].TipItems.Add(new TipItemVw(new TestOdd()
            {
                OutcomeId = 6, OddId = { Value = 6 }, OddView = new TestOddVw()
                {
                    Value = 6
                }, BetDomain = new TestBetDomain()
                {
                    BetDomainNumber = new ObservableProperty <int>(new BetDomainLn(), new ObservablePropertyList(), "test"), BetDomainId = 6, Match = new TestMatchLn()
                    {
                        MatchId = 6
                    }
                }, Value = { Value = 1.80M }
            })
            {
                IsBank = true
            });
            TicketHandler.TicketsInBasket[0].TipItems.Add(new TipItemVw(new TestOdd()
            {
                OutcomeId = 7, OddId = { Value = 7 }, OddView = new TestOddVw()
                {
                    Value = 7
                }, BetDomain = new TestBetDomain()
                {
                    BetDomainNumber = new ObservableProperty <int>(new BetDomainLn(), new ObservablePropertyList(), "test"), BetDomainId = 7, Match = new TestMatchLn()
                    {
                        MatchId = 7
                    }
                }, Value = { Value = 1.70M }
            })
            {
                IsBank = true
            });

            TicketHandler.TicketsInBasket[0].TipItems.Add(new TipItemVw(new TestOdd()
            {
                OutcomeId = 8, OddId = { Value = 8 }, OddView = new TestOddVw()
                {
                    Value = 8
                }, BetDomain = new TestBetDomain()
                {
                    BetDomainNumber = new ObservableProperty <int>(new BetDomainLn(), new ObservablePropertyList(), "test"), BetDomainId = 8, Match = new TestMatchLn()
                    {
                        MatchId = 8
                    }
                }, Value = { Value = 3.20M }
            })
            {
                IsBank = true
            });
            TicketHandler.TicketsInBasket[0].TipItems.Add(new TipItemVw(new TestOdd()
            {
                OutcomeId = 9, OddId = { Value = 9 }, OddView = new TestOddVw()
                {
                    Value = 9
                }, BetDomain = new TestBetDomain()
                {
                    BetDomainNumber = new ObservableProperty <int>(new BetDomainLn(), new ObservablePropertyList(), "test"), BetDomainId = 9, Match = new TestMatchLn()
                    {
                        MatchId = 8
                    }
                }, Value = { Value = 2.10M }
            })
            {
                IsBank = true
            });

            TicketHandler.TicketsInBasket[0].TipItems.Add(new TipItemVw(new TestOdd()
            {
                OutcomeId = 10, OddId = { Value = 10 }, OddView = new TestOddVw()
                {
                    Value = 10
                }, BetDomain = new TestBetDomain()
                {
                    BetDomainNumber = new ObservableProperty <int>(new BetDomainLn(), new ObservablePropertyList(), "test"), BetDomainId = 10, Match = new TestMatchLn()
                    {
                        MatchId = 9
                    }
                }, Value = { Value = 5.60M }
            })
            {
                IsBank = true
            });
            TicketHandler.TicketsInBasket[0].TipItems.Add(new TipItemVw(new TestOdd()
            {
                OutcomeId = 11, OddId = { Value = 11 }, OddView = new TestOddVw()
                {
                    Value = 11
                }, BetDomain = new TestBetDomain()
                {
                    BetDomainNumber = new ObservableProperty <int>(new BetDomainLn(), new ObservablePropertyList(), "test"), BetDomainId = 11, Match = new TestMatchLn()
                    {
                        MatchId = 9
                    }
                }, Value = { Value = 3.70M }
            })
            {
                IsBank = true
            });
            TicketHandler.TicketsInBasket[0].TipItems.Add(new TipItemVw(new TestOdd()
            {
                OutcomeId = 12, OddId = { Value = 12 }, OddView = new TestOddVw()
                {
                    Value = 12
                }, BetDomain = new TestBetDomain()
                {
                    BetDomainNumber = new ObservableProperty <int>(new BetDomainLn(), new ObservablePropertyList(), "test"), BetDomainId = 12, Match = new TestMatchLn()
                    {
                        MatchId = 9
                    }
                }, Value = { Value = 1.55M }
            })
            {
                IsBank = true
            });

            TicketHandler.TicketsInBasket[0].Stake = 10;
            stationRepository.BonusRangeList.Add(new BonusRangeWS()
            {
                tipSize = 1, bonus = 5
            });
            stationRepository.BonusRangeList.Add(new BonusRangeWS()
            {
                tipSize = 2, bonus = 10
            });

            ChangeTracker.CurrentUser = new LoggedInUser(0, "", 100, 10, 10, 10);

            TicketHandler.TicketState = TicketStates.System;

            TicketHandler.TicketsInBasket[0].Stake = 10;


            TicketHandler.TicketsInBasket[0].SystemX = 2;
            TicketHandler.UpdateTicket();

            Assert.AreEqual(10m, TicketHandler.Stake);
            Assert.AreEqual(783.9422976000000m, TicketHandler.CurrentTicketPossibleWin);
            Assert.AreEqual(10m, TicketHandler.BonusPercentage);
            Assert.AreEqual(71.2674816000000m, TicketHandler.BonusValue);

            var      ticketActions = new TicketActions();
            TicketWS ticket        = ticketActions.CreateNewTicketWS(TicketHandler.TicketsInBasket[0]);

            ticketActions.SaveTicket(ref ticket, ChangeTracker.CurrentUser);
            Assert.AreEqual(10m, ticket.stake);
            Assert.AreEqual(1.1m, ticket.superBonus);
        }
Пример #22
0
		public static bool SmallPrimeSppTest (BigInteger bi, ConfidenceFactor confidence)
		{
			int Rounds = GetSPPRounds (bi, confidence);

			// calculate values of s and t
			BigInteger p_sub1 = bi - 1;
			int s = p_sub1.LowestSetBit ();

			BigInteger t = p_sub1 >> s;


			BigInteger.ModulusRing mr = new BigInteger.ModulusRing (bi);

			for (int round = 0; round < Rounds; round++) {

				BigInteger b = mr.Pow (BigInteger.smallPrimes [round], t);

				if (b == 1) continue;              // a^t mod p = 1

				bool result = false;
				for (int j = 0; j < s; j++) {

					if (b == p_sub1) {         // a^((2^j)*t) mod p = p-1 for some 0 <= j <= s-1
						result = true;
						break;
					}

					b = (b * b) % bi;
				}

				if (result == false)
					return false;
			}
			return true;
		}
Пример #23
0
 public static bool SmallPrimeSppTest(Mono.Math.BigInteger bi, ConfidenceFactor confidence)
 {
     throw new NotImplementedException();
 }
Пример #24
0
		/// <summary>
		///     Probabilistic prime test based on Rabin-Miller's test
		/// </summary>
		/// <param name="bi" type="BigInteger.BigInteger">
		///     <para>
		///         The number to test.
		///     </para>
		/// </param>
		/// <param name="confidence" type="int">
		///     <para>
		///	The number of chosen bases. The test has at least a
		///	1/4^confidence chance of falsely returning True.
		///     </para>
		/// </param>
		/// <returns>
		///	<para>
		///		True if "this" is a strong pseudoprime to randomly chosen bases.
		///	</para>
		///	<para>
		///		False if "this" is definitely NOT prime.
		///	</para>
		/// </returns>
		public static bool RabinMillerTest (BigInteger bi, ConfidenceFactor confidence)
		{
			int Rounds = GetSPPRounds (bi, confidence);

			// calculate values of s and t
			BigInteger p_sub1 = bi - 1;
			int s = p_sub1.LowestSetBit ();

			BigInteger t = p_sub1 >> s;

			int bits = bi.BitCount ();
			BigInteger a = null;
			BigInteger.ModulusRing mr = new BigInteger.ModulusRing (bi);
			
			// Applying optimization from HAC section 4.50 (base == 2)
			// not a really random base but an interesting (and speedy) one
			BigInteger b = mr.Pow (2, t);
			if (b != 1) {
				bool result = false;
				for (int j=0; j < s; j++) {
					if (b == p_sub1) {         // a^((2^j)*t) mod p = p-1 for some 0 <= j <= s-1
						result = true;
						break;
					}

					b = (b * b) % bi;
				}
				if (!result)
					return false;
			}

			// still here ? start at round 1 (round 0 was a == 2)
			for (int round = 1; round < Rounds; round++) {
				while (true) {		           // generate a < n
					a = BigInteger.GenerateRandom (bits);

					// make sure "a" is not 0 (and not 2 as we have already tested that)
					if (a > 2 && a < bi)
						break;
				}

				if (a.GCD (bi) != 1)
					return false;

				b = mr.Pow (a, t);

				if (b == 1)
					continue;              // a^t mod p = 1

				bool result = false;
				for (int j = 0; j < s; j++) {

					if (b == p_sub1) {         // a^((2^j)*t) mod p = p-1 for some 0 <= j <= s-1
						result = true;
						break;
					}

					b = (b * b) % bi;
				}

				if (!result)
					return false;
			}
			return true;
		}
Пример #25
0
		public static BigInteger genPseudoPrime(int bits, ConfidenceFactor cf) {
			SequentialSearchPrimeGeneratorBase sspg = new SequentialSearchPrimeGeneratorBase();
			sspg.Confidence = cf;
			return sspg.GenerateNewPrime(bits);
		}
Пример #26
0
 public static bool Test(Mono.Math.BigInteger n, ConfidenceFactor confidence)
 {
     throw new NotImplementedException();
 }
Пример #27
0
        private static int GetSPPRounds(BigInteger bi, ConfidenceFactor confidence)
        {
            int num = bi.BitCount();
            int num2;

            if (num <= 100)
            {
                num2 = 27;
            }
            else if (num <= 150)
            {
                num2 = 18;
            }
            else if (num <= 200)
            {
                num2 = 15;
            }
            else if (num <= 250)
            {
                num2 = 12;
            }
            else if (num <= 300)
            {
                num2 = 9;
            }
            else if (num <= 350)
            {
                num2 = 8;
            }
            else if (num <= 400)
            {
                num2 = 7;
            }
            else if (num <= 500)
            {
                num2 = 6;
            }
            else if (num <= 600)
            {
                num2 = 5;
            }
            else if (num <= 800)
            {
                num2 = 4;
            }
            else if (num <= 1250)
            {
                num2 = 3;
            }
            else
            {
                num2 = 2;
            }
            switch (confidence)
            {
            case ConfidenceFactor.ExtraLow:
                num2 >>= 2;
                return((num2 == 0) ? 1 : num2);

            case ConfidenceFactor.Low:
                num2 >>= 1;
                return((num2 == 0) ? 1 : num2);

            case ConfidenceFactor.Medium:
                return(num2);

            case ConfidenceFactor.High:
                return(num2 << 1);

            case ConfidenceFactor.ExtraHigh:
                return(num2 << 2);

            case ConfidenceFactor.Provable:
                throw new Exception("The Rabin-Miller test can not be executed in a way such that its results are provable");

            default:
                throw new ArgumentOutOfRangeException("confidence");
            }
        }
Пример #28
0
        private static int GetSPPRounds(BigInteger bi, ConfidenceFactor confidence)
        {
            int bc = bi.bitCount();

            int Rounds;

            // Data from HAC, 4.49
            if (bc <= 100)
            {
                Rounds = 27;
            }
            else if (bc <= 150)
            {
                Rounds = 18;
            }
            else if (bc <= 200)
            {
                Rounds = 15;
            }
            else if (bc <= 250)
            {
                Rounds = 12;
            }
            else if (bc <= 300)
            {
                Rounds = 9;
            }
            else if (bc <= 350)
            {
                Rounds = 8;
            }
            else if (bc <= 400)
            {
                Rounds = 7;
            }
            else if (bc <= 500)
            {
                Rounds = 6;
            }
            else if (bc <= 600)
            {
                Rounds = 5;
            }
            else if (bc <= 800)
            {
                Rounds = 4;
            }
            else if (bc <= 1250)
            {
                Rounds = 3;
            }
            else
            {
                Rounds = 2;
            }

            switch (confidence)
            {
            case ConfidenceFactor.ExtraLow:
                Rounds >>= 2;
                return(Rounds != 0 ? Rounds : 1);

            case ConfidenceFactor.Low:
                Rounds >>= 1;
                return(Rounds != 0 ? Rounds : 1);

            case ConfidenceFactor.Medium:
                return(Rounds);

            case ConfidenceFactor.High:
                return(Rounds <<= 1);

            case ConfidenceFactor.ExtraHigh:
                return(Rounds <<= 2);

            case ConfidenceFactor.Provable:
                throw new Exception("The Rabin-Miller test can not be executed in a way such that its results are provable");

            default:
                throw new ArgumentOutOfRangeException("confidence");
            }
        }
Пример #29
0
        public void CreateTicketWsTest()
        {
            IoCContainer.Kernel.Unbind <IConfidenceFactor>();
            IoCContainer.Kernel.Bind <IConfidenceFactor>().ToConstant <IConfidenceFactor>(ConfidenceFactor.Object).InSingletonScope();
            ConfidenceFactor.Expect(x => x.CalculateFactor(It.IsAny <Ticket>())).Returns(1000000);

            IoCContainer.Kernel.Unbind <IStationRepository>();
            IoCContainer.Kernel.Unbind <IChangeTracker>();
            var ChangeTracker = new ChangeTracker();

            IoCContainer.Kernel.Bind <IChangeTracker>().ToConstant <IChangeTracker>(ChangeTracker).InSingletonScope();

            IoCContainer.Kernel.Unbind <IDataBinding>();
            var DataBinding = new DataBinding();

            IoCContainer.Kernel.Bind <IDataBinding>().ToConstant <IDataBinding>(DataBinding).InSingletonScope();

            IoCContainer.Kernel.Unbind <ITicketHandler>();
            var TicketHandler = new TicketHandler();

            IoCContainer.Kernel.Bind <ITicketHandler>().ToConstant <ITicketHandler>(TicketHandler).InSingletonScope();

            BusinessPropsHelper.Setup(x => x.GetNextTransactionId()).Returns("123");

            var stationRepository = new StationRepository();

            IoCContainer.Kernel.Bind <IStationRepository>().ToConstant <IStationRepository>(stationRepository).InSingletonScope();
            stationRepository.MaxOdd            = 1000;
            stationRepository.MaxCombination    = 1000;
            stationRepository.MaxStakeSystemBet = 1000;
            stationRepository.MaxStakeCombi     = 1000;
            stationRepository.MaxSystemBet      = 1000;
            stationRepository.MaxWinSystemBet   = 10000;
            stationRepository.MaxWinSingleBet   = 10000;
            stationRepository.IsReady           = true;
            stationRepository.BonusFromOdd      = 1.30m;
            long[] tipLock;
            long[] tournamentlock;
            TicketHandler.TicketsInBasket.Add(new Ticket());
            WsdlRepository.Setup(x => x.SaveTicket(It.IsAny <string>(), It.IsAny <uid>(), It.IsAny <TicketWS>(), It.IsAny <bool>(), It.IsAny <string>(), out tipLock, out tournamentlock)).Returns("1");
            TicketHandler.TicketsInBasket[0].TipItems.Add(new TipItemVw(new TestOdd {
                OutcomeId = 1, OddId = { Value = 1 }, OddView = new TestOddVw()
                {
                    Value = 1
                }, BetDomain = new TestBetDomain {
                    BetDomainNumber = new ObservableProperty <int>(new BetDomainLn(), new ObservablePropertyList(), "test"), BetDomainId = 1, Match = new TestMatchLn {
                        MatchId = 1, Code = { Value = 1 }, MatchView = new TestMatchVw {
                            LineObject = new MatchLn()
                        }
                    }
                }, Value = { Value = 1.14M }
            })
            {
                IsBank = true
            });
            TicketHandler.TicketsInBasket[0].TipItems.Add(new TipItemVw(new TestOdd {
                OutcomeId = 2, OddId = { Value = 2 }, OddView = new TestOddVw()
                {
                    Value = 2
                }, BetDomain = new TestBetDomain {
                    BetDomainNumber = new ObservableProperty <int>(new BetDomainLn(), new ObservablePropertyList(), "test"), BetDomainId = 2, Match = new TestMatchLn {
                        MatchId = 2, Code = { Value = 2 }, MatchView = new TestMatchVw {
                            LineObject = new MatchLn()
                        }
                    }
                }, Value = { Value = 1.40M }
            }));
            TicketHandler.TicketsInBasket[0].TipItems.Add(new TipItemVw(new TestOdd {
                OutcomeId = 3, OddId = { Value = 3 }, OddView = new TestOddVw()
                {
                    Value = 3
                }, BetDomain = new TestBetDomain {
                    BetDomainNumber = new ObservableProperty <int>(new BetDomainLn(), new ObservablePropertyList(), "test"), BetDomainId = 3, Match = new TestMatchLn {
                        MatchId = 3, Code = { Value = 3 }, MatchView = new TestMatchVw {
                            LineObject = new MatchLn()
                        }
                    }
                }, Value = { Value = 1.50M }
            }));
            TicketHandler.TicketsInBasket[0].TipItems.Add(new TipItemVw(new TestOdd {
                OutcomeId = 4, OddId = { Value = 4 }, OddView = new TestOddVw()
                {
                    Value = 4
                }, BetDomain = new TestBetDomain {
                    BetDomainNumber = new ObservableProperty <int>(new BetDomainLn(), new ObservablePropertyList(), "test"), BetDomainId = 4, Match = new TestMatchLn {
                        MatchId = 4, Code = { Value = 4 }, MatchView = new TestMatchVw {
                            LineObject = new MatchLn()
                        }
                    }
                }, Value = { Value = 1.25M }
            }));


            stationRepository.BonusRangeList.Add(new BonusRangeWS {
                tipSize = 1, bonus = 3
            });


            TicketHandler.TicketsInBasket[0].Stake = 10;

            ChangeTracker.CurrentUser = new LoggedInUser(0, "", 100, 10, 10, 10);

            TicketHandler.TicketState = TicketStates.System;
            TicketHandler.TicketsInBasket[0].SystemX = 2;

            TicketHandler.TicketsInBasket[0].Stake = 5;

            TicketWS newticket = new TicketWS();

            TicketActions.Setup(x => x.CreateNewTicketWS(It.IsAny <Ticket>())).Returns(newticket);

            TicketHandler.UpdateTicket();

            Assert.AreEqual(2, TicketHandler.TicketsInBasket[0].SystemX);
            Assert.AreEqual(3, TicketHandler.TicketsInBasket[0].SystemY);
            Assert.AreEqual(5m, TicketHandler.Stake);
            Assert.AreEqual(11.203824999999999999999999999m, TicketHandler.CurrentTicketPossibleWin);


            var      ticketActions = new TicketActions();
            TicketWS ticket        = ticketActions.CreateNewTicketWS(TicketHandler.TicketsInBasket[0]);

            ticketActions.SaveTicket(ref ticket, ChangeTracker.CurrentUser);


            Assert.AreEqual(1.03m, ticket.superBonus);
            Assert.AreEqual(5m, ticket.stake);
            Assert.AreEqual(2.17m, ticket.bets[0].maxOdd);
            Assert.AreEqual(11.203824999999999999999999999m, TicketHandler.CurrentTicketPossibleWin);
            Assert.AreEqual(11.203824999999999999999999999m, ticket.bets[0].maxWin);
            Assert.AreEqual(3m, TicketHandler.BonusPercentage);
            if (CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator == ".")
            {
                Assert.AreEqual("0.32", SportBetting.WPF.Prism.OldCode.PrinterHandler.Decimal2String(TicketHandler.BonusValue, 2));
            }
            if (CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator == ",")
            {
                Assert.AreEqual("0,32", SportBetting.WPF.Prism.OldCode.PrinterHandler.Decimal2String(TicketHandler.BonusValue, 2));
            }
        }
Пример #30
0
		public static bool Test (BigInteger n, ConfidenceFactor confidence)
		{
			// Rabin-Miller fails with smaller primes (at least with our BigInteger code)
			if (n.BitCount () < 33)
				return SmallPrimeSppTest (n, confidence);
			else
				return RabinMillerTest (n, confidence);
		}
Пример #31
0
        public void PrintdublicateTest()
        {
            IoCContainer.Kernel.Rebind <IStationRepository>().To <StationRepository>().InSingletonScope();

            var rep = IoCContainer.Kernel.Get <IStationRepository>();

            //rep.Init();
            rep.UsePrinter = true;

            IoCContainer.Kernel.Unbind <IConfidenceFactor>();
            IoCContainer.Kernel.Bind <IConfidenceFactor>().ToConstant <IConfidenceFactor>(ConfidenceFactor.Object).InSingletonScope();
            ConfidenceFactor.Setup(x => x.CalculateFactor(It.IsAny <Ticket>())).Returns(1000000);

            IoCContainer.Kernel.Unbind <IStationRepository>();
            IoCContainer.Kernel.Unbind <IChangeTracker>();
            var ChangeTracker = new ChangeTracker();

            IoCContainer.Kernel.Bind <IChangeTracker>().ToConstant <IChangeTracker>(ChangeTracker).InSingletonScope();

            IoCContainer.Kernel.Unbind <IDataBinding>();
            var DataBinding = new DataBinding();

            IoCContainer.Kernel.Bind <IDataBinding>().ToConstant <IDataBinding>(DataBinding).InSingletonScope();

            IoCContainer.Kernel.Unbind <ITicketHandler>();
            var TicketHandler = new TicketHandler();

            IoCContainer.Kernel.Bind <ITicketHandler>().ToConstant <ITicketHandler>(TicketHandler).InSingletonScope();

            BusinessPropsHelper.Setup(x => x.GetNextTransactionId()).Returns("123");

            var stationRepository = new StationRepository();

            IoCContainer.Kernel.Bind <IStationRepository>().ToConstant <IStationRepository>(stationRepository).InSingletonScope();
            stationRepository.MaxOdd            = 1000;
            stationRepository.MaxCombination    = 1000;
            stationRepository.MaxStakeSystemBet = 1000;
            stationRepository.MaxStakeCombi     = 1000;
            stationRepository.MaxSystemBet      = 1000;
            stationRepository.MaxWinSystemBet   = 10000;
            stationRepository.MaxWinSingleBet   = 10000;
            stationRepository.IsReady           = true;
            stationRepository.BonusFromOdd      = 1.30m;
            stationRepository.UsePrinter        = true;
            StationSettings.Setup(x => x.UsePrinter).Returns(true);
            long[] tipLock;
            long[] tournamentlock;
            TicketHandler.TicketsInBasket.Add(new Ticket());
            WsdlRepository.Setup(x => x.SaveTicket(It.IsAny <string>(), It.IsAny <uid>(), It.IsAny <TicketWS>(), It.IsAny <bool>(), It.IsAny <string>(), out tipLock, out tournamentlock)).Returns("1");
            TicketHandler.TicketsInBasket[0].TipItems.Add(new TipItemVw(new TestOdd {
                OutcomeId = 1, OddId = { Value = 1 }, OddView = new TestOddVw()
                {
                    Value = 1
                }, BetDomain = new TestBetDomain {
                    BetDomainNumber = new ObservableProperty <int>(new BetDomainLn(), new ObservablePropertyList(), "test"), BetDomainId = 1, Match = new TestMatchLn {
                        MatchId = 1, Code = { Value = 1 }, MatchView = new TestMatchVw {
                            LineObject = new MatchLn()
                        }
                    }
                }, Value = { Value = 1.14M }
            })
            {
                IsBank = true
            });
            TicketHandler.TicketsInBasket[0].TipItems.Add(new TipItemVw(new TestOdd {
                OutcomeId = 2, OddId = { Value = 2 }, OddView = new TestOddVw()
                {
                    Value = 2
                }, BetDomain = new TestBetDomain {
                    BetDomainNumber = new ObservableProperty <int>(new BetDomainLn(), new ObservablePropertyList(), "test"), BetDomainId = 2, Match = new TestMatchLn {
                        MatchId = 2, Code = { Value = 2 }, MatchView = new TestMatchVw {
                            LineObject = new MatchLn()
                        }
                    }
                }, Value = { Value = 1.40M }
            }));
            TicketHandler.TicketsInBasket[0].TipItems.Add(new TipItemVw(new TestOdd {
                OutcomeId = 3, OddId = { Value = 3 }, OddView = new TestOddVw()
                {
                    Value = 3
                }, BetDomain = new TestBetDomain {
                    BetDomainNumber = new ObservableProperty <int>(new BetDomainLn(), new ObservablePropertyList(), "test"), BetDomainId = 3, Match = new TestMatchLn {
                        MatchId = 3, Code = { Value = 3 }, MatchView = new TestMatchVw {
                            LineObject = new MatchLn()
                        }
                    }
                }, Value = { Value = 1.50M }
            }));
            TicketHandler.TicketsInBasket[0].TipItems.Add(new TipItemVw(new TestOdd {
                OutcomeId = 4, OddId = { Value = 4 }, OddView = new TestOddVw()
                {
                    Value = 4
                }, BetDomain = new TestBetDomain {
                    BetDomainNumber = new ObservableProperty <int>(new BetDomainLn(), new ObservablePropertyList(), "test"), BetDomainId = 4, Match = new TestMatchLn {
                        MatchId = 4, Code = { Value = 4 }, MatchView = new TestMatchVw {
                            LineObject = new MatchLn()
                        }
                    }
                }, Value = { Value = 1.25M }
            }));


            stationRepository.BonusRangeList.Add(new BonusRangeWS {
                tipSize = 1, bonus = 3
            });


            TicketHandler.TicketsInBasket[0].Stake = 10;

            ChangeTracker.CurrentUser = new LoggedInUser(0, "", 100, 10, 10, 10);

            TicketHandler.TicketState = TicketStates.System;
            TicketHandler.TicketsInBasket[0].SystemX = 2;

            TicketHandler.TicketsInBasket[0].Stake = 5;


            TicketHandler.UpdateTicket();


            var      ticketActions = new TicketActions();
            TicketWS ticket        = ticketActions.CreateNewTicketWS(TicketHandler.TicketsInBasket[0]);

            ticketActions.SaveTicket(ref ticket, ChangeTracker.CurrentUser);

            var PrinterHandler = new PrinterHandler();

            stationRepository.UsePrinter = true;
            PrinterHandler.PrintTicket(ticket, false);

            Assert.AreEqual(PrinterHandler.NotPrintedItemsCount, 1);
            PrinterHandler.PrintTicket(ticket, false);
            Assert.AreEqual(PrinterHandler.NotPrintedItemsCount, 2);

            PrinterHandler.DeleteAllPrinterObjects();
            Assert.AreEqual(0, PrinterHandler.NotPrintedItemsCount);
        }