public void DictionarySimple() { using (var tempFile = new TemporaryFile()) using (var store1 = new DictionaryStore <int, int>(VirtualFileSystem.OpenStream(tempFile.Path, VirtualFileMode.OpenOrCreate, VirtualFileAccess.ReadWrite, VirtualFileShare.ReadWrite))) using (var store2 = new DictionaryStore <int, int>(VirtualFileSystem.OpenStream(tempFile.Path, VirtualFileMode.OpenOrCreate, VirtualFileAccess.ReadWrite, VirtualFileShare.ReadWrite))) { store1.UseTransaction = true; // Check successive sets store1[1] = 1; Assert.That(store1[1], Is.EqualTo(1)); store1[1] = 2; Assert.That(store1[1], Is.EqualTo(2)); // Check saving (before and after completion) store1.Save(); Assert.That(store1[1], Is.EqualTo(2)); Assert.That(store1[1], Is.EqualTo(2)); // Check set after save store1[1] = 3; Assert.That(store1[1], Is.EqualTo(3)); // Check loading from another store store2.LoadNewValues(); Assert.That(store2[1], Is.EqualTo(2)); // Concurrent changes store1[1] = 5; store2[1] = 6; // Write should be scheduled for save immediately since dictionaryStore2 doesn't use transaction store2[2] = 6; // Check intermediate state (should get new value for 2, but keep intermediate non-saved value for 1) store1.LoadNewValues(); Assert.That(store1[1], Is.EqualTo(5)); Assert.That(store1[2], Is.EqualTo(6)); // Check after save/reload, both stores should be synchronized store1.Save(); store2.LoadNewValues(); Assert.That(store1[1], Is.EqualTo(store2[1])); Assert.That(store1[2], Is.EqualTo(store2[2])); } }
public void DictionarySimple() { using (var tempFile = new TemporaryFile()) using (var store1 = new DictionaryStore<int, int>(VirtualFileSystem.OpenStream(tempFile.Path, VirtualFileMode.OpenOrCreate, VirtualFileAccess.ReadWrite, VirtualFileShare.ReadWrite))) using (var store2 = new DictionaryStore<int, int>(VirtualFileSystem.OpenStream(tempFile.Path, VirtualFileMode.OpenOrCreate, VirtualFileAccess.ReadWrite, VirtualFileShare.ReadWrite))) { store1.UseTransaction = true; // Check successive sets store1[1] = 1; Assert.That(store1[1], Is.EqualTo(1)); store1[1] = 2; Assert.That(store1[1], Is.EqualTo(2)); // Check saving (before and after completion) store1.Save(); Assert.That(store1[1], Is.EqualTo(2)); Assert.That(store1[1], Is.EqualTo(2)); // Check set after save store1[1] = 3; Assert.That(store1[1], Is.EqualTo(3)); // Check loading from another store store2.LoadNewValues(); Assert.That(store2[1], Is.EqualTo(2)); // Concurrent changes store1[1] = 5; store2[1] = 6; // Write should be scheduled for save immediately since dictionaryStore2 doesn't use transaction store2[2] = 6; // Check intermediate state (should get new value for 2, but keep intermediate non-saved value for 1) store1.LoadNewValues(); Assert.That(store1[1], Is.EqualTo(5)); Assert.That(store1[2], Is.EqualTo(6)); // Check after save/reload, both stores should be synchronized store1.Save(); store2.LoadNewValues(); Assert.That(store1[1], Is.EqualTo(store2[1])); Assert.That(store1[2], Is.EqualTo(store2[2])); } }
/// <summary> /// Records the effect compilation request to the specified file. /// </summary> /// <param name="filePath">The file path.</param> /// <param name="reset">if set to <c>true</c> erase the previous file, otherwise append.</param> public void StartRecordEffectCompile(string filePath, bool reset) { try { if (reset && File.Exists(filePath)) { File.Delete(filePath); } } catch (IOException) { } var fileStream = new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite); var effectCompileLog = new DictionaryStore <EffectCompileRequest, bool>(fileStream); if (!reset) { effectCompileLog.LoadNewValues(); } StartRecordEffectCompile(effectCompileLog); }