Inheritance: FingerprintDescriptor
        public void ShouldFindTop200BoundaryTest()
        {
            var descriptor = new FastFingerprintDescriptor();
            const int TopWavelets = 200;

            float[] topElements =
                Enumerable.Repeat(1, TopWavelets).Select(elem => (float)elem).ToList().Concat(
                    Enumerable.Repeat(0, 3896).Select(elem => (float)elem)).ToArray();

            float[] randomized = topElements.OrderBy(x => random.Next(0, topElements.Length)).ToArray();

            int kth = descriptor.Find(
                TopWavelets - 1,
                randomized,
                Enumerable.Range(0, randomized.Length).ToArray(),
                0,
                randomized.Length - 1);

            Assert.AreEqual(TopWavelets - 1, kth);

            for (int i = 0; i < TopWavelets; i++)
            {
                Assert.AreEqual(1, randomized[i]);
            }
        }
        public void ShouldFindTop200Element()
        {
            var descriptor = new FastFingerprintDescriptor();

            const int Count = 4096;
            float[] floats = Enumerable.Range(0, Count).Select(elem => elem % 2 == 0 ? (float)elem : (float)-elem).ToArray();
            const int TopWavelets = 200;
            int[] indexes = Enumerable.Range(0, Count).ToArray();
            int kth = descriptor.Find(
                TopWavelets - 1,
                floats,
                indexes,
                0,
                4095);

            Assert.AreEqual(TopWavelets - 1, kth);
            for (int i = 1; i < TopWavelets; ++i)
            {
                Assert.IsTrue(Math.Abs(floats[TopWavelets - i]).CompareTo(floats[TopWavelets + i - 1]) > 0);
                Assert.IsTrue(indexes[i - 1] > Count - TopWavelets);
            }
        }