6 "gonum.org/v1/gonum/blas"
7 "gonum.org/v1/gonum/floats"
10 type Dtpsver interface {
11 Dtpsv(ul blas.Uplo, tA blas.Transpose, d blas.Diag, n int, ap []float64, x []float64, incX int)
14 func DtpsvTest(t *testing.T, blasser Dtpsver) {
15 for i, test := range []struct {
34 x: []float64{5, 6, 7},
35 ans: []float64{4.15625, -0.890625, 0.875},
47 x: []float64{5, 6, 7},
48 ans: []float64{182, -99, 7},
60 x: []float64{5, 6, 7},
61 ans: []float64{5, -0.5, -0.0625},
73 x: []float64{5, 6, 7},
74 ans: []float64{5, -4, 52},
86 x: []float64{5, 6, 7},
87 ans: []float64{5, -0.5, -0.0625},
99 x: []float64{5, 6, 7},
100 ans: []float64{5, -4, 52},
112 x: []float64{5, 6, 7},
113 ans: []float64{4.15625, -0.890625, 0.875},
125 x: []float64{5, 6, 7},
126 ans: []float64{182, -99, 7},
129 incTest := func(incX, extra int) {
130 aFlat := flattenTriangular(test.a, test.ul)
131 x := makeIncremented(test.x, incX, extra)
132 blasser.Dtpsv(test.ul, test.tA, test.d, test.n, aFlat, x, incX)
133 ans := makeIncremented(test.ans, incX, extra)
134 if !floats.EqualApprox(x, ans, 1e-14) {
135 t.Errorf("Case %v, incX = %v: Want %v, got %v.", i, incX, ans, x)