Skip to content

Commit

Permalink
mat: relax list test type restrictions for Vector parameters
Browse files Browse the repository at this point in the history
  • Loading branch information
kortschak committed Dec 26, 2017
1 parent 6e57d60 commit 0d4f2cd
Show file tree
Hide file tree
Showing 4 changed files with 31 additions and 14 deletions.
23 changes: 18 additions & 5 deletions mat/list_test.go
Expand Up @@ -169,14 +169,20 @@ func legalTypesSym(a, b Matrix) bool {
return true
}

// legalTypeVec returns whether v is a Vector.
func legalTypeVector(v Matrix) bool {
_, ok := v.(Vector)
return ok
}

// legalTypeVec returns whether v is a *VecDense.
func legalTypeVec(v Matrix) bool {
func legalTypeVecDense(v Matrix) bool {
_, ok := v.(*VecDense)
return ok
}

// legalTypesVecVec returns whether both inputs are Vector
func legalTypesVecVec(a, b Matrix) bool {
// legalTypesVectorVector returns whether both inputs are Vector
func legalTypesVectorVector(a, b Matrix) bool {
if _, ok := a.(Vector); !ok {
return false
}
Expand All @@ -197,9 +203,16 @@ func legalTypesVecDenseVecDense(a, b Matrix) bool {
return true
}

// legalTypesNotVecVec returns whether the first input is an arbitrary Matrix
// legalTypesNotVectorVector returns whether the first input is an arbitrary Matrix
// and the second input is a Vectoe.
func legalTypesNotVectorVector(a, b Matrix) bool {
_, ok := b.(Vector)
return ok
}

// legalTypesNotVectorVecDense returns whether the first input is an arbitrary Matrix
// and the second input is a *VecDense.
func legalTypesNotVecVec(a, b Matrix) bool {
func legalTypesNotVectorVecDense(a, b Matrix) bool {
_, ok := b.(*VecDense)
return ok
}
Expand Down
14 changes: 9 additions & 5 deletions mat/matrix_test.go
Expand Up @@ -371,14 +371,18 @@ type basicVector struct {
m []float64
}

func (v *basicVector) AtVec(i int) float64 {
if i < 0 || i >= v.Len() {
panic(ErrRowAccess)
}
return v.m[i]
}

func (v *basicVector) At(r, c int) float64 {
if c != 0 {
panic(ErrColAccess)
}
if r < 0 || r >= v.Len() {
panic(ErrRowAccess)
}
return v.m[r]
return v.AtVec(r)
}

func (v *basicVector) Dims() (r, c int) {
Expand Down Expand Up @@ -411,7 +415,7 @@ func TestDot(t *testing.T) {
}
return sum
}
testTwoInputFunc(t, "Dot", f, denseComparison, sameAnswerFloatApproxTol(1e-12), legalTypesVecVec, legalSizeSameVec)
testTwoInputFunc(t, "Dot", f, denseComparison, sameAnswerFloatApproxTol(1e-12), legalTypesVectorVector, legalSizeSameVec)
}

func TestEqual(t *testing.T) {
Expand Down
2 changes: 1 addition & 1 deletion mat/solve_test.go
Expand Up @@ -293,5 +293,5 @@ func TestSolveVec(t *testing.T) {
denseComparison := func(receiver, a, b *Dense) {
receiver.Solve(a, b)
}
testTwoInput(t, "SolveVec", &VecDense{}, method, denseComparison, legalTypesNotVecVec, legalSizeSolve, 1e-12)
testTwoInput(t, "SolveVec", &VecDense{}, method, denseComparison, legalTypesNotVectorVecDense, legalSizeSolve, 1e-12)
}
6 changes: 3 additions & 3 deletions mat/vector_test.go
Expand Up @@ -201,7 +201,7 @@ func TestVecDenseMul(t *testing.T) {
}
return legal
}
testTwoInput(t, "MulVec", &VecDense{}, method, denseComparison, legalTypesNotVecVec, legalSizeMulVec, 1e-14)
testTwoInput(t, "MulVec", &VecDense{}, method, denseComparison, legalTypesNotVectorVector, legalSizeMulVec, 1e-14)
}

func TestVecDenseScale(t *testing.T) {
Expand Down Expand Up @@ -274,7 +274,7 @@ func TestVecDenseScale(t *testing.T) {
denseComparison := func(receiver, a *Dense) {
receiver.Scale(alpha, a)
}
testOneInput(t, "ScaleVec", &VecDense{}, method, denseComparison, legalTypeVec, isAnyVecDense, 0)
testOneInput(t, "ScaleVec", &VecDense{}, method, denseComparison, legalTypeVector, isAnyVecDense, 0)
}
}

Expand All @@ -292,7 +292,7 @@ func TestVecDenseAddScaled(t *testing.T) {
sb.Scale(alpha, b)
receiver.Add(a, &sb)
}
testTwoInput(t, "AddScaledVec", &VecDense{}, method, denseComparison, legalTypesVecDenseVecDense, legalSizeSameVec, 1e-14)
testTwoInput(t, "AddScaledVec", &VecDense{}, method, denseComparison, legalTypesVectorVector, legalSizeSameVec, 1e-14)
}
}

Expand Down

0 comments on commit 0d4f2cd

Please sign in to comment.