public void TestBasic(string prefix)
        {
            var mpds = new MapDatastore <byte[]>();
            var nsds = new NamespaceDatastore <byte[]>(mpds, new DatastoreKey(prefix));
            var keys = new[]
            {
                "foo",
                "foo/bar",
                "foo/bar/baz",
                "foo/barb",
                "foo/bar/bazb",
                "foo/bar/baz/barb",
            }.Select(s => new DatastoreKey(s)).ToArray();

            foreach (var key in keys)
            {
                nsds.Put(key, Encoding.UTF8.GetBytes(key.ToString()));
            }

            foreach (var key in keys)
            {
                var v1 = nsds.Get(key);
                Assert.That(v1, Is.EqualTo(Encoding.UTF8.GetBytes(key.ToString())));

                var v2 = mpds.Get(new DatastoreKey(prefix).Child(key));
                Assert.That(v2, Is.EqualTo(Encoding.UTF8.GetBytes(key.ToString())));
            }

            Func <IDatastore <byte[]>, DatastoreQuery <byte[]>, List <DatastoreKey> > run = (d, q) =>
            {
                return(d.Query(q).Rest().Select(e => e.DatastoreKey).ToList());
            };

            var listA = run(mpds, new DatastoreQuery <byte[]>());
            var listB = run(nsds, new DatastoreQuery <byte[]>());

            Assert.That(listA.Count, Is.EqualTo(listB.Count));

            listA.Sort();
            listB.Sort();

            for (var i = 0; i < listA.Count; i++)
            {
                var kA = listA[i];
                var kB = listB[i];

                Assert.That(nsds.InvertKey(kA), Is.EqualTo(kB));
                Assert.That(kA, Is.EqualTo(nsds.ConvertKey(kB)));
            }
        }
        public void Flushing()
        {
            var child = new MapDatastore <string>();
            var d     = new AutoBatchDatastore <string>(child, 16);

            var keys  = Enumerable.Range(0, 16).Select(i => new DatastoreKey($"test{i}")).ToArray();
            var value = "hello world";

            foreach (var key in keys)
            {
                d.Put(key, value);
            }

            Assert.Throws <KeyNotFoundException>(() => child.Get(keys[0]));

            d.Put(new DatastoreKey("test16"), value);

            foreach (var key in keys)
            {
                var v = child.Get(key);
                Assert.That(v, Is.EqualTo(value));
            }
        }
        public void TestGetAllKeys()
        {
            var mpds = new MapDatastore <byte[]>();
            var nsds = new NamespaceDatastore <byte[]>(mpds, new DatastoreKey("abc"));
            var keys = new[]
            {
                "foo",
                "foo/bar",
                "foo/bar/baz",
                "foo/barb",
                "foo/bar/bazb",
                "foo/bar/baz/barb",
            }.Select(s => new DatastoreKey(s)).ToArray();

            foreach (var key in keys)
            {
                nsds.Put(key, Encoding.UTF8.GetBytes(key.ToString()));
            }

            var res         = nsds.Query(new DatastoreQuery <byte[]>(keysOnly: true));
            var fetchedKeys = res.Rest().Select(r => r.DatastoreKey);

            Assert.That(fetchedKeys, Is.EqualTo(keys));
        }