diff --git a/src/Numerics/Integration/Algorithms/NewtonCotesTrapeziumRule.cs b/src/Numerics/Integration/Algorithms/NewtonCotesTrapeziumRule.cs index f15efe1d..6b635b3d 100644 --- a/src/Numerics/Integration/Algorithms/NewtonCotesTrapeziumRule.cs +++ b/src/Numerics/Integration/Algorithms/NewtonCotesTrapeziumRule.cs @@ -183,66 +183,67 @@ namespace MathNet.Numerics.Integration.Algorithms double linearOffset = 0.5 * (intervalEnd + intervalBegin); targetRelativeError /= 5 * linearSlope; - var abcissasIterator = levelAbscissas.GetEnumerator(); - var weightsIterator = levelWeights.GetEnumerator(); + using (var abcissasIterator = levelAbscissas.GetEnumerator()) + using (var weightsIterator = levelWeights.GetEnumerator()) + { + double step = levelOneStep; - double step = levelOneStep; + // First Level + abcissasIterator.MoveNext(); + weightsIterator.MoveNext(); + double[] abcissasL1 = abcissasIterator.Current; + double[] weightsL1 = weightsIterator.Current; - // First Level - abcissasIterator.MoveNext(); - weightsIterator.MoveNext(); - double[] abcissasL1 = abcissasIterator.Current; - double[] weightsL1 = weightsIterator.Current; + double sum = f(linearOffset) * weightsL1[0]; + for (int i = 1; i < abcissasL1.Length; i++) + { + sum += weightsL1[i] * (f((linearSlope * abcissasL1[i]) + linearOffset) + f(-(linearSlope * abcissasL1[i]) + linearOffset)); + } - double sum = f(linearOffset) * weightsL1[0]; - for (int i = 1; i < abcissasL1.Length; i++) - { - sum += weightsL1[i] * (f((linearSlope * abcissasL1[i]) + linearOffset) + f(-(linearSlope * abcissasL1[i]) + linearOffset)); - } + sum *= step; - sum *= step; + // Additional Levels + double previousDelta = double.MaxValue; + for (int level = 1; abcissasIterator.MoveNext() && weightsIterator.MoveNext(); level++) + { + double[] abcissas = abcissasIterator.Current; + double[] weights = weightsIterator.Current; - // Additional Levels - double previousDelta = double.MaxValue; - for (int level = 1; abcissasIterator.MoveNext() && weightsIterator.MoveNext(); level++) - { - double[] abcissas = abcissasIterator.Current; - double[] weights = weightsIterator.Current; + double midpointsum = 0; + for (int i = 0; i < abcissas.Length; i++) + { + midpointsum += weights[i] * (f((linearSlope * abcissas[i]) + linearOffset) + f(-(linearSlope * abcissas[i]) + linearOffset)); + } - double midpointsum = 0; - for (int i = 0; i < abcissas.Length; i++) - { - midpointsum += weights[i] * (f((linearSlope * abcissas[i]) + linearOffset) + f(-(linearSlope * abcissas[i]) + linearOffset)); - } + midpointsum *= step; + sum = 0.5 * (sum + midpointsum); + step *= 0.5; - midpointsum *= step; - sum = 0.5 * (sum + midpointsum); - step *= 0.5; + double delta = Math.Abs(sum - midpointsum); - double delta = Math.Abs(sum - midpointsum); + if (level == 1) + { + previousDelta = delta; + continue; + } - if (level == 1) - { + double r = Math.Log(delta) / Math.Log(previousDelta); previousDelta = delta; - continue; - } - double r = Math.Log(delta) / Math.Log(previousDelta); - previousDelta = delta; + if (r > 1.9 && r < 2.1) + { + // convergence region + delta = Math.Sqrt(delta); + } - if (r > 1.9 && r < 2.1) - { - // convergence region - delta = Math.Sqrt(delta); + if (sum.AlmostEqualWithRelativeError(midpointsum, delta, targetRelativeError)) + { + break; + } } - if (sum.AlmostEqualWithRelativeError(midpointsum, delta, targetRelativeError)) - { - break; - } + return sum * linearSlope; } - - return sum * linearSlope; } } } diff --git a/src/Numerics/LinearAlgebra/Complex/Solvers/Iterator.cs b/src/Numerics/LinearAlgebra/Complex/Solvers/Iterator.cs index c4c75eeb..3e8916fb 100644 --- a/src/Numerics/LinearAlgebra/Complex/Solvers/Iterator.cs +++ b/src/Numerics/LinearAlgebra/Complex/Solvers/Iterator.cs @@ -179,11 +179,11 @@ namespace MathNet.Numerics.LinearAlgebra.Complex.Solvers /// Gets an IEnumerator that enumerates over all the stored stop criteria. /// /// Used for testing only. - internal IEnumerator StoredStopCriteria + internal IEnumerable StoredStopCriteria { get { - return _stopCriterias.Select(criterium => criterium.Value).GetEnumerator(); + return _stopCriterias.Select(criterium => criterium.Value); } } diff --git a/src/Numerics/LinearAlgebra/Complex32/Solvers/Iterator.cs b/src/Numerics/LinearAlgebra/Complex32/Solvers/Iterator.cs index 008091fb..3002f188 100644 --- a/src/Numerics/LinearAlgebra/Complex32/Solvers/Iterator.cs +++ b/src/Numerics/LinearAlgebra/Complex32/Solvers/Iterator.cs @@ -179,11 +179,11 @@ namespace MathNet.Numerics.LinearAlgebra.Complex32.Solvers /// Gets an IEnumerator that enumerates over all the stored stop criteria. /// /// Used for testing only. - internal IEnumerator StoredStopCriteria + internal IEnumerable StoredStopCriteria { get { - return _stopCriterias.Select(criterium => criterium.Value).GetEnumerator(); + return _stopCriterias.Select(criterium => criterium.Value); } } diff --git a/src/Numerics/LinearAlgebra/Double/Solvers/Iterator.cs b/src/Numerics/LinearAlgebra/Double/Solvers/Iterator.cs index 98361b7e..307b41fa 100644 --- a/src/Numerics/LinearAlgebra/Double/Solvers/Iterator.cs +++ b/src/Numerics/LinearAlgebra/Double/Solvers/Iterator.cs @@ -179,11 +179,11 @@ namespace MathNet.Numerics.LinearAlgebra.Double.Solvers /// Gets an IEnumerator that enumerates over all the stored stop criteria. /// /// Used for testing only. - internal IEnumerator StoredStopCriteria + internal IEnumerable StoredStopCriteria { get { - return _stopCriterias.Select(criterium => criterium.Value).GetEnumerator(); + return _stopCriterias.Select(criterium => criterium.Value); } } diff --git a/src/Numerics/LinearAlgebra/Single/Solvers/Iterator.cs b/src/Numerics/LinearAlgebra/Single/Solvers/Iterator.cs index ad01b5fa..f2fe30c6 100644 --- a/src/Numerics/LinearAlgebra/Single/Solvers/Iterator.cs +++ b/src/Numerics/LinearAlgebra/Single/Solvers/Iterator.cs @@ -179,11 +179,11 @@ namespace MathNet.Numerics.LinearAlgebra.Single.Solvers /// Gets an IEnumerator that enumerates over all the stored stop criteria. /// /// Used for testing only. - internal IEnumerator StoredStopCriteria + internal IEnumerable StoredStopCriteria { get { - return _stopCriterias.Select(criterium => criterium.Value).GetEnumerator(); + return _stopCriterias.Select(criterium => criterium.Value); } } diff --git a/src/Numerics/Statistics/Correlation.cs b/src/Numerics/Statistics/Correlation.cs index 698ae8c0..e811f1a7 100644 --- a/src/Numerics/Statistics/Correlation.cs +++ b/src/Numerics/Statistics/Correlation.cs @@ -49,27 +49,31 @@ namespace MathNet.Numerics.Statistics { int n = 0; double r = 0.0; + + // BUG: PERFORMANCE degraded due to tripple iteration over both IEnumerables + double meanA = dataA.Mean(); double meanB = dataB.Mean(); double sdevA = dataA.StandardDeviation(); double sdevB = dataB.StandardDeviation(); - IEnumerator ieA = dataA.GetEnumerator(); - IEnumerator ieB = dataB.GetEnumerator(); - - while (ieA.MoveNext()) + using (IEnumerator ieA = dataA.GetEnumerator()) + using (IEnumerator ieB = dataB.GetEnumerator()) { - if (ieB.MoveNext() == false) + while (ieA.MoveNext()) { - throw new ArgumentOutOfRangeException("Datasets dataA and dataB need to have the same length."); - } + if (!ieB.MoveNext()) + { + throw new ArgumentOutOfRangeException("dataB", "Datasets dataA and dataB need to have the same length. dataB is shorter."); + } - n++; - r += (ieA.Current - meanA) * (ieB.Current - meanB) / (sdevA * sdevB); - } - if (ieB.MoveNext() == true) - { - throw new ArgumentOutOfRangeException("Datasets dataA and dataB need to have the same length."); + n++; + r += (ieA.Current - meanA) * (ieB.Current - meanB) / (sdevA * sdevB); + } + if (ieB.MoveNext()) + { + throw new ArgumentOutOfRangeException("dataA", "Datasets dataA and dataB need to have the same length. dataA is shorter."); + } } return r / (n - 1); diff --git a/src/Numerics/Statistics/Statistics.cs b/src/Numerics/Statistics/Statistics.cs index 6b76b6ef..a95c2732 100644 --- a/src/Numerics/Statistics/Statistics.cs +++ b/src/Numerics/Statistics/Statistics.cs @@ -102,20 +102,22 @@ namespace MathNet.Numerics.Statistics double t = 0; ulong j = 0; - IEnumerator iterator = data.GetEnumerator(); - if (iterator.MoveNext()) + using (IEnumerator iterator = data.GetEnumerator()) { - j++; - t = iterator.Current; - } + if (iterator.MoveNext()) + { + j++; + t = iterator.Current; + } - while (iterator.MoveNext()) - { - j++; - double xi = iterator.Current; - t += xi; - double diff = (j * xi) - t; - variance += (diff * diff) / (j * (j - 1)); + while (iterator.MoveNext()) + { + j++; + double xi = iterator.Current; + t += xi; + double diff = (j * xi) - t; + variance += (diff * diff) / (j * (j - 1)); + } } return variance / (j - 1); @@ -137,33 +139,34 @@ namespace MathNet.Numerics.Statistics double t = 0; ulong j = 0; - IEnumerator iterator = data.GetEnumerator(); - - while (true) + using (IEnumerator iterator = data.GetEnumerator()) { - bool hasNext = iterator.MoveNext(); - if (!hasNext) + while (true) { - break; - } + bool hasNext = iterator.MoveNext(); + if (!hasNext) + { + break; + } - if (iterator.Current.HasValue) - { - j++; - t = iterator.Current.Value; - break; + if (iterator.Current.HasValue) + { + j++; + t = iterator.Current.Value; + break; + } } - } - while (iterator.MoveNext()) - { - if (iterator.Current.HasValue) + while (iterator.MoveNext()) { - j++; - double xi = iterator.Current.Value; - t += xi; - double diff = (j * xi) - t; - variance += (diff * diff) / (j * (j - 1)); + if (iterator.Current.HasValue) + { + j++; + double xi = iterator.Current.Value; + t += xi; + double diff = (j * xi) - t; + variance += (diff * diff) / (j * (j - 1)); + } } } @@ -186,20 +189,22 @@ namespace MathNet.Numerics.Statistics double t = 0; ulong j = 0; - IEnumerator iterator = data.GetEnumerator(); - if (iterator.MoveNext()) + using (IEnumerator iterator = data.GetEnumerator()) { - j++; - t = iterator.Current; - } + if (iterator.MoveNext()) + { + j++; + t = iterator.Current; + } - while (iterator.MoveNext()) - { - j++; - double xi = iterator.Current; - t += xi; - double diff = (j * xi) - t; - variance += (diff * diff) / (j * (j - 1)); + while (iterator.MoveNext()) + { + j++; + double xi = iterator.Current; + t += xi; + double diff = (j * xi) - t; + variance += (diff * diff) / (j * (j - 1)); + } } return variance / j; @@ -221,33 +226,34 @@ namespace MathNet.Numerics.Statistics double t = 0; ulong j = 0; - IEnumerator iterator = data.GetEnumerator(); - - while (true) + using (IEnumerator iterator = data.GetEnumerator()) { - bool hasNext = iterator.MoveNext(); - if (!hasNext) + while (true) { - break; - } + bool hasNext = iterator.MoveNext(); + if (!hasNext) + { + break; + } - if (iterator.Current.HasValue) - { - j++; - t = iterator.Current.Value; - break; + if (iterator.Current.HasValue) + { + j++; + t = iterator.Current.Value; + break; + } } - } - while (iterator.MoveNext()) - { - if (iterator.Current.HasValue) + while (iterator.MoveNext()) { - j++; - double xi = iterator.Current.Value; - t += xi; - double diff = (j * xi) - t; - variance += (diff * diff) / (j * (j - 1)); + if (iterator.Current.HasValue) + { + j++; + double xi = iterator.Current.Value; + t += xi; + double diff = (j * xi) - t; + variance += (diff * diff) / (j * (j - 1)); + } } } diff --git a/src/UnitTests/LinearAlgebraTests/Complex/DiagonalMatrixTests.cs b/src/UnitTests/LinearAlgebraTests/Complex/DiagonalMatrixTests.cs index f228ff55..08a78a86 100644 --- a/src/UnitTests/LinearAlgebraTests/Complex/DiagonalMatrixTests.cs +++ b/src/UnitTests/LinearAlgebraTests/Complex/DiagonalMatrixTests.cs @@ -536,61 +536,62 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex public override void CanUseIndexedEnumerator() { var matrix = TestMatrices["Singular3x3"]; - var enumerator = matrix.IndexedEnumerator().GetEnumerator(); - - enumerator.MoveNext(); - var item = enumerator.Current; - Assert.AreEqual(0, item.Item1); - Assert.AreEqual(0, item.Item2); - Assert.AreEqual(new Complex(1.0, 1.0), item.Item3); - - enumerator.MoveNext(); - item = enumerator.Current; - Assert.AreEqual(0, item.Item1); - Assert.AreEqual(1, item.Item2); - Assert.AreEqual(Complex.Zero, item.Item3); - - enumerator.MoveNext(); - item = enumerator.Current; - Assert.AreEqual(0, item.Item1); - Assert.AreEqual(2, item.Item2); - Assert.AreEqual(Complex.Zero, item.Item3); - - enumerator.MoveNext(); - item = enumerator.Current; - Assert.AreEqual(1, item.Item1); - Assert.AreEqual(0, item.Item2); - Assert.AreEqual(Complex.Zero, item.Item3); - - enumerator.MoveNext(); - item = enumerator.Current; - Assert.AreEqual(1, item.Item1); - Assert.AreEqual(1, item.Item2); - Assert.AreEqual(Complex.Zero, item.Item3); - - enumerator.MoveNext(); - item = enumerator.Current; - Assert.AreEqual(1, item.Item1); - Assert.AreEqual(2, item.Item2); - Assert.AreEqual(Complex.Zero, item.Item3); - - enumerator.MoveNext(); - item = enumerator.Current; - Assert.AreEqual(2, item.Item1); - Assert.AreEqual(0, item.Item2); - Assert.AreEqual(Complex.Zero, item.Item3); - - enumerator.MoveNext(); - item = enumerator.Current; - Assert.AreEqual(2, item.Item1); - Assert.AreEqual(1, item.Item2); - Assert.AreEqual(Complex.Zero, item.Item3); - - enumerator.MoveNext(); - item = enumerator.Current; - Assert.AreEqual(2, item.Item1); - Assert.AreEqual(2, item.Item2); - Assert.AreEqual(new Complex(3.0, 1.0), item.Item3); + using (var enumerator = matrix.IndexedEnumerator().GetEnumerator()) + { + enumerator.MoveNext(); + var item = enumerator.Current; + Assert.AreEqual(0, item.Item1); + Assert.AreEqual(0, item.Item2); + Assert.AreEqual(new Complex(1.0, 1.0), item.Item3); + + enumerator.MoveNext(); + item = enumerator.Current; + Assert.AreEqual(0, item.Item1); + Assert.AreEqual(1, item.Item2); + Assert.AreEqual(Complex.Zero, item.Item3); + + enumerator.MoveNext(); + item = enumerator.Current; + Assert.AreEqual(0, item.Item1); + Assert.AreEqual(2, item.Item2); + Assert.AreEqual(Complex.Zero, item.Item3); + + enumerator.MoveNext(); + item = enumerator.Current; + Assert.AreEqual(1, item.Item1); + Assert.AreEqual(0, item.Item2); + Assert.AreEqual(Complex.Zero, item.Item3); + + enumerator.MoveNext(); + item = enumerator.Current; + Assert.AreEqual(1, item.Item1); + Assert.AreEqual(1, item.Item2); + Assert.AreEqual(Complex.Zero, item.Item3); + + enumerator.MoveNext(); + item = enumerator.Current; + Assert.AreEqual(1, item.Item1); + Assert.AreEqual(2, item.Item2); + Assert.AreEqual(Complex.Zero, item.Item3); + + enumerator.MoveNext(); + item = enumerator.Current; + Assert.AreEqual(2, item.Item1); + Assert.AreEqual(0, item.Item2); + Assert.AreEqual(Complex.Zero, item.Item3); + + enumerator.MoveNext(); + item = enumerator.Current; + Assert.AreEqual(2, item.Item1); + Assert.AreEqual(1, item.Item2); + Assert.AreEqual(Complex.Zero, item.Item3); + + enumerator.MoveNext(); + item = enumerator.Current; + Assert.AreEqual(2, item.Item1); + Assert.AreEqual(2, item.Item2); + Assert.AreEqual(new Complex(3.0, 1.0), item.Item3); + } } /// diff --git a/src/UnitTests/LinearAlgebraTests/Complex/MatrixTests.cs b/src/UnitTests/LinearAlgebraTests/Complex/MatrixTests.cs index a5abd476..4e6a54ba 100644 --- a/src/UnitTests/LinearAlgebraTests/Complex/MatrixTests.cs +++ b/src/UnitTests/LinearAlgebraTests/Complex/MatrixTests.cs @@ -1893,61 +1893,62 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex public virtual void CanUseIndexedEnumerator() { var matrix = TestMatrices["Singular3x3"]; - var enumerator = matrix.IndexedEnumerator().GetEnumerator(); - - enumerator.MoveNext(); - var item = enumerator.Current; - Assert.AreEqual(0, item.Item1); - Assert.AreEqual(0, item.Item2); - Assert.AreEqual(new Complex(1.0, 1.0), item.Item3); - - enumerator.MoveNext(); - item = enumerator.Current; - Assert.AreEqual(0, item.Item1); - Assert.AreEqual(1, item.Item2); - Assert.AreEqual(new Complex(1.0, 1.0), item.Item3); - - enumerator.MoveNext(); - item = enumerator.Current; - Assert.AreEqual(0, item.Item1); - Assert.AreEqual(2, item.Item2); - Assert.AreEqual(new Complex(2.0, 1.0), item.Item3); - - enumerator.MoveNext(); - item = enumerator.Current; - Assert.AreEqual(1, item.Item1); - Assert.AreEqual(0, item.Item2); - Assert.AreEqual(new Complex(1.0, 1.0), item.Item3); - - enumerator.MoveNext(); - item = enumerator.Current; - Assert.AreEqual(1, item.Item1); - Assert.AreEqual(1, item.Item2); - Assert.AreEqual(new Complex(1.0, 1.0), item.Item3); - - enumerator.MoveNext(); - item = enumerator.Current; - Assert.AreEqual(1, item.Item1); - Assert.AreEqual(2, item.Item2); - Assert.AreEqual(new Complex(2.0, 1.0), item.Item3); - - enumerator.MoveNext(); - item = enumerator.Current; - Assert.AreEqual(2, item.Item1); - Assert.AreEqual(0, item.Item2); - Assert.AreEqual(new Complex(1.0, 1.0), item.Item3); - - enumerator.MoveNext(); - item = enumerator.Current; - Assert.AreEqual(2, item.Item1); - Assert.AreEqual(1, item.Item2); - Assert.AreEqual(new Complex(1.0, 1.0), item.Item3); - - enumerator.MoveNext(); - item = enumerator.Current; - Assert.AreEqual(2, item.Item1); - Assert.AreEqual(2, item.Item2); - Assert.AreEqual(new Complex(2.0, 1.0), item.Item3); + using (var enumerator = matrix.IndexedEnumerator().GetEnumerator()) + { + enumerator.MoveNext(); + var item = enumerator.Current; + Assert.AreEqual(0, item.Item1); + Assert.AreEqual(0, item.Item2); + Assert.AreEqual(new Complex(1.0, 1.0), item.Item3); + + enumerator.MoveNext(); + item = enumerator.Current; + Assert.AreEqual(0, item.Item1); + Assert.AreEqual(1, item.Item2); + Assert.AreEqual(new Complex(1.0, 1.0), item.Item3); + + enumerator.MoveNext(); + item = enumerator.Current; + Assert.AreEqual(0, item.Item1); + Assert.AreEqual(2, item.Item2); + Assert.AreEqual(new Complex(2.0, 1.0), item.Item3); + + enumerator.MoveNext(); + item = enumerator.Current; + Assert.AreEqual(1, item.Item1); + Assert.AreEqual(0, item.Item2); + Assert.AreEqual(new Complex(1.0, 1.0), item.Item3); + + enumerator.MoveNext(); + item = enumerator.Current; + Assert.AreEqual(1, item.Item1); + Assert.AreEqual(1, item.Item2); + Assert.AreEqual(new Complex(1.0, 1.0), item.Item3); + + enumerator.MoveNext(); + item = enumerator.Current; + Assert.AreEqual(1, item.Item1); + Assert.AreEqual(2, item.Item2); + Assert.AreEqual(new Complex(2.0, 1.0), item.Item3); + + enumerator.MoveNext(); + item = enumerator.Current; + Assert.AreEqual(2, item.Item1); + Assert.AreEqual(0, item.Item2); + Assert.AreEqual(new Complex(1.0, 1.0), item.Item3); + + enumerator.MoveNext(); + item = enumerator.Current; + Assert.AreEqual(2, item.Item1); + Assert.AreEqual(1, item.Item2); + Assert.AreEqual(new Complex(1.0, 1.0), item.Item3); + + enumerator.MoveNext(); + item = enumerator.Current; + Assert.AreEqual(2, item.Item1); + Assert.AreEqual(2, item.Item2); + Assert.AreEqual(new Complex(2.0, 1.0), item.Item3); + } } /// diff --git a/src/UnitTests/LinearAlgebraTests/Complex/Solvers/IteratorTest.cs b/src/UnitTests/LinearAlgebraTests/Complex/Solvers/IteratorTest.cs index e15ff400..76136223 100644 --- a/src/UnitTests/LinearAlgebraTests/Complex/Solvers/IteratorTest.cs +++ b/src/UnitTests/LinearAlgebraTests/Complex/Solvers/IteratorTest.cs @@ -104,10 +104,8 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers // Check that we have all the criteria Assert.AreEqual(criteria.Count, iterator.NumberOfCriteria, "Incorrect criterium count"); - var enumerator = iterator.StoredStopCriteria; - while (enumerator.MoveNext()) + foreach (var criterium in iterator.StoredStopCriteria) { - var criterium = enumerator.Current; Assert.IsTrue(criteria.Exists(c => ReferenceEquals(c, criterium)), "Criterium missing"); } } @@ -159,10 +157,8 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers // Check that we have all the criteria Assert.AreEqual(criteria.Count, iterator.NumberOfCriteria, "Incorrect criterium count"); - var enumerator = iterator.StoredStopCriteria; - while (enumerator.MoveNext()) + foreach (var criterium in iterator.StoredStopCriteria) { - var criterium = enumerator.Current; Assert.IsTrue(criteria.Exists(c => ReferenceEquals(c, criterium)), "Criterium missing"); } } @@ -418,11 +414,9 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers Assert.AreEqual(iterator.NumberOfCriteria, clone.NumberOfCriteria, "Incorrect criterium count"); // ReSharper restore PossibleNullReferenceException - var enumerator = clone.StoredStopCriteria; - while (enumerator.MoveNext()) + foreach (var criterium in clone.StoredStopCriteria) { - var criterium = enumerator.Current; - Assert.IsTrue(criteria.Exists(c => c.GetType().Equals(criterium.GetType())), "Criterium missing"); + Assert.IsTrue(criteria.Exists(c => c.GetType() == criterium.GetType()), "Criterium missing"); } } } diff --git a/src/UnitTests/LinearAlgebraTests/Complex32/DiagonalMatrixTests.cs b/src/UnitTests/LinearAlgebraTests/Complex32/DiagonalMatrixTests.cs index e789e8f1..008a6147 100644 --- a/src/UnitTests/LinearAlgebraTests/Complex32/DiagonalMatrixTests.cs +++ b/src/UnitTests/LinearAlgebraTests/Complex32/DiagonalMatrixTests.cs @@ -536,61 +536,62 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32 public override void CanUseIndexedEnumerator() { var matrix = TestMatrices["Singular3x3"]; - var enumerator = matrix.IndexedEnumerator().GetEnumerator(); - - enumerator.MoveNext(); - var item = enumerator.Current; - Assert.AreEqual(0, item.Item1); - Assert.AreEqual(0, item.Item2); - Assert.AreEqual(new Complex32(1.0f, 1.0f), item.Item3); - - enumerator.MoveNext(); - item = enumerator.Current; - Assert.AreEqual(0, item.Item1); - Assert.AreEqual(1, item.Item2); - Assert.AreEqual(Complex32.Zero, item.Item3); - - enumerator.MoveNext(); - item = enumerator.Current; - Assert.AreEqual(0, item.Item1); - Assert.AreEqual(2, item.Item2); - Assert.AreEqual(Complex32.Zero, item.Item3); - - enumerator.MoveNext(); - item = enumerator.Current; - Assert.AreEqual(1, item.Item1); - Assert.AreEqual(0, item.Item2); - Assert.AreEqual(Complex32.Zero, item.Item3); - - enumerator.MoveNext(); - item = enumerator.Current; - Assert.AreEqual(1, item.Item1); - Assert.AreEqual(1, item.Item2); - Assert.AreEqual(Complex32.Zero, item.Item3); - - enumerator.MoveNext(); - item = enumerator.Current; - Assert.AreEqual(1, item.Item1); - Assert.AreEqual(2, item.Item2); - Assert.AreEqual(Complex32.Zero, item.Item3); - - enumerator.MoveNext(); - item = enumerator.Current; - Assert.AreEqual(2, item.Item1); - Assert.AreEqual(0, item.Item2); - Assert.AreEqual(Complex32.Zero, item.Item3); - - enumerator.MoveNext(); - item = enumerator.Current; - Assert.AreEqual(2, item.Item1); - Assert.AreEqual(1, item.Item2); - Assert.AreEqual(Complex32.Zero, item.Item3); - - enumerator.MoveNext(); - item = enumerator.Current; - Assert.AreEqual(2, item.Item1); - Assert.AreEqual(2, item.Item2); - Assert.AreEqual(new Complex32(3.0f, 1.0f), item.Item3); + using (var enumerator = matrix.IndexedEnumerator().GetEnumerator()) + { + enumerator.MoveNext(); + var item = enumerator.Current; + Assert.AreEqual(0, item.Item1); + Assert.AreEqual(0, item.Item2); + Assert.AreEqual(new Complex32(1.0f, 1.0f), item.Item3); + + enumerator.MoveNext(); + item = enumerator.Current; + Assert.AreEqual(0, item.Item1); + Assert.AreEqual(1, item.Item2); + Assert.AreEqual(Complex32.Zero, item.Item3); + + enumerator.MoveNext(); + item = enumerator.Current; + Assert.AreEqual(0, item.Item1); + Assert.AreEqual(2, item.Item2); + Assert.AreEqual(Complex32.Zero, item.Item3); + + enumerator.MoveNext(); + item = enumerator.Current; + Assert.AreEqual(1, item.Item1); + Assert.AreEqual(0, item.Item2); + Assert.AreEqual(Complex32.Zero, item.Item3); + + enumerator.MoveNext(); + item = enumerator.Current; + Assert.AreEqual(1, item.Item1); + Assert.AreEqual(1, item.Item2); + Assert.AreEqual(Complex32.Zero, item.Item3); + + enumerator.MoveNext(); + item = enumerator.Current; + Assert.AreEqual(1, item.Item1); + Assert.AreEqual(2, item.Item2); + Assert.AreEqual(Complex32.Zero, item.Item3); + + enumerator.MoveNext(); + item = enumerator.Current; + Assert.AreEqual(2, item.Item1); + Assert.AreEqual(0, item.Item2); + Assert.AreEqual(Complex32.Zero, item.Item3); + + enumerator.MoveNext(); + item = enumerator.Current; + Assert.AreEqual(2, item.Item1); + Assert.AreEqual(1, item.Item2); + Assert.AreEqual(Complex32.Zero, item.Item3); + + enumerator.MoveNext(); + item = enumerator.Current; + Assert.AreEqual(2, item.Item1); + Assert.AreEqual(2, item.Item2); + Assert.AreEqual(new Complex32(3.0f, 1.0f), item.Item3); + } } /// diff --git a/src/UnitTests/LinearAlgebraTests/Complex32/MatrixTests.cs b/src/UnitTests/LinearAlgebraTests/Complex32/MatrixTests.cs index 59f831e8..58952d08 100644 --- a/src/UnitTests/LinearAlgebraTests/Complex32/MatrixTests.cs +++ b/src/UnitTests/LinearAlgebraTests/Complex32/MatrixTests.cs @@ -1893,61 +1893,62 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32 public virtual void CanUseIndexedEnumerator() { var matrix = TestMatrices["Singular3x3"]; - var enumerator = matrix.IndexedEnumerator().GetEnumerator(); - - enumerator.MoveNext(); - var item = enumerator.Current; - Assert.AreEqual(0, item.Item1); - Assert.AreEqual(0, item.Item2); - Assert.AreEqual(new Complex32(1.0f, 1.0f), item.Item3); - - enumerator.MoveNext(); - item = enumerator.Current; - Assert.AreEqual(0, item.Item1); - Assert.AreEqual(1, item.Item2); - Assert.AreEqual(new Complex32(1.0f, 1.0f), item.Item3); - - enumerator.MoveNext(); - item = enumerator.Current; - Assert.AreEqual(0, item.Item1); - Assert.AreEqual(2, item.Item2); - Assert.AreEqual(new Complex32(2.0f, 1.0f), item.Item3); - - enumerator.MoveNext(); - item = enumerator.Current; - Assert.AreEqual(1, item.Item1); - Assert.AreEqual(0, item.Item2); - Assert.AreEqual(new Complex32(1.0f, 1.0f), item.Item3); - - enumerator.MoveNext(); - item = enumerator.Current; - Assert.AreEqual(1, item.Item1); - Assert.AreEqual(1, item.Item2); - Assert.AreEqual(new Complex32(1.0f, 1.0f), item.Item3); - - enumerator.MoveNext(); - item = enumerator.Current; - Assert.AreEqual(1, item.Item1); - Assert.AreEqual(2, item.Item2); - Assert.AreEqual(new Complex32(2.0f, 1.0f), item.Item3); - - enumerator.MoveNext(); - item = enumerator.Current; - Assert.AreEqual(2, item.Item1); - Assert.AreEqual(0, item.Item2); - Assert.AreEqual(new Complex32(1.0f, 1.0f), item.Item3); - - enumerator.MoveNext(); - item = enumerator.Current; - Assert.AreEqual(2, item.Item1); - Assert.AreEqual(1, item.Item2); - Assert.AreEqual(new Complex32(1.0f, 1.0f), item.Item3); - - enumerator.MoveNext(); - item = enumerator.Current; - Assert.AreEqual(2, item.Item1); - Assert.AreEqual(2, item.Item2); - Assert.AreEqual(new Complex32(2.0f, 1.0f), item.Item3); + using (var enumerator = matrix.IndexedEnumerator().GetEnumerator()) + { + enumerator.MoveNext(); + var item = enumerator.Current; + Assert.AreEqual(0, item.Item1); + Assert.AreEqual(0, item.Item2); + Assert.AreEqual(new Complex32(1.0f, 1.0f), item.Item3); + + enumerator.MoveNext(); + item = enumerator.Current; + Assert.AreEqual(0, item.Item1); + Assert.AreEqual(1, item.Item2); + Assert.AreEqual(new Complex32(1.0f, 1.0f), item.Item3); + + enumerator.MoveNext(); + item = enumerator.Current; + Assert.AreEqual(0, item.Item1); + Assert.AreEqual(2, item.Item2); + Assert.AreEqual(new Complex32(2.0f, 1.0f), item.Item3); + + enumerator.MoveNext(); + item = enumerator.Current; + Assert.AreEqual(1, item.Item1); + Assert.AreEqual(0, item.Item2); + Assert.AreEqual(new Complex32(1.0f, 1.0f), item.Item3); + + enumerator.MoveNext(); + item = enumerator.Current; + Assert.AreEqual(1, item.Item1); + Assert.AreEqual(1, item.Item2); + Assert.AreEqual(new Complex32(1.0f, 1.0f), item.Item3); + + enumerator.MoveNext(); + item = enumerator.Current; + Assert.AreEqual(1, item.Item1); + Assert.AreEqual(2, item.Item2); + Assert.AreEqual(new Complex32(2.0f, 1.0f), item.Item3); + + enumerator.MoveNext(); + item = enumerator.Current; + Assert.AreEqual(2, item.Item1); + Assert.AreEqual(0, item.Item2); + Assert.AreEqual(new Complex32(1.0f, 1.0f), item.Item3); + + enumerator.MoveNext(); + item = enumerator.Current; + Assert.AreEqual(2, item.Item1); + Assert.AreEqual(1, item.Item2); + Assert.AreEqual(new Complex32(1.0f, 1.0f), item.Item3); + + enumerator.MoveNext(); + item = enumerator.Current; + Assert.AreEqual(2, item.Item1); + Assert.AreEqual(2, item.Item2); + Assert.AreEqual(new Complex32(2.0f, 1.0f), item.Item3); + } } /// diff --git a/src/UnitTests/LinearAlgebraTests/Complex32/Solvers/IteratorTest.cs b/src/UnitTests/LinearAlgebraTests/Complex32/Solvers/IteratorTest.cs index 72db8743..160c7f66 100644 --- a/src/UnitTests/LinearAlgebraTests/Complex32/Solvers/IteratorTest.cs +++ b/src/UnitTests/LinearAlgebraTests/Complex32/Solvers/IteratorTest.cs @@ -103,10 +103,8 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers // Check that we have all the criteria Assert.AreEqual(criteria.Count, iterator.NumberOfCriteria, "Incorrect criterium count"); - var enumerator = iterator.StoredStopCriteria; - while (enumerator.MoveNext()) + foreach (var criterium in iterator.StoredStopCriteria) { - var criterium = enumerator.Current; Assert.IsTrue(criteria.Exists(c => ReferenceEquals(c, criterium)), "Criterium missing"); } } @@ -158,10 +156,8 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers // Check that we have all the criteria Assert.AreEqual(criteria.Count, iterator.NumberOfCriteria, "Incorrect criterium count"); - var enumerator = iterator.StoredStopCriteria; - while (enumerator.MoveNext()) + foreach (var criterium in iterator.StoredStopCriteria) { - var criterium = enumerator.Current; Assert.IsTrue(criteria.Exists(c => ReferenceEquals(c, criterium)), "Criterium missing"); } } @@ -417,11 +413,9 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers Assert.AreEqual(iterator.NumberOfCriteria, clone.NumberOfCriteria, "Incorrect criterium count"); // ReSharper restore PossibleNullReferenceException - var enumerator = clone.StoredStopCriteria; - while (enumerator.MoveNext()) + foreach (var criterium in clone.StoredStopCriteria) { - var criterium = enumerator.Current; - Assert.IsTrue(criteria.Exists(c => c.GetType().Equals(criterium.GetType())), "Criterium missing"); + Assert.IsTrue(criteria.Exists(c => c.GetType() == criterium.GetType()), "Criterium missing"); } } } diff --git a/src/UnitTests/LinearAlgebraTests/Double/DiagonalMatrixTests.cs b/src/UnitTests/LinearAlgebraTests/Double/DiagonalMatrixTests.cs index d14d2951..60431a41 100644 --- a/src/UnitTests/LinearAlgebraTests/Double/DiagonalMatrixTests.cs +++ b/src/UnitTests/LinearAlgebraTests/Double/DiagonalMatrixTests.cs @@ -536,61 +536,62 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double public override void CanUseIndexedEnumerator() { var matrix = TestMatrices["Singular3x3"]; - var enumerator = matrix.IndexedEnumerator().GetEnumerator(); - - enumerator.MoveNext(); - var item = enumerator.Current; - Assert.AreEqual(0, item.Item1); - Assert.AreEqual(0, item.Item2); - Assert.AreEqual(1.0, item.Item3); - - enumerator.MoveNext(); - item = enumerator.Current; - Assert.AreEqual(0, item.Item1); - Assert.AreEqual(1, item.Item2); - Assert.AreEqual(0.0, item.Item3); - - enumerator.MoveNext(); - item = enumerator.Current; - Assert.AreEqual(0, item.Item1); - Assert.AreEqual(2, item.Item2); - Assert.AreEqual(0.0, item.Item3); - - enumerator.MoveNext(); - item = enumerator.Current; - Assert.AreEqual(1, item.Item1); - Assert.AreEqual(0, item.Item2); - Assert.AreEqual(0.0, item.Item3); - - enumerator.MoveNext(); - item = enumerator.Current; - Assert.AreEqual(1, item.Item1); - Assert.AreEqual(1, item.Item2); - Assert.AreEqual(0.0, item.Item3); - - enumerator.MoveNext(); - item = enumerator.Current; - Assert.AreEqual(1, item.Item1); - Assert.AreEqual(2, item.Item2); - Assert.AreEqual(0.0, item.Item3); - - enumerator.MoveNext(); - item = enumerator.Current; - Assert.AreEqual(2, item.Item1); - Assert.AreEqual(0, item.Item2); - Assert.AreEqual(0.0, item.Item3); - - enumerator.MoveNext(); - item = enumerator.Current; - Assert.AreEqual(2, item.Item1); - Assert.AreEqual(1, item.Item2); - Assert.AreEqual(0.0, item.Item3); - - enumerator.MoveNext(); - item = enumerator.Current; - Assert.AreEqual(2, item.Item1); - Assert.AreEqual(2, item.Item2); - Assert.AreEqual(3.0, item.Item3); + using (var enumerator = matrix.IndexedEnumerator().GetEnumerator()) + { + enumerator.MoveNext(); + var item = enumerator.Current; + Assert.AreEqual(0, item.Item1); + Assert.AreEqual(0, item.Item2); + Assert.AreEqual(1.0, item.Item3); + + enumerator.MoveNext(); + item = enumerator.Current; + Assert.AreEqual(0, item.Item1); + Assert.AreEqual(1, item.Item2); + Assert.AreEqual(0.0, item.Item3); + + enumerator.MoveNext(); + item = enumerator.Current; + Assert.AreEqual(0, item.Item1); + Assert.AreEqual(2, item.Item2); + Assert.AreEqual(0.0, item.Item3); + + enumerator.MoveNext(); + item = enumerator.Current; + Assert.AreEqual(1, item.Item1); + Assert.AreEqual(0, item.Item2); + Assert.AreEqual(0.0, item.Item3); + + enumerator.MoveNext(); + item = enumerator.Current; + Assert.AreEqual(1, item.Item1); + Assert.AreEqual(1, item.Item2); + Assert.AreEqual(0.0, item.Item3); + + enumerator.MoveNext(); + item = enumerator.Current; + Assert.AreEqual(1, item.Item1); + Assert.AreEqual(2, item.Item2); + Assert.AreEqual(0.0, item.Item3); + + enumerator.MoveNext(); + item = enumerator.Current; + Assert.AreEqual(2, item.Item1); + Assert.AreEqual(0, item.Item2); + Assert.AreEqual(0.0, item.Item3); + + enumerator.MoveNext(); + item = enumerator.Current; + Assert.AreEqual(2, item.Item1); + Assert.AreEqual(1, item.Item2); + Assert.AreEqual(0.0, item.Item3); + + enumerator.MoveNext(); + item = enumerator.Current; + Assert.AreEqual(2, item.Item1); + Assert.AreEqual(2, item.Item2); + Assert.AreEqual(3.0, item.Item3); + } } /// diff --git a/src/UnitTests/LinearAlgebraTests/Double/MatrixTests.cs b/src/UnitTests/LinearAlgebraTests/Double/MatrixTests.cs index f942a87c..45c04cd5 100644 --- a/src/UnitTests/LinearAlgebraTests/Double/MatrixTests.cs +++ b/src/UnitTests/LinearAlgebraTests/Double/MatrixTests.cs @@ -1830,61 +1830,62 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double public virtual void CanUseIndexedEnumerator() { var matrix = TestMatrices["Singular3x3"]; - var enumerator = matrix.IndexedEnumerator().GetEnumerator(); - - enumerator.MoveNext(); - var item = enumerator.Current; - Assert.AreEqual(0, item.Item1); - Assert.AreEqual(0, item.Item2); - Assert.AreEqual(1.0, item.Item3); - - enumerator.MoveNext(); - item = enumerator.Current; - Assert.AreEqual(0, item.Item1); - Assert.AreEqual(1, item.Item2); - Assert.AreEqual(1.0, item.Item3); - - enumerator.MoveNext(); - item = enumerator.Current; - Assert.AreEqual(0, item.Item1); - Assert.AreEqual(2, item.Item2); - Assert.AreEqual(2.0, item.Item3); - - enumerator.MoveNext(); - item = enumerator.Current; - Assert.AreEqual(1, item.Item1); - Assert.AreEqual(0, item.Item2); - Assert.AreEqual(1.0, item.Item3); - - enumerator.MoveNext(); - item = enumerator.Current; - Assert.AreEqual(1, item.Item1); - Assert.AreEqual(1, item.Item2); - Assert.AreEqual(1.0, item.Item3); - - enumerator.MoveNext(); - item = enumerator.Current; - Assert.AreEqual(1, item.Item1); - Assert.AreEqual(2, item.Item2); - Assert.AreEqual(2.0, item.Item3); - - enumerator.MoveNext(); - item = enumerator.Current; - Assert.AreEqual(2, item.Item1); - Assert.AreEqual(0, item.Item2); - Assert.AreEqual(1.0, item.Item3); - - enumerator.MoveNext(); - item = enumerator.Current; - Assert.AreEqual(2, item.Item1); - Assert.AreEqual(1, item.Item2); - Assert.AreEqual(1.0, item.Item3); - - enumerator.MoveNext(); - item = enumerator.Current; - Assert.AreEqual(2, item.Item1); - Assert.AreEqual(2, item.Item2); - Assert.AreEqual(2.0, item.Item3); + using (var enumerator = matrix.IndexedEnumerator().GetEnumerator()) + { + enumerator.MoveNext(); + var item = enumerator.Current; + Assert.AreEqual(0, item.Item1); + Assert.AreEqual(0, item.Item2); + Assert.AreEqual(1.0, item.Item3); + + enumerator.MoveNext(); + item = enumerator.Current; + Assert.AreEqual(0, item.Item1); + Assert.AreEqual(1, item.Item2); + Assert.AreEqual(1.0, item.Item3); + + enumerator.MoveNext(); + item = enumerator.Current; + Assert.AreEqual(0, item.Item1); + Assert.AreEqual(2, item.Item2); + Assert.AreEqual(2.0, item.Item3); + + enumerator.MoveNext(); + item = enumerator.Current; + Assert.AreEqual(1, item.Item1); + Assert.AreEqual(0, item.Item2); + Assert.AreEqual(1.0, item.Item3); + + enumerator.MoveNext(); + item = enumerator.Current; + Assert.AreEqual(1, item.Item1); + Assert.AreEqual(1, item.Item2); + Assert.AreEqual(1.0, item.Item3); + + enumerator.MoveNext(); + item = enumerator.Current; + Assert.AreEqual(1, item.Item1); + Assert.AreEqual(2, item.Item2); + Assert.AreEqual(2.0, item.Item3); + + enumerator.MoveNext(); + item = enumerator.Current; + Assert.AreEqual(2, item.Item1); + Assert.AreEqual(0, item.Item2); + Assert.AreEqual(1.0, item.Item3); + + enumerator.MoveNext(); + item = enumerator.Current; + Assert.AreEqual(2, item.Item1); + Assert.AreEqual(1, item.Item2); + Assert.AreEqual(1.0, item.Item3); + + enumerator.MoveNext(); + item = enumerator.Current; + Assert.AreEqual(2, item.Item1); + Assert.AreEqual(2, item.Item2); + Assert.AreEqual(2.0, item.Item3); + } } /// diff --git a/src/UnitTests/LinearAlgebraTests/Double/Solvers/IteratorTest.cs b/src/UnitTests/LinearAlgebraTests/Double/Solvers/IteratorTest.cs index a6387579..8c068825 100644 --- a/src/UnitTests/LinearAlgebraTests/Double/Solvers/IteratorTest.cs +++ b/src/UnitTests/LinearAlgebraTests/Double/Solvers/IteratorTest.cs @@ -104,10 +104,8 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers // Check that we have all the criteria Assert.AreEqual(criteria.Count, iterator.NumberOfCriteria, "Incorrect criterium count"); - var enumerator = iterator.StoredStopCriteria; - while (enumerator.MoveNext()) + foreach (var criterium in iterator.StoredStopCriteria) { - var criterium = enumerator.Current; Assert.IsTrue(criteria.Exists(c => ReferenceEquals(c, criterium)), "Criterium missing"); } } @@ -159,10 +157,8 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers // Check that we have all the criteria Assert.AreEqual(criteria.Count, iterator.NumberOfCriteria, "Incorrect criterium count"); - var enumerator = iterator.StoredStopCriteria; - while (enumerator.MoveNext()) + foreach (var criterium in iterator.StoredStopCriteria) { - var criterium = enumerator.Current; Assert.IsTrue(criteria.Exists(c => ReferenceEquals(c, criterium)), "Criterium missing"); } } @@ -418,10 +414,8 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers Assert.AreEqual(iterator.NumberOfCriteria, clone.NumberOfCriteria, "Incorrect criterium count"); // ReSharper restore PossibleNullReferenceException - var enumerator = clone.StoredStopCriteria; - while (enumerator.MoveNext()) + foreach (var criterium in clone.StoredStopCriteria) { - var criterium = enumerator.Current; Assert.IsTrue(criteria.Exists(c => c.GetType().Equals(criterium.GetType())), "Criterium missing"); } } diff --git a/src/UnitTests/LinearAlgebraTests/Single/DiagonalMatrixTests.cs b/src/UnitTests/LinearAlgebraTests/Single/DiagonalMatrixTests.cs index 831a9fd0..207ef2e1 100644 --- a/src/UnitTests/LinearAlgebraTests/Single/DiagonalMatrixTests.cs +++ b/src/UnitTests/LinearAlgebraTests/Single/DiagonalMatrixTests.cs @@ -535,61 +535,63 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single public override void CanUseIndexedEnumerator() { var matrix = TestMatrices["Singular3x3"]; - var enumerator = matrix.IndexedEnumerator().GetEnumerator(); - - enumerator.MoveNext(); - var item = enumerator.Current; - Assert.AreEqual(0, item.Item1); - Assert.AreEqual(0, item.Item2); - Assert.AreEqual(1.0f, item.Item3); - - enumerator.MoveNext(); - item = enumerator.Current; - Assert.AreEqual(0, item.Item1); - Assert.AreEqual(1, item.Item2); - Assert.AreEqual(0.0f, item.Item3); - - enumerator.MoveNext(); - item = enumerator.Current; - Assert.AreEqual(0, item.Item1); - Assert.AreEqual(2, item.Item2); - Assert.AreEqual(0.0f, item.Item3); - - enumerator.MoveNext(); - item = enumerator.Current; - Assert.AreEqual(1, item.Item1); - Assert.AreEqual(0, item.Item2); - Assert.AreEqual(0.0f, item.Item3); - - enumerator.MoveNext(); - item = enumerator.Current; - Assert.AreEqual(1, item.Item1); - Assert.AreEqual(1, item.Item2); - Assert.AreEqual(0.0f, item.Item3); - - enumerator.MoveNext(); - item = enumerator.Current; - Assert.AreEqual(1, item.Item1); - Assert.AreEqual(2, item.Item2); - Assert.AreEqual(0.0f, item.Item3); - - enumerator.MoveNext(); - item = enumerator.Current; - Assert.AreEqual(2, item.Item1); - Assert.AreEqual(0, item.Item2); - Assert.AreEqual(0.0f, item.Item3); - - enumerator.MoveNext(); - item = enumerator.Current; - Assert.AreEqual(2, item.Item1); - Assert.AreEqual(1, item.Item2); - Assert.AreEqual(0.0f, item.Item3); - - enumerator.MoveNext(); - item = enumerator.Current; - Assert.AreEqual(2, item.Item1); - Assert.AreEqual(2, item.Item2); - Assert.AreEqual(3.0f, item.Item3); + using (var enumerator = matrix.IndexedEnumerator().GetEnumerator()) + { + enumerator.MoveNext(); + var item = enumerator.Current; + Assert.AreEqual(0, item.Item1); + Assert.AreEqual(0, item.Item2); + Assert.AreEqual(1.0f, item.Item3); + + enumerator.MoveNext(); + item = enumerator.Current; + Assert.AreEqual(0, item.Item1); + Assert.AreEqual(1, item.Item2); + Assert.AreEqual(0.0f, item.Item3); + + enumerator.MoveNext(); + item = enumerator.Current; + Assert.AreEqual(0, item.Item1); + Assert.AreEqual(2, item.Item2); + Assert.AreEqual(0.0f, item.Item3); + + enumerator.MoveNext(); + item = enumerator.Current; + Assert.AreEqual(1, item.Item1); + Assert.AreEqual(0, item.Item2); + Assert.AreEqual(0.0f, item.Item3); + + enumerator.MoveNext(); + item = enumerator.Current; + Assert.AreEqual(1, item.Item1); + Assert.AreEqual(1, item.Item2); + Assert.AreEqual(0.0f, item.Item3); + + enumerator.MoveNext(); + item = enumerator.Current; + Assert.AreEqual(1, item.Item1); + Assert.AreEqual(2, item.Item2); + Assert.AreEqual(0.0f, item.Item3); + + enumerator.MoveNext(); + item = enumerator.Current; + Assert.AreEqual(2, item.Item1); + Assert.AreEqual(0, item.Item2); + Assert.AreEqual(0.0f, item.Item3); + + enumerator.MoveNext(); + item = enumerator.Current; + Assert.AreEqual(2, item.Item1); + Assert.AreEqual(1, item.Item2); + Assert.AreEqual(0.0f, item.Item3); + + enumerator.MoveNext(); + item = enumerator.Current; + + Assert.AreEqual(2, item.Item1); + Assert.AreEqual(2, item.Item2); + Assert.AreEqual(3.0f, item.Item3); + } } /// diff --git a/src/UnitTests/LinearAlgebraTests/Single/MatrixTests.cs b/src/UnitTests/LinearAlgebraTests/Single/MatrixTests.cs index 6eb5e632..c7dd7b7a 100644 --- a/src/UnitTests/LinearAlgebraTests/Single/MatrixTests.cs +++ b/src/UnitTests/LinearAlgebraTests/Single/MatrixTests.cs @@ -1830,61 +1830,62 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single public virtual void CanUseIndexedEnumerator() { var matrix = TestMatrices["Singular3x3"]; - var enumerator = matrix.IndexedEnumerator().GetEnumerator(); - - enumerator.MoveNext(); - var item = enumerator.Current; - Assert.AreEqual(0, item.Item1); - Assert.AreEqual(0, item.Item2); - Assert.AreEqual(1.0f, item.Item3); - - enumerator.MoveNext(); - item = enumerator.Current; - Assert.AreEqual(0, item.Item1); - Assert.AreEqual(1, item.Item2); - Assert.AreEqual(1.0f, item.Item3); - - enumerator.MoveNext(); - item = enumerator.Current; - Assert.AreEqual(0, item.Item1); - Assert.AreEqual(2, item.Item2); - Assert.AreEqual(2.0f, item.Item3); - - enumerator.MoveNext(); - item = enumerator.Current; - Assert.AreEqual(1, item.Item1); - Assert.AreEqual(0, item.Item2); - Assert.AreEqual(1.0f, item.Item3); - - enumerator.MoveNext(); - item = enumerator.Current; - Assert.AreEqual(1, item.Item1); - Assert.AreEqual(1, item.Item2); - Assert.AreEqual(1.0f, item.Item3); - - enumerator.MoveNext(); - item = enumerator.Current; - Assert.AreEqual(1, item.Item1); - Assert.AreEqual(2, item.Item2); - Assert.AreEqual(2.0f, item.Item3); - - enumerator.MoveNext(); - item = enumerator.Current; - Assert.AreEqual(2, item.Item1); - Assert.AreEqual(0, item.Item2); - Assert.AreEqual(1.0f, item.Item3); - - enumerator.MoveNext(); - item = enumerator.Current; - Assert.AreEqual(2, item.Item1); - Assert.AreEqual(1, item.Item2); - Assert.AreEqual(1.0f, item.Item3); - - enumerator.MoveNext(); - item = enumerator.Current; - Assert.AreEqual(2, item.Item1); - Assert.AreEqual(2, item.Item2); - Assert.AreEqual(2.0f, item.Item3); + using (var enumerator = matrix.IndexedEnumerator().GetEnumerator()) + { + enumerator.MoveNext(); + var item = enumerator.Current; + Assert.AreEqual(0, item.Item1); + Assert.AreEqual(0, item.Item2); + Assert.AreEqual(1.0f, item.Item3); + + enumerator.MoveNext(); + item = enumerator.Current; + Assert.AreEqual(0, item.Item1); + Assert.AreEqual(1, item.Item2); + Assert.AreEqual(1.0f, item.Item3); + + enumerator.MoveNext(); + item = enumerator.Current; + Assert.AreEqual(0, item.Item1); + Assert.AreEqual(2, item.Item2); + Assert.AreEqual(2.0f, item.Item3); + + enumerator.MoveNext(); + item = enumerator.Current; + Assert.AreEqual(1, item.Item1); + Assert.AreEqual(0, item.Item2); + Assert.AreEqual(1.0f, item.Item3); + + enumerator.MoveNext(); + item = enumerator.Current; + Assert.AreEqual(1, item.Item1); + Assert.AreEqual(1, item.Item2); + Assert.AreEqual(1.0f, item.Item3); + + enumerator.MoveNext(); + item = enumerator.Current; + Assert.AreEqual(1, item.Item1); + Assert.AreEqual(2, item.Item2); + Assert.AreEqual(2.0f, item.Item3); + + enumerator.MoveNext(); + item = enumerator.Current; + Assert.AreEqual(2, item.Item1); + Assert.AreEqual(0, item.Item2); + Assert.AreEqual(1.0f, item.Item3); + + enumerator.MoveNext(); + item = enumerator.Current; + Assert.AreEqual(2, item.Item1); + Assert.AreEqual(1, item.Item2); + Assert.AreEqual(1.0f, item.Item3); + + enumerator.MoveNext(); + item = enumerator.Current; + Assert.AreEqual(2, item.Item1); + Assert.AreEqual(2, item.Item2); + Assert.AreEqual(2.0f, item.Item3); + } } /// diff --git a/src/UnitTests/LinearAlgebraTests/Single/Solvers/IteratorTest.cs b/src/UnitTests/LinearAlgebraTests/Single/Solvers/IteratorTest.cs index e425e839..dfbef20a 100644 --- a/src/UnitTests/LinearAlgebraTests/Single/Solvers/IteratorTest.cs +++ b/src/UnitTests/LinearAlgebraTests/Single/Solvers/IteratorTest.cs @@ -103,10 +103,8 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers // Check that we have all the criteria Assert.AreEqual(criteria.Count, iterator.NumberOfCriteria, "Incorrect criterium count"); - var enumerator = iterator.StoredStopCriteria; - while (enumerator.MoveNext()) + foreach (var criterium in iterator.StoredStopCriteria) { - var criterium = enumerator.Current; Assert.IsTrue(criteria.Exists(c => ReferenceEquals(c, criterium)), "Criterium missing"); } } @@ -158,10 +156,8 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers // Check that we have all the criteria Assert.AreEqual(criteria.Count, iterator.NumberOfCriteria, "Incorrect criterium count"); - var enumerator = iterator.StoredStopCriteria; - while (enumerator.MoveNext()) + foreach (var criterium in iterator.StoredStopCriteria) { - var criterium = enumerator.Current; Assert.IsTrue(criteria.Exists(c => ReferenceEquals(c, criterium)), "Criterium missing"); } } @@ -417,11 +413,9 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers Assert.AreEqual(iterator.NumberOfCriteria, clone.NumberOfCriteria, "Incorrect criterium count"); // ReSharper restore PossibleNullReferenceException - var enumerator = clone.StoredStopCriteria; - while (enumerator.MoveNext()) + foreach (var criterium in clone.StoredStopCriteria) { - var criterium = enumerator.Current; - Assert.IsTrue(criteria.Exists(c => c.GetType().Equals(criterium.GetType())), "Criterium missing"); + Assert.IsTrue(criteria.Exists(c => c.GetType() == criterium.GetType()), "Criterium missing"); } } }