public void CanCompareCollections() { var ints = new[] { 1, 2, 3 }; var otherInts = new[] { 4, 5, 6 }; var longerInts = new[] { 1, 2, 3, 4 }; var strings = new[] { "hello", "bonjour", "guten tag", "你好", "aloha" }; var otherStrings = new[] { "good bye", "au revoir", "auf wiedersehen", "再見", "aloha" }; var intComparer = new ModelComparer <int[]>(); var stringComparer = new ModelComparer <string[]>(); // We have to use Assert.True/False instead of .Equal/.NotEqual or we won't actually exercise the ModelComparer's collection handling. // Also, we use deep copies for some comparisons to make sure the ModelComparer isn't falling back on reference equality. Assert.True(intComparer.Equals(ints, ints)); Assert.True(stringComparer.Equals(strings, strings)); Assert.True(intComparer.Equals(ints, (int[])ints.Clone())); Assert.True(stringComparer.Equals((string[])strings.Clone(), strings)); Assert.False(intComparer.Equals(ints, otherInts)); Assert.False(stringComparer.Equals(otherStrings, strings)); Assert.False(intComparer.Equals(ints, new[] { 7 })); Assert.False(stringComparer.Equals(new[] { "who?" }, strings)); // Test collections of varying lengths. Assert.False(intComparer.Equals(ints, longerInts)); Assert.False(intComparer.Equals(longerInts, ints)); }
public void NullEqualsEmptyCollection() { IEnumerable <int> nullCollection = null; var emptyArray = new int[0]; var emptyList = new List <int>(); var comparer = new ModelComparer <IEnumerable <int> >(); Assert.True(comparer.Equals(nullCollection, emptyArray)); Assert.True(comparer.Equals(emptyArray, nullCollection)); Assert.True(comparer.Equals(nullCollection, emptyList)); Assert.True(comparer.Equals(emptyList, nullCollection)); }
public void CanCompareDictionaries() { var x = new Dictionary <string, double>() { { "pi", 3.14 }, { "e", 2.718 } }; var notX = new Dictionary <string, double>() { { "m", 13.3 }, { "v", 77 } }; var y = new Dictionary <string, object>() { { "a", "test" }, { "b", "test2" } }; var notY = new Dictionary <string, object>() { { "w", "other" }, { "u", "side" } }; var doubleComparer = new ModelComparer <Dictionary <string, double> >(); var stringComparer = new ModelComparer <Dictionary <string, object> >(); // We have to use Assert.True/False instead of .Equal/.NotEqual or we won't actually exercise the ModelComparer's collection handling. // Also, we use deep copies for some comparisons to make sure the ModelComparer isn't falling back on reference equality. Assert.True(doubleComparer.Equals(x, x)); Assert.True(stringComparer.Equals(y, y)); Assert.True(doubleComparer.Equals(x, new Dictionary <string, double>(x))); Assert.True(stringComparer.Equals(new Dictionary <string, object>(y), y)); Assert.False(doubleComparer.Equals(x, notX)); Assert.False(stringComparer.Equals(notY, y)); Assert.False(doubleComparer.Equals(x, new Dictionary <string, double>() { { "r", 12.0 } })); Assert.False(stringComparer.Equals(new Dictionary <string, object>() { { "c", "other" } }, y)); }
public void CanCompareDifferentEnumerableTypes() { var intArray = new[] { 1, 2, 3 }; var intList = new List <int>() { 1, 2, 3 }; var intComparer = new ModelComparer <IEnumerable <int> >(); // We have to use Assert.True/False instead of .Equal/.NotEqual or we won't actually exercise the ModelComparer's collection handling. Assert.True(intComparer.Equals(intArray, intList)); }
public void IEquatableTakesPrecedenceOverIEnumerable() { var ints = new BiasedList(1, 2, 3); var odds = new BiasedList(1, 3, 5); var evens = new BiasedList(2, 4, 6); var comparer = new ModelComparer <BiasedList>(); Assert.True(comparer.Equals(ints, ints)); Assert.True(comparer.Equals(ints, new BiasedList(ints))); // ints and odds should compare as equal because BiasedList only looks at the first element. Assert.True(comparer.Equals(odds, ints)); Assert.True(comparer.Equals(new BiasedList(odds), ints)); Assert.False(comparer.Equals(ints, evens)); Assert.False(comparer.Equals(ints, new BiasedList(evens))); }