public void FromDataTest2()
{
Accord.Math.Random.Generator.Seed = 0;
double[][] points =
{
new double[] { 2, 3 },
new double[] { 5, 4 },
new double[] { 9, 6 },
new double[] { 4, 7 },
new double[] { 8, 1 },
new double[] { 7, 2 },
};
var tree = VPTree.FromData(points, new Manhattan());
foreach (var n in tree)
{
double[] location = n.Position;
Assert.AreEqual(2, location.Length);
}
List<VPTreeNode<double[]>> nodes = tree.ToList();
foreach (var p in points)
{
Assert.IsTrue(nodes.Select(x => x.Position).Contains(p, new ArrayComparer<double>()));
}
var query = new double[] { 5, 3 };
var neighbors = tree.Nearest(query, neighbors: 3);
Assert.IsFalse(tree.Root.IsLeaf);
Assert.AreEqual(3, neighbors.Count);
Assert.AreEqual("[(5,4), 4]", neighbors[0].Node.ToString());
Assert.AreEqual("[(2,3), 0]", neighbors[1].Node.ToString());
Assert.AreEqual("[(7,2), 0]", neighbors[2].Node.ToString());
Assert.AreEqual(8, tree.Root.Position[0]);
Assert.AreEqual(1, tree.Root.Position[1]);
Assert.AreEqual("[(5,4), 4]", tree.Root.Left.ToString());
Assert.AreEqual("[(4,7), 6]", tree.Root.Right.ToString());
Assert.AreEqual(4, tree.Root.Right.Position[0]);
Assert.AreEqual(7, tree.Root.Right.Position[1]);
Assert.AreEqual(9, tree.Root.Right.Right.Position[0]);
Assert.AreEqual(6, tree.Root.Right.Right.Position[1]);
}