public void ParallelEnumerator_Next_WithValidData_Enumerates()
        {
            int[] data1 = new[] { 1, 2, 3, 4, 5 };
            int[] data2 = new[] { 6, 7, 8 };
            int[] data3 = new[] { 9, 10, 11, 12 };

            var enumerator = new ParallelEnumerator <int>(data1, data2, data3);

            Assert.That(enumerator.Next(), Is.True);
            Assert.That(enumerator.Current, Is.EquivalentTo(new[] { 1, 6, 9 }));

            Assert.That(enumerator.Next(), Is.True);
            Assert.That(enumerator.Current, Is.EquivalentTo(new[] { 2, 7, 10 }));

            Assert.That(enumerator.Next(), Is.True);
            Assert.That(enumerator.Current, Is.EquivalentTo(new[] { 3, 8, 11 }));

            Assert.That(enumerator.Next(), Is.True);
            Assert.That(enumerator.Current, Is.EquivalentTo(new[] { 4, 0, 12 }));

            Assert.That(enumerator.Next(), Is.True);
            Assert.That(enumerator.Current, Is.EquivalentTo(new[] { 5, 0, 0 }));

            Assert.That(enumerator.Next(), Is.False);
        }
Esempio n. 2
0
        private static ArbitraryNumber SubstractPositives(ArbitraryNumber a, ArbitraryNumber b)
        {
            var num1 = new ArbitraryNumber(a);
            var num2 = new ArbitraryNumber(b);

            AlignFractionalDigits(num1, num2);

            var result = new ArbitraryNumber();

            var enumerator = new ParallelEnumerator <int>(num1.Digits.AsEnumerable().Reverse(), num2.Digits.AsEnumerable().Reverse());

            int carryOver = 0;

            while (enumerator.Next())
            {
                int val1 = enumerator.Current[0];
                int val2 = enumerator.Current[1];
                int sub  = val1 - val2 - carryOver;

                int val = 0;
                if (sub < 0)
                {
                    val       = 10 + sub;
                    carryOver = 1;
                }
                else
                {
                    val       = sub;
                    carryOver = 0;
                }

                result.Digits.Insert(0, val);
            }

            if (carryOver > 0)
            {
                result.Digits.Insert(0, carryOver);
                result.IsNegative = true;
            }

            result.DecimalsCount = num1.DecimalsCount;

            Trim(result);

            return(result);
        }
Esempio n. 3
0
        private static ArbitraryNumber AddPositives(ArbitraryNumber a, ArbitraryNumber b)
        {
            var num1 = new ArbitraryNumber(a);
            var num2 = new ArbitraryNumber(b);

            AlignFractionalDigits(num1, num2);

            var result = new ArbitraryNumber();

            var enumerator = new ParallelEnumerator <int>(num1.Digits.AsEnumerable().Reverse(), num2.Digits.AsEnumerable().Reverse());

            int carryOver = 0;

            while (enumerator.Next())
            {
                int val1  = enumerator.Current[0];
                int val2  = enumerator.Current[1];
                int added = val1 + val2 + carryOver;

                int val = added % 10;
                carryOver = (added - val) / 10;

                result.Digits.Insert(0, val);
            }

            if (carryOver > 0)
            {
                result.Digits.Insert(0, carryOver);
            }

            result.DecimalsCount = num1.DecimalsCount;

            Trim(result);

            return(result);
        }