public async Task AddOrUpdateAsyncTest() { DictionaryChangedEvent <int, string> change = null; TransactedConcurrentDictionary <int, string> d = new TransactedConcurrentDictionary <int, string>( new Uri("test://mocks", UriKind.Absolute), (s, e) => { change = e; } ); using (var tx = _stateManager.CreateTransaction()) { await d.AddOrUpdateAsync(tx, 1, (k) => "One", (k, v) => "Two"); Assert.IsNull(change); await tx.CommitAsync(); Assert.IsNotNull(change); Assert.AreEqual("One", change.Added); } change = null; using (var tx = _stateManager.CreateTransaction()) { await d.AddOrUpdateAsync(tx, 1, (k) => "One", (k, v) => "Two"); Assert.IsNull(change); await tx.CommitAsync(); Assert.IsNotNull(change); Assert.AreEqual("Two", change.Added); } }
public async Task TryGetValueAsyncTest() { DictionaryChangedEvent <int, string> change = null; TransactedConcurrentDictionary <int, string> d = new TransactedConcurrentDictionary <int, string>( new Uri("test://mocks", UriKind.Absolute), (s, e) => { change = e; } ); using (var tx = _stateManager.CreateTransaction()) { Assert.IsFalse((await d.TryGetValueAsync(tx, 1, LockMode.Default)).HasValue); Assert.IsTrue(await d.TryAddAsync(tx, 1, "One")); using (var tx2 = _stateManager.CreateTransaction()) { await Assert.ThrowsExceptionAsync <TimeoutException>( async() => { await d.TryGetValueAsync(tx2, 1, LockMode.Default, timeout: TimeSpan.FromMilliseconds(20)); } ); } await tx.CommitAsync(); Assert.AreEqual("One", change.Added); } }
public async Task ClearAsyncTest() { DictionaryChangedEvent <int, string> change = null; TransactedConcurrentDictionary <int, string> d = new TransactedConcurrentDictionary <int, string>( new Uri("test://mocks", UriKind.Absolute), (s, e) => { change = e; } ); using (var tx = _stateManager.CreateTransaction()) { await d.AddAsync(tx, 1, "One"); await tx.CommitAsync(); Assert.AreEqual(1, await GetCount(d)); } change = null; await d.ClearAsync(); Assert.AreEqual(0, await GetCount(d)); Assert.IsNull(change); }
public async Task AddAsyncTest() { DictionaryChangedEvent <int, string> change = null; TransactedConcurrentDictionary <int, string> d = new TransactedConcurrentDictionary <int, string>( new Uri("test://mocks", UriKind.Absolute), (s, e) => { change = e; } ); using (var tx = _stateManager.CreateTransaction()) { await d.AddAsync(tx, 1, "One"); await Assert.ThrowsExceptionAsync <ArgumentException>( async() => { await d.AddAsync(tx, 1, "Two"); } ); Assert.IsNull(change); using (var tx2 = _stateManager.CreateTransaction()) { await Assert.ThrowsExceptionAsync <TimeoutException>( async() => { await d.AddAsync(tx2, 1, "Three", TimeSpan.FromMilliseconds(20)); } ); } Assert.IsNull(change); await tx.CommitAsync(); } Assert.IsNotNull(change); Assert.AreEqual("One", change.Added); Assert.IsNull(change.Removed); Assert.AreEqual("One", (await GetValue(d, 1)).Value); }
public async Task TryAddAsyncTest() { DictionaryChangedEvent <int, string> change = null; TransactedConcurrentDictionary <int, string> d = new TransactedConcurrentDictionary <int, string>( new Uri("test://mocks", UriKind.Absolute), (s, e) => { change = e; } ); using (var tx = _stateManager.CreateTransaction()) { Assert.IsTrue(await d.TryAddAsync(tx, 1, "One")); Assert.IsFalse(await d.TryAddAsync(tx, 1, "Two")); using (var tx2 = _stateManager.CreateTransaction()) { await Assert.ThrowsExceptionAsync <TimeoutException>( async() => { await d.TryAddAsync(tx2, 1, "Three", timeout: TimeSpan.FromMilliseconds(20)); } ); } await tx.CommitAsync(); Assert.AreEqual("One", change.Added); } using (var tx = _stateManager.CreateTransaction()) { Assert.IsFalse(await d.TryAddAsync(tx, 1, "Three")); Assert.IsTrue(await d.TryAddAsync(tx, 4, "Four")); Assert.IsTrue(await d.TryAddAsync(tx, 5, "Five")); await tx.CommitAsync(); } Assert.AreEqual(3, await GetCount(d)); Assert.AreEqual("One", (await GetValue(d, 1)).Value); Assert.AreEqual("Four", (await GetValue(d, 4)).Value); Assert.AreEqual("Five", (await GetValue(d, 5)).Value); }
public async Task SetAsyncTest() { DictionaryChangedEvent <int, string> change = null; TransactedConcurrentDictionary <int, string> d = new TransactedConcurrentDictionary <int, string>( new Uri("test://mocks", UriKind.Absolute), (s, e) => { change = e; } ); using (var tx = _stateManager.CreateTransaction()) { await d.SetAsync(tx, 1, "Zero"); } using (var tx = _stateManager.CreateTransaction()) { ConditionalValue <string> value = await d.TryGetValueAsync(tx, 1, LockMode.Default); Assert.IsFalse(value.HasValue); } using (var tx = _stateManager.CreateTransaction()) { await d.SetAsync(tx, 1, "One"); await tx.CommitAsync(); Assert.AreEqual("One", change.Added); Assert.AreEqual(null, change.Removed); } using (var tx = _stateManager.CreateTransaction()) { await d.SetAsync(tx, 1, "Two"); } using (var tx = _stateManager.CreateTransaction()) { ConditionalValue <string> value = await d.TryGetValueAsync(tx, 1, LockMode.Default); Assert.AreEqual("One", value.Value); } using (var tx = _stateManager.CreateTransaction()) { await d.AddAsync(tx, 2, "Two"); await tx.CommitAsync(); } using (var tx = _stateManager.CreateTransaction()) { await d.SetAsync(tx, 2, "Three"); await tx.CommitAsync(); Assert.AreEqual("Two", change.Removed); Assert.AreEqual("Three", change.Added); } Assert.AreEqual(2, await GetCount(d)); }