public void nth_element_1()
{
for (int size = 1; size < 1000; size += 10)
{
for (int nth = 1; nth < size; nth += 10)
{
int[] random = UniformDiscreteDistribution.Random(size);
double[] a = random.ToDouble();
double[] b = random.ToDouble();
int[] bk = (int[])random.Clone();
double[] c = random.ToDouble();
double[] d = random.ToDouble();
int[] dk = (int[])random.Clone();
double[] e = random.ToDouble();
double[] f = random.ToDouble();
int[] fk = (int[])random.Clone();
Sort.NthElement(a, 0, a.Length - 1, nth);
Sort.NthElement(b, bk, 0, b.Length - 1, nth);
Assert.IsTrue(a.IsEqual(b));
Assert.IsTrue(a.IsEqual(bk));
Func<double, double, int> comparer = (x, y) => x.CompareTo(y);
Sort.NthElement(c, 0, a.Length - 1, nth, comparer);
Sort.NthElement(d, dk, 0, b.Length - 1, nth, comparer);
var str = random.ToString(CSharpArrayFormatProvider.InvariantCulture);
Assert.IsTrue(a.IsEqual(c));
Assert.IsTrue(c.IsEqual(d));
Assert.IsTrue(d.IsEqual(dk));
Func<double, double, int> comparer2 = (x, y) => -x.CompareTo(y);
Sort.NthElement(e, 0, a.Length - 1, nth, comparer2, asc: false);
Sort.NthElement(f, fk, 0, b.Length - 1, nth, comparer2, asc: false);
Assert.IsTrue(a.IsEqual(e));
Assert.IsTrue(e.IsEqual(f));
Assert.IsTrue(f.IsEqual(fk));
Assert.IsTrue(a.IsEqual(c));
Assert.IsTrue(a.IsEqual(d));
Assert.IsTrue(a.IsEqual(e));
Assert.IsTrue(a.IsEqual(f));
Assert.IsTrue(a.IsEqual(fk));
}
}
}