Unit tests written by
Troy Magennis. They run against the MAY 2006 CTP using
NUnit.
using System.
Collections.
Generic;
using NUnit.Framework;
namespace LINQUnitTests
{
[TestFixture]
public class AverageTests
{
#region <int> Average
/* Extract from Sequence.cs May 2006 CTP
public static double Average(this IEnumerable<int> source) {
if (source == null) throw Error.ArgumentNull("source");
long sum = 0;
long count = 0;
checked {
foreach (int v in source) {
sum += v;
count++;
}
}
if (count > 0) return (double)sum / count;
throw Error.NoElements();
}
*/
[Test]
public void AvgIntTest()
{
int[] values =
new int[] { 5,
4,
3,
2,
1,
6,
7,
8,
9,
0 };
double result = values.Average();
Assert.AreEqual(4.5, result, "<int> Average not returning the correct avg.");
}
[Test]
public void AvgIntEdgeTest()
{
int[] values =
new int[] { int.
MaxValue,
int.
MinValue,
int.
MaxValue,
int.
MinValue };
var result = values.Average();
Assert.AreEqual(-0.5, result);
// Note:
// Max Value: 2,147,483,647
// MinValue: -2,147,483,648
}
[Test]
[ExpectedException
(typeof(ArgumentNullException
))] public void AvgIntNullSourceTest()
{
int[] values = null;
values.Average();
}
[Test]
[ExpectedException("System.InvalidOperationException")]
public void AvgIntEmptySourceTest()
{
var values = Sequence.Empty<int>();
var result = values.Average();
}
/* Extract from Sequence.cs May 2006 CTP
public static double Average<T>(this IEnumerable<T> source, Func<T, int> selector) {
return Sequence.Average(Sequence.Select(source, selector));
}
*/
[Test]
public void AvgIntWithSelectorTest()
{
int[] values =
new int[] { 5,
4,
3,
2,
1,
6,
7,
8,
9,
0 };
double result = values.Average(i => i + 1);
Assert.AreEqual(5.5, result, "<int> Average extension method with Selector not returning correct avg.");
}
#endregion <int> Average
#region <int?> Average
/* Extract from Sequence.cs May 2006 CTP
public static double? Average(this IEnumerable<int?> source) {
if (source == null) throw Error.ArgumentNull("source");
long sum = 0;
long count = 0;
checked {
foreach (int? v in source) {
if (v != null) {
sum += v.GetValueOrDefault();
count++;
}
}
}
if (count > 0) return (double)sum / count;
return null;
}
*/
[Test]
public void AvgNullableIntTest()
{
int?
[] values =
new int?
[] { 5,
null,
4,
null,
3,
2,
null,
1,
6,
7,
8,
9,
0 };
double? result = values.Average();
Assert.AreEqual(4.5, result, "<int?> Average not returning the correct avg.");
}
[Test]
public void AvgNullableIntEdgeTest()
{
int?
[] values =
new int?
[] { int.
MaxValue,
null,
int.
MinValue,
null,
int.
MaxValue,
int.
MinValue };
var result = values.Average();
Assert.AreEqual(-0.5, result);
// Note:
// Max Value: 2,147,483,647
// MinValue: -2,147,483,648
}
[Test]
[ExpectedException
(typeof(ArgumentNullException
))] public void AvgNullableIntNullSourceTest()
{
int?[] values = null;
values.Average();
}
[Test]
public void AvgNullableIntEmptySourceTest()
{
var values = Sequence.Empty<int?>();
var result = values.Average();
Assert.IsNull(result, "Empty <int?> source should return null for Average.");
}
[Test]
public void AvgNullableIntAllNullsSourceTest()
{
var values =
new int?
[]{null,
null,
null};
var result = values.Average();
Assert.IsNull(result, "All Null <int?> source should return null for Average.");
}
/* Extract from Sequence.cs May 2006 CTP
public static double? Average<T>(this IEnumerable<T> source, Func<T, int?> selector) {
return Sequence.Average(Sequence.Select(source, selector));
}
*/
[Test]
public void AvgNullableIntWithSelectorTest()
{
int?
[] values =
new int?
[] { 5,
4,
null,
3,
2,
null,
1,
6,
null,
7,
8,
9,
0 };
double? result = values.Average(i => i + 1);
Assert.AreEqual(5.5, result, "<int?> Average extension method with Selector not returning correct avg.");
}
#endregion <int?> Average
#region <long> Average
/* Extract from Sequence.cs May 2006 CTP
public static double Average(this IEnumerable<long> source) {
if (source == null) throw Error.ArgumentNull("source");
long sum = 0;
long count = 0;
checked {
foreach (long v in source) {
sum += v;
count++;
}
}
if (count > 0) return (double)sum / count;
throw Error.NoElements();
}
*/
[Test]
public void AvgLongTest()
{
long[] values =
new long[] { 5L,4L,3L,2L,1L,6L,7L,8L,9L,0L
};
double result = values.Average();
Assert.AreEqual(4.5, result, "<long> Average not returning the correct avg.");
}
[Test]
public void AvgLongEdgeTest()
{
long[] values =
new long[] { long.
MaxValue,
long.
MinValue,
long.
MaxValue,
long.
MinValue };
var result = values.Average();
Assert.AreEqual(-0.5, result);
}
[Test]
[ExpectedException
(typeof(ArgumentNullException
))] public void AvgLongNullSourceTest()
{
long[] values = null;
values.Average();
}
[Test]
[ExpectedException("System.InvalidOperationException")]
public void AvgLongEmptySourceTest()
{
var values = Sequence.Empty<long>();
var result = values.Average();
}
/* Extract from Sequence.cs May 2006 CTP
public static double Average<T>(this IEnumerable<T> source, Func<T, long> selector) {
return Sequence.Average(Sequence.Select(source, selector));
}
*/
[Test]
public void AvgLongWithSelectorTest()
{
long[] values =
new long[] { 5L,4L,3L,2L,1L,6L,7L,8L,9L,0L
};
double result = values.Average(i => i + 1);
Assert.AreEqual(5.5, result, "<long> Average extension method with Selector not returning correct avg.");
}
#endregion <long> Average
#region <long?> Average
/* Extract from Sequence.cs May 2006 CTP
public static double? Average(this IEnumerable<long?> source) {
if (source == null) throw Error.ArgumentNull("source");
long sum = 0;
long count = 0;
checked {
foreach (long? v in source) {
if (v != null) {
sum += v.GetValueOrDefault();
count++;
}
}
}
if (count > 0) return (double)sum / count;
return null;
} */
[Test]
public void AvgNullableLongTest()
{
long?
[] values =
new long?
[] { 5L,4L,
null,3L,
null,2L,1L,
null,6L,7L,8L,9L,0L
};
double? result = values.Average();
Assert.AreEqual(4.5, result, "<long?> Average not returning the correct avg.");
}
[Test]
public void AvgNullableLongEdgeTest()
{
long?
[] values =
new long?
[] { long.
MaxValue,
null,
long.
MinValue,
null,
long.
MaxValue,
long.
MinValue };
var result = values.Average();
Assert.AreEqual(-0.5, result);
}
[Test]
[ExpectedException
(typeof(ArgumentNullException
))] public void AvgNullableLongNullSourceTest()
{
long?[] values = null;
values.Average();
}
[Test]
public void AvgNullableLongEmptySourceTest()
{
var values = Sequence.Empty<long?>();
var result = values.Average();
Assert.IsNull(result, "Empty <long?> source should return null for Average.");
}
[Test]
public void AvgNullableLongAllNullsSourceTest()
{
var values =
new long?
[]{null,
null,
null};
var result = values.Average();
Assert.IsNull(result, "All Null <long?> source should return null for Average.");
}
/* Extract from Sequence.cs May 2006 CTP
public static double? Average<T>(this IEnumerable<T> source, Func<T, long?> selector) {
return Sequence.Average(Sequence.Select(source, selector));
}
*/
[Test]
public void AvgNullableLongWithSelectorTest()
{
long?
[] values =
new long?
[] { 5L,4L,
null,3L,
null,2L,1L,
null,6L,7L,8L,9L,0L
};
double? result = values.Average(i => i + 1);
Assert.AreEqual(5.5, result, "<long?> Average extension method with Selector not returning correct avg.");
}
#endregion <long?> Average
#region <double> Average
/* Extract from Sequence.cs May 2006 CTP
public static double Average(this IEnumerable<double> source) {
if (source == null) throw Error.ArgumentNull("source");
double sum = 0;
long count = 0;
checked {
foreach (double v in source) {
sum += v;
count++;
}
}
if (count > 0) return sum / count;
throw Error.NoElements();
}
*/
[Test]
public void AvgDoubleTest()
{
double[] values =
new double[] { 5.5D,
4.4D,
3.3D,
2.2,
1.1D,
6.6D,
7.7D,
8.8D,
9.9D,0D
};
double result = values.Average();
Assert.AreEqual(4.95, result, 0.001, "<double> Average not returning the correct avg.");
}
[Test]
public void AvgDoubleEdgeTest()
{
double[] values =
new double[] { double.
MaxValue,
double.
MinValue,
double.
MaxValue,
double.
MinValue };
var result = values.Average();
Assert.AreEqual(0, result);
}
[Test]
[ExpectedException
(typeof(ArgumentNullException
))] public void AvgDoubleNullSourceTest()
{
double[] values = null;
values.Average();
}
[Test]
[ExpectedException("System.InvalidOperationException")]
public void AvgDoubleEmptySourceTest()
{
var values = Sequence.Empty<double>();
var result = values.Average();
}
/* Extract from Sequence.cs May 2006 CTP
public static double Average<T>(this IEnumerable<T> source, Func<T, double> selector) {
return Sequence.Average(Sequence.Select(source, selector));
}
*/
[Test]
public void AvgDoubleWithSelectorTest()
{
double[] values =
new double[] { 5L,4L,3L,2L,1L,6L,7L,8L,9L,0L
};
double result = values.Average(i => i + 1);
Assert.AreEqual(5.5, result, "<double> Average extension method with Selector not returning correct avg.");
}
#endregion <double> Average
#region <double?> Average
/* Extract from Sequence.cs May 2006 CTP
public static double? Average(this IEnumerable<double?> source) {
if (source == null) throw Error.ArgumentNull("source");
double sum = 0;
long count = 0;
checked {
foreach (double? v in source) {
if (v != null) {
sum += v.GetValueOrDefault();
count++;
}
}
}
if (count > 0) return sum / count;
return null;
}
*/
[Test]
public void AvgNullableDoubleTest()
{
double?
[] values =
new double?
[] { 5.5D,
4.4D,
null,
3.3D,
null,
2.2D,
1.1D,
null,
6.6D,
7.7D,
8.8D,
9.9D,0D
};
double? result = values.Average();
Assert.AreEqual(4.95D, result.Value, 0.001, "<double?> Average not returning the correct avg.");
}
[Test]
public void AvgNullableDoubleEdgeTest()
{
double?
[] values =
new double?
[] { double.
MaxValue,
null,
double.
MinValue,
null,
double.
MaxValue,
double.
MinValue };
var result = values.Average();
Assert.AreEqual(0, result);
}
[Test]
[ExpectedException
(typeof(ArgumentNullException
))] public void AvgNullableDoubleNullSourceTest()
{
double?[] values = null;
values.Average();
}
[Test]
public void AvgNullableDoubleEmptySourceTest()
{
var values = Sequence.Empty<double?>();
var result = values.Average();
Assert.IsNull(result, "Empty <double?> source should return null for Average.");
}
[Test]
public void AvgNullableDoubleAllNullsSourceTest()
{
var values =
new double?
[]{null,
null,
null};
var result = values.Average();
Assert.IsNull(result, "All Null <double?> source should return null for Average.");
}
/* Extract from Sequence.cs May 2006 CTP
public static double? Average<T>(this IEnumerable<T> source, Func<T, double?> selector) {
return Sequence.Average(Sequence.Select(source, selector));
}
*/
[Test]
public void AvgNullableDoubleWithSelectorTest()
{
double?
[] values =
new double?
[] { 5L,4L,
null,3L,
null,2L,1L,
null,6L,7L,8L,9L,0L
};
double? result = values.Average(i => i + 1);
Assert.AreEqual(5.5, result, "<double?> Average extension method with Selector not returning correct avg.");
}
#endregion <double?> Average
#region <decimal> Average
/* Extract from Sequence.cs May 2006 CTP
public static decimal Average(this IEnumerable<decimal> source) {
if (source == null) throw Error.ArgumentNull("source");
decimal sum = 0;
long count = 0;
checked {
foreach (decimal v in source) {
sum += v;
count++;
}
}
if (count > 0) return sum / count;
throw Error.NoElements();
}
*/
[Test]
public void AvgDecimalTest()
{
decimal[] values =
new decimal[] { 5.5M,
4.4M,
3.3M,
2.2M,
1.1M,
6.6M,
7.7M,
8.8M,
9.9M,0M
};
decimal result = values.Average();
Assert.AreEqual(4.95, result, "<decimal> Average not returning the correct avg.");
}
[Test]
public void AvgDecimalEdgeTest()
{
decimal[] values =
new decimal[] { decimal.
MaxValue,
decimal.
MinValue,
decimal.
MaxValue,
decimal.
MinValue };
var result = values.Average();
Assert.AreEqual(0, result);
}
[Test]
[ExpectedException
(typeof(ArgumentNullException
))] public void AvgDecimalNullSourceTest()
{
decimal[] values = null;
values.Average();
}
[Test]
[ExpectedException("System.InvalidOperationException")]
public void AvgDecimalEmptySourceTest()
{
var values = Sequence.Empty<decimal>();
var result = values.Average();
}
/* Extract from Sequence.cs May 2006 CTP
public static decimal Average<T>(this IEnumerable<T> source, Func<T, decimal> selector) {
return Sequence.Average(Sequence.Select(source, selector));
}
*/
[Test]
public void AvgDecimalWithSelectorTest()
{
decimal[] values =
new decimal[] { 5M,4M,3M,2M,1M,6M,7M,8M,9M,0M
};
decimal result = values.Average(i => i + 1);
Assert.AreEqual(5.5, result, "<decimal> Average extension method with Selector not returning correct avg.");
}
#endregion <decimal> Average
#region <decimal?> Average
/* Extract from Sequence.cs May 2006 CTP
public static decimal? Average(this IEnumerable<decimal?> source) {
if (source == null) throw Error.ArgumentNull("source");
decimal sum = 0;
long count = 0;
checked {
foreach (decimal? v in source) {
if (v != null) {
sum += v.GetValueOrDefault();
count++;
}
}
}
if (count > 0) return sum / count;
return null;
}
*/
[Test]
public void AvgNullableDecimalTest()
{
decimal?
[] values =
new decimal?
[] { 5.5M,
4.4M,
null,
3.3M,
null,
2.2M,
1.1M,
null,
6.6M,
7.7M,
8.8M,
9.9M,0M
};
decimal? result = values.Average();
Assert.AreEqual(4.95M, result.Value, "<decimal?> Average not returning the correct avg.");
}
[Test]
public void AvgNullableDecimalEdgeTest()
{
decimal?
[] values =
new decimal?
[] { decimal.
MaxValue,
null,
decimal.
MinValue,
null,
decimal.
MaxValue,
decimal.
MinValue };
var result = values.Average();
Assert.AreEqual(0, result);
}
[Test]
[ExpectedException
(typeof(ArgumentNullException
))] public void AvgNullableDecimalNullSourceTest()
{
decimal?[] values = null;
values.Average();
}
[Test]
public void AvgNullableDecimalEmptySourceTest()
{
var values = Sequence.Empty<decimal?>();
var result = values.Average();
Assert.IsNull(result, "Empty <decimal?> source should return null for Average.");
}
[Test]
public void AvgNullableDecimalAllNullsSourceTest()
{
var values =
new decimal?
[]{null,
null,
null};
var result = values.Average();
Assert.IsNull(result, "All Null <decimal?> source should return null for Average.");
}
/* Extract from Sequence.cs May 2006 CTP
public static decimal? Average<T>(this IEnumerable<T> source, Func<T, decimal?> selector) {
return Sequence.Average(Sequence.Select(source, selector));
}
*/
[Test]
public void AvgNullableDecimalWithSelectorTest()
{
decimal?
[] values =
new decimal?
[] { 5M,4M,
null,3M,
null,2M,1M,
null,6M,7M,8M,9M,0M
};
decimal? result = values.Average(i => i + 1);
Assert.AreEqual(5.5, result, "<decimal?> Average extension method with Selector not returning correct avg.");
}
#endregion <decimal?> Average
}
}