Hooked on LINQ

Hooked on LINQ - Developers' Wiki
for .NET Language Integrated Query

Companion book for this site
LINQ to Objects Using C# 4.0:
Using and Extending LINQ to Objects and Parallel LINQ (PLINQ)
Quick Search

Advanced Search »
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
    }
}

If you would like to comment on this page, click on the Discuss button located on the top-right of each page. Feel free to edit any mistakes or omissions you find. If you have an objection or find in-appropriate content then contact the administrator. This website is not affiliated with Microsoft®, all content and opinions are those of the specific author and some advice, solutions and article may contain unintentional errors - please use care. Powered by ScrewTurn Wiki version 2.0.33. Some of the icons created by FamFamFam.