From 42acdd9bfc88981714d7c678c32f881d39702512 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 21 Nov 2025 22:20:27 +0000 Subject: [PATCH 1/3] Initial plan From 5c020f5ee6c53a115c054e535648bc4798f8a108 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 21 Nov 2025 22:27:31 +0000 Subject: [PATCH 2/3] Improve count diff error messages for collections and dictionaries Co-authored-by: TonyTroeff <33567383+TonyTroeff@users.noreply.github.com> --- .../CollectionEqualizationProfileTests.cs | 30 +++++++++++++++++++ .../DictionaryEqualizationProfileTests.cs | 30 +++++++++++++++++++ .../Profiles/CollectionEqualizationProfile.cs | 9 +++++- .../Profiles/DictionaryEqualizationProfile.cs | 5 +++- 4 files changed, 72 insertions(+), 2 deletions(-) diff --git a/TryAtSoftware.Equalizer.Core.Tests/CollectionEqualizationProfileTests.cs b/TryAtSoftware.Equalizer.Core.Tests/CollectionEqualizationProfileTests.cs index 67304fe..9e10e31 100644 --- a/TryAtSoftware.Equalizer.Core.Tests/CollectionEqualizationProfileTests.cs +++ b/TryAtSoftware.Equalizer.Core.Tests/CollectionEqualizationProfileTests.cs @@ -41,6 +41,36 @@ public void CollectionsWithDifferentLengthShouldBeEqualizedUnsuccessfully(int fi Assert.False(equalizationResult.IsSuccessful); } + [Fact] + public void CollectionsWithFewerExpectedElementsShouldShowCorrectMessage() + { + var profile = InstantiateProfile(); + var equalizationOptions = TestsCompanion.MockEqualizationOptions(); + + var expected = new[] { 1, 2 }; + var actual = new[] { 1, 2, 3 }; + var equalizationResult = profile.Equalize(expected, actual, equalizationOptions); + + Assert.False(equalizationResult.IsSuccessful); + Assert.Contains("Expected count: 2", equalizationResult.Message); + Assert.Contains("Actual count: > 2", equalizationResult.Message); + } + + [Fact] + public void CollectionsWithMoreExpectedElementsShouldShowCorrectMessage() + { + var profile = InstantiateProfile(); + var equalizationOptions = TestsCompanion.MockEqualizationOptions(); + + var expected = new[] { 1, 2, 3 }; + var actual = new[] { 1, 2 }; + var equalizationResult = profile.Equalize(expected, actual, equalizationOptions); + + Assert.False(equalizationResult.IsSuccessful); + Assert.Contains("Expected count: > 2", equalizationResult.Message); + Assert.Contains("Actual count: 2", equalizationResult.Message); + } + [Fact] public void CollectionsShouldBeEqualizedSuccessfully() { diff --git a/TryAtSoftware.Equalizer.Core.Tests/DictionaryEqualizationProfileTests.cs b/TryAtSoftware.Equalizer.Core.Tests/DictionaryEqualizationProfileTests.cs index 1895481..4658143 100644 --- a/TryAtSoftware.Equalizer.Core.Tests/DictionaryEqualizationProfileTests.cs +++ b/TryAtSoftware.Equalizer.Core.Tests/DictionaryEqualizationProfileTests.cs @@ -94,6 +94,36 @@ public void DictionariesWithDifferentKeysShouldBeEqualizedUnsuccessfully() equalizer.AssertInequality(firstDictionary, secondDictionary); } + [Fact] + public void DictionariesWithFewerExpectedElementsShouldShowCorrectMessage() + { + var profile = InstantiateProfile(); + var equalizationOptions = TestsCompanion.MockEqualizationOptions(); + + var expected = new Dictionary { { 1, 1 }, { 2, 2 } }; + var actual = new Dictionary { { 1, 1 }, { 2, 2 }, { 3, 3 } }; + var equalizationResult = profile.Equalize(expected, actual, equalizationOptions); + + Assert.False(equalizationResult.IsSuccessful); + Assert.Contains("Expected count: 2", equalizationResult.Message); + Assert.Contains("Actual count: > 2", equalizationResult.Message); + } + + [Fact] + public void DictionariesWithMoreExpectedElementsShouldShowCorrectMessage() + { + var profile = InstantiateProfile(); + var equalizationOptions = TestsCompanion.MockEqualizationOptions(); + + var expected = new Dictionary { { 1, 1 }, { 2, 2 }, { 3, 3 } }; + var actual = new Dictionary { { 1, 1 }, { 2, 2 } }; + var equalizationResult = profile.Equalize(expected, actual, equalizationOptions); + + Assert.False(equalizationResult.IsSuccessful); + Assert.Contains("Expected count: > 2", equalizationResult.Message); + Assert.Contains("Actual count: 2", equalizationResult.Message); + } + private static IEqualizer InstantiateEqualizer() => new Equalizer(); private static DictionaryEqualizationProfile InstantiateProfile() => new (); diff --git a/TryAtSoftware.Equalizer.Core/Profiles/CollectionEqualizationProfile.cs b/TryAtSoftware.Equalizer.Core/Profiles/CollectionEqualizationProfile.cs index fa6aa65..b9d9714 100644 --- a/TryAtSoftware.Equalizer.Core/Profiles/CollectionEqualizationProfile.cs +++ b/TryAtSoftware.Equalizer.Core/Profiles/CollectionEqualizationProfile.cs @@ -25,7 +25,14 @@ protected override IEqualizationResult Equalize(IEnumerable expected, IEnumerabl var hasMoreActual = actualEnumerator.MoveNext(); if (!hasMoreExpected && !hasMoreActual) canContinue = false; - else if (hasMoreExpected != hasMoreActual) return new UnsuccessfulEqualizationResult(this.UnsuccessfulEqualization(expected, actual, "Counts do not match")); + else if (hasMoreExpected != hasMoreActual) + { + var currentCount = iteratedValues.Count; + var countMessage = hasMoreExpected + ? $"Expected count: > {currentCount}; Actual count: {currentCount}" + : $"Expected count: {currentCount}; Actual count: > {currentCount}"; + return new UnsuccessfulEqualizationResult(this.UnsuccessfulEqualization(expected, actual, countMessage)); + } else iteratedValues.Add((expectedEnumerator.Current, actualEnumerator.Current)); } diff --git a/TryAtSoftware.Equalizer.Core/Profiles/DictionaryEqualizationProfile.cs b/TryAtSoftware.Equalizer.Core/Profiles/DictionaryEqualizationProfile.cs index f670ae6..e2e907e 100644 --- a/TryAtSoftware.Equalizer.Core/Profiles/DictionaryEqualizationProfile.cs +++ b/TryAtSoftware.Equalizer.Core/Profiles/DictionaryEqualizationProfile.cs @@ -15,7 +15,10 @@ protected override IEqualizationResult Equalize(IDictionary expected, IDictionar var countEqualizationResult = options.Equalize(expected.Count, actual.Count); if (!countEqualizationResult.IsSuccessful) { - var errorMessage = this.UnsuccessfulEqualization(expected, actual, "Counts do not match."); + var countMessage = expected.Count < actual.Count + ? $"Expected count: {expected.Count}; Actual count: > {expected.Count}" + : $"Expected count: > {actual.Count}; Actual count: {actual.Count}"; + var errorMessage = this.UnsuccessfulEqualization(expected, actual, countMessage); return new UnsuccessfulEqualizationResult(errorMessage.WithInner(countEqualizationResult)); } From 79f261265f9203929ecd830f0dbf52ce14acf5d2 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 21 Nov 2025 22:29:32 +0000 Subject: [PATCH 3/3] Fix dictionary tests to properly mock count comparisons Co-authored-by: TonyTroeff <33567383+TonyTroeff@users.noreply.github.com> --- .../DictionaryEqualizationProfileTests.cs | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/TryAtSoftware.Equalizer.Core.Tests/DictionaryEqualizationProfileTests.cs b/TryAtSoftware.Equalizer.Core.Tests/DictionaryEqualizationProfileTests.cs index 4658143..ecfacda 100644 --- a/TryAtSoftware.Equalizer.Core.Tests/DictionaryEqualizationProfileTests.cs +++ b/TryAtSoftware.Equalizer.Core.Tests/DictionaryEqualizationProfileTests.cs @@ -98,7 +98,13 @@ public void DictionariesWithDifferentKeysShouldBeEqualizedUnsuccessfully() public void DictionariesWithFewerExpectedElementsShouldShowCorrectMessage() { var profile = InstantiateProfile(); - var equalizationOptions = TestsCompanion.MockEqualizationOptions(); + var equalizationOptions = TestsCompanion.MockEqualizationOptions((a, b) => + { + // Make count comparisons fail when counts are different + if (a is int && b is int && (int)a != (int)b) + return new UnsuccessfulEqualizationResult("Counts differ"); + return new SuccessfulEqualizationResult(); + }); var expected = new Dictionary { { 1, 1 }, { 2, 2 } }; var actual = new Dictionary { { 1, 1 }, { 2, 2 }, { 3, 3 } }; @@ -113,7 +119,13 @@ public void DictionariesWithFewerExpectedElementsShouldShowCorrectMessage() public void DictionariesWithMoreExpectedElementsShouldShowCorrectMessage() { var profile = InstantiateProfile(); - var equalizationOptions = TestsCompanion.MockEqualizationOptions(); + var equalizationOptions = TestsCompanion.MockEqualizationOptions((a, b) => + { + // Make count comparisons fail when counts are different + if (a is int && b is int && (int)a != (int)b) + return new UnsuccessfulEqualizationResult("Counts differ"); + return new SuccessfulEqualizationResult(); + }); var expected = new Dictionary { { 1, 1 }, { 2, 2 }, { 3, 3 } }; var actual = new Dictionary { { 1, 1 }, { 2, 2 } };