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 } }