6 "gonum.org/v1/gonum/blas"
9 type Dtxmver interface {
10 Dtrmv(ul blas.Uplo, tA blas.Transpose, d blas.Diag, n int, a []float64, lda int, x []float64, incX int)
11 Dtbmv(ul blas.Uplo, tA blas.Transpose, d blas.Diag, n, k int, a []float64, lda int, x []float64, incX int)
12 Dtpmv(ul blas.Uplo, tA blas.Transpose, d blas.Diag, n int, a []float64, x []float64, incX int)
20 var cases = []struct {
35 tr: []float64{1, 2, 0, 0, 3, 4, 0, 0, 5},
36 tb: []float64{1, 2, 3, 4, 5, 0},
38 tp: []float64{1, 2, 0, 3, 4, 5},
40 {[]float64{2, 3, 4}, 1},
41 {[]float64{2, 1, 3, 1, 4}, 2},
42 {[]float64{4, 1, 3, 1, 2}, -2},
44 solNoTrans: []float64{8, 25, 20},
45 solTrans: []float64{2, 13, 32},
52 tr: []float64{1, 2, 0, 0, 3, 4, 0, 0, 5},
53 tb: []float64{1, 2, 3, 4, 5, 0},
55 tp: []float64{1, 2, 0, 3, 4, 5},
57 {[]float64{2, 3, 4}, 1},
58 {[]float64{2, 1, 3, 1, 4}, 2},
59 {[]float64{4, 1, 3, 1, 2}, -2},
61 solNoTrans: []float64{8, 19, 4},
62 solTrans: []float64{2, 7, 16},
69 tr: []float64{1, 0, 0, 2, 3, 0, 0, 4, 5},
70 tb: []float64{0, 1, 2, 3, 4, 5},
72 tp: []float64{1, 2, 3, 0, 4, 5},
74 {[]float64{2, 3, 4}, 1},
75 {[]float64{2, 1, 3, 1, 4}, 2},
76 {[]float64{4, 1, 3, 1, 2}, -2},
78 solNoTrans: []float64{2, 13, 32},
79 solTrans: []float64{8, 25, 20},
86 tr: []float64{1, 0, 0, 2, 3, 0, 0, 4, 5},
87 tb: []float64{0, 1, 2, 3, 4, 5},
89 tp: []float64{1, 2, 3, 0, 4, 5},
91 {[]float64{2, 3, 4}, 1},
92 {[]float64{2, 1, 3, 1, 4}, 2},
93 {[]float64{4, 1, 3, 1, 2}, -2},
95 solNoTrans: []float64{2, 7, 16},
96 solTrans: []float64{8, 19, 4},
100 func DtxmvTest(t *testing.T, blasser Dtxmver) {
102 for nc, c := range cases {
103 for nx, x := range c.ins {
104 in := make([]float64, len(x.data))
106 blasser.Dtrmv(c.ul, blas.NoTrans, c.d, c.n, c.tr, c.n, in, x.inc)
107 if !dStridedSliceTolEqual(c.n, in, x.inc, c.solNoTrans, 1) {
108 t.Error("Wrong Dtrmv result for: NoTrans in Case:", nc, "input:", nx)
111 in = make([]float64, len(x.data))
113 blasser.Dtrmv(c.ul, blas.Trans, c.d, c.n, c.tr, c.n, in, x.inc)
114 if !dStridedSliceTolEqual(c.n, in, x.inc, c.solTrans, 1) {
115 t.Error("Wrong Dtrmv result for: Trans in Case:", nc, "input:", nx)
117 in = make([]float64, len(x.data))
119 blasser.Dtbmv(c.ul, blas.NoTrans, c.d, c.n, c.k, c.tb, c.ldab, in, x.inc)
120 if !dStridedSliceTolEqual(c.n, in, x.inc, c.solNoTrans, 1) {
121 t.Error("Wrong Dtbmv result for: NoTrans in Case:", nc, "input:", nx)
124 in = make([]float64, len(x.data))
126 blasser.Dtbmv(c.ul, blas.Trans, c.d, c.n, c.k, c.tb, c.ldab, in, x.inc)
127 if !dStridedSliceTolEqual(c.n, in, x.inc, c.solTrans, 1) {
128 t.Error("Wrong Dtbmv result for: Trans in Case:", nc, "input:", nx)
130 in = make([]float64, len(x.data))
132 blasser.Dtpmv(c.ul, blas.NoTrans, c.d, c.n, c.tp, in, x.inc)
133 if !dStridedSliceTolEqual(c.n, in, x.inc, c.solNoTrans, 1) {
134 t.Error("Wrong Dtpmv result for: NoTrans in Case:", nc, "input:", nx)
137 in = make([]float64, len(x.data))
139 blasser.Dtpmv(c.ul, blas.Trans, c.d, c.n, c.tp, in, x.inc)
140 if !dStridedSliceTolEqual(c.n, in, x.inc, c.solTrans, 1) {
141 t.Error("Wrong Dtpmv result for: Trans in Case:", nc, "input:", nx)