public void TestDiffSorted() { var random = new Random(42); var left = Enumerable.Range(1, 10000).Select(_ => random.Next(1000)).OrderBy(v => v).ToList(); var right = Enumerable.Range(1, 10000).Select(_ => random.Next(1000)).OrderBy(v => v).ToList(); var leftSet = left.ToHashSet(); var rightSet = right.ToHashSet(); var diff = NuCacheCollectionUtilities.DistinctDiffSorted(left, right, item => item); foreach (var diffValue in diff) { switch (diffValue.mode) { case MergeMode.LeftOnly: leftSet.Should().Contain(diffValue.item); leftSet.Remove(diffValue.item); rightSet.Should().NotContain(diffValue.item); break; case MergeMode.RightOnly: leftSet.Contains(diffValue.item).Should().BeFalse(); rightSet.Contains(diffValue.item).Should().BeTrue(); rightSet.Remove(diffValue.item); break; case MergeMode.Both: Assert.True(false, "DistinctDiffSorted should never return an entry which existed in both sequences"); break; } } leftSet.Should().BeEquivalentTo(rightSet, "Diff operation should select out all elements which are different in sets"); }
public void TestDiffSortedSimple() { var left = new[] { 1, 1, 3 }; var right = new[] { 1, 2 };; var leftSet = left.ToHashSet(); var rightSet = right.ToHashSet(); var diff = NuCacheCollectionUtilities.DistinctDiffSorted(left, right, item => item); foreach (var diffValue in diff) { switch (diffValue.mode) { case MergeMode.LeftOnly: leftSet.Should().Contain(diffValue.item); leftSet.Remove(diffValue.item); rightSet.Should().NotContain(diffValue.item); break; case MergeMode.RightOnly: leftSet.Contains(diffValue.item).Should().BeFalse(); rightSet.Contains(diffValue.item).Should().BeTrue(); rightSet.Remove(diffValue.item); break; case MergeMode.Both: Assert.True(false, "DistinctDiffSorted should never return an entry which existed in both sequences"); break; } } leftSet.Should().BeEquivalentTo(rightSet, "Diff operation should select out all elements which are different in sets"); }
public void TestMergeOrdered() { var arr1 = new int[] { 1, 3, 4, 6, 7, 8 }; var arr2 = new int[] { 2, 5, 9, 10, 11 }; var merged = NuCacheCollectionUtilities.MergeOrdered(arr1, arr2, Comparer <int> .Default).ToList(); var i = 1; merged.Count.Should().Be(11); foreach (var element in merged) { element.Should().Be(i++); } }
public void FailureCase() { var dbContent = ParseHashes("VSO0:FB44D8C99280FFFCD6EC, VSO0:FB6011BC323115781A81, VSO0:FCCB064D560546A696B8, VSO0:FD55A681BBD094EE89E5, VSO0:FD6B504B5C87D0897CF3, VSO0:FF01B6D6974216D95256, VSO0:FF63CAE2F503EFE65EE4, VSO0:FFACE149FE72F0E13C43, VSO0:FFBF66FD3A982FE6FDA1"); var localContent = ParseHashes("VSO0:FE963E1333065A834D00"); var diff = NuCacheCollectionUtilities.DistinctDiffSorted(localContent, dbContent, item => item); var left = localContent; var right = dbContent; var leftSet = left.ToHashSet(); var rightSet = right.ToHashSet(); foreach (var diffValue in diff) { switch (diffValue.mode) { case MergeMode.LeftOnly: leftSet.Should().Contain(diffValue.item); leftSet.Remove(diffValue.item); rightSet.Should().NotContain(diffValue.item); break; case MergeMode.RightOnly: leftSet.Contains(diffValue.item).Should().BeFalse(); rightSet.Contains(diffValue.item).Should().BeTrue(); rightSet.Remove(diffValue.item); break; case MergeMode.Both: Assert.True(false, "DistinctDiffSorted should never return an entry which existed in both sequences"); break; } } leftSet.Should().BeEquivalentTo(rightSet, "Diff operation should select out all elements which are different in sets"); }