public void ArrayEstimatorTest() { int length = 3; GaussianArray garray = new GaussianArray(length, i => new Gaussian(i, i + 1)); ArrayEstimator <GaussianEstimator, GaussianArray, Gaussian, double> est = new ArrayEstimator <GaussianEstimator, GaussianArray, Gaussian, double>( Utilities.Util.ArrayInit(length, i => new GaussianEstimator())); double[] sum = new double[length]; double[] sum2 = new double[length]; int count = 5; for (int nSamp = 0; nSamp < count; nSamp++) { double[] sample = garray.Sample(); est.Add(sample); for (int i = 0; i < length; i++) { sum[i] += sample[i]; sum2[i] += sample[i] * sample[i]; } } GaussianArray expected = new GaussianArray(length, delegate(int i) { double m = sum[i] / count; double v = sum2[i] / count - m * m; return(new Gaussian(m, v)); }); GaussianArray actual = new GaussianArray(length); actual = est.GetDistribution(actual); Console.WriteLine(Utilities.StringUtil.JoinColumns("result = ", actual, " should be ", expected)); Assert.True(expected.MaxDiff(actual) < 1e-10); }