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 SumTests
{
#region <int> Sum
/* Extract from Sequence.cs May 2006 CTP
public static int Sum(this IEnumerable<int> source) {
if (source == null) throw Error.ArgumentNull("source");
int sum = 0;
checked {
foreach (int v in source) sum += v;
}
return sum;
}
*/
[Test]
public void SumIntTest()
{
int[] values = new int[] { 5,4,3,2,1,6,7,8,9,0 };
int result = values.Sum();
Assert.AreEqual(45, result, "<int> Sum not returning the correct sum.");
}
[Test]
[ExpectedException(typeof(OverflowException))]
public void SumIntTooBigTest()
{
int[] values = new int[] { int.MaxValue, 1 };
var result = values.Sum();
Assert.AreEqual(45, result, "<int> Sum overflow.");
}
[Test]
[ExpectedException(typeof(ArgumentNullException))]
public void SumIntNullSourceTest()
{
int[] values = null;
values.Sum();
}
[Test]
public void SumIntEmptySourceTest()
{
var values = Sequence.Empty<int>();
var result = values.Sum();
Assert.AreEqual(0, result, "<int> Sum of empty sequence should return zero.");
}
/* Extract from Sequence.cs May 2006 CTP
public static int Sum<T>(this IEnumerable<T> source, Func<T, int> selector) {
return Sequence.Sum(Sequence.Select(source, selector));
}
*/
[Test]
public void SumIntWithSelectorTest()
{
int[] values = new int[] { 5,4,3,2,1,6,7,8,9,0 };
int result = values.Sum(i => i + 1);
Assert.AreEqual(55, result, "<int> Sum extension method with Selector not returning correct sum.");
}
#endregion <int> Sum
#region <int?> Sum
/* Extract from Sequence.cs May 2006 CTP
public static int? Sum(this IEnumerable<int?> source) {
if (source == null) throw Error.ArgumentNull("source");
int? sum = 0;
checked {
foreach (int? v in source) {
if (v != null) sum += v;
}
}
return sum;
}
*/
[Test]
public void SumNullableIntTest()
{
int?[] values = new int?[] { 5, null, 4, null, 3, null, 2, null, 1,6,7,8,9,0 };
int? result = values.Sum();
Assert.AreEqual(45, result, "<int?> Sum not returning the correct sum.");
}
[Test]
[ExpectedException(typeof(ArgumentNullException))]
public void SumNullableIntNullSourceTest()
{
int[] values = null;
values.Sum();
}
[Test]
[ExpectedException(typeof(OverflowException))]
public void SumNullableIntTooBigTest()
{
int?[] values = new int?[] { int.MaxValue, 1 };
var result = values.Sum();
Assert.AreEqual(0, result, "<int?> Sum overflow.");
}
[Test]
public void SumNullableIntAllNullValuesTest()
{
int?[] values = new int?[] { null,null,null };
var result = values.Sum();
Assert.AreEqual(0, result, "<int?> All nulls should return zero.");
}
[Test]
public void SumNullableIntEmptySourceTest()
{
var values = Sequence.Empty<int?>();
var result = values.Sum();
Assert.AreEqual(0, result, "<int?> Sum of empty sequence should return zero.");
}
/* Extract from Sequence.cs May 2006 CTP
public static int? Sum<T>(this IEnumerable<T> source, Func<T, int?> selector) {
return Sequence.Sum(Sequence.Select(source, selector));
}
*/
[Test]
public void SumNullableIntWithSelectorTest()
{
int?[] values = new int?[] { 5,null,4,null,3,null,2,null,1,6,7,8,9,0 };
int? result = values.Sum(i => i + 1);
Assert.AreEqual(55, result, "<int?> Sum extension method with Selector not returning correct sum.");
}
#endregion <int?> Sum
#region <long> Sum
/* Extract from Sequence.cs May 2006 CTP
public static long Sum(this IEnumerable<long> source) {
if (source == null) throw Error.ArgumentNull("source");
long sum = 0;
checked {
foreach (long v in source) sum += v;
}
return sum;
}
*/
[Test]
public void SumLongTest()
{
long[] values = new long[] { (long)5.5,(long)4.4,(long)3.3,(long)2.2,(long)1.1,(long)6.6,(long)7.7,(long)8.8,(long)9.9,(long)0.0 };
long result = values.Sum();
Assert.AreEqual(45, result, "<long> Sum not returning the correct sum.");
}
[Test]
[ExpectedException(typeof(OverflowException))]
public void SumLongTooBigTest()
{
long[] values = new long[] { long.MaxValue, 1 };
var result = values.Sum();
Assert.AreEqual(0, result, "<long> Sum overflow.");
}
[Test]
[ExpectedException(typeof(ArgumentNullException))]
public void SumLongNullSourceTest()
{
long[] values = null;
values.Sum();
}
[Test]
public void SumLongEmptySourceTest()
{
var values = Sequence.Empty<long>();
var result = values.Sum();
Assert.AreEqual(0, result, "<long> Sum of empty sequence should return zero.");
}
/* Extract from Sequence.cs May 2006 CTP
public static long Sum<T>(this IEnumerable<T> source, Func<T, long> selector) {
return Sequence.Sum(Sequence.Select(source, selector));
*/
[Test]
public void SumLongWithSelectorTest()
{
long[] values = new long[] { (long)5.5,(long)4.4,(long)3.3,(long)2.2,(long)1.1,(long)6.6,(long)7.7,(long)8.8,(long)9.9,(long)0.0 };
long result = values.Sum(i => i + (long)1.1);
Assert.AreEqual(55, result, "<long> Sum extension method with Selector not returning correct sum.");
}
#endregion <long> Sum
#region <long?> Sum
/* Extract from Sequence.cs May 2006 CTP
public static long? Sum(this IEnumerable<long?> source) {
if (source == null) throw Error.ArgumentNull("source");
long? sum = 0;
checked {
foreach (long? v in source) {
if (v != null) sum += v;
}
}
return sum;
}
*/
[Test]
public void SumNullableLongTest()
{
long?[] values = new long?[] { (long)5.5, null, (long)4.4, (long)3.3, (long)2.2, (long)1.1,(long)6.6,(long)7.7,(long)8.8,(long)9.9,(long)0.0 };
long? result = values.Sum();
Assert.AreEqual(45, result, "<long?> Sum not returning the correct sum.");
}
[Test]
[ExpectedException(typeof(ArgumentNullException))]
public void SumNullableLongNullSourceTest()
{
long[] values = null;
values.Sum();
}
[Test]
[ExpectedException(typeof(OverflowException))]
public void SumNullableLongTooBigTest()
{
long?[] values = new long?[] { long.MaxValue, 1 };
var result = values.Sum();
Assert.AreEqual(0, result, "<long?> Sum overflow.");
}
[Test]
public void SumNullableLongEmptySourceTest()
{
var values = Sequence.Empty<long?>();
var result = values.Sum();
Assert.AreEqual(0, result, "<long?> Sum of empty sequence should return zero.");
}
/* Extract from Sequence.cs May 2006 CTP
public static long? Sum<T>(this IEnumerable<T> source, Func<T, long?> selector) {
return Sequence.Sum(Sequence.Select(source, selector));
}
*/
[Test]
public void SumNullableLongWithSelectorTest()
{
long?[] values = new long?[] { (long)5.5, null, (long)4.4, null, (long)3.3, null, (long)2.2, null, (long)1.1,(long)6.6,(long)7.7,(long)8.8,(long)9.9,(long)0.0 };
long? result = values.Sum(i => i + (long)1.1);
Assert.AreEqual(55, result, "<long?> Sum extension method with Selector not returning correct sum.");
}
#endregion <long?> Sum
#region <double> Sum
/* Extract from Sequence.cs May 2006 CTP
public static double Sum(this IEnumerable<double> source) {
if (source == null) throw Error.ArgumentNull("source");
double sum = 0;
foreach (double v in source) sum += v;
return sum;
}
*/
[Test]
public void SumDoubleTest()
{
double[] values = new double[] { 5.05D, 4.04D, 3.03D, 2.02D, 1.01D, 6.06D, 7.07D, 8.08D, 9.09D, 0.00D };
double result = values.Sum();
Assert.AreEqual(45.45, result, 0.1, "<double> Sum not returning the correct sum.");
}
[Test]
public void SumDoubleTooBigTest()
{
double[] values = new double[] { double.MaxValue, 1 };
double result = values.Sum();
Assert.AreEqual( double.MaxValue, result, "<double> Sum overflow.");
values = new double[] { double.MinValue, -1 };
result = values.Sum();
Assert.AreEqual(double.MinValue, result, "<double> Sum negative overflow.");
}
[Test]
public void SumDoubleTooBigTestInfinity()
{
double[] values = new double[] { double.MaxValue, 1e300 };
double result = values.Sum();
Assert.IsTrue(double.IsPositiveInfinity(result));
values = new double[] { double.MinValue, -1e300 };
result = values.Sum();
Assert.IsTrue(double.IsNegativeInfinity(result));
}
[Test]
[ExpectedException(typeof(ArgumentNullException))]
public void SumDoubleNullSourceTest()
{
double[] values = null;
values.Sum();
}
[Test]
public void SumDoubleEmptySourceTest()
{
var values = Sequence.Empty<double>();
var result = values.Sum();
Assert.AreEqual(0, result, "<double> Sum of empty sequence should return zero.");
}
/* Extract from Sequence.cs May 2006 CTP
public static double Sum<T>(this IEnumerable<T> source, Func<T, double> selector) {
return Sequence.Sum(Sequence.Select(source, selector));
}
*/
[Test]
public void SumDoubleWithSelectorTest()
{
double[] values = new double[] { 5.05D, 4.04D, 3.03D, 2.02D, 1.01D, 6.06D, 7.07D, 8.08D, 9.09D, 0.00D };
double result = values.Sum(i => i + (double)1.01);
Assert.AreEqual(55.55, result, "<double> Sum extension method with Selector not returning correct sum.");
}
#endregion <double> Sum
#region <double?> Sum
/* Extract from Sequence.cs May 2006 CTP
public static double? Sum(this IEnumerable<double?> source) {
if (source == null) throw Error.ArgumentNull("source");
double? sum = 0;
foreach (double? v in source) {
if (v != null) sum += v;
}
return sum;
}
*/
[Test]
public void SumNullableDoubleTest()
{
double?[] values = new double?[] { (double)5.05, null, (double)4.04, (double)3.03, (double)2.02, (double)1.01,(double)6.06,(double)7.07,(double)8.08,(double)9.09,(double)0.0 };
double? result = values.Sum();
Assert.AreEqual(45.45, result, "<double?> Sum not returning the correct sum.");
}
[Test]
[ExpectedException(typeof(ArgumentNullException))]
public void SumNullableDoubleNullSourceTest()
{
double[] values = null;
values.Sum();
}
[Test]
public void SumNullableDoubleTooBigTest()
{
double?[] values = new double?[] { double.MaxValue, 1 };
var result = values.Sum();
Assert.AreEqual(double.MaxValue, result, "<double?> Sum overflow.");
values = new double?[] { double.MinValue, -1 };
result = values.Sum();
Assert.AreEqual(double.MinValue, result, "<double?> Sum overflow.");
}
[Test]
public void SumNullableDoubleTooBigTestInfinity()
{
double?[] values = new double?[] { double.MaxValue, 1e300 };
double result = (double)values.Sum();
Assert.IsTrue(double.IsPositiveInfinity(result) == true, "<double?> Sum overflow.");
values = new double?[] { double.MinValue, -1e300 };
result = (double)values.Sum();
Assert.IsTrue(double.IsNegativeInfinity(result) == true, "<double?> Sum negative overflow.");
}
[Test]
public void SumNullableDoubleEmptySourceTest()
{
var values = Sequence.Empty<double?>();
var result = values.Sum();
Assert.AreEqual(0, result, "<double?> Sum of empty sequence should return zero.");
}
/* Extract from Sequence.cs May 2006 CTP
public static double? Sum<T>(this IEnumerable<T> source, Func<T, double?> selector) {
return Sequence.Sum(Sequence.Select(source, selector));
}
*/
[Test]
public void SumNullableDoubleWithSelectorTest()
{
double?[] values = new double?[] { (double)5.05, null, (double)4.04, null, (double)3.03, null, (double)2.02, null, (double)1.01,(double)6.06,(double)7.07,(double)8.08,(double)9.09,(double)0.0 };
double? result = values.Sum(i => i + (double)1.01);
Assert.AreEqual(55.55, result, "<double?> Sum extension method with Selector not returning correct sum.");
}
#endregion <double?> Sum
#region <decimal> Sum
/* Extract from Sequence.cs May 2006 CTP
public static decimal Sum(this IEnumerable<decimal> source) {
if (source == null) throw Error.ArgumentNull("source");
decimal sum = 0;
foreach (decimal v in source) sum += v;
return sum;
}
*/
[Test]
public void SumDecimalTest()
{
decimal[] values = new decimal[] { 5.05M, 4.04M, 3.03M, 2.02M, 1.01M, 6.06M, 7.07M, 8.08M, 9.09M, 0.00M };
decimal result = values.Sum();
Assert.AreEqual(45.45M, result, "<decimal> Sum not returning the correct sum.");
}
[Test]
[ExpectedException("System.OverflowException")]
public void SumDecimalTooBigTest()
{
decimal[] values = new decimal[] { decimal.MaxValue, 1 };
decimal result = values.Sum();
Assert.AreEqual( decimal.MaxValue, result, "<decimal> Sum overflow.");
}
[Test]
[ExpectedException(typeof(ArgumentNullException))]
public void SumDecimalNullSourceTest()
{
decimal[] values = null;
values.Sum();
}
[Test]
public void SumDecimalEmptySourceTest()
{
var values = Sequence.Empty<decimal>();
var result = values.Sum();
Assert.AreEqual(0, result, "<decimal> Sum of empty sequence should return zero.");
}
/* Extract from Sequence.cs May 2006 CTP
public static decimal Sum<T>(this IEnumerable<T> source, Func<T, decimal> selector) {
return Sequence.Sum(Sequence.Select(source, selector));
}
*/
[Test]
public void SumDecimalWithSelectorTest()
{
decimal[] values = new decimal[] { 5.05M, 4.04M, 3.03M, 2.02M, 1.01M, 6.06M, 7.07M, 8.08M, 9.09M, 0.00M };
decimal result = values.Sum(i => i + (decimal)1.01);
Assert.AreEqual(55.55, result, "<decimal> Sum extension method with Selector not returning correct sum.");
}
#endregion <decimal> Sum
#region <decimal?> Sum
/* Extract from Sequence.cs May 2006 CTP
public static decimal? Sum(this IEnumerable<decimal?> source) {
if (source == null) throw Error.ArgumentNull("source");
decimal? sum = 0;
foreach (decimal? v in source) {
if (v != null) sum += v;
}
return sum;
}
*/
[Test]
public void SumNullableDecimalTest()
{
decimal?[] values = new decimal?[] { (decimal)5.05, null, (decimal)4.04, (decimal)3.03, (decimal)2.02, (decimal)1.01,(decimal)6.06,(decimal)7.07,(decimal)8.08,(decimal)9.09,(decimal)0.0 };
decimal? result = values.Sum();
Assert.AreEqual(45.45, result, "<decimal?> Sum not returning the correct sum.");
}
[Test]
[ExpectedException(typeof(ArgumentNullException))]
public void SumNullableDecimalNullSourceTest()
{
decimal[] values = null;
values.Sum();
}
[Test]
[ExpectedException("System.OverflowException")]
public void SumNullableDecimalTooBigTest()
{
decimal?[] values = new decimal?[] { decimal.MaxValue, 1 };
var result = values.Sum();
Assert.AreEqual(decimal.MaxValue, result, "<decimal?> Sum overflow.");
}
[Test]
public void SumNullableDecimalEmptySourceTest()
{
var values = Sequence.Empty<decimal?>();
var result = values.Sum();
Assert.AreEqual(0, result, "<decimal?> Sum of empty sequence should return zero.");
}
/* Extract from Sequence.cs May 2006 CTP
public static decimal? Sum<T>(this IEnumerable<T> source, Func<T, decimal?> selector) {
return Sequence.Sum(Sequence.Select(source, selector));
}
*/
[Test]
public void SumNullableDecimalWithSelectorTest()
{
decimal?[] values = new decimal?[] { (decimal)5.05, null, (decimal)4.04, null, (decimal)3.03, null, (decimal)2.02, null, (decimal)1.01,(decimal)6.06,(decimal)7.07,(decimal)8.08,(decimal)9.09,(decimal)0.0 };
decimal? result = values.Sum(i => i + (decimal)1.01);
Assert.AreEqual(55.55, result, "<decimal?> Sum extension method with Selector not returning correct sum.");
}
#endregion <decimal?> Sum
}
}