public void ComputeTest3()
{
Histogram target;
HistogramBin bin;
double[] values = { 1, 2, 2, 3, 3, 3, 3, 4, 4, 5, 6 };
target = new Histogram();
target.Compute(values, 5);
Assert.AreEqual(1, target.Range.Min);
Assert.AreEqual(6, target.Range.Max);
Assert.AreEqual(5, target.Bins.Count);
bin = target.Bins[0];
Assert.AreEqual(1, bin.Value);
Assert.AreEqual(1.0, bin.Width);
Assert.IsTrue(bin.Range.Min <= 1 && 1 < bin.Range.Max);
Assert.IsTrue(bin.Contains(1));
Assert.IsFalse(bin.Contains(2));
Assert.AreEqual(bin, target.Bins.Search(1));
Assert.AreEqual(0, target.Bins.SearchIndex(1));
bin = target.Bins[1];
Assert.AreEqual(2.0, bin.Value);
Assert.AreEqual(1.0, bin.Width);
Assert.IsTrue(bin.Range.Min <= 2 && 2 < bin.Range.Max);
Assert.IsTrue(bin.Contains(2));
Assert.IsFalse(bin.Contains(3));
Assert.AreEqual(bin, target.Bins.Search(2));
Assert.AreEqual(1, target.Bins.SearchIndex(2));
bin = target.Bins[2];
Assert.AreEqual(4.0, bin.Value);
Assert.AreEqual(1.0, bin.Width);
Assert.IsTrue(bin.Range.Min <= 3 && 3 < bin.Range.Max);
Assert.IsTrue(bin.Contains(3));
Assert.IsFalse(bin.Contains(4));
Assert.AreEqual(bin, target.Bins.Search(3));
Assert.AreEqual(2, target.Bins.SearchIndex(3));
bin = target.Bins[3];
Assert.AreEqual(2.0, bin.Value);
Assert.AreEqual(1.0, bin.Width);
Assert.IsTrue(bin.Range.Min <= 4 && 4 < bin.Range.Max);
Assert.IsTrue(bin.Contains(4));
Assert.IsFalse(bin.Contains(5));
Assert.AreEqual(bin, target.Bins.Search(4));
Assert.AreEqual(3, target.Bins.SearchIndex(4));
bin = target.Bins[4];
Assert.AreEqual(2.0, bin.Value);
Assert.AreEqual(1.0, bin.Width);
Assert.IsTrue(bin.Range.Min <= 5 && 5 < bin.Range.Max);
Assert.IsTrue(bin.Contains(5));
Assert.IsTrue(bin.Contains(6));
Assert.IsFalse(bin.Contains(4));
Assert.AreEqual(bin, target.Bins.Search(5));
Assert.AreEqual(4, target.Bins.SearchIndex(5));
int sum = 0;
for (int i = 0; i < target.Values.Length; i++)
sum += target.Values[i];
Assert.AreEqual(values.Length, sum);
}