public void PerformanceTest1()
{
int n1 = 1000;
int n2 = 2000;
int k = 5;
double[][] inputs;
NaiveKNearestNeighbors naive;
KNearestNeighbors<double[]> normal;
KNearestNeighbors target;
Create(n1, n2, k, out inputs, out naive, out normal, out target);
double[] expected = new double[inputs.Length];
double[] actual1 = new double[inputs.Length];
double[] actual2 = new double[inputs.Length];
Stopwatch sw = new Stopwatch();
sw.Start();
for (int i = 0; i < inputs.Length; i++)
expected[i] = naive.Compute(inputs[i]);
sw.Stop();
var t1 = sw.Elapsed;
sw.Restart();
for (int i = 0; i < inputs.Length; i++)
actual1[i] = normal.Compute(inputs[i]);
sw.Stop();
var t2 = sw.Elapsed;
sw.Restart();
for (int i = 0; i < inputs.Length; i++)
actual2[i] = target.Compute(inputs[i]);
sw.Stop();
var t3 = sw.Elapsed;
Assert.IsTrue(t1 > t2);
Assert.IsTrue(t2 > t3);
Assert.IsTrue(t2.Ticks > t3.Ticks * 10);
for (int i = 0; i < inputs.Length; i++)
{
Assert.AreEqual(expected[i], actual1[i]);
Assert.AreEqual(expected[i], actual2[i]);
}
}