public void TestNothingChanges() { var oldCache = new DataReaderPartition <TestEntity>(); var newCache = new DataReaderPartition <TestEntity>(); var newElement = new TestEntity { PartitionKey = "PK", RowKey = "RK", TimeStamp = "0" }; oldCache.Update(newElement); newCache.Update(newElement); var updated = new List <TestEntity>(); var deleted = new List <TestEntity>(); oldCache.FindDifference(newCache, itm => updated.Add(itm), itm => deleted.Add(itm)); Assert.AreEqual(0, updated.Count); Assert.AreEqual(0, deleted.Count); }
private void InitPartition(string partitionKey, IReadOnlyList <T> items) { IReadOnlyList <T> updated; IReadOnlyList <T> deleted; _lock.EnterWriteLock(); try { var oldPartition = _cache.ContainsKey(partitionKey) ? _cache[partitionKey] : null; _cache[partitionKey] = new DataReaderPartition <T>(); foreach (var item in items) { if (!_cache.ContainsKey(item.PartitionKey)) { _cache.Add(item.PartitionKey, new DataReaderPartition <T>()); } var partition = _cache[item.PartitionKey]; partition.Update(item); } if (oldPartition == null) { NotifyChanged(_cache[partitionKey].GetRows().ToList()); return; } (updated, deleted) = oldPartition.FindDifference(_cache[partitionKey]); } finally { _lock.ExitWriteLock(); } if (updated != null) { NotifyChanged(updated); } if (deleted != null) { NotifyDeleted(deleted); } }
public void TestComplexUpdateDeleteChanges() { var oldCache = new DataReaderPartition <TestEntity>(); var newCache = new DataReaderPartition <TestEntity>(); var element1 = new TestEntity { PartitionKey = "PK1", RowKey = "RK1", TimeStamp = "1" }; var element2 = new TestEntity { PartitionKey = "PK2", RowKey = "RK2", TimeStamp = "2" }; var element3 = new TestEntity { PartitionKey = "PK3", RowKey = "RK3", TimeStamp = "3" }; oldCache.Update(element1); oldCache.Update(element2); newCache.Update(element2); newCache.Update(element3); var updated = new List <TestEntity>(); var deleted = new List <TestEntity>(); oldCache.FindDifference(newCache, itm => updated.Add(itm), itm => deleted.Add(itm)); Assert.AreEqual(1, updated.Count); Assert.AreEqual(1, deleted.Count); Assert.AreEqual("PK3", updated[0].PartitionKey); Assert.AreEqual("PK1", deleted[0].PartitionKey); }