public void EqualsIgnoreOrderTest() { List <int> list1 = new List <int>(); List <int> list2 = new List <int>(); Assert.IsFalse(list1.EqualsIgnoreOrder(null)); Assert.IsFalse(IEnumerableExtensions.EqualsIgnoreOrder(null, list2)); Assert.IsTrue(IEnumerableExtensions.EqualsIgnoreOrder <int>(null, null)); // Empty should be true. Assert.IsTrue(list1.EqualsIgnoreOrder(list2)); Assert.IsTrue(list2.EqualsIgnoreOrder(list1)); // Adding one to each should be equal list1.Add(1); list2.Add(1); Assert.IsTrue(list1.EqualsIgnoreOrder(list2)); Assert.IsTrue(list2.EqualsIgnoreOrder(list1)); // Add 2 to both, but different orders. list1.Add(2); list2.Insert(0, 2); Assert.IsTrue(list1.EqualsIgnoreOrder(list2)); Assert.IsTrue(list2.EqualsIgnoreOrder(list1)); // Add a third. list1.Add(3); list2.Add(3); Assert.IsTrue(list1.EqualsIgnoreOrder(list2)); Assert.IsTrue(list2.EqualsIgnoreOrder(list1)); // Now, add a duplicate, should still be true. list1.Add(3); list2.Insert(0, 3); Assert.IsTrue(list1.EqualsIgnoreOrder(list2)); Assert.IsTrue(list2.EqualsIgnoreOrder(list1)); // Add a duplicate to one list, but not the other, should start failing. list1.Add(1); Assert.IsFalse(list1.EqualsIgnoreOrder(list2)); Assert.IsFalse(list2.EqualsIgnoreOrder(list1)); // Add another value, but one that is different. Should still fail. list2.Add(2); Assert.IsFalse(list1.EqualsIgnoreOrder(list2)); Assert.IsFalse(list2.EqualsIgnoreOrder(list1)); }