public void UniversalComparer_Function() { UniversalComparer <int> comparer = new UniversalComparer <int> ( (left, right) => left - right ); Func <int, int, int> func = comparer.Function; Assert.IsTrue ( 0 == func(1, 1) ); Assert.IsTrue ( 0 < func(2, 1) ); Assert.IsTrue ( 0 > func(1, 2) ); }
public IEqualityComparer <T> CreateCompleteComparer <T>() { object comparer; if (!_completeComparerCache.TryGetValue(typeof(T), out comparer)) { var properties = _propertyProvider.GetProperties <T>(); var equality = CreateEqualityFunction <T>(properties); var hashCode = CreateHashCodeFunction <T>(properties); _completeComparerCache[typeof(T)] = comparer = new UniversalComparer <T>(equality, hashCode); } return((IEqualityComparer <T>)comparer); }
public void TestNullable() { Person person1 = new Person(new Person(null, 'a', 2), null, 1); Person person2 = new Person(new Person(null, 'b', 2), 'a', 2); Person person3 = new Person(new Person(null, 'c', 2), 'b', 3); Person person4 = new Person(new Person(null, 'd', 2), 'c', 4); UniversalComparer uc = new UniversalComparer("id1 asc", true); Person[] persons = { person1, person2, person3, person4 }; Array.Sort(persons, uc); Assert.AreEqual(persons[0].id1, null); }
public void TestAscDesc() { Person person1 = new Person('a', 4); Person person2 = new Person('b', 3); Person person3 = new Person('c', 2); Person person4 = new Person('d', 1); Person person5 = new Person('e', 11); UniversalComparer uc = new UniversalComparer("id1 desc, id2", true); Person[] persons = { person1, person2, person3, person4, person5 }; Array.Sort(persons, uc); Assert.AreEqual(persons[0].id1, 'e'); Assert.AreEqual(persons.Last().id1, 'a'); }
public void TestInnerProperty() { Person person1 = new Person(new Person(null, 'a', 2), null, 1); Person person2 = new Person(new Person(null, 'b', 2), 'a', 2); Person person3 = new Person(new Person(null, 'c', 2), 'b', 3); Person person4 = new Person(new Person(null, 'd', 2), 'c', 4); UniversalComparer uc = new UniversalComparer("born.Millisecond"); Person[] persons = { person1, person2, person3, person4 }; Array.Sort(persons, uc); int smallest = person1.born.Millisecond; foreach (var person in persons) { if (person.born.Millisecond < smallest) { smallest = person.born.Millisecond; } } }
public void UniversalComparer_Compare() { UniversalComparer <int> comparer = new UniversalComparer <int> ( (left, right) => left - right ); Assert.IsTrue ( 0 == comparer.Compare(1, 1) ); Assert.IsTrue ( 0 < comparer.Compare(2, 1) ); Assert.IsTrue ( 0 > comparer.Compare(1, 2) ); }