示例#1
0
        public void KeysCountIndexTest()
        {
            Action Control = () =>
            {
                Microsoft.VisualStudio.TestTools.UnitTesting.Assert.IsTrue(index.Count == control_index.Count);
                var keys = index.Keys.Distinct().ToArray();
                Microsoft.VisualStudio.TestTools.UnitTesting.Assert.IsTrue(keys.Length == control_index.Count);
                foreach (var key in keys)
                    Microsoft.VisualStudio.TestTools.UnitTesting.Assert.IsTrue(control_index.ContainsKey(key));
            };

            using (index = CreateNewIndex(true))
            {
                Set(0, 1, 3, 4);
                Control();
                Remove(4);
                Set(5, true);
                Set(0, false);
                Get(0, 1,2,3,4,5,6);
                Control();
                index.Flush();
            }

            using (index = CreateNewIndex(false))
            {
                Control();
                Remove(2);
                Remove(0);
                Control();
                Set(0, 1);
                Control();
                index.Flush();
            }
        }
示例#2
0
        private FsIndexedStorage <int> CreateNewStorageWithLogging(bool clear)
        {
            if (clear)
            {
                operations = new List <string>();
                Clear();
            }
            var db    = new FsStorage(dir, prefix, maxDbFileLength: 100 * 1024);
            var index = new FsIndex <int>(dir, prefix, FsStorage.CreatePtr, BitConverter.GetBytes, bytes => BitConverter.ToInt32(bytes, 0));

#if DEBUG
            db.onReading += (ptr, bytes) => { Thread.Sleep(rnd.Next(200)); lock (operations) operations.Add(String.Format("[{0}] read from ptr {1} value {2}", Thread.CurrentThread.ManagedThreadId, ptr.ToString(), BitConverter.ToInt32(bytes, 0))); };
            db.onWriting += (ptr, bytes) => { Thread.Sleep(rnd.Next(200)); lock (operations) operations.Add(String.Format("[{0}] write to ptr {1} value {2}", Thread.CurrentThread.ManagedThreadId, ptr.ToString(), BitConverter.ToInt32(bytes, 0))); };

            index.onGet += (key, ptr) => { Thread.Sleep(rnd.Next(200)); lock (operations) operations.Add(String.Format("[{0}] get by key {1} ptr {2}", Thread.CurrentThread.ManagedThreadId, key, ptr != null ? ptr.ToString() : "")); };
            index.onSet += (key, ptr) => { Thread.Sleep(rnd.Next(200)); lock (operations) operations.Add(String.Format("[{0}] set by key {1} ptr {2}", Thread.CurrentThread.ManagedThreadId, key, ptr.ToString())); };
            index.onRem += (key, ptr) => { Thread.Sleep(rnd.Next(200)); lock (operations) operations.Add(String.Format("[{0}] rem key {1} with ptr {2}", Thread.CurrentThread.ManagedThreadId, key, ptr.ToString())); };
#endif
            return(new FsIndexedStorage <int>(db, index));
        }
示例#3
0
        public void KeysCountIndexTest()
        {
            Action Control = () =>
            {
                Microsoft.VisualStudio.TestTools.UnitTesting.Assert.IsTrue(index.Count == control_index.Count);
                var keys = index.Keys.Distinct().ToArray();
                Microsoft.VisualStudio.TestTools.UnitTesting.Assert.IsTrue(keys.Length == control_index.Count);
                foreach (var key in keys)
                {
                    Microsoft.VisualStudio.TestTools.UnitTesting.Assert.IsTrue(control_index.ContainsKey(key));
                }
            };

            using (index = CreateNewIndex(true))
            {
                Set(0, 1, 3, 4);
                Control();
                Remove(4);
                Set(5, true);
                Set(0, false);
                Get(0, 1, 2, 3, 4, 5, 6);
                Control();
                index.Flush();
            }

            using (index = CreateNewIndex(false))
            {
                Control();
                Remove(2);
                Remove(0);
                Control();
                Set(0, 1);
                Control();
                index.Flush();
            }
        }
示例#4
0
        public void SimpleGetSaveRemoveIndexTest()
        {
            using (index = CreateNewIndex(true))
            {
                for (int i = 0; i < N; ++i)
                {
                    int key = rnd.Next(10);
                    if (i < 20 || i % 5 == 0)
                    {
                        Set(key, rnd.Next() % 5 == 0);
                    }
                    else if (i % 5 == 1)
                    {
                        Remove(key);
                    }
                    else
                    {
                        Get(key);
                    }

                    if (i % 1000 == 0)
                    {
                        index.Flush();
                    }
                }

                Get(200);
                Set(200, false);
                Get(200);
                Set(200, true);
                Get(200);
                Remove(200);
                Get(200);
                Set(200, true);
                Get(200);
                Set(200, false);
                Get(200);
                index.Flush();
            }

            using (index = CreateNewIndex(false))
            {
                for (int i = 0; i < N; ++i)
                {
                    int key = rnd.Next(1000);
                    if (i < 2000 || i % 5 == 0)
                    {
                        Set(key, rnd.Next() % 5 == 0);
                    }
                    else if (i % 5 == 1)
                    {
                        Remove(key);
                    }
                    else
                    {
                        Get(key);
                    }

                    if (i % 1000 == 0)
                    {
                        index.Flush();
                    }
                }
                index.Flush();
            }
        }
        private FsIndexedStorage<int> CreateNewStorageWithLogging(bool clear)
        {
            if (clear)
            {
                operations = new List<string>();
                Clear();
            }
            var db = new FsStorage(dir, prefix, maxDbFileLength: 100 * 1024);
            var index = new FsIndex<int>(dir, prefix, FsStorage.CreatePtr, BitConverter.GetBytes, bytes => BitConverter.ToInt32(bytes, 0));
            #if DEBUG
            db.onReading += (ptr, bytes) => { Thread.Sleep(rnd.Next(200)); lock (operations) operations.Add(String.Format("[{0}] read from ptr {1} value {2}", Thread.CurrentThread.ManagedThreadId, ptr.ToString(), BitConverter.ToInt32(bytes, 0))); };
            db.onWriting += (ptr, bytes) => { Thread.Sleep(rnd.Next(200)); lock (operations) operations.Add(String.Format("[{0}] write to ptr {1} value {2}", Thread.CurrentThread.ManagedThreadId, ptr.ToString(), BitConverter.ToInt32(bytes, 0))); };

            index.onGet += (key, ptr) => { Thread.Sleep(rnd.Next(200)); lock (operations) operations.Add(String.Format("[{0}] get by key {1} ptr {2}", Thread.CurrentThread.ManagedThreadId, key, ptr != null ? ptr.ToString() : "")); };
            index.onSet += (key, ptr) => { Thread.Sleep(rnd.Next(200)); lock (operations) operations.Add(String.Format("[{0}] set by key {1} ptr {2}", Thread.CurrentThread.ManagedThreadId, key, ptr.ToString())); };
            index.onRem += (key, ptr) => { Thread.Sleep(rnd.Next(200)); lock (operations) operations.Add(String.Format("[{0}] rem key {1} with ptr {2}", Thread.CurrentThread.ManagedThreadId, key, ptr.ToString())); };
            #endif
            return new FsIndexedStorage<int>(db, index);
        }
示例#6
0
        public void SimpleGetSaveRemoveIndexTest()
        {
            using (index = CreateNewIndex(true))
            {

                for (int i = 0; i < N; ++i)
                {
                    int key = rnd.Next(10);
                    if (i < 20 || i%5 == 0) Set(key, rnd.Next()%5 == 0);
                    else if (i%5 == 1) Remove(key);
                    else Get(key);

                    if (i%1000 == 0) index.Flush();
                }

                Get(200);
                Set(200, false);
                Get(200);
                Set(200, true);
                Get(200);
                Remove(200);
                Get(200);
                Set(200, true);
                Get(200);
                Set(200, false);
                Get(200);
                index.Flush();

            }

            using (index = CreateNewIndex(false))
            {
                for (int i = 0; i < N; ++i)
                {
                    int key = rnd.Next(1000);
                    if (i < 2000 || i%5 == 0) Set(key, rnd.Next()%5 == 0);
                    else if (i%5 == 1) Remove(key);
                    else Get(key);

                    if (i%1000 == 0) index.Flush();
                }
                index.Flush();

            }
        }