예제 #1
0
        public void Test196_5k_times()
        {
            var adder = new IPalindromAdder[] {
                new PalinAddV1()
                , new PalinAddUnrolled()
                , new PalinAddUnrolledWithArray()
                , new PalinAddTwoStrikes()
            };

            var iters = adder.Select(a => new PalinIter(349, a).GetEnumerator()).ToList();

            int iteration = 0;

            for (int i = 0; i < 5_000; ++i)
            {
                foreach (var iter in iters)
                {
                    iter.MoveNext();
                    ++iteration;
                }
                BigInt reference = iters[0].Current;
                for (int j = 1; j < iters.Count; ++j)
                {
                    var currIter = iters[j];
                    Assert.AreEqual <BigInt>(expected: reference, actual: currIter.Current,
                                             $"iteration# {iteration}, failing adder: {adder[j]}");
                }
            }
        }
예제 #2
0
 public PalinIter(int start, IPalindromAdder adder)
 {
     _adder = adder;
     _idx   = 0;
     _xy    = new BigInt[2];
     _xy[0] = new BigInt(start);
     _xy[1] = new BigInt(0);
 }
예제 #3
0
        public void Test349()
        {
            var adder = new IPalindromAdder[] {
                new PalinAddV1(),
                new PalinAddUnrolled(),
                new PalinAddUnrolledWithArray(),
                new PalinAddTwoStrikes()
            };

            var iters = adder.Select(a => new PalinIter(349, a).GetEnumerator()).ToList();

            Assert.IsTrue(nextResults(iters).All(i => i.Equals("1292")));
            Assert.IsTrue(nextResults(iters).All(i => i.Equals("4213")));
            Assert.IsTrue(nextResults(iters).All(i => i.Equals("7337")));
        }