public void TestWeHaveSomeBeforeAndSomeAfter()
        {
            var partitionBefore = new ReaderPartition <int>();

            var dt1 = DateTime.UtcNow;
            var dt2 = DateTime.UtcNow.AddMinutes(1);
            var dt3 = DateTime.UtcNow.AddMinutes(2);

            var readerRow1 = new ReaderRow <int>("1", dt1, 1);
            var readerRow2 = new ReaderRow <int>("2", dt2, 2);

            partitionBefore.Init(new [] { readerRow1, readerRow2 });

            var readerRow3     = new ReaderRow <int>("3", dt3, 3);
            var partitionAfter = new ReaderPartition <int>();

            partitionAfter.Init(new[] { readerRow2, readerRow3 });

            var result = partitionBefore.FindTheDifference(partitionAfter).ToList();

            Assert.AreEqual(2, result.Count);

            var insertedEntity = result.FirstOrDefault(itm => itm.Item1 == RowOperationResult.Insert);

            Assert.AreEqual(3, insertedEntity.Item2);

            var deletedEntity = result.FirstOrDefault(itm => itm.Item1 == RowOperationResult.Delete);

            Assert.AreEqual(1, deletedEntity.Item2);
        }
        public void TestWeHaveARowBeforeAndEmptyAfter()
        {
            var partitionBefore = new ReaderPartition <int>();

            var partitionAfter = new ReaderPartition <int>();

            var readerRow = new ReaderRow <int>("TestRow", DateTime.UtcNow, 0);

            partitionBefore.Init(new [] { readerRow });

            var result = partitionBefore.FindTheDifference(partitionAfter).ToList();

            Assert.AreEqual(RowOperationResult.Delete, result[0].Item1);
            Assert.AreEqual(1, result.Count);
        }
 public static IEnumerable <(RowOperationResult, T)> FindTheDifference <T>(this ReaderPartition <T> before, ReaderPartition <T> now)
 {
     if (before == null)