OSDN Git Service

new repo
[bytom/vapor.git] / vendor / gonum.org / v1 / gonum / blas / testblas / dsymv.go
1 package testblas
2
3 import (
4         "testing"
5
6         "gonum.org/v1/gonum/blas"
7         "gonum.org/v1/gonum/floats"
8 )
9
10 type Dsymver interface {
11         Dsymv(ul blas.Uplo, n int, alpha float64, a []float64, lda int, x []float64, incX int, beta float64, y []float64, incY int)
12 }
13
14 func DsymvTest(t *testing.T, blasser Dsymver) {
15         for i, test := range []struct {
16                 ul    blas.Uplo
17                 n     int
18                 a     [][]float64
19                 x     []float64
20                 y     []float64
21                 alpha float64
22                 beta  float64
23                 ans   []float64
24         }{
25                 {
26                         ul: blas.Upper,
27                         n:  3,
28                         a: [][]float64{
29                                 {5, 6, 7},
30                                 {0, 8, 10},
31                                 {0, 0, 13},
32                         },
33                         x:     []float64{3, 4, 5},
34                         y:     []float64{6, 7, 8},
35                         alpha: 2.1,
36                         beta:  -3,
37                         ans:   []float64{137.4, 189, 240.6},
38                 },
39                 {
40                         ul: blas.Lower,
41                         n:  3,
42                         a: [][]float64{
43                                 {5, 0, 0},
44                                 {6, 8, 0},
45                                 {7, 10, 13},
46                         },
47                         x:     []float64{3, 4, 5},
48                         y:     []float64{6, 7, 8},
49                         alpha: 2.1,
50                         beta:  -3,
51                         ans:   []float64{137.4, 189, 240.6},
52                 },
53         } {
54                 incTest := func(incX, incY, extra int) {
55                         x := makeIncremented(test.x, incX, extra)
56                         y := makeIncremented(test.y, incY, extra)
57                         aFlat := flatten(test.a)
58                         ans := makeIncremented(test.ans, incY, extra)
59
60                         blasser.Dsymv(test.ul, test.n, test.alpha, aFlat, test.n, 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)
63                         }
64                 }
65                 incTest(1, 1, 0)
66                 incTest(2, 3, 0)
67                 incTest(3, 2, 0)
68                 incTest(-3, 2, 0)
69                 incTest(-2, 4, 0)
70                 incTest(2, -1, 0)
71                 incTest(-3, -4, 3)
72         }
73 }