diff --git a/src/Numerics.Tests/LinearAlgebraTests/Complex/VectorTests.cs b/src/Numerics.Tests/LinearAlgebraTests/Complex/VectorTests.cs
index 95afe05f..7e96be32 100644
--- a/src/Numerics.Tests/LinearAlgebraTests/Complex/VectorTests.cs
+++ b/src/Numerics.Tests/LinearAlgebraTests/Complex/VectorTests.cs
@@ -63,7 +63,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex
Assert.AreEqual(vector.Count, clone.Count);
CollectionAssert.AreEqual(vector, clone);
}
-
+
///
/// Can clone a vector using IClonable interface method.
///
@@ -198,7 +198,6 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex
public void SizeIsNotPositiveThrowsArgumentOutOfRangeException()
{
Assert.That(() => CreateVector(-1), Throws.TypeOf());
- Assert.That(() => CreateVector(0), Throws.TypeOf());
}
///
diff --git a/src/Numerics.Tests/LinearAlgebraTests/Complex32/VectorTests.cs b/src/Numerics.Tests/LinearAlgebraTests/Complex32/VectorTests.cs
index f1ae88cc..a597f8e1 100644
--- a/src/Numerics.Tests/LinearAlgebraTests/Complex32/VectorTests.cs
+++ b/src/Numerics.Tests/LinearAlgebraTests/Complex32/VectorTests.cs
@@ -63,7 +63,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32
Assert.AreEqual(vector.Count, clone.Count);
CollectionAssert.AreEqual(vector, clone);
}
-
+
///
/// Can clone a vector using IClonable interface method.
///
@@ -198,7 +198,6 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32
public void SizeIsNotPositiveThrowsArgumentOutOfRangeException()
{
Assert.That(() => CreateVector(-1), Throws.TypeOf());
- Assert.That(() => CreateVector(0), Throws.TypeOf());
}
///
diff --git a/src/Numerics.Tests/LinearAlgebraTests/Double/VectorTests.cs b/src/Numerics.Tests/LinearAlgebraTests/Double/VectorTests.cs
index 453fd6af..9293900a 100644
--- a/src/Numerics.Tests/LinearAlgebraTests/Double/VectorTests.cs
+++ b/src/Numerics.Tests/LinearAlgebraTests/Double/VectorTests.cs
@@ -59,7 +59,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double
Assert.AreEqual(vector.Count, clone.Count);
CollectionAssert.AreEqual(vector, clone);
}
-
+
///
/// Can clone a vector using IClonable interface method.
///
@@ -194,7 +194,6 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double
public void SizeIsNotPositiveThrowsArgumentOutOfRangeException()
{
Assert.That(() => CreateVector(-1), Throws.TypeOf());
- Assert.That(() => CreateVector(0), Throws.TypeOf());
}
///
diff --git a/src/Numerics.Tests/LinearAlgebraTests/MatrixTests.cs b/src/Numerics.Tests/LinearAlgebraTests/MatrixTests.cs
new file mode 100644
index 00000000..cc39f378
--- /dev/null
+++ b/src/Numerics.Tests/LinearAlgebraTests/MatrixTests.cs
@@ -0,0 +1,77 @@
+//
+// Math.NET Numerics, part of the Math.NET Project
+// http://numerics.mathdotnet.com
+// http://github.com/mathnet/mathnet-numerics
+//
+// Copyright (c) 2009-2016 Math.NET
+//
+// Permission is hereby granted, free of charge, to any person
+// obtaining a copy of this software and associated documentation
+// files (the "Software"), to deal in the Software without
+// restriction, including without limitation the rights to use,
+// copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the
+// Software is furnished to do so, subject to the following
+// conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+// OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using MathNet.Numerics.LinearAlgebra;
+using MathNet.Numerics.LinearAlgebra.Storage;
+using NUnit.Framework;
+
+namespace MathNet.Numerics.UnitTests.LinearAlgebraTests
+{
+ [TestFixture, Category("LA")]
+ public class MatrixTests
+ {
+ [Test]
+ public void DenseMatrixBuilderMethos_ZeroLength_DoNotThrowException()
+ {
+ Assert.DoesNotThrow(() => Matrix.Build.Dense(0, 0));
+ Assert.DoesNotThrow(() => Matrix.Build.Dense(0, 0, 42));
+ Assert.DoesNotThrow(() => Matrix.Build.Dense(0, 0, Array.Empty()));
+ Assert.DoesNotThrow(() => Matrix.Build.Dense(0, 0, (row, column) => 42));
+ }
+
+ [Test]
+ public void SparseMatrixBuilderMethos_ZeroLength_DoNotThrowException()
+ {
+ Assert.DoesNotThrow(() => Matrix.Build.Sparse(0, 0));
+ Assert.DoesNotThrow(() => Matrix.Build.Sparse(0, 0, 42));
+ Assert.DoesNotThrow(() => Matrix.Build.Sparse(0, 0, (row, column) => 42));
+ }
+
+ [Test]
+ public void DenseColumnMajorMatrixStorageBuilderMethods_ZeroLength_DoNotThrowException()
+ {
+ Assert.DoesNotThrow(() => new DenseColumnMajorMatrixStorage(0, 0));
+ Assert.DoesNotThrow(() => new DenseColumnMajorMatrixStorage(0, 0, Array.Empty()));
+ }
+
+ [Test]
+ public void DiagonalMatrixStorageBuilderMethods_ZeroLength_DoNotThrowException()
+ {
+ Assert.DoesNotThrow(() => new DiagonalMatrixStorage(0, 0));
+ Assert.DoesNotThrow(() => new DiagonalMatrixStorage(0, 0, Array.Empty()));
+ }
+
+ [Test]
+ public void SparseCompressedRowMatrixStorageBuilderMethods_ZeroLength_DoNotThrowException()
+ {
+ Assert.DoesNotThrow(() => new SparseCompressedRowMatrixStorage(0, 0));
+ }
+ }
+}
diff --git a/src/Numerics.Tests/LinearAlgebraTests/Single/VectorTests.cs b/src/Numerics.Tests/LinearAlgebraTests/Single/VectorTests.cs
index 0fa2f00f..5bce8083 100644
--- a/src/Numerics.Tests/LinearAlgebraTests/Single/VectorTests.cs
+++ b/src/Numerics.Tests/LinearAlgebraTests/Single/VectorTests.cs
@@ -60,7 +60,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single
Assert.AreEqual(vector.Count, clone.Count);
CollectionAssert.AreEqual(vector, clone);
}
-
+
///
/// Can clone a vector using IClonable interface method.
///
@@ -195,7 +195,6 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single
public void SizeIsNotPositiveThrowsArgumentOutOfRangeException()
{
Assert.That(() => CreateVector(-1), Throws.TypeOf());
- Assert.That(() => CreateVector(0), Throws.TypeOf());
}
///
diff --git a/src/Numerics.Tests/LinearAlgebraTests/VectorTests.cs b/src/Numerics.Tests/LinearAlgebraTests/VectorTests.cs
new file mode 100644
index 00000000..3a255000
--- /dev/null
+++ b/src/Numerics.Tests/LinearAlgebraTests/VectorTests.cs
@@ -0,0 +1,107 @@
+//
+// Math.NET Numerics, part of the Math.NET Project
+// http://numerics.mathdotnet.com
+// http://github.com/mathnet/mathnet-numerics
+//
+// Copyright (c) 2009-2016 Math.NET
+//
+// Permission is hereby granted, free of charge, to any person
+// obtaining a copy of this software and associated documentation
+// files (the "Software"), to deal in the Software without
+// restriction, including without limitation the rights to use,
+// copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the
+// Software is furnished to do so, subject to the following
+// conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+// OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using MathNet.Numerics.LinearAlgebra;
+using MathNet.Numerics.LinearAlgebra.Storage;
+using MathNet.Numerics.Properties;
+using NUnit.Framework;
+
+namespace MathNet.Numerics.UnitTests.LinearAlgebraTests
+{
+ [TestFixture, Category("LA")]
+ public class VectorTests
+ {
+ [Test]
+ public void DenseVectorBuilderMethod_ZeroLength_DoNotThrowException()
+ {
+ Assert.DoesNotThrow(() => Vector.Build.Dense(0));
+ Assert.DoesNotThrow(() => Vector.Build.Dense(0, 42));
+ Assert.DoesNotThrow(() => Vector.Build.Dense(0, index => 42));
+ Assert.DoesNotThrow(() => Vector.Build.Dense(Array.Empty()));
+ }
+
+ [Test]
+ public void SparseVectorBuilderMethods_ZeroLength_DoNotThrowException()
+ {
+ Assert.DoesNotThrow(() => Vector.Build.Sparse(0));
+ Assert.DoesNotThrow(() => Vector.Build.Sparse(0, 42));
+ Assert.DoesNotThrow(() => Vector.Build.Sparse(0, index => 42));
+ }
+
+ [Test]
+ public void DenseVectorStorageBuilderMethods_ZeroLength_DoNotThrowException()
+ {
+ Assert.DoesNotThrow(() => new DenseVectorStorage(0));
+ Assert.DoesNotThrow(() => new DenseVectorStorage(0, Array.Empty()));
+ Assert.DoesNotThrow(() => DenseVectorStorage.OfValue(0, 42));
+ Assert.DoesNotThrow(() => DenseVectorStorage.OfInit(0, index => 42));
+ }
+
+ [Test]
+ public void SparseVectorStorageBuilderMethods_ZeroLength_DoNotThrowException()
+ {
+ Assert.DoesNotThrow(() => new SparseVectorStorage(0));
+ Assert.DoesNotThrow(() => SparseVectorStorage.OfValue(0, 42));
+ Assert.DoesNotThrow(() => SparseVectorStorage.OfInit(0, index => 42));
+ }
+
+ [Test]
+ public void DenseVectorStorageOfInit_NegativeLength_ThrowsArgumentException()
+ {
+ Assert.That(() => DenseVectorStorage.OfInit(-1, index => 42),
+ Throws.TypeOf()
+ .With.Message.Contains(Resources.ArgumentNotNegative));
+ }
+
+ [Test]
+ public void DenseVectorStorageOfValue_NegativeLength_ThrowsArgumentException()
+ {
+ Assert.That(() => DenseVectorStorage.OfValue(-1, 42),
+ Throws.TypeOf()
+ .With.Message.Contains(Resources.ArgumentNotNegative));
+ }
+
+ [Test]
+ public void SparseVectorStorageOfInit_NegativeLength_ThrowsArgumentException()
+ {
+ Assert.That(() => SparseVectorStorage.OfInit(-1, index => 42),
+ Throws.TypeOf()
+ .With.Message.Contains(Resources.ArgumentNotNegative));
+ }
+
+ [Test]
+ public void SparseVectorStorageOfValue_NegativeLength_ThrowsArgumentException()
+ {
+ Assert.That(() => SparseVectorStorage.OfValue(-1, 42),
+ Throws.TypeOf()
+ .With.Message.Contains(Resources.ArgumentNotNegative));
+ }
+ }
+}
diff --git a/src/Numerics/LinearAlgebra/Storage/DenseVectorStorage.cs b/src/Numerics/LinearAlgebra/Storage/DenseVectorStorage.cs
index 9a3a9df9..100639fe 100644
--- a/src/Numerics/LinearAlgebra/Storage/DenseVectorStorage.cs
+++ b/src/Numerics/LinearAlgebra/Storage/DenseVectorStorage.cs
@@ -115,9 +115,9 @@ namespace MathNet.Numerics.LinearAlgebra.Storage
public static DenseVectorStorage OfValue(int length, T value)
{
- if (length < 1)
+ if (length < 0)
{
- throw new ArgumentOutOfRangeException(nameof(length), string.Format(Resources.ArgumentLessThanOne, length));
+ throw new ArgumentOutOfRangeException(nameof(length), Resources.ArgumentNotNegative);
}
var data = new T[length];
@@ -133,9 +133,9 @@ namespace MathNet.Numerics.LinearAlgebra.Storage
public static DenseVectorStorage OfInit(int length, Func init)
{
- if (length < 1)
+ if (length < 0)
{
- throw new ArgumentOutOfRangeException(nameof(length), string.Format(Resources.ArgumentLessThanOne, length));
+ throw new ArgumentOutOfRangeException(nameof(length), Resources.ArgumentNotNegative);
}
var data = new T[length];
diff --git a/src/Numerics/LinearAlgebra/Storage/MatrixStorage.cs b/src/Numerics/LinearAlgebra/Storage/MatrixStorage.cs
index 9459747d..7f9618c5 100644
--- a/src/Numerics/LinearAlgebra/Storage/MatrixStorage.cs
+++ b/src/Numerics/LinearAlgebra/Storage/MatrixStorage.cs
@@ -51,12 +51,12 @@ namespace MathNet.Numerics.LinearAlgebra.Storage
protected MatrixStorage(int rowCount, int columnCount)
{
- if (rowCount <= 0)
+ if (rowCount < 0)
{
throw new ArgumentOutOfRangeException(nameof(rowCount), Resources.MatrixRowsMustBePositive);
}
- if (columnCount <= 0)
+ if (columnCount < 0)
{
throw new ArgumentOutOfRangeException(nameof(columnCount), Resources.MatrixColumnsMustBePositive);
}
diff --git a/src/Numerics/LinearAlgebra/Storage/SparseVectorStorage.cs b/src/Numerics/LinearAlgebra/Storage/SparseVectorStorage.cs
index bd8da317..0cf7d9b4 100644
--- a/src/Numerics/LinearAlgebra/Storage/SparseVectorStorage.cs
+++ b/src/Numerics/LinearAlgebra/Storage/SparseVectorStorage.cs
@@ -315,9 +315,9 @@ namespace MathNet.Numerics.LinearAlgebra.Storage
return new SparseVectorStorage(length);
}
- if (length < 1)
+ if (length < 0)
{
- throw new ArgumentOutOfRangeException(nameof(length), string.Format(Resources.ArgumentLessThanOne, length));
+ throw new ArgumentOutOfRangeException(nameof(length), Resources.ArgumentNotNegative);
}
var indices = new int[length];
@@ -338,9 +338,9 @@ namespace MathNet.Numerics.LinearAlgebra.Storage
public static SparseVectorStorage OfInit(int length, Func init)
{
- if (length < 1)
+ if (length < 0)
{
- throw new ArgumentOutOfRangeException(nameof(length), string.Format(Resources.ArgumentLessThanOne, length));
+ throw new ArgumentOutOfRangeException(nameof(length), Resources.ArgumentNotNegative);
}
var indices = new List();
diff --git a/src/Numerics/LinearAlgebra/Storage/VectorStorage.cs b/src/Numerics/LinearAlgebra/Storage/VectorStorage.cs
index f38337fb..8fe8af83 100644
--- a/src/Numerics/LinearAlgebra/Storage/VectorStorage.cs
+++ b/src/Numerics/LinearAlgebra/Storage/VectorStorage.cs
@@ -48,9 +48,9 @@ namespace MathNet.Numerics.LinearAlgebra.Storage
protected VectorStorage(int length)
{
- if (length <= 0)
+ if (length < 0)
{
- throw new ArgumentOutOfRangeException(nameof(length), Resources.ArgumentMustBePositive);
+ throw new ArgumentOutOfRangeException(nameof(length), Resources.ArgumentNotNegative);
}
Length = length;