public void AccrualFailureDetector_must_use_good_enough_cumulative_distribution_function() { var fd = FailureDetectorSpecHelpers.CreateFailureDetector(); ShouldBe(FailureDetectorSpecHelpers.cdf(fd.Phi(0, 0, 10)), 0.5d); ShouldBe(FailureDetectorSpecHelpers.cdf(fd.Phi(6L, 0, 10)), 0.7257d); ShouldBe(FailureDetectorSpecHelpers.cdf(fd.Phi(15L, 0, 10)), 0.9332d); ShouldBe(FailureDetectorSpecHelpers.cdf(fd.Phi(20L, 0, 10)), 0.97725d); ShouldBe(FailureDetectorSpecHelpers.cdf(fd.Phi(25L, 0, 10)), 0.99379d); ShouldBe(FailureDetectorSpecHelpers.cdf(fd.Phi(35L, 0, 10)), 0.99977d); ShouldBe(FailureDetectorSpecHelpers.cdf(fd.Phi(40L, 0, 10)), 0.99997d, 0.0001D); foreach (var pair in Slide(Enumerable.Range(0, 40))) { Assert.True(fd.Phi(pair.Item1, 0, 10) < fd.Phi(pair.Item2, 0, 10)); } ShouldBe(FailureDetectorSpecHelpers.cdf(fd.Phi(22, 20.0, 3)), 0.7475d); }