Exemple #1
0
        public void StressCn_Ctor2B()
        {
            // Use higher maxChoices values for a longer running test.
#if STRESS
            const int maxChoices = 16;
#else
            const int maxChoices = 5;
#endif
            int counter = 0;

            for (int choices = 0; choices <= maxChoices; ++choices)
            {
                for (int picks = 0; picks <= choices; ++picks)
                {
                    long maxRows = Combinatoric.BinomialCoefficient(choices, picks);
                    for (int rank = 0; rank < maxRows; ++rank)
                    {
                        Combination row1 = new Combination(choices, picks, rank);

                        int[] source = new int[picks];
                        row1.CopyTo(source);

                        Combination row2 = new Combination(choices, source);

                        // verify that rank(unrank(x)) = x
                        Assert.AreEqual(rank, row1.Rank);
                        Assert.AreEqual(rank, row2.Rank);
                        ++counter;
                    }
                }
            }
        }
Exemple #2
0
        public void Unit_BinomialCoefficient2()
        {
            ResetCombinatoric();

            long bc5 = Combinatoric.BinomialCoefficient(80, 3);

            Assert.AreEqual(82160, bc5);
        }
Exemple #3
0
        public void Unit_BinomialCoefficient3()
        {
            var bcTable = BuildPascalsTriangle();

            for (int n = 0; n < bcTable.Count; ++n)
            {
                for (int k = 0; k < bcTable[n].Length; ++k)
                {
                    long bc = Combinatoric.BinomialCoefficient(n, k);
                    Assert.AreEqual(bcTable[n][k], bc, "n=" + n + ", k=" + k);
                }
            }
        }
Exemple #4
0
        public void Unit_BinomialCoefficient1()
        {
            ResetCombinatoric();

            long bc1 = Combinatoric.BinomialCoefficient(1, -1);

            Assert.AreEqual(0, bc1);

            long bc2 = Combinatoric.BinomialCoefficient(1, 2);

            Assert.AreEqual(0, bc2);

            long bc3 = Combinatoric.BinomialCoefficient(65, 4);

            Assert.AreEqual(677040, bc3);

            long bc4 = Combinatoric.BinomialCoefficient(66, 33);

            Assert.AreEqual(7219428434016265740, bc4);
        }
Exemple #5
0
        public void Unit_BinomialCoefficient4()
        {
            var bcTable = BuildPascalsTriangle();
            int n       = bcTable.Count;

            Assert.AreEqual(1, Combinatoric.BinomialCoefficient(n, 0));
            for (int k = 1; k < n / 4; ++k)
            {
                long bc       = Combinatoric.BinomialCoefficient(n, k);
                long expected = bcTable[n - 1][k - 1] + bcTable[n - 1][k];
                long actual   = Combinatoric.BinomialCoefficient(n, k);

                Assert.AreEqual(expected, actual, "k=" + k);
            }

            for (int k = (n * 3) / 4; k < n; ++k)
            {
                long bc       = Combinatoric.BinomialCoefficient(n, k);
                long expected = bcTable[n - 1][k - 1] + bcTable[n - 1][k];
                long actual   = Combinatoric.BinomialCoefficient(n, k);

                Assert.AreEqual(expected, actual, "k=" + k);
            }
        }
Exemple #6
0
 public void Crash_BinomialCoefficient_Overflow()
 {
     long zz = Combinatoric.BinomialCoefficient(67, 34);
 }