private static void ExpectMissRate(ArtificialCacheMissOptions options, int samples)
        {
            var rng    = new Random(909090);
            int misses = 0;

            for (int i = 0; i < samples; i++)
            {
                ulong high = unchecked (((ulong)rng.Next()) << 32);
                ulong low  = unchecked ((ulong)rng.Next());
                long  val  = unchecked ((long)(high | low));
                if (options.ShouldHaveArtificialMiss(val))
                {
                    misses++;
                }
            }

            double actualRate         = (double)misses / samples;
            double deltaOfPercentages = Math.Abs(actualRate - options.EffectiveMissRate);
            double error = deltaOfPercentages / options.EffectiveMissRate;

            if (double.IsInfinity(error) || error > 0.1)
            {
                XAssert.Fail(
                    "Options {0} gave {1} misses; expected {2} ; error {3:P}",
                    options.ToString(),
                    misses,
                    options.EffectiveMissRate * samples,
                    error);
            }
        }
        private static void ExpectParseFailure(string value)
        {
            ArtificialCacheMissOptions options = ArtificialCacheMissOptions.TryParse(value, CultureInfo.InvariantCulture);

            if (options != null)
            {
                XAssert.Fail("Expected parse failure for {0}; got options {1}", value, options.ToString());
            }
        }
        private static void ExpectParseSuccess(string value, double rate, bool inverted, int?seed = null)
        {
            ArtificialCacheMissOptions options = ArtificialCacheMissOptions.TryParse(value, CultureInfo.InvariantCulture);

            XAssert.IsNotNull(options, "Expected parse success for {0}", value);

            XAssert.AreEqual(rate, options.Rate, "Incorrect rate");
            XAssert.AreEqual(inverted, options.IsInverted, "Incorrect inversion");

            if (seed.HasValue)
            {
                XAssert.AreEqual(seed.Value, options.Seed, "Incorrect seed");
            }
        }