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);
        }
示例#3
0
        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);
        }
示例#4
0
        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');
        }
示例#5
0
        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)
            );
        }