public void PruneAfter3()
        {
            var actualSolutions   = new List <ulong>();
            var expectedSolutions = new List <ulong>()
            {
                0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6
            };

            expectedSolutions.Sort();

            int n = 3;

            Backtrack64.Run(n, candidate =>
            {
                actualSolutions.Add(candidate);
                return(candidate >= 3);
            });
            actualSolutions.Sort();

            Assert.Equal(expectedSolutions, actualSolutions);
        }
        public void NoPruning()
        {
            var actualSolutions   = new List <ulong>();
            var expectedSolutions = new List <ulong>()
            {
                0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7
            };

            expectedSolutions.Sort();

            int n = 3;

            Backtrack64.Run(n, candidate =>
            {
                actualSolutions.Add(candidate);
                return(false);
            });
            actualSolutions.Sort();

            Assert.Equal(Math.Pow(2, n), actualSolutions.Count);
            Assert.Equal(expectedSolutions, actualSolutions);
        }