Max Operator Unit Tests

Unit tests written by Troy Magennis. They run against the MAY 2006 CTP uning NUnit.


using System;
using System.Collections.Generic;
using System.Text;
using System.Query;
using NUnit.Framework;
 
namespace LINQUnitTests
{
 
    [TestFixture]
    public class MaxTests
    {
        #region <int> Max
 
        /* Extract from Sequence.cs May 2006 CTP
        public static int Max(this IEnumerable<int> source) {
            if (source == null) throw Error.ArgumentNull("source");
            int value = 0;
            bool hasValue = false;
            foreach (int x in source) {
                if (hasValue) {
                    if (x > value) value = x;
                }
                else {
                    value = x;
                    hasValue = true;
                }
            }
            if (hasValue) return value;
            throw Error.NoElements();
        }
        */
        [Test]
        public void MaxIntTest()
        {
            int[] values = new int[] { 5,4,3,2,1,-1,-2,-3,6,7,8,9,0 };
            int result = values.Max();
            Assert.AreEqual(9, result, "<int> Max not returning the correct result.");
        }
        
        [Test]
        [ExpectedException(typeof(ArgumentNullException))]
        public void MaxIntNullSourceTest()
        {
            int[] values = null;
            values.Max();
        } 
 
        [Test]
        [ExpectedException("System.InvalidOperationException")]
        public void MaxIntEmptySourceTest()
        {
            var values = Sequence.Empty<int>();
            var result = values.Max();
        } 
 
        /* Extract from Sequence.cs May 2006 CTP
        public static int Max<T>(this IEnumerable<T> source, Func<T, int> selector) {
            return Sequence.Max(Sequence.Select(source, selector));
        }
        */        
        [Test]
        public void MaxIntWithSelectorTest()
        {
            int[] values = new int[] { 5,4,3,2,1,-1,-2,-3,6,7,8,9,0 };
            int result = values.Max(i => i + 1);
            Assert.AreEqual(10, result, "<int> Max extension method with Selector not returning correct Max.");
        }
 
        #endregion <int> Max
 
        #region <int?> Max
 
        /* Extract from Sequence.cs May 2006 CTP
        public static int? Max(this IEnumerable<int?> source) {
            if (source == null) throw Error.ArgumentNull("source");
            int? value = null;
            foreach (int? x in source) {
                if (value == null || x > value) value = x;
            }
            return value;
        }
        */
        [Test]
        public void MaxNullableIntTest()
        {
            int?[] values = new int?[] { 5,null,4,null,3,2,1,-1,-2,-3,6,7,8,9,0,null };
            int? result = values.Max();
            Assert.AreEqual(9, result, "<int?> Max not returning the correct result.");
        }
        
        [Test]
        [ExpectedException(typeof(ArgumentNullException))]
        public void MaxNullableIntNullSourceTest()
        {
            int?[] values = null;
            values.Max();
        } 
 
        [Test]
        public void MaxNullableIntEmptySourceTest()
        {
            int?[] values = Sequence.Empty<int?>().ToArray<int?>();
            int? result = values.Max();
            Assert.IsNull(result, "<int?> Max return null as their result when no elements exist");
        } 
 
        [Test]
        public void MaxNullableIntOnlyNullSourceTest()
        {
            int?[] values = new int?[] {null,null,null};
            int? result = values.Max();
            Assert.IsNull(result, "<int?> Max return null as their result when only null elements exist");
        } 
 
        /* Extract from Sequence.cs May 2006 CTP
        public static int? Max<T>(this IEnumerable<T> source, Func<T, int?> selector) {
            return Sequence.Max(Sequence.Select(source, selector));
        }
        */        
        [Test]
        public void MaxNullableIntWithSelectorTest()
        {
            int?[] values = new int?[] { 5,null,4,null,3,2,1,-1,-2,-3,6,7,8,9,0,null };
            int? result = values.Max(i => i + 1);
            Assert.AreEqual(10, result, "<int?> Max extension method with Selector not returning correct Max.");
        }
 
        #endregion <int?> Max
       
        #region <long> Max
 
        /* Extract from Sequence.cs May 2006 CTP
        public static long Max(this IEnumerable<long> source) {
            if (source == null) throw Error.ArgumentNull("source");
            long value = 0;
            bool hasValue = false;
            foreach (long x in source) {
                if (hasValue) {
                    if (x > value) value = x;
                }
                else {
                    value = x;
                    hasValue = true;
                }
            }
            if (hasValue) return value;
            throw Error.NoElements();
        }
        */
        [Test]
        public void MaxLongTest()
        {
            long[] values = new long[] { 5,4,3,2,1,-1,-2,-3,6,7,8,9,0 };
            long result = values.Max();
            Assert.AreEqual(9, result, "<long> Max not returning the correct result.");
        }
        
        [Test]
        [ExpectedException(typeof(ArgumentNullException))]
        public void MaxLongNullSourceTest()
        {
            long[] values = null;
            values.Max();
        } 
 
        [Test]
        [ExpectedException("System.InvalidOperationException")]
        public void MaxLongEmptySourceTest()
        {
            var values = Sequence.Empty<long>();
            var result = values.Max();
        } 
 
        /* Extract from Sequence.cs May 2006 CTP
        public static long Max<T>(this IEnumerable<T> source, Func<T, long> selector) {
            return Sequence.Max(Sequence.Select(source, selector));
        }
        */        
        [Test]
        public void MaxLongWithSelectorTest()
        {
            long[] values = new long[] { 5,4,3,2,1,-1,-2,-3,6,7,8,9,0 };
            long result = values.Max(i => i + 1);
            Assert.AreEqual(10, result, "<long> Max extension method with Selector not returning correct Max.");
        }
 
        #endregion <long> Max
 
        #region <long?> Max
 
        /* Extract from Sequence.cs May 2006 CTP
        public static long? Max(this IEnumerable<long?> source) {
            if (source == null) throw Error.ArgumentNull("source");
            long? value = null;
            foreach (long? x in source) {
                if (value == null || x > value) value = x;
            }
            return value;
        }
        */
        [Test]
        public void MaxNullableLongTest()
        {
            long?[] values = new long?[] { 5,null,4,null,3,2,1,-1,-2,-3,6,7,8,9,0,null };
            long? result = values.Max();
            Assert.AreEqual(9, result, "<long?> Max not returning the correct result.");
        }
        
        [Test]
        [ExpectedException(typeof(ArgumentNullException))]
        public void MaxNullableLongNullSourceTest()
        {
            long?[] values = null;
            values.Max();
        } 
 
        [Test]
        public void MaxNullableLongEmptySourceTest()
        {
            long?[] values = Sequence.Empty<long?>().ToArray<long?>();
            long? result = values.Max();
            Assert.IsNull(result, "<long?> Max return null as their result when no elements exist");
        } 
 
        [Test]
        public void MaxNullableLongOnlyNullSourceTest()
        {
            long?[] values = new long?[] {null,null,null};
            long? result = values.Max();
            Assert.IsNull(result, "<long?> Max return null as their result when only null elements exist");
        } 
 
        /* Extract from Sequence.cs May 2006 CTP
        public static long? Max<T>(this IEnumerable<T> source, Func<T, long?> selector) {
            return Sequence.Max(Sequence.Select(source, selector));
        }
        */        
        [Test]
        public void MaxNullableLongWithSelectorTest()
        {
            long?[] values = new long?[] { 5,null,4,null,3,2,1,-1,-2,-3,6,7,8,9,0,null };
            long? result = values.Max(i => i + 1);
            Assert.AreEqual(10, result, "<long?> Max extension method with Selector not returning correct Max.");
        }
 
        #endregion <long?> Max
    
        #region <double> Max
 
        /* Extract from Sequence.cs May 2006 CTP
        public static double Max(this IEnumerable<double> source) {
            if (source == null) throw Error.ArgumentNull("source");
            double value = 0;
            bool hasValue = false;
            foreach (double x in source) {
                if (hasValue) {
                    if (x > value) value = x;
                }
                else {
                    value = x;
                    hasValue = true;
                }
            }
            if (hasValue) return value;
            throw Error.NoElements();
        }        
         */
        [Test]
        public void MaxDoubleTest()
        {
            double[] values = new double[] { 5.5D,4.4D,3.3D,2.2D,1.1D,-1D,-2D,-3.0D,6D,7D,8D,9D,0D };
            double result = values.Max();
            Assert.AreEqual(9, result, "<double> Max not returning the correct result.");
        }
        
        [Test]
        [ExpectedException(typeof(ArgumentNullException))]
        public void MaxDoubleNullSourceTest()
        {
            double[] values = null;
            values.Max();
        } 
 
        [Test]
        [ExpectedException("System.InvalidOperationException")]
        public void MaxDoubleEmptySourceTest()
        {
            var values = Sequence.Empty<double>();
            var result = values.Max();
        } 
 
        /* Extract from Sequence.cs May 2006 CTP
        public static double Max<T>(this IEnumerable<T> source, Func<T, double> selector) {
            return Sequence.Max(Sequence.Select(source, selector));
        }
        */        
        [Test]
        public void MaxDoubleWithSelectorTest()
        {
            double[] values = new double[] { 5.5D,4.4D,3.3D,2.2D,1.1D,-1D,-2D,-3.0D,6D,7D,8D,9D,0D };
            double result = values.Max(i => i + 1);
            Assert.AreEqual(10, result, "<double> Max extension method with Selector not returning correct Max.");
        }
 
        #endregion <double> Max
 
        #region <double?> Max
 
        /* Extract from Sequence.cs May 2006 CTP
        public static double? Max(this IEnumerable<double?> source) {
            if (source == null) throw Error.ArgumentNull("source");
            double? value = null;
            foreach (double? x in source) {
                if (value == null || x > value) value = x;
            }
            return value;
        }
        */
        [Test]
        public void MaxNullableDoubleTest()
        {
            double?[] values = new double?[] { 5D,null,4D,null,3D,2D,1D,-1D,-2D,-3D,6D,7D,8D,9D,0D,null };
            double? result = values.Max();
            Assert.AreEqual(9, result, "<double?> Max not returning the correct result.");
        }
        
        [Test]
        [ExpectedException(typeof(ArgumentNullException))]
        public void MaxNullableDoubleNullSourceTest()
        {
            double?[] values = null;
            values.Max();
        } 
 
        [Test]
        public void MaxNullableDoubleEmptySourceTest()
        {
            double?[] values = Sequence.Empty<double?>().ToArray<double?>();
            double? result = values.Max();
            Assert.IsNull(result, "<double?> Max return null as their result when no elements exist");
        } 
 
        [Test]
        public void MaxNullableDoubleOnlyNullSourceTest()
        {
            double?[] values = new double?[] {null,null,null};
            double? result = values.Max();
            Assert.IsNull(result, "<double?> Max return null as their result when only null elements exist");
        } 
 
        /* Extract from Sequence.cs May 2006 CTP
        public static double? Max<T>(this IEnumerable<T> source, Func<T, double?> selector) {
            return Sequence.Max(Sequence.Select(source, selector));
        }
        */        
        [Test]
        public void MaxNullableDoubleWithSelectorTest()
        {
            double?[] values = new double?[] { 5D,null,4D,null,3D,2D,1D,-1D,-2D,-3D,6D,7D,8D,9D,0D,null };
            double? result = values.Max(i => i + 1);
            Assert.AreEqual(10, result, "<double?> Max extension method with Selector not returning correct Max.");
        }
 
        #endregion <double?> Max 
 
        #region <decimal> Max
 
        /* Extract from Sequence.cs May 2006 CTP
        public static decimal Max(this IEnumerable<decimal> source) {
            if (source == null) throw Error.ArgumentNull("source");
            decimal value = 0;
            bool hasValue = false;
            foreach (decimal x in source) {
                if (hasValue) {
                    if (x > value) value = x;
                }
                else {
                    value = x;
                    hasValue = true;
                }
            }
            if (hasValue) return value;
            throw Error.NoElements();
        }
        */
        [Test]
        public void MaxDecimalTest()
        {
            decimal[] values = new decimal[] { 5,4,3,2,1,-1,-2,-3,6,7,8,9,0 };
            decimal result = values.Max();
            Assert.AreEqual(9, result, "<decimal> Max not returning the correct result.");
        }
        
        [Test]
        [ExpectedException(typeof(ArgumentNullException))]
        public void MaxDecimalNullSourceTest()
        {
            decimal[] values = null;
            values.Max();
        } 
 
        [Test]
        [ExpectedException("System.InvalidOperationException")]
        public void MaxDecimalEmptySourceTest()
        {
            var values = Sequence.Empty<decimal>();
            var result = values.Max();
        } 
 
        /* Extract from Sequence.cs May 2006 CTP
        public static decimal Max<T>(this IEnumerable<T> source, Func<T, decimal> selector) {
            return Sequence.Max(Sequence.Select(source, selector));
        }
        */        
        [Test]
        public void MaxDecimalWithSelectorTest()
        {
            decimal[] values = new decimal[] { 5,4,3,2,1,-1,-2,-3,6,7,8,9,0 };
            decimal result = values.Max(i => i + 1);
            Assert.AreEqual(10, result, "<decimal> Max extension method with Selector not returning correct Max.");
        }
 
        #endregion <decimal> Max
 
        #region <decimal?> Max
 
        /* Extract from Sequence.cs May 2006 CTP
        public static decimal? Max(this IEnumerable<decimal?> source) {
            if (source == null) throw Error.ArgumentNull("source");
            decimal? value = null;
            foreach (decimal? x in source) {
                if (value == null || x > value) value = x;
            }
            return value;
        }
        */
        [Test]
        public void MaxNullableDecimalTest()
        {
            decimal?[] values = new decimal?[] { 5,null,4,null,3,2,1,-1,-2,-3,6,7,8,9,0,null };
            decimal? result = values.Max();
            Assert.AreEqual(9, result, "<decimal?> Max not returning the correct result.");
        }
        
        [Test]
        [ExpectedException(typeof(ArgumentNullException))]
        public void MaxNullableDecimalNullSourceTest()
        {
            decimal?[] values = null;
            values.Max();
        } 
 
        [Test]
        public void MaxNullableDecimalEmptySourceTest()
        {
            decimal?[] values = Sequence.Empty<decimal?>().ToArray<decimal?>();
            decimal? result = values.Max();
            Assert.IsNull(result, "<decimal?> Max return null as their result when no elements exist");
        } 
 
        [Test]
        public void MaxNullableDecimalOnlyNullSourceTest()
        {
            decimal?[] values = new decimal?[] {null,null,null};
            decimal? result = values.Max();
            Assert.IsNull(result, "<decimal?> Max return null as their result when only null elements exist");
        } 
 
        /* Extract from Sequence.cs May 2006 CTP
        public static decimal? Max<T>(this IEnumerable<T> source, Func<T, decimal?> selector) {
            return Sequence.Max(Sequence.Select(source, selector));
        }
        */        
        [Test]
        public void MaxNullableDecimalWithSelectorTest()
        {
            decimal?[] values = new decimal?[] { 5,null,4,null,3,2,1,-1,-2,-3,6,7,8,9,0,null };
            decimal? result = values.Max(i => i + 1);
            Assert.AreEqual(10, result, "<decimal?> Max extension method with Selector not returning correct Max.");
        }
 
        #endregion <decimal?> Max
 
        #region <T> Max
        /* Extract from Sequence.cs May 2006 CTP
        public static T Max<T>(this IEnumerable<T> source) {
            if (source == null) throw Error.ArgumentNull("source");
            Comparer<T> comparer = Comparer<T>.Default;
            T value = default(T);
            bool hasValue = false;
            foreach (T x in source) {
                if (hasValue) {
                    if (comparer.Compare(x, value) > 0) 
                        value = x;
                }
                else {
                    value = x;
                    hasValue = true;
                }
            }
            if (hasValue) return value;
            throw Error.NoElements();
        }
 
        public static S Max<T, S>(this IEnumerable<T> source, Func<T, S> selector) {
            return Sequence.Max(Sequence.Select(source, selector));
        }
        */ 
 
        [Test]
        public void MaxGenericTest()
        {
            string[] values = new string[] { "AB", "AAA", "CDE", "AA", "F" };
            string result = values.Max<string>();
            Assert.AreEqual("F", result, "<T> Max with default not returning the correct result.");
        }
        
        [Test]
        [ExpectedException(typeof(ArgumentNullException))]
        public void MaxGenericNullSourceTest()
        {
            string[] values = null;
            values.Max<string>();
        } 
 
        [Test]
        [ExpectedException("System.InvalidOperationException")]
        public void MaxGenericEmptySourceTest()
        {
            var values = Sequence.Empty<string>();
            var result = values.Max<string>();
        } 
 
        [Test]
        public void MaxGenericWithSelectorTest()
        {
            string[] values = new string[] { "AB", "AAA", "CDE", "AA", "F" };
            string result = values.Max<string,string>(x => x.ToLower());
            Assert.AreEqual("f", result, "<T> Max extension method with Selector not returning correct Min.");
        }
 
        #endregion <T> Max
    }
}