6 "gonum.org/v1/gonum/blas"
7 "gonum.org/v1/gonum/floats"
10 type Dtpmver interface {
11 Dtpmv(ul blas.Uplo, tA blas.Transpose, d blas.Diag, n int, ap []float64, x []float64, incX int)
14 func DtpmvTest(t *testing.T, blasser Dtpmver) {
15 for i, test := range []struct {
31 x: []float64{3, 4, 5},
35 ans: []float64{74, 86, 65},
44 x: []float64{3, 4, 5},
48 ans: []float64{62, 54, 5},
57 x: []float64{3, 4, 5},
61 ans: []float64{15, 54, 126},
70 x: []float64{3, 4, 5},
74 ans: []float64{3, 22, 66},
83 x: []float64{3, 4, 5},
87 ans: []float64{15, 54, 126},
96 x: []float64{3, 4, 5},
100 ans: []float64{3, 22, 66},
109 x: []float64{3, 4, 5},
113 ans: []float64{74, 86, 65},
116 incTest := func(incX, extra int) {
117 aFlat := flattenTriangular(test.a, test.ul)
118 x := makeIncremented(test.x, incX, extra)
119 blasser.Dtpmv(test.ul, test.tA, test.d, test.n, aFlat, x, incX)
120 ans := makeIncremented(test.ans, incX, extra)
121 if !floats.EqualApprox(x, ans, 1e-14) {
122 t.Errorf("Case %v, idx %v: Want %v, got %v.", i, incX, ans, x)