private static void duplicates(int n)
{
var rand = Accord.Math.Tools.Random;
RedBlackTree<int> t = new RedBlackTree<int>();
// Create a vector of random numbers with duplicates
int[] k = new int[n];
for (int i = 0; i < k.Length; i++)
k[i] = i;
Vector.Shuffle(k);
int[] sorted = (int[])k.Clone();
Array.Sort(sorted);
// Populate the tree with numbers
for (int i = 0; i < k.Length; i++)
{
var node = t.Add(k[i]);
Assert.IsNotNull(node);
Assert.AreEqual(k[i], node.Value);
Assert.IsTrue(t.check());
}
Assert.AreEqual(k.Length, t.Count);
// Check that all elements are in the tree
for (int i = 0; i < k.Length; i++)
{
var node = t.Find(k[i]);
Assert.IsNotNull(node);
Assert.AreEqual(k[i], node.Value);
Assert.IsTrue(t.Contains(k[i]));
Assert.IsTrue(t.Contains(node));
}
// Enumerate the values (must be in order)
int arrayIndex = 0;
foreach (var node in t)
Assert.AreEqual(sorted[arrayIndex++], node.Value);
// Populate the tree with the same numbers
for (int i = 0; i < k.Length; i++)
{
var node = t.Add(k[i]);
Assert.IsNotNull(node);
Assert.AreEqual(k[i], node.Value);
Assert.IsTrue(t.check());
}
Assert.IsTrue(t.check());
// Enumerate the values (must be in order)
arrayIndex = 0;
foreach (var node in t)
Assert.AreEqual(sorted[arrayIndex++], node.Value);
}