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)"); }