public void QuantileDeserializationTest() { var seed = Rand.Int(); var initialEstimator = new QuantileEstimator(Rand.Double()); initialEstimator.SetRandomSeed(Rand.Int()); var serialized = JsonConvert.SerializeObject(initialEstimator); var deserialized = JsonConvert.DeserializeObject <QuantileEstimator>(serialized); double[] GetRandomQuantiles(QuantileEstimator estimator) { var rand = new Random(seed); var numbers = Enumerable.Range(0, rand.Next(100)) .Select(x => rand.Next()) .ToArray(); foreach (var item in numbers) { estimator.Add(item, 1 + rand.Next(20)); } var quantiles = numbers .Select(x => estimator.GetProbLessThan(x)) .ToArray(); return(quantiles); } // Run the same estimation run twice with the same serialized // object to use to test that the results are the same. var firstRun = GetRandomQuantiles(initialEstimator); var secondRun = GetRandomQuantiles(deserialized); Assert.Equal(firstRun, secondRun); }
public void QuantileSeedTest() { var seed = Rand.Int(); double[] GetRandomQuantiles() { var rand = new Random(seed); var estimator = new QuantileEstimator(rand.NextDouble()); estimator.SetRandomSeed(rand.Next()); var numbers = Enumerable.Range(0, rand.Next(100)) .Select(x => rand.Next()) .ToArray(); foreach (var item in numbers) { estimator.Add(item, 1 + rand.Next(20)); } var quantiles = numbers .Select(x => estimator.GetProbLessThan(x)) .ToArray(); return(quantiles); } // Run the same estimation run twice with the same seed to test // that the results are the same. var firstRun = GetRandomQuantiles(); var secondRun = GetRandomQuantiles(); Assert.Equal(firstRun, secondRun); }