void Test(ISieve sieve, long expectedCount, long expectedSum, long expectedHash) { long count = 0, sum = 0, hash = 0; Action <long> action = (p) => { count++; sum += p; hash = hash * 31 + p; }; sieve.ListPrimes(action); Assert.AreEqual(expectedCount, count); Assert.AreEqual(expectedSum, sum); Assert.AreEqual(expectedHash, hash); }
static void TestSieve <T>(long length, long expectedCount, long expectedSum, long expectedHash) { var sw = Stopwatch.StartNew(); ISieve sieve = CreateSieve <T>(length); long count = 0, sum = 0, hash = 0; Action <long> action = (p) => { count++; sum += p; hash = hash * 31 + p; }; sieve.ListPrimes(action); AssertEquals(expectedCount, count); AssertEquals(expectedSum, sum); AssertEquals(expectedHash, hash); Console.WriteLine($"{typeof(T).Name} up to {length:N0} in {sw.Elapsed}"); }