From ec64614739eb7c060cebd9f83867eee1249564ea Mon Sep 17 00:00:00 2001 From: Andrew Tran Date: Mon, 28 Oct 2024 16:36:36 -0400 Subject: [PATCH 1/5] Andrew Added testing command and cases --- EStimLibrary.sln | 9 ++ .../Core/SpatialModel/LocalizationData.cs | 5 +- .../Core/SpatialModel/LocalizationTests.cs | 105 ++++++++++++++++++ 3 files changed, 118 insertions(+), 1 deletion(-) create mode 100644 tests/EStimLibrary.UnitTests/Core/SpatialModel/LocalizationTests.cs diff --git a/EStimLibrary.sln b/EStimLibrary.sln index 4222e38..9c3e5a5 100644 --- a/EStimLibrary.sln +++ b/EStimLibrary.sln @@ -7,6 +7,10 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{7E35BD38-108 EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EStimLibrary", "src\EStimLibrary\EStimLibrary.csproj", "{23710686-EDC8-41FC-AAC8-52B002F488D6}" EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tests", "tests", "{3193A4CC-4C0F-4A71-BF98-B7EF41A15C5D}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EStimLibrary.UnitTests", "tests\EStimLibrary.UnitTests\EStimLibrary.UnitTests.csproj", "{044DDF63-A529-49FD-AD5C-995B68EEAF2D}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -20,8 +24,13 @@ Global {23710686-EDC8-41FC-AAC8-52B002F488D6}.Debug|Any CPU.Build.0 = Debug|Any CPU {23710686-EDC8-41FC-AAC8-52B002F488D6}.Release|Any CPU.ActiveCfg = Release|Any CPU {23710686-EDC8-41FC-AAC8-52B002F488D6}.Release|Any CPU.Build.0 = Release|Any CPU + {044DDF63-A529-49FD-AD5C-995B68EEAF2D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {044DDF63-A529-49FD-AD5C-995B68EEAF2D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {044DDF63-A529-49FD-AD5C-995B68EEAF2D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {044DDF63-A529-49FD-AD5C-995B68EEAF2D}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(NestedProjects) = preSolution {23710686-EDC8-41FC-AAC8-52B002F488D6} = {7E35BD38-1080-4A2E-B8B4-7CB0C5C08607} + {044DDF63-A529-49FD-AD5C-995B68EEAF2D} = {3193A4CC-4C0F-4A71-BF98-B7EF41A15C5D} EndGlobalSection EndGlobal diff --git a/src/EStimLibrary/Core/SpatialModel/LocalizationData.cs b/src/EStimLibrary/Core/SpatialModel/LocalizationData.cs index aec61f9..35b1edf 100644 --- a/src/EStimLibrary/Core/SpatialModel/LocalizationData.cs +++ b/src/EStimLibrary/Core/SpatialModel/LocalizationData.cs @@ -1,5 +1,5 @@ namespace EStimLibrary.Core.SpatialModel; - +using System.Collections.Generic; /// /// A record to represent event localization results. /// @@ -10,6 +10,9 @@ public record LocalizationData(IEnumerable AreasFullyContaining, IEnumerable AreasPartiallyContaining) { + // Modify the properties using ToList() to create shallow copies during initialization + public IEnumerable AreasFullyContaining { get; init; } = AreasFullyContaining.ToList(); + public IEnumerable AreasPartiallyContaining { get; init; } = AreasPartiallyContaining.ToList(); /// /// Merge this LocalizationData object with another by taking the set union /// per property. Neither initial object should be modified, and the product diff --git a/tests/EStimLibrary.UnitTests/Core/SpatialModel/LocalizationTests.cs b/tests/EStimLibrary.UnitTests/Core/SpatialModel/LocalizationTests.cs new file mode 100644 index 0000000..0f25b41 --- /dev/null +++ b/tests/EStimLibrary.UnitTests/Core/SpatialModel/LocalizationTests.cs @@ -0,0 +1,105 @@ +using EStimLibrary.Core.SpatialModel; +using Xunit; +using System.Collections.Generic; +using System.Linq; + +namespace EStimLibrary.UnitTests.Core.SpatialModel +{ + /// + /// Test class for the LocalizationData record. + /// + public class LocalizationDataTests + { + /// + /// Test the basic construction of LocalizationData and + /// ensure immutability (encapsulation). + /// + [Fact] + public void LocalizationData_Constructor() + { + // Arrange + var areasFullyContaining = new List { 1, 2, 3 }; + var areasPartiallyContaining = new List { 4, 5 }; + + // Act + var localizationData = new LocalizationData(areasFullyContaining, areasPartiallyContaining); + + // Assert - Ensure properties are initialized correctly + Assert.Equal(areasFullyContaining, localizationData.AreasFullyContaining); + Assert.Equal(areasPartiallyContaining, localizationData.AreasPartiallyContaining); + + // Act - Modify the original lists (which should not affect the record) + areasFullyContaining.Add(6); + areasPartiallyContaining.Add(7); + + // Assert - Check immutability: localizationData should not reflect changes in the original lists + Assert.DoesNotContain(6, localizationData.AreasFullyContaining); + Assert.DoesNotContain(7, localizationData.AreasPartiallyContaining); + } + + /// + /// Test the Merge method for correctness and handling of empty sets. + /// + [Fact] + public void LocalizationData_Merge_ShouldCombineAreasAndHandleEmptySetsCorrectly() + { + // Arrange + var data1 = new LocalizationData( + new List { 1, 2, 3 }, + new List { 4, 5 }); + + var data2 = new LocalizationData( + new List { 3, 4, 5 }, + new List { 6, 7 }); + + var emptyData = new LocalizationData(new List(), new List()); + + // Act - Merge data1 and data2 + var mergedData = data1.Merge(data2); + + // Assert - Check merged areas + var expectedFullyContaining = new List { 1, 2, 3, 4, 5 }; + var expectedPartiallyContaining = new List { 4, 5, 6, 7 }; + Assert.Equal(expectedFullyContaining.OrderBy(x => x), mergedData.AreasFullyContaining.OrderBy(x => x)); + Assert.Equal(expectedPartiallyContaining.OrderBy(x => x), mergedData.AreasPartiallyContaining.OrderBy(x => x)); + + // Act - Merge with empty data + var mergedWithEmpty = data1.Merge(emptyData); + var emptyWithPopulated = emptyData.Merge(data2); + + // Assert - Check that merging with empty sets doesn't alter the populated data + Assert.Equal(new List { 1, 2, 3 }, mergedWithEmpty.AreasFullyContaining); + Assert.Equal(new List { 4, 5 }, mergedWithEmpty.AreasPartiallyContaining); + + Assert.Equal(new List { 3, 4, 5 }, emptyWithPopulated.AreasFullyContaining); + Assert.Equal(new List { 6, 7 }, emptyWithPopulated.AreasPartiallyContaining); + } + + /// + /// Test that the Merge method does not modify the original LocalizationData objects. + /// + [Fact] + public void LocalizationData_Merge_ShouldNotModifyOriginalObjects() + { + // Arrange + var data1 = new LocalizationData( + new List { 1, 2, 3 }, + new List { 4, 5 }); + + var data2 = new LocalizationData( + new List { 3, 4, 5 }, + new List { 6, 7 }); + + // Act - Perform the merge + var mergedData = data1.Merge(data2); + + // Assert - Check that original data1 remains unchanged + Assert.Equal(new List { 1, 2, 3 }, data1.AreasFullyContaining); + Assert.Equal(new List { 4, 5 }, data1.AreasPartiallyContaining); + + // Assert - Check that original data2 remains unchanged + Assert.Equal(new List { 3, 4, 5 }, data2.AreasFullyContaining); + Assert.Equal(new List { 6, 7 }, data2.AreasPartiallyContaining); + } + } +} From 04cd1f7be0974472d45125ef0abb1ae7b4f26d95 Mon Sep 17 00:00:00 2001 From: Andrew Tran Date: Sun, 17 Nov 2024 23:58:18 -0500 Subject: [PATCH 2/5] Adding test cases and resolve styling --- .../Core/SpatialModel/LocalizationTests.cs | 194 ++++++++++-------- 1 file changed, 111 insertions(+), 83 deletions(-) diff --git a/tests/EStimLibrary.UnitTests/Core/SpatialModel/LocalizationTests.cs b/tests/EStimLibrary.UnitTests/Core/SpatialModel/LocalizationTests.cs index 0f25b41..a1efee4 100644 --- a/tests/EStimLibrary.UnitTests/Core/SpatialModel/LocalizationTests.cs +++ b/tests/EStimLibrary.UnitTests/Core/SpatialModel/LocalizationTests.cs @@ -1,105 +1,133 @@ using EStimLibrary.Core.SpatialModel; -using Xunit; -using System.Collections.Generic; -using System.Linq; -namespace EStimLibrary.UnitTests.Core.SpatialModel -{ + +namespace EStimLibrary.UnitTests.Core.SpatialModel; + /// /// Test class for the LocalizationData record. /// - public class LocalizationDataTests +public class LocalizationDataTests +{ + /// + /// Test the basic construction of LocalizationData and + /// ensure immutability (encapsulation). + /// + [Fact] + public void Constructor_ShouldEnsureImmutablity() { - /// - /// Test the basic construction of LocalizationData and - /// ensure immutability (encapsulation). - /// - [Fact] - public void LocalizationData_Constructor() - { - // Arrange - var areasFullyContaining = new List { 1, 2, 3 }; - var areasPartiallyContaining = new List { 4, 5 }; + // Arrange + var areasFullyContaining = new List { 1, 2, 3 }; + var areasPartiallyContaining = new List { 4, 5 }; - // Act - var localizationData = new LocalizationData(areasFullyContaining, areasPartiallyContaining); + // Act + var localizationData = new LocalizationData(areasFullyContaining, areasPartiallyContaining); - // Assert - Ensure properties are initialized correctly - Assert.Equal(areasFullyContaining, localizationData.AreasFullyContaining); - Assert.Equal(areasPartiallyContaining, localizationData.AreasPartiallyContaining); + // Assert - Ensure properties are initialized correctly + Assert.Equal(areasFullyContaining, localizationData.AreasFullyContaining); + Assert.Equal(areasPartiallyContaining, localizationData.AreasPartiallyContaining); - // Act - Modify the original lists (which should not affect the record) - areasFullyContaining.Add(6); - areasPartiallyContaining.Add(7); + // Act - Modify the original lists (which should not affect the record) + areasFullyContaining.Add(6); + areasPartiallyContaining.Add(7); - // Assert - Check immutability: localizationData should not reflect changes in the original lists - Assert.DoesNotContain(6, localizationData.AreasFullyContaining); - Assert.DoesNotContain(7, localizationData.AreasPartiallyContaining); - } - - /// - /// Test the Merge method for correctness and handling of empty sets. - /// - [Fact] - public void LocalizationData_Merge_ShouldCombineAreasAndHandleEmptySetsCorrectly() - { - // Arrange - var data1 = new LocalizationData( - new List { 1, 2, 3 }, - new List { 4, 5 }); - - var data2 = new LocalizationData( - new List { 3, 4, 5 }, - new List { 6, 7 }); - - var emptyData = new LocalizationData(new List(), new List()); + // Assert - Check immutability: localizationData should not reflect changes in the original lists + Assert.DoesNotContain(6, localizationData.AreasFullyContaining); + Assert.DoesNotContain(7, localizationData.AreasPartiallyContaining); + } - // Act - Merge data1 and data2 - var mergedData = data1.Merge(data2); + /// + /// Test the Merge method for correctness and handling of empty sets. + /// + [Fact] + public void Merge_ShouldCombineAreasAndHandleEmptySetsCorrectly() + { + // Arrange + var data1 = new LocalizationData( + new List { 1, 2, 3 }, + new List { 4, 5 }); - // Assert - Check merged areas - var expectedFullyContaining = new List { 1, 2, 3, 4, 5 }; - var expectedPartiallyContaining = new List { 4, 5, 6, 7 }; - Assert.Equal(expectedFullyContaining.OrderBy(x => x), mergedData.AreasFullyContaining.OrderBy(x => x)); - Assert.Equal(expectedPartiallyContaining.OrderBy(x => x), mergedData.AreasPartiallyContaining.OrderBy(x => x)); + var data2 = new LocalizationData( + new List { 3, 4, 5 }, + new List { 6, 7 }); - // Act - Merge with empty data - var mergedWithEmpty = data1.Merge(emptyData); - var emptyWithPopulated = emptyData.Merge(data2); + var emptyData = new LocalizationData(new List(), new List()); - // Assert - Check that merging with empty sets doesn't alter the populated data - Assert.Equal(new List { 1, 2, 3 }, mergedWithEmpty.AreasFullyContaining); - Assert.Equal(new List { 4, 5 }, mergedWithEmpty.AreasPartiallyContaining); + // Act - Merge data1 and data2 + var mergedData = data1.Merge(data2); - Assert.Equal(new List { 3, 4, 5 }, emptyWithPopulated.AreasFullyContaining); - Assert.Equal(new List { 6, 7 }, emptyWithPopulated.AreasPartiallyContaining); - } + // Assert - Check merged areas + var expectedFullyContaining = new List { 1, 2, 3, 4, 5 }; + var expectedPartiallyContaining = new List { 4, 5, 6, 7 }; + Assert.Equal(expectedFullyContaining.OrderBy(x => x), mergedData.AreasFullyContaining.OrderBy(x => x)); + Assert.Equal(expectedPartiallyContaining.OrderBy(x => x), mergedData.AreasPartiallyContaining.OrderBy(x => x)); - /// - /// Test that the Merge method does not modify the original LocalizationData objects. - /// - [Fact] - public void LocalizationData_Merge_ShouldNotModifyOriginalObjects() - { - // Arrange - var data1 = new LocalizationData( - new List { 1, 2, 3 }, - new List { 4, 5 }); + // Act - Merge with empty data + var mergedWithEmpty = data1.Merge(emptyData); + var emptyWithPopulated = emptyData.Merge(data2); - var data2 = new LocalizationData( - new List { 3, 4, 5 }, - new List { 6, 7 }); + // Assert - Check that merging with empty sets doesn't alter the populated data + Assert.Equal(new List { 1, 2, 3 }, mergedWithEmpty.AreasFullyContaining); + Assert.Equal(new List { 4, 5 }, mergedWithEmpty.AreasPartiallyContaining); - // Act - Perform the merge - var mergedData = data1.Merge(data2); + Assert.Equal(new List { 3, 4, 5 }, emptyWithPopulated.AreasFullyContaining); + Assert.Equal(new List { 6, 7 }, emptyWithPopulated.AreasPartiallyContaining); + } - // Assert - Check that original data1 remains unchanged - Assert.Equal(new List { 1, 2, 3 }, data1.AreasFullyContaining); - Assert.Equal(new List { 4, 5 }, data1.AreasPartiallyContaining); + /// + /// Test that the Merge method does not modify the original LocalizationData objects. + /// + [Theory] + [MemberData(nameof(MergeTestData))] + public void Merge_ShouldNotModifyOriginalObjects( + List data1FullyContaining, + List data1PartiallyContaining, + List data2FullyContaining, + List data2PartiallyContaining) + { + // Arrange + var data1 = new LocalizationData(data1FullyContaining, data1PartiallyContaining); + var data2 = new LocalizationData(data2FullyContaining, data2PartiallyContaining); + + // Act + var mergedData = data1.Merge(data2); + + // Assert + Assert.Equal(data1FullyContaining, data1.AreasFullyContaining); + Assert.Equal(data1PartiallyContaining, data1.AreasPartiallyContaining); + Assert.Equal(data2FullyContaining, data2.AreasFullyContaining); + Assert.Equal(data2PartiallyContaining, data2.AreasPartiallyContaining); + } - // Assert - Check that original data2 remains unchanged - Assert.Equal(new List { 3, 4, 5 }, data2.AreasFullyContaining); - Assert.Equal(new List { 6, 7 }, data2.AreasPartiallyContaining); + public static IEnumerable MergeTestData => + new List + { + // Test many + new object[] + { + new List { 1, 2, 3 }, // data1 fully containing + new List { 4, 5 }, // data1 partially containing + new List { 3, 4, 5 }, // data2 fully containing + new List { 6, 7 } // data2 partially containing + }, + + //test 0 + new object[] + { + new List { }, + new List { -1, 1 }, + new List { }, + new List { 1, -1 } + }, + + //test 1 + new object[] + { + new List { 0, 0 }, + new List { Int32.MinValue }, + new List { 0, -1 }, + new List { Int32.MaxValue } } - } + }; + } + From 1c70cc4b486f245eeb716220a83f9997452697a6 Mon Sep 17 00:00:00 2001 From: Andrew Tran Date: Mon, 18 Nov 2024 00:13:07 -0500 Subject: [PATCH 3/5] Reverting changes in sln file --- EStimLibrary.sln | 7 ------- 1 file changed, 7 deletions(-) diff --git a/EStimLibrary.sln b/EStimLibrary.sln index 9c3e5a5..0ab0e44 100644 --- a/EStimLibrary.sln +++ b/EStimLibrary.sln @@ -7,8 +7,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{7E35BD38-108 EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EStimLibrary", "src\EStimLibrary\EStimLibrary.csproj", "{23710686-EDC8-41FC-AAC8-52B002F488D6}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tests", "tests", "{3193A4CC-4C0F-4A71-BF98-B7EF41A15C5D}" -EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EStimLibrary.UnitTests", "tests\EStimLibrary.UnitTests\EStimLibrary.UnitTests.csproj", "{044DDF63-A529-49FD-AD5C-995B68EEAF2D}" EndProject Global @@ -24,13 +22,8 @@ Global {23710686-EDC8-41FC-AAC8-52B002F488D6}.Debug|Any CPU.Build.0 = Debug|Any CPU {23710686-EDC8-41FC-AAC8-52B002F488D6}.Release|Any CPU.ActiveCfg = Release|Any CPU {23710686-EDC8-41FC-AAC8-52B002F488D6}.Release|Any CPU.Build.0 = Release|Any CPU - {044DDF63-A529-49FD-AD5C-995B68EEAF2D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {044DDF63-A529-49FD-AD5C-995B68EEAF2D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {044DDF63-A529-49FD-AD5C-995B68EEAF2D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {044DDF63-A529-49FD-AD5C-995B68EEAF2D}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(NestedProjects) = preSolution {23710686-EDC8-41FC-AAC8-52B002F488D6} = {7E35BD38-1080-4A2E-B8B4-7CB0C5C08607} - {044DDF63-A529-49FD-AD5C-995B68EEAF2D} = {3193A4CC-4C0F-4A71-BF98-B7EF41A15C5D} EndGlobalSection EndGlobal From 616a9aee231cc11c1168e5034285cd4f061e453b Mon Sep 17 00:00:00 2001 From: Andrew Tran Date: Mon, 18 Nov 2024 00:17:26 -0500 Subject: [PATCH 4/5] Revert unnecessary changes --- src/EStimLibrary/Core/SpatialModel/LocalizationData.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/EStimLibrary/Core/SpatialModel/LocalizationData.cs b/src/EStimLibrary/Core/SpatialModel/LocalizationData.cs index 35b1edf..51dc110 100644 --- a/src/EStimLibrary/Core/SpatialModel/LocalizationData.cs +++ b/src/EStimLibrary/Core/SpatialModel/LocalizationData.cs @@ -1,5 +1,5 @@ namespace EStimLibrary.Core.SpatialModel; -using System.Collections.Generic; + /// /// A record to represent event localization results. /// From 53c27c5448652472b32efba5b1643ff77e98fb7e Mon Sep 17 00:00:00 2001 From: Laura McGann Date: Mon, 18 Nov 2024 20:26:19 -0500 Subject: [PATCH 5/5] Comments and formatting --- .../Core/SpatialModel/LocalizationData.cs | 10 +- .../Core/SpatialModel/LocalizationTests.cs | 115 +++++++++++------- 2 files changed, 75 insertions(+), 50 deletions(-) diff --git a/src/EStimLibrary/Core/SpatialModel/LocalizationData.cs b/src/EStimLibrary/Core/SpatialModel/LocalizationData.cs index 51dc110..aa9de08 100644 --- a/src/EStimLibrary/Core/SpatialModel/LocalizationData.cs +++ b/src/EStimLibrary/Core/SpatialModel/LocalizationData.cs @@ -1,5 +1,6 @@ namespace EStimLibrary.Core.SpatialModel; + /// /// A record to represent event localization results. /// @@ -10,9 +11,12 @@ public record LocalizationData(IEnumerable AreasFullyContaining, IEnumerable AreasPartiallyContaining) { - // Modify the properties using ToList() to create shallow copies during initialization - public IEnumerable AreasFullyContaining { get; init; } = AreasFullyContaining.ToList(); - public IEnumerable AreasPartiallyContaining { get; init; } = AreasPartiallyContaining.ToList(); + // Modify the properties using ToList() to create shallow copies during init + public IEnumerable AreasFullyContaining { get; init; } = + AreasFullyContaining.ToList(); + public IEnumerable AreasPartiallyContaining { get; init; } = + AreasPartiallyContaining.ToList(); + /// /// Merge this LocalizationData object with another by taking the set union /// per property. Neither initial object should be modified, and the product diff --git a/tests/EStimLibrary.UnitTests/Core/SpatialModel/LocalizationTests.cs b/tests/EStimLibrary.UnitTests/Core/SpatialModel/LocalizationTests.cs index a1efee4..bf5b3ad 100644 --- a/tests/EStimLibrary.UnitTests/Core/SpatialModel/LocalizationTests.cs +++ b/tests/EStimLibrary.UnitTests/Core/SpatialModel/LocalizationTests.cs @@ -3,9 +3,10 @@ namespace EStimLibrary.UnitTests.Core.SpatialModel; - /// - /// Test class for the LocalizationData record. - /// + +/// +/// Test class for the LocalizationData record. +/// public class LocalizationDataTests { /// @@ -20,17 +21,21 @@ public void Constructor_ShouldEnsureImmutablity() var areasPartiallyContaining = new List { 4, 5 }; // Act - var localizationData = new LocalizationData(areasFullyContaining, areasPartiallyContaining); + var localizationData = new LocalizationData(areasFullyContaining, + areasPartiallyContaining); // Assert - Ensure properties are initialized correctly - Assert.Equal(areasFullyContaining, localizationData.AreasFullyContaining); - Assert.Equal(areasPartiallyContaining, localizationData.AreasPartiallyContaining); + Assert.Equal(areasFullyContaining, + localizationData.AreasFullyContaining); + Assert.Equal(areasPartiallyContaining, + localizationData.AreasPartiallyContaining); // Act - Modify the original lists (which should not affect the record) areasFullyContaining.Add(6); areasPartiallyContaining.Add(7); - // Assert - Check immutability: localizationData should not reflect changes in the original lists + // Assert - Check immutability: localizationData should not reflect + // changes in the original lists Assert.DoesNotContain(6, localizationData.AreasFullyContaining); Assert.DoesNotContain(7, localizationData.AreasPartiallyContaining); } @@ -58,76 +63,92 @@ public void Merge_ShouldCombineAreasAndHandleEmptySetsCorrectly() // Assert - Check merged areas var expectedFullyContaining = new List { 1, 2, 3, 4, 5 }; var expectedPartiallyContaining = new List { 4, 5, 6, 7 }; - Assert.Equal(expectedFullyContaining.OrderBy(x => x), mergedData.AreasFullyContaining.OrderBy(x => x)); - Assert.Equal(expectedPartiallyContaining.OrderBy(x => x), mergedData.AreasPartiallyContaining.OrderBy(x => x)); + Assert.Equal(expectedFullyContaining.OrderBy(x => x), + mergedData.AreasFullyContaining.OrderBy(x => x)); + Assert.Equal(expectedPartiallyContaining.OrderBy(x => x), + mergedData.AreasPartiallyContaining.OrderBy(x => x)); // Act - Merge with empty data var mergedWithEmpty = data1.Merge(emptyData); var emptyWithPopulated = emptyData.Merge(data2); - // Assert - Check that merging with empty sets doesn't alter the populated data - Assert.Equal(new List { 1, 2, 3 }, mergedWithEmpty.AreasFullyContaining); - Assert.Equal(new List { 4, 5 }, mergedWithEmpty.AreasPartiallyContaining); - - Assert.Equal(new List { 3, 4, 5 }, emptyWithPopulated.AreasFullyContaining); - Assert.Equal(new List { 6, 7 }, emptyWithPopulated.AreasPartiallyContaining); + // Assert - Check that merging with empty sets doesn't alter the + // populated data + Assert.Equal(new List { 1, 2, 3 }, + mergedWithEmpty.AreasFullyContaining); + Assert.Equal(new List { 4, 5 }, + mergedWithEmpty.AreasPartiallyContaining); + + Assert.Equal(new List { 3, 4, 5 }, + emptyWithPopulated.AreasFullyContaining); + Assert.Equal(new List { 6, 7 }, + emptyWithPopulated.AreasPartiallyContaining); } /// - /// Test that the Merge method does not modify the original LocalizationData objects. + /// Test that the Merge method does not modify the original LocalizationData + /// objects. /// + /// TODO + /// TODO [Theory] [MemberData(nameof(MergeTestData))] public void Merge_ShouldNotModifyOriginalObjects( - List data1FullyContaining, - List data1PartiallyContaining, - List data2FullyContaining, - List data2PartiallyContaining) + List data1FullyContaining, + List data1PartiallyContaining, + List data2FullyContaining, + List data2PartiallyContaining) { - // Arrange - var data1 = new LocalizationData(data1FullyContaining, data1PartiallyContaining); - var data2 = new LocalizationData(data2FullyContaining, data2PartiallyContaining); - - // Act - var mergedData = data1.Merge(data2); - - // Assert - Assert.Equal(data1FullyContaining, data1.AreasFullyContaining); - Assert.Equal(data1PartiallyContaining, data1.AreasPartiallyContaining); - Assert.Equal(data2FullyContaining, data2.AreasFullyContaining); - Assert.Equal(data2PartiallyContaining, data2.AreasPartiallyContaining); + // Arrange - create LocalizationData objects + var data1 = new LocalizationData(data1FullyContaining, + data1PartiallyContaining); + var data2 = new LocalizationData(data2FullyContaining, + data2PartiallyContaining); + + // Act - merge + var mergedData = data1.Merge(data2); + + // Assert - merge had no effect on original data + Assert.Equal(data1FullyContaining, data1.AreasFullyContaining); + Assert.Equal(data1PartiallyContaining, data1.AreasPartiallyContaining); + Assert.Equal(data2FullyContaining, data2.AreasFullyContaining); + Assert.Equal(data2PartiallyContaining, data2.AreasPartiallyContaining); } - public static IEnumerable MergeTestData => - new List + /// + /// Test data for Merge_ShouldNotModifyOriginalObjects, of the form: + /// - data1FullyContaining (List) + /// - data1PartiallyContaining (List) + /// - data2FullyContaining (List) + /// - data2PartiallyContaining (List) + /// + public static IEnumerable MergeTestData => new List { // Test many new object[] { new List { 1, 2, 3 }, // data1 fully containing - new List { 4, 5 }, // data1 partially containing + new List { 4, 5 }, // data1 partially containing new List { 3, 4, 5 }, // data2 fully containing - new List { 6, 7 } // data2 partially containing + new List { 6, 7 } // data2 partially containing }, - //test 0 + // Test 0 new object[] { - new List { }, - new List { -1, 1 }, - new List { }, + new List { }, + new List { -1, 1 }, + new List { }, new List { 1, -1 } }, - //test 1 + // Test 1 new object[] { - new List { 0, 0 }, - new List { Int32.MinValue }, - new List { 0, -1 }, + new List { 0, 0 }, + new List { Int32.MinValue }, + new List { 0, -1 }, new List { Int32.MaxValue } } }; - -} - +} \ No newline at end of file