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