mat: generalise basic arithmetic vector operations

This commit is contained in:
Dan Kortschak
2017-12-25 06:12:00 +10:30
committed by GitHub
parent b52122b771
commit 6e57d606a5
3 changed files with 287 additions and 153 deletions

View File

@@ -184,10 +184,10 @@ func TestVecDenseAtSet(t *testing.T) {
func TestVecDenseMul(t *testing.T) {
method := func(receiver, a, b Matrix) {
type mulVecer interface {
MulVec(a Matrix, b *VecDense)
MulVec(a Matrix, b Vector)
}
rd := receiver.(mulVecer)
rd.MulVec(a, b.(*VecDense))
rd.MulVec(a, b.(Vector))
}
denseComparison := func(receiver, a, b *Dense) {
receiver.Mul(a, b)
@@ -266,10 +266,10 @@ func TestVecDenseScale(t *testing.T) {
for _, alpha := range []float64{0, 1, -1, 2.3, -2.3} {
method := func(receiver, a Matrix) {
type scaleVecer interface {
ScaleVec(float64, *VecDense)
ScaleVec(float64, Vector)
}
v := receiver.(scaleVecer)
v.ScaleVec(alpha, a.(*VecDense))
v.ScaleVec(alpha, a.(Vector))
}
denseComparison := func(receiver, a *Dense) {
receiver.Scale(alpha, a)
@@ -282,10 +282,10 @@ func TestVecDenseAddScaled(t *testing.T) {
for _, alpha := range []float64{0, 1, -1, 2.3, -2.3} {
method := func(receiver, a, b Matrix) {
type addScaledVecer interface {
AddScaledVec(*VecDense, float64, *VecDense)
AddScaledVec(Vector, float64, Vector)
}
v := receiver.(addScaledVecer)
v.AddScaledVec(a.(*VecDense), alpha, b.(*VecDense))
v.AddScaledVec(a.(Vector), alpha, b.(Vector))
}
denseComparison := func(receiver, a, b *Dense) {
var sb Dense