public void ComparerThrowsIfSecondaryComparerIsNull()
        {
            IComparer <ChainedComparerTestItem> primary   = new KeySelectorComparer <ChainedComparerTestItem, int>(i => i.A);
            IComparer <ChainedComparerTestItem> secondary = null;

            Assert.Throws <ArgumentNullException>(() => new ChainedComparer <ChainedComparerTestItem>(primary, secondary));
        }
        public void ComparerInitialises()
        {
            IComparer <ChainedComparerTestItem> primary   = new KeySelectorComparer <ChainedComparerTestItem, int>(i => i.A);
            IComparer <ChainedComparerTestItem> secondary = new KeySelectorComparer <ChainedComparerTestItem, int>(i => i.B);

            var comparer = new ChainedComparer <ChainedComparerTestItem>(primary, secondary);

            Assert.IsNotNull(comparer);
        }
        public void KeySelectorComparerReturnsZeroWhenFirstItemIsNullAndSecondItemIsNull()
        {
            var comparer = new KeySelectorComparer <KeySelectorTestItem, int>(i => i.Id);

            KeySelectorTestItem first  = null;
            KeySelectorTestItem second = null;

            var result = comparer.Compare(first, second);

            Assert.AreEqual(0, result);
        }
        public void KeySelectorComparerRetunsNegativeOneWhenFirstItemIsNullAndSecondItemIsNot()
        {
            var comparer = new KeySelectorComparer <KeySelectorTestItem, int>(i => i.Id);

            KeySelectorTestItem first  = null;
            KeySelectorTestItem second = new KeySelectorTestItem {
                Id = 1
            };

            var result = comparer.Compare(first, second);

            Assert.AreEqual(-1, result);
        }
        public void KeySelectorComparerReturnsZeroWhenFirstKeyIsEqualToSecondKey()
        {
            var comparer = new KeySelectorComparer <KeySelectorTestItem, int>(i => i.Id);

            var first = new KeySelectorTestItem {
                Id = 1
            };
            var second = new KeySelectorTestItem {
                Id = 1
            };

            var result = comparer.Compare(first, second);

            Assert.AreEqual(0, result);
        }
        public void KeySelectorComparerReturnsNegativeOneWhenFirstKeyIsLessThanSecondKey()
        {
            var comparer = new KeySelectorComparer <KeySelectorTestItem, int>(i => i.Id);

            var first = new KeySelectorTestItem {
                Id = 1
            };
            var second = new KeySelectorTestItem {
                Id = 2
            };

            var result = comparer.Compare(first, second);

            Assert.AreEqual(-1, result);
        }
        public void ComparerReturnsPositiveOneWhenFirstItemIsGreaterThanSecondItemOnSecondaryComparer()
        {
            IComparer <ChainedComparerTestItem> primary   = new KeySelectorComparer <ChainedComparerTestItem, int>(i => i.A);
            IComparer <ChainedComparerTestItem> secondary = new KeySelectorComparer <ChainedComparerTestItem, int>(i => i.B);

            var comparer = new ChainedComparer <ChainedComparerTestItem>(primary, secondary);

            var first = new ChainedComparerTestItem {
                A = 1, B = 2
            };
            var second = new ChainedComparerTestItem {
                A = 1, B = 1
            };

            int result = comparer.Compare(first, second);

            Assert.AreEqual(1, result);
        }
        public void ComparerReturnsZeroWhenFirstItemIsEqualToSecondItemOnBothPrimaryAndSecondaryComparers()
        {
            IComparer <ChainedComparerTestItem> primary   = new KeySelectorComparer <ChainedComparerTestItem, int>(i => i.A);
            IComparer <ChainedComparerTestItem> secondary = new KeySelectorComparer <ChainedComparerTestItem, int>(i => i.B);

            var comparer = new ChainedComparer <ChainedComparerTestItem>(primary, secondary);

            var first = new ChainedComparerTestItem {
                A = 1, B = 1
            };
            var second = new ChainedComparerTestItem {
                A = 1, B = 1
            };

            int result = comparer.Compare(first, second);

            Assert.AreEqual(0, result);
        }
        public void KeySelectorComparerInitialises()
        {
            var comparer = new KeySelectorComparer <KeySelectorTestItem, int>(i => i.Id);

            Assert.IsNotNull(comparer);
        }