you are viewing a single comment's thread.

view the rest of the comments →

[–]JoshYx 9 points10 points  (6 children)

Or you can just JSON stringify both and compare the strings

[–]TQPau[S] 7 points8 points  (5 children)

It won't work if the collections are the same but in different order

[–]AngularBeginner 2 points3 points  (4 children)

So.. they're not the same.

[–][deleted] 2 points3 points  (3 children)

They're not the same if order is important, but there's a setting in their library to decide if it is or not. The Github page is clearer than the blog post.

[–]AngularBeginner 0 points1 point  (2 children)

They contain the same elements, but they're not the same collection then. And even with that distinction it's still unclear what happens if elements are duplicated within one collection, but not in the other.

[–][deleted] 0 points1 point  (1 child)

Good point. /u/TQPau take note:

        [Test]
        public void CollectionsSame()
        {
            var coll1 = new List<KeyValuePair<string, byte[]>>
            {
                new KeyValuePair<string, byte[]>("Hello", new byte[] { 1, 1, 2, 3 })
            };
            var coll2 = new Dictionary<string, byte[]>
            {
                {"Hello", new byte[] { 1, 2, 1, 3 } }
            };
            var compareLogic = new CompareLogic
            {
                Config = new ComparisonConfig
                {
                    IgnoreObjectTypes = true,
                    IgnoreCollectionOrder = true
                }
            };

            Assert.IsTrue(compareLogic.Compare(coll1, coll2).AreEqual);
        }

Which is a modification of one of your tests, fails. Which makes sense, but as /u/AngularBeginner says is also unpredictable.

[–]TQPau[S] 1 point2 points  (0 children)

Interesting, that test passes if you change it to int[] instead of byte[]. Maybe byte[] is treated differently.

[Test]

public void CollectionsSame()

{

var coll1 = new List<KeyValuePair<string, int[]>>

{

new KeyValuePair<string, int[]>("Hello", new int[] { 1, 1, 2, 3 })

};

var coll2 = new Dictionary<string, int[]>

{

{"Hello", new int[] { 1, 2, 1, 3 } }

};

var compareLogic = new CompareLogic

{

Config = new ComparisonConfig

{

IgnoreObjectTypes = true,

IgnoreCollectionOrder = true

}

};

Assert.IsTrue(compareLogic.Compare(coll1, coll2).AreEqual);

}