diff --git a/Value.Net45/Value.Net45.csproj b/Value.Net45/Value.Net45.csproj index 8327ac3..230b008 100644 --- a/Value.Net45/Value.Net45.csproj +++ b/Value.Net45/Value.Net45.csproj @@ -10,7 +10,7 @@ Value Value v4.5 - 512 + 512 false @@ -58,4 +58,4 @@ --> - \ No newline at end of file + diff --git a/Value.Tests/EqualByValuesTest.cs b/Value.Tests/EqualByValuesTest.cs new file mode 100644 index 0000000..58a8992 --- /dev/null +++ b/Value.Tests/EqualByValuesTest.cs @@ -0,0 +1,30 @@ +using NUnit.Framework; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Value.Shared; + +namespace Value.Tests +{ + [TestFixture] + public class EqualByValuesTest + { + [Test] + public void Should_be_equal_by_values() + { + var coll1 = new string[] { "Hello", "Apple", "C#" }; + var coll2 = new string[] { "C#", "Hello", "Apple" }; + Assert.IsTrue(new EqualByValues(coll1, coll2)); + } + + [Test] + public void Should_not_be_equal_by_values() + { + var coll1 = new string[] { "Hello", "Apple", "C#", "Java" }; + var coll2 = new string[] { "C#", "Hello", "Apple" }; + Assert.IsTrue(new EqualByValues(coll1, coll2)); + } + } +} diff --git a/Value.Tests/Value.Tests.csproj b/Value.Tests/Value.Tests.csproj index e61d9f5..689cf08 100644 --- a/Value.Tests/Value.Tests.csproj +++ b/Value.Tests/Value.Tests.csproj @@ -47,6 +47,7 @@ + @@ -66,10 +67,10 @@ - + - + - \ No newline at end of file + diff --git a/Value.Tests/packages.config b/Value.Tests/packages.config index 9a62a57..3efdbfa 100644 --- a/Value.Tests/packages.config +++ b/Value.Tests/packages.config @@ -3,4 +3,4 @@ - \ No newline at end of file + diff --git a/Value/EqualByValues.cs b/Value/EqualByValues.cs new file mode 100644 index 0000000..296a63f --- /dev/null +++ b/Value/EqualByValues.cs @@ -0,0 +1,41 @@ + +namespace Value.Shared +{ + using System.Collections.Generic; + + /// + /// Determines two collections are equal by values, i.e. ignoring the order of an elements, + /// but the exact elements contained. + /// + public class EqualByValues + { + private IEnumerable _first; + private IEnumerable _second; + + public EqualByValues(IEnumerable first, IEnumerable second) + { + _first = first; + _second = second; + } + + public bool Value() + { + bool ret = true; + HashSet set = new HashSet(_first); + foreach (var item in _second) + { + if (!set.Contains(item)) + { + ret = false; + break; + } + } + return ret; + } + + public static implicit operator bool(EqualByValues equalByValues) + { + return equalByValues.Value(); + } + } +} diff --git a/Value/Value.Shared.projitems b/Value/Value.Shared.projitems index 156c711..f9e2b60 100644 --- a/Value/Value.Shared.projitems +++ b/Value/Value.Shared.projitems @@ -13,6 +13,7 @@ +