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