public T DecodeValue(Slice encoded)
 {
     if (encoded.IsNullOrEmpty)
     {
         return(default(T));                                           //BUGBUG
     }
     return(FdbTuple.DecodeKey <T>(encoded));
 }
        public void Test_Check_Costs()
        {
            const int N    = 100;
            var       cmp  = new CountingComparer <Slice>(Comparer <Slice> .Default);
            var       cola = new ColaOrderedSet <Slice>(cmp);

            Console.WriteLine(String.Format(CultureInfo.InvariantCulture, "Parameters: N = {0}, Log(N) = {1}, Log2(N) = {2}, N.Log2(N) = {3}", N, Math.Log(N), Math.Log(N, 2), N * Math.Log(N, 2)));

            Console.WriteLine("Inserting (" + N + " items)");
            for (int i = 0; i < N; i++)
            {
                cola.Add(FdbTuple.EncodeKey(i << 1));
            }

            Console.WriteLine("> " + cmp.Count + " cmps (" + ((double)cmp.Count / N) + " / insert)");
            cola.Debug_Dump();

            Console.WriteLine("Full scan (" + (N << 1) + " lookups)");
            cmp.Reset();
            int n = 0;

            for (int i = 0; i < (N << 1); i++)
            {
                if (cola.Contains(FdbTuple.EncodeKey(i)))
                {
                    ++n;
                }
            }
            Assert.That(n, Is.EqualTo(N));
            Console.WriteLine("> " + cmp.Count + " cmps (" + ((double)cmp.Count / (N << 1)) + " / lookup)");

            cmp.Reset();
            n = 0;
            int tail   = Math.Min(16, N >> 1);
            int offset = N - tail;

            Console.WriteLine("Tail scan (" + tail + " lookups)");
            for (int i = 0; i < tail; i++)
            {
                if (cola.Contains(FdbTuple.EncodeKey(offset + i)))
                {
                    ++n;
                }
            }
            Console.WriteLine("> " + cmp.Count + " cmps (" + ((double)cmp.Count / tail) + " / lookup)");

            Console.WriteLine("ForEach");
            cmp.Reset();
            int p = 0;

            foreach (var x in cola)
            {
                Assert.That(FdbTuple.DecodeKey <int>(x), Is.EqualTo(p << 1));
                ++p;
            }
            Assert.That(p, Is.EqualTo(N));
            Console.WriteLine("> " + cmp.Count + " cmps (" + ((double)cmp.Count / N) + " / item)");
        }