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