public void ComputeDiff_Should_Throw_ArgumentException_If_NewEnumerable_Contains_Duplicate_Keys()
        {
            // Arrange
            String        value         = "a";
            List <String> oldEnumerable = new List <String>();
            List <String> newEnumerable = new List <String>()
            {
                value, value
            };

            var testClass = new EnumerableDiffDerivedTest <String, Int32, String>(
                getKey: s => s,
                onRecordAdded: null,
                onRecordRemoved: null,
                onRecordChanged: null,
                onRecordUnchanged: null
                );

            // Act
            var result = Record.Exception(() => testClass.ComputeDiff(oldEnumerable, newEnumerable).ToArray());

            // Assert
            Assert.NotNull(result);
            Assert.Equal(result.GetType(), typeof(ArgumentException));
        }
        public void ComputeDiff_Should_Add_New_Records_To_Output_When_OnRecordAdded_Not_Null()
        {
            // Arrange
            String        newRecord     = "a";
            List <String> oldEnumerable = new List <String>();
            List <String> newEnumerable = new List <String>()
            {
                newRecord
            };

            var testClass = new EnumerableDiffDerivedTest <String, Int32, String>(
                getKey: s => s,
                onRecordAdded: s => s.GetHashCode(),
                onRecordRemoved: null,
                onRecordChanged: null,
                onRecordUnchanged: null
                );

            // Act
            var result = testClass.ComputeDiff(oldEnumerable, newEnumerable).ToArray();

            // Assert
            Assert.Equal(1, result.Count());
            Assert.Equal(newRecord.GetHashCode(), result.First());
        }
        public void ComputeDiff_Should_Not_Add_Unchanged_Records_To_Output_When_OnRecordUnchanged_Is_Null()
        {
            // Arrange
            var oldRecord     = new Tuple <String, Int32>("a", 0);
            var newRecord     = new Tuple <String, Int32>("a", 0);
            var oldEnumerable = new List <Tuple <String, Int32> >()
            {
                oldRecord
            };
            var newEnumerable = new List <Tuple <String, Int32> >()
            {
                newRecord
            };

            var testClass = new EnumerableDiffDerivedTest <Tuple <String, Int32>, Tuple <String, Int32>, String>(
                getKey: s => s.Item1,
                onRecordAdded: null,
                onRecordRemoved: null,
                onRecordChanged: null,
                onRecordUnchanged: null
                );

            // Act
            var result = testClass.ComputeDiff(oldEnumerable, newEnumerable).ToArray();

            // Assert
            Assert.Equal(0, result.Count());
        }