public void SuperEtalon() { var rqq = new Rqq(new double[] { 6, 2, 0, 7, 9, 3, 1, 8, 5, 4 }); double actual = rqq.Select(2, 8, 4); Assert.Equal(7, actual); }
public void RandomAllRanges() { for (int n = 3; n < 20; n++) { var data = new UniformDistribution(0, 100).Random(42).Next(n); Output.WriteLine("[DATA] " + string.Join("; ", data)); var buffer = new double[data.Length]; var rqq = new Rqq(data); for (int i = 0; i < n; i++) { for (int j = i; j < n; j++) { for (int k = 0; k < j - i; k++) { double actual = rqq.Select(i, j, k); Array.Copy(data, i, buffer, 0, j - i + 1); Array.Sort(buffer, 0, j - i + 1); double expected = buffer[k]; Output.WriteLine($"n = {n}, i = {i}, j = {j}, k = {k}, expected = {expected}, actual = {actual}"); if (actual != expected) { DumpRqqTree(rqq); } Assert.Equal(expected, actual); } } } } }
public void Run() { var data = new double[] { 6, 2, 0, 7, 9, 3, 1, 8, 5, 4 }; var rqq = new Rqq(data); Console.WriteLine(rqq.DumpTreeAscii()); Console.WriteLine(); for (int i = 0; i < data.Length; i++) { Console.WriteLine($"sorted[{i}] = {rqq.Select(0, data.Length - 1, i)}"); } }