private static void BulkRead(BerkeleyBulkCursor cursor, HashSet <int> keys, bool blobExists)
        {
            var      checkKeys = new HashSet <int>(keys);
            bool     blobFound = false;
            DateTime d1        = new DateTime(2014, 1, 1);

            for (BerkeleyBulkEnumerator buffer = cursor.ReadAsync(Encoding.UTF8.GetBytes("1"), BerkeleyDbOperation.DB_SET).Result;
                 !buffer.NotFound;
                 buffer = cursor.ReadAsync(null, BerkeleyDbOperation.DB_NEXT).Result)
            {
                buffer.Error.ThrowIfError();

                foreach (BerkeleyKeyValueBulk data in buffer)
                {
                    String key = Encoding.UTF8.GetString(data.Key.ToArray());
                    int    i;
                    if (int.TryParse(key, out i))
                    {
                        Assert.IsTrue(checkKeys.Remove(i), "key: " + i + " not exists");

                        String value = Encoding.UTF8.GetString(data.Value.ToArray());
                        Assert.AreEqual(DateTime.ParseExact(value, "dddd dd MMMM yyyy", null), d1.AddDays(i - 1), "bad value: " + value);
                    }
                    else
                    {
                        blobFound = key == "blob value" && data.Value.Count == 34123 && CheckByteArray(data.Value);
                    }
                }
            }

            Assert.AreEqual(checkKeys.Count, 0, "not all keys found");
            Assert.IsTrue(blobFound == blobExists, "blob error");
        }
        private static void BulkDuplicateRead(BerkeleyBulkDuplicateCursor cursor, HashSet <KeyValuePair <int, DateTime> > data, bool blobExists)
        {
            var      checkData = new HashSet <KeyValuePair <int, DateTime> >(data);
            bool     blobFound = false;
            DateTime d1        = new DateTime(2014, 1, 1);

            foreach (int keyIndex in data.Select(d => d.Key).Distinct())
            {
                Byte[] key = Encoding.UTF8.GetBytes(keyIndex.ToString());
                for (BerkeleyBulkEnumerator buffer = cursor.ReadAsync(key, BerkeleyDbOperation.DB_SET).Result;
                     !buffer.NotFound;
                     buffer = cursor.ReadAsync(null, BerkeleyDbOperation.DB_NEXT_DUP).Result)
                {
                    buffer.Error.ThrowIfError();

                    foreach (BerkeleyKeyValueBulk keyValue in buffer)
                    {
                        String   value = Encoding.UTF8.GetString(keyValue.Value.ToArray());
                        DateTime d;
                        if (DateTime.TryParseExact(value, "dddd dd MMMM yyyy", null, DateTimeStyles.None, out d))
                        {
                            Assert.IsTrue(checkData.Remove(new KeyValuePair <int, DateTime>(keyIndex, d)), "key/value: " + "key" + keyIndex + "/" + value + " not exists");
                        }
                        else
                        {
                            blobFound = keyValue.Value.Count == 34123 && CheckByteArray(keyValue.Value);
                            Assert.IsTrue(blobFound, "blod data is bad");
                        }
                    }
                }
            }

            Assert.AreEqual(checkData.Count, 0, "not all values found");
            Assert.IsTrue(blobFound == blobExists, "blob value not found");
        }