Browse Source

Bug fixes in the unit tests for the new functional friendly API.

Typo fix: Sparce -> Sparse
la-knuth
Jurgen Van Gael 16 years ago
parent
commit
9f1461aa5b
  1. 90
      src/Numerics/LinearAlgebra/Double/DenseVector.cs
  2. 50
      src/Numerics/LinearAlgebra/Double/SparseVector.cs
  3. 61
      src/Numerics/LinearAlgebra/Double/Vector.cs
  4. 12
      src/UnitTests/LinearAlgebraTests/Double/VectorTests.Arithmetic.cs

90
src/Numerics/LinearAlgebra/Double/DenseVector.cs

@ -333,8 +333,18 @@ namespace MathNet.Numerics.LinearAlgebra.Double
throw new ArgumentException(Resources.ArgumentVectorsSameLength, "result");
}
CopyTo(result);
result.Add(scalar);
var dense = result as DenseVector;
if (dense == null)
{
base.Add(scalar, result);
}
else
{
CommonParallel.For(
0,
Data.Length,
index => dense.Data[index] = this.Data[index] + scalar);
}
}
/// <summary>
@ -398,14 +408,25 @@ namespace MathNet.Numerics.LinearAlgebra.Double
if (ReferenceEquals(this, result) || ReferenceEquals(other, result))
{
var tmp = result.CreateVector(result.Count);
Add(other, tmp);
var tmp = this.Add(other);
tmp.CopyTo(result);
}
else
{
CopyTo(result);
result.Add(other);
var rdense = result as DenseVector;
var odense = other as DenseVector;
if (rdense != null && odense != null)
{
CopyTo(result);
Control.LinearAlgebraProvider.AddVectorToScaledVector(rdense.Data, 1.0, odense.Data);
}
else
{
CommonParallel.For(
0,
Data.Length,
index => result[index] = this.Data[index] + other[index]);
}
}
}
@ -451,9 +472,7 @@ namespace MathNet.Numerics.LinearAlgebra.Double
throw new ArgumentException(Resources.ArgumentVectorsSameLength, "rightSide");
}
var ret = leftSide.Clone();
ret.Add(rightSide);
return ret;
return leftSide.Add(rightSide);
}
/// <summary>
@ -495,8 +514,18 @@ namespace MathNet.Numerics.LinearAlgebra.Double
throw new ArgumentException(Resources.ArgumentVectorsSameLength, "result");
}
CopyTo(result);
result.Subtract(scalar);
var dense = result as DenseVector;
if (dense == null)
{
base.Add(scalar, result);
}
else
{
CommonParallel.For(
0,
Data.Length,
index => dense.Data[index] = this.Data[index] - scalar);
}
}
/// <summary>
@ -712,9 +741,7 @@ namespace MathNet.Numerics.LinearAlgebra.Double
throw new ArgumentNullException("rightSide");
}
var ret = (DenseVector)rightSide.Clone();
ret.Multiply(leftSide);
return ret;
return (DenseVector) rightSide.Multiply(leftSide);
}
/// <summary>
@ -759,9 +786,7 @@ namespace MathNet.Numerics.LinearAlgebra.Double
throw new ArgumentNullException("leftSide");
}
var ret = (DenseVector)leftSide.Clone();
ret.Multiply(1.0 / rightSide);
return ret;
return (DenseVector) leftSide.Multiply(1.0 / rightSide);
}
/// <summary>
@ -1030,8 +1055,18 @@ namespace MathNet.Numerics.LinearAlgebra.Double
}
else
{
CopyTo(result);
result.PointwiseMultiply(other);
var dense = result as DenseVector;
if (dense == null)
{
base.PointwiseMultiply(other, result);
}
else
{
CommonParallel.For(
0,
Data.Length,
index => dense.Data[index] = this.Data[index] * other[index]);
}
}
}
@ -1104,14 +1139,23 @@ namespace MathNet.Numerics.LinearAlgebra.Double
if (ReferenceEquals(this, result) || ReferenceEquals(other, result))
{
var tmp = result.CreateVector(result.Count);
PointwiseDivide(other, tmp);
var tmp = this.PointwiseDivide(other);
tmp.CopyTo(result);
}
else
{
CopyTo(result);
result.PointwiseDivide(other);
var dense = result as DenseVector;
if (dense == null)
{
base.PointwiseDivide(other, result);
}
else
{
CommonParallel.For(
0,
Data.Length,
index => dense.Data[index] = this.Data[index] / other[index]);
}
}
}

50
src/Numerics/LinearAlgebra/Double/SparseVector.cs

@ -413,7 +413,7 @@ namespace MathNet.Numerics.LinearAlgebra.Double
else
{
var copy = (SparseVector)this.Clone();
copy.AddScaledSparceVector(1.0, sparseVector);
copy.AddScaledSparseVector(1.0, sparseVector);
return copy;
}
}
@ -423,7 +423,7 @@ namespace MathNet.Numerics.LinearAlgebra.Double
/// </summary>
/// <param name="alpha">The alpha.</param>
/// <param name="other">The other.</param>
private void AddScaledSparceVector(double alpha, SparseVector other)
private void AddScaledSparseVector(double alpha, SparseVector other)
{
if (other == null)
{
@ -515,14 +515,28 @@ namespace MathNet.Numerics.LinearAlgebra.Double
if (ReferenceEquals(this, result) || ReferenceEquals(other, result))
{
var tmp = result.CreateVector(result.Count);
Add(other, tmp);
var tmp = this.Add(other);
tmp.CopyTo(result);
}
else
{
CopyTo(result);
result.Add(other);
var sparse = result as SparseVector;
if (sparse == null)
{
base.Add(other, result);
}
else
{
var sparseother = other as SparseVector;
if (sparseother == null)
{
sparse.AddScaledSparseVector(1.0, sparseother);
}
else
{
base.Add(other, result);
}
}
}
}
@ -644,7 +658,7 @@ namespace MathNet.Numerics.LinearAlgebra.Double
else
{
var copy = (SparseVector)this.Clone();
copy.AddScaledSparceVector(-1.0, sparseVector);
copy.AddScaledSparseVector(-1.0, sparseVector);
return copy;
}
}
@ -677,14 +691,28 @@ namespace MathNet.Numerics.LinearAlgebra.Double
if (ReferenceEquals(this, result) || ReferenceEquals(other, result))
{
var tmp = result.CreateVector(result.Count);
Subtract(other, tmp);
var tmp = this.Subtract(other);
tmp.CopyTo(result);
}
else
{
CopyTo(result);
result.Subtract(other);
var sparse = result as SparseVector;
if (sparse == null)
{
base.Subtract(other, result);
}
else
{
var sparseother = other as SparseVector;
if (sparseother == null)
{
sparse.AddScaledSparseVector(-1.0, sparseother);
}
else
{
base.Subtract(other, result);
}
}
}
}

61
src/Numerics/LinearAlgebra/Double/Vector.cs

@ -168,7 +168,10 @@ namespace MathNet.Numerics.LinearAlgebra.Double
CopyTo(result);
}
result.Add(scalar);
CommonParallel.For(
0,
Count,
index => result[index] += scalar);
}
/// <summary>
@ -182,7 +185,7 @@ namespace MathNet.Numerics.LinearAlgebra.Double
/// </remarks>
public virtual Vector Plus()
{
return this * 1.0;
return this.Clone();
}
/// <summary>
@ -253,8 +256,7 @@ namespace MathNet.Numerics.LinearAlgebra.Double
if (ReferenceEquals(this, result) || ReferenceEquals(other, result))
{
var tmp = result.CreateVector(result.Count);
Add(other, tmp);
var tmp = this.Add(other);
tmp.CopyTo(result);
}
else
@ -318,7 +320,10 @@ namespace MathNet.Numerics.LinearAlgebra.Double
CopyTo(result);
}
result.Subtract(scalar);
CommonParallel.For(
0,
Count,
index => result[index] -= scalar);
}
/// <summary>
@ -468,7 +473,10 @@ namespace MathNet.Numerics.LinearAlgebra.Double
CopyTo(result);
}
result.Multiply(scalar);
CommonParallel.For(
0,
Count,
index => result[index] *= scalar);
}
/// <summary>
@ -556,7 +564,10 @@ namespace MathNet.Numerics.LinearAlgebra.Double
CopyTo(result);
}
result.Multiply(1.0 / scalar);
CommonParallel.For(
0,
Count,
index => result[index] /= scalar);
}
/// <summary>
@ -619,14 +630,16 @@ namespace MathNet.Numerics.LinearAlgebra.Double
if (ReferenceEquals(this, result) || ReferenceEquals(other, result))
{
var tmp = result.CreateVector(result.Count);
PointwiseMultiply(other, tmp);
var tmp = this.PointwiseMultiply(other);
tmp.CopyTo(result);
}
else
{
CopyTo(result);
result.PointwiseMultiply(other);
CommonParallel.For(
0,
Count,
index => result[index] *= other[index]);
}
}
@ -690,14 +703,16 @@ namespace MathNet.Numerics.LinearAlgebra.Double
if (ReferenceEquals(this, result) || ReferenceEquals(other, result))
{
var tmp = result.CreateVector(result.Count);
PointwiseDivide(other, tmp);
var tmp = this.PointwiseDivide(other);
tmp.CopyTo(result);
}
else
{
CopyTo(result);
result.PointwiseDivide(other);
CommonParallel.For(
0,
Count,
index => result[index] /= other[index]);
}
}
@ -994,9 +1009,7 @@ namespace MathNet.Numerics.LinearAlgebra.Double
throw new ArgumentException(Resources.ArgumentVectorsSameLength, "rightSide");
}
var ret = leftSide.Clone();
ret.Add(rightSide);
return ret;
return leftSide.Add(rightSide);
}
/// <summary>
@ -1040,9 +1053,7 @@ namespace MathNet.Numerics.LinearAlgebra.Double
throw new ArgumentException(Resources.ArgumentVectorsSameLength, "rightSide");
}
var ret = leftSide.Clone();
ret.Subtract(rightSide);
return ret;
return leftSide.Subtract(rightSide);
}
/// <summary>
@ -1059,9 +1070,7 @@ namespace MathNet.Numerics.LinearAlgebra.Double
throw new ArgumentNullException("leftSide");
}
var ret = leftSide.Clone();
ret.Multiply(rightSide);
return ret;
return leftSide.Multiply(rightSide);
}
/// <summary>
@ -1078,9 +1087,7 @@ namespace MathNet.Numerics.LinearAlgebra.Double
throw new ArgumentNullException("rightSide");
}
var ret = rightSide.Clone();
ret.Multiply(leftSide);
return ret;
return rightSide.Multiply(leftSide);
}
/// <summary>
@ -1125,9 +1132,7 @@ namespace MathNet.Numerics.LinearAlgebra.Double
throw new ArgumentNullException("leftSide");
}
var ret = leftSide.Clone();
ret.Multiply(1.0 / rightSide);
return ret;
return leftSide.Multiply(1.0 / rightSide);
}
#endregion

12
src/UnitTests/LinearAlgebraTests/Double/VectorTests.Arithmetic.cs

@ -37,7 +37,11 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double
{
var vector = this.CreateVector(this._data);
var other = vector.Plus();
Assert.AreSame(vector, other, "Should be the same vector");
for (var i = 0; i < this._data.Length; i++)
{
Assert.AreEqual(vector[i], other[i]);
}
}
[Test]
@ -53,7 +57,11 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double
{
var vector = this.CreateVector(this._data);
var other = +vector;
Assert.AreSame(vector, other, "Should be the same vector");
for (var i = 0; i < this._data.Length; i++)
{
Assert.AreEqual(vector[i], other[i]);
}
}
[Test]

Loading…
Cancel
Save