OSDN Git Service

new repo
[bytom/vapor.git] / vendor / gonum.org / v1 / gonum / blas / testblas / dsyrk.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 Dsyker interface {
11         Dsyrk(ul blas.Uplo, tA blas.Transpose, n, k int, alpha float64, a []float64, lda int, beta float64, c []float64, ldc int)
12 }
13
14 func DsyrkTest(t *testing.T, blasser Dsyker) {
15         for i, test := range []struct {
16                 ul    blas.Uplo
17                 tA    blas.Transpose
18                 n     int
19                 k     int
20                 alpha float64
21                 a     [][]float64
22                 c     [][]float64
23                 beta  float64
24                 ans   [][]float64
25         }{
26                 {
27                         ul:    blas.Upper,
28                         tA:    blas.NoTrans,
29                         n:     3,
30                         k:     2,
31                         alpha: 0,
32                         a: [][]float64{
33                                 {1, 2},
34                                 {3, 4},
35                                 {5, 6},
36                         },
37                         c: [][]float64{
38                                 {1, 2, 3},
39                                 {0, 5, 6},
40                                 {0, 0, 9},
41                         },
42                         beta: 2,
43                         ans: [][]float64{
44                                 {2, 4, 6},
45                                 {0, 10, 12},
46                                 {0, 0, 18},
47                         },
48                 },
49                 {
50                         ul:    blas.Lower,
51                         tA:    blas.NoTrans,
52                         n:     3,
53                         k:     2,
54                         alpha: 0,
55                         a: [][]float64{
56                                 {1, 2},
57                                 {3, 4},
58                                 {5, 6},
59                         },
60                         c: [][]float64{
61                                 {1, 0, 0},
62                                 {2, 3, 0},
63                                 {4, 5, 6},
64                         },
65                         beta: 2,
66                         ans: [][]float64{
67                                 {2, 0, 0},
68                                 {4, 6, 0},
69                                 {8, 10, 12},
70                         },
71                 },
72                 {
73                         ul:    blas.Upper,
74                         tA:    blas.NoTrans,
75                         n:     3,
76                         k:     2,
77                         alpha: 3,
78                         a: [][]float64{
79                                 {1, 2},
80                                 {3, 4},
81                                 {5, 6},
82                         },
83                         c: [][]float64{
84                                 {1, 2, 3},
85                                 {0, 4, 5},
86                                 {0, 0, 6},
87                         },
88                         beta: 2,
89                         ans: [][]float64{
90                                 {17, 37, 57},
91                                 {0, 83, 127},
92                                 {0, 0, 195},
93                         },
94                 },
95                 {
96                         ul:    blas.Lower,
97                         tA:    blas.NoTrans,
98                         n:     3,
99                         k:     2,
100                         alpha: 3,
101                         a: [][]float64{
102                                 {1, 2},
103                                 {3, 4},
104                                 {5, 6},
105                         },
106                         c: [][]float64{
107                                 {1, 0, 0},
108                                 {2, 4, 0},
109                                 {3, 5, 6},
110                         },
111                         beta: 2,
112                         ans: [][]float64{
113                                 {17, 0, 0},
114                                 {37, 83, 0},
115                                 {57, 127, 195},
116                         },
117                 },
118                 {
119                         ul:    blas.Upper,
120                         tA:    blas.Trans,
121                         n:     3,
122                         k:     2,
123                         alpha: 3,
124                         a: [][]float64{
125                                 {1, 3, 5},
126                                 {2, 4, 6},
127                         },
128                         c: [][]float64{
129                                 {1, 2, 3},
130                                 {0, 4, 5},
131                                 {0, 0, 6},
132                         },
133                         beta: 2,
134                         ans: [][]float64{
135                                 {17, 37, 57},
136                                 {0, 83, 127},
137                                 {0, 0, 195},
138                         },
139                 },
140                 {
141                         ul:    blas.Lower,
142                         tA:    blas.Trans,
143                         n:     3,
144                         k:     2,
145                         alpha: 3,
146                         a: [][]float64{
147                                 {1, 3, 5},
148                                 {2, 4, 6},
149                         },
150                         c: [][]float64{
151                                 {1, 0, 0},
152                                 {2, 4, 0},
153                                 {3, 5, 6},
154                         },
155                         beta: 2,
156                         ans: [][]float64{
157                                 {17, 0, 0},
158                                 {37, 83, 0},
159                                 {57, 127, 195},
160                         },
161                 },
162         } {
163                 aFlat := flatten(test.a)
164                 cFlat := flatten(test.c)
165                 ansFlat := flatten(test.ans)
166                 blasser.Dsyrk(test.ul, test.tA, test.n, test.k, test.alpha, aFlat, len(test.a[0]), test.beta, cFlat, len(test.c[0]))
167                 if !floats.EqualApprox(ansFlat, cFlat, 1e-14) {
168                         t.Errorf("Case %v. Want %v, got %v.", i, ansFlat, cFlat)
169                 }
170         }
171 }