OSDN Git Service

test (#52)
[bytom/vapor.git] / vendor / gonum.org / v1 / gonum / blas / testblas / dsymm.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 Dsymmer interface {
11         Dsymm(s blas.Side, ul blas.Uplo, m, n int, alpha float64, a []float64, lda int, b []float64, ldb int, beta float64, c []float64, ldc int)
12 }
13
14 func DsymmTest(t *testing.T, blasser Dsymmer) {
15         for i, test := range []struct {
16                 m     int
17                 n     int
18                 side  blas.Side
19                 ul    blas.Uplo
20                 a     [][]float64
21                 b     [][]float64
22                 c     [][]float64
23                 alpha float64
24                 beta  float64
25                 ans   [][]float64
26         }{
27                 {
28                         side: blas.Left,
29                         ul:   blas.Upper,
30                         m:    3,
31                         n:    4,
32                         a: [][]float64{
33                                 {2, 3, 4},
34                                 {0, 6, 7},
35                                 {0, 0, 10},
36                         },
37                         b: [][]float64{
38                                 {2, 3, 4, 8},
39                                 {5, 6, 7, 15},
40                                 {8, 9, 10, 20},
41                         },
42                         c: [][]float64{
43                                 {8, 12, 2, 1},
44                                 {9, 12, 9, 9},
45                                 {12, 1, -1, 5},
46                         },
47                         alpha: 2,
48                         beta:  3,
49                         ans: [][]float64{
50                                 {126, 156, 144, 285},
51                                 {211, 252, 275, 535},
52                                 {282, 291, 327, 689},
53                         },
54                 },
55                 {
56                         side: blas.Left,
57                         ul:   blas.Upper,
58                         m:    4,
59                         n:    3,
60                         a: [][]float64{
61                                 {2, 3, 4, 8},
62                                 {0, 6, 7, 9},
63                                 {0, 0, 10, 10},
64                                 {0, 0, 0, 11},
65                         },
66                         b: [][]float64{
67                                 {2, 3, 4},
68                                 {5, 6, 7},
69                                 {8, 9, 10},
70                                 {2, 1, 1},
71                         },
72                         c: [][]float64{
73                                 {8, 12, 2},
74                                 {9, 12, 9},
75                                 {12, 1, -1},
76                                 {1, 9, 5},
77                         },
78                         alpha: 2,
79                         beta:  3,
80                         ans: [][]float64{
81                                 {158, 172, 160},
82                                 {247, 270, 293},
83                                 {322, 311, 347},
84                                 {329, 385, 427},
85                         },
86                 },
87                 {
88                         side: blas.Left,
89                         ul:   blas.Lower,
90                         m:    3,
91                         n:    4,
92                         a: [][]float64{
93                                 {2, 0, 0},
94                                 {3, 6, 0},
95                                 {4, 7, 10},
96                         },
97                         b: [][]float64{
98                                 {2, 3, 4, 8},
99                                 {5, 6, 7, 15},
100                                 {8, 9, 10, 20},
101                         },
102                         c: [][]float64{
103                                 {8, 12, 2, 1},
104                                 {9, 12, 9, 9},
105                                 {12, 1, -1, 5},
106                         },
107                         alpha: 2,
108                         beta:  3,
109                         ans: [][]float64{
110                                 {126, 156, 144, 285},
111                                 {211, 252, 275, 535},
112                                 {282, 291, 327, 689},
113                         },
114                 },
115                 {
116                         side: blas.Left,
117                         ul:   blas.Lower,
118                         m:    4,
119                         n:    3,
120                         a: [][]float64{
121                                 {2, 0, 0, 0},
122                                 {3, 6, 0, 0},
123                                 {4, 7, 10, 0},
124                                 {8, 9, 10, 11},
125                         },
126                         b: [][]float64{
127                                 {2, 3, 4},
128                                 {5, 6, 7},
129                                 {8, 9, 10},
130                                 {2, 1, 1},
131                         },
132                         c: [][]float64{
133                                 {8, 12, 2},
134                                 {9, 12, 9},
135                                 {12, 1, -1},
136                                 {1, 9, 5},
137                         },
138                         alpha: 2,
139                         beta:  3,
140                         ans: [][]float64{
141                                 {158, 172, 160},
142                                 {247, 270, 293},
143                                 {322, 311, 347},
144                                 {329, 385, 427},
145                         },
146                 },
147                 {
148                         side: blas.Right,
149                         ul:   blas.Upper,
150                         m:    3,
151                         n:    4,
152                         a: [][]float64{
153                                 {2, 0, 0, 0},
154                                 {3, 6, 0, 0},
155                                 {4, 7, 10, 0},
156                                 {3, 4, 5, 6},
157                         },
158                         b: [][]float64{
159                                 {2, 3, 4, 9},
160                                 {5, 6, 7, -3},
161                                 {8, 9, 10, -2},
162                         },
163                         c: [][]float64{
164                                 {8, 12, 2, 10},
165                                 {9, 12, 9, 10},
166                                 {12, 1, -1, 10},
167                         },
168                         alpha: 2,
169                         beta:  3,
170                         ans: [][]float64{
171                                 {32, 72, 86, 138},
172                                 {47, 108, 167, -6},
173                                 {68, 111, 197, 6},
174                         },
175                 },
176                 {
177                         side: blas.Right,
178                         ul:   blas.Upper,
179                         m:    4,
180                         n:    3,
181                         a: [][]float64{
182                                 {2, 0, 0},
183                                 {3, 6, 0},
184                                 {4, 7, 10},
185                         },
186                         b: [][]float64{
187                                 {2, 3, 4},
188                                 {5, 6, 7},
189                                 {8, 9, 10},
190                                 {2, 1, 1},
191                         },
192                         c: [][]float64{
193                                 {8, 12, 2},
194                                 {9, 12, 9},
195                                 {12, 1, -1},
196                                 {1, 9, 5},
197                         },
198                         alpha: 2,
199                         beta:  3,
200                         ans: [][]float64{
201                                 {32, 72, 86},
202                                 {47, 108, 167},
203                                 {68, 111, 197},
204                                 {11, 39, 35},
205                         },
206                 },
207                 {
208                         side: blas.Right,
209                         ul:   blas.Lower,
210                         m:    3,
211                         n:    4,
212                         a: [][]float64{
213                                 {2, 0, 0, 0},
214                                 {3, 6, 0, 0},
215                                 {4, 7, 10, 0},
216                                 {3, 4, 5, 6},
217                         },
218                         b: [][]float64{
219                                 {2, 3, 4, 2},
220                                 {5, 6, 7, 1},
221                                 {8, 9, 10, 1},
222                         },
223                         c: [][]float64{
224                                 {8, 12, 2, 1},
225                                 {9, 12, 9, 9},
226                                 {12, 1, -1, 5},
227                         },
228                         alpha: 2,
229                         beta:  3,
230                         ans: [][]float64{
231                                 {94, 156, 164, 103},
232                                 {145, 244, 301, 187},
233                                 {208, 307, 397, 247},
234                         },
235                 },
236                 {
237                         side: blas.Right,
238                         ul:   blas.Lower,
239                         m:    4,
240                         n:    3,
241                         a: [][]float64{
242                                 {2, 0, 0},
243                                 {3, 6, 0},
244                                 {4, 7, 10},
245                         },
246                         b: [][]float64{
247                                 {2, 3, 4},
248                                 {5, 6, 7},
249                                 {8, 9, 10},
250                                 {2, 1, 1},
251                         },
252                         c: [][]float64{
253                                 {8, 12, 2},
254                                 {9, 12, 9},
255                                 {12, 1, -1},
256                                 {1, 9, 5},
257                         },
258                         alpha: 2,
259                         beta:  3,
260                         ans: [][]float64{
261                                 {82, 140, 144},
262                                 {139, 236, 291},
263                                 {202, 299, 387},
264                                 {25, 65, 65},
265                         },
266                 },
267         } {
268                 aFlat := flatten(test.a)
269                 bFlat := flatten(test.b)
270                 cFlat := flatten(test.c)
271                 ansFlat := flatten(test.ans)
272                 blasser.Dsymm(test.side, test.ul, test.m, test.n, test.alpha, aFlat, len(test.a[0]), bFlat, test.n, test.beta, cFlat, test.n)
273                 if !floats.EqualApprox(cFlat, ansFlat, 1e-14) {
274                         t.Errorf("Case %v: Want %v, got %v.", i, ansFlat, cFlat)
275                 }
276         }
277 }