6 "gonum.org/v1/gonum/blas"
7 "gonum.org/v1/gonum/floats"
10 type Dspmver interface {
11 Dspmv(ul blas.Uplo, n int, alpha float64, ap []float64, x []float64, incX int, beta float64, y []float64, incY int)
14 func DspmvTest(t *testing.T, blasser Dspmver) {
15 for i, test := range []struct {
33 x: []float64{3, 4, 5},
34 y: []float64{6, 7, 8},
37 ans: []float64{137.4, 189, 240.6},
47 x: []float64{3, 4, 5},
48 y: []float64{6, 7, 8},
51 ans: []float64{137.4, 189, 240.6},
54 incTest := func(incX, incY, extra int) {
55 x := makeIncremented(test.x, incX, extra)
56 y := makeIncremented(test.y, incY, extra)
57 aFlat := flattenTriangular(test.a, test.ul)
58 ans := makeIncremented(test.ans, incY, extra)
60 blasser.Dspmv(test.ul, test.n, test.alpha, aFlat, x, incX, test.beta, y, incY)
61 if !floats.EqualApprox(ans, y, 1e-14) {
62 t.Errorf("Case %v, incX=%v, incY=%v: Want %v, got %v.", i, incX, incY, ans, y)