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"); } }