OSDN Git Service

new repo
[bytom/vapor.git] / vendor / gonum.org / v1 / gonum / blas / testblas / zgeru.go
1 // Copyright ©2017 The Gonum Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style
3 // license that can be found in the LICENSE file.
4
5 package testblas
6
7 import (
8         "testing"
9 )
10
11 type Zgeruer interface {
12         Zgeru(m, n int, alpha complex128, x []complex128, incX int, y []complex128, incY int, a []complex128, lda int)
13 }
14
15 func ZgeruTest(t *testing.T, impl Zgeruer) {
16         for tc, test := range []struct {
17                 alpha complex128
18                 x     []complex128
19                 incX  int
20                 y     []complex128
21                 incY  int
22                 a     []complex128
23
24                 want []complex128
25         }{
26                 {
27                         incX:  1,
28                         incY:  1,
29                         alpha: 1 + 2i,
30                 },
31                 {
32                         incX:  1,
33                         incY:  1,
34                         alpha: 1 + 2i,
35                         x:     []complex128{1 + 13i, 18 + 15i, 10 + 18i},
36                         y:     []complex128{15 + 12i, 4 + 8i, 5 + 16i, 19 + 12i},
37                         a: []complex128{
38                                 4 + 7i, 4 + 7i, 12 + 3i, 9 + 10i,
39                                 3 + 3i, 1 + 2i, 17 + 17i, 9 + 18i,
40                                 14 + 12i, 9 + 16i, 1 + 1i, 9 + 1i,
41                         },
42                         want: []complex128{
43                                 -551 - 68i, -216 - 133i, -353 - 322i, -646 - 5i,
44                                 -789 + 624i, -455 + 110i, -859 + 80i, -831 + 843i,
45                                 -832 + 270i, -399 - 40i, -737 - 225i, -941 + 411i,
46                         },
47                 },
48                 {
49                         incX:  7,
50                         incY:  13,
51                         alpha: 1 + 2i,
52                         x:     []complex128{1 + 13i, 18 + 15i, 10 + 18i},
53                         y:     []complex128{15 + 12i, 4 + 8i, 5 + 16i, 19 + 12i},
54                         a: []complex128{
55                                 4 + 7i, 4 + 7i, 12 + 3i, 9 + 10i,
56                                 3 + 3i, 1 + 2i, 17 + 17i, 9 + 18i,
57                                 14 + 12i, 9 + 16i, 1 + 1i, 9 + 1i,
58                         },
59                         want: []complex128{
60                                 -551 - 68i, -216 - 133i, -353 - 322i, -646 - 5i,
61                                 -789 + 624i, -455 + 110i, -859 + 80i, -831 + 843i,
62                                 -832 + 270i, -399 - 40i, -737 - 225i, -941 + 411i,
63                         },
64                 },
65                 {
66                         incX:  1,
67                         incY:  13,
68                         alpha: 1 + 2i,
69                         x:     []complex128{1 + 13i, 18 + 15i, 10 + 18i},
70                         y:     []complex128{15 + 12i, 4 + 8i, 5 + 16i, 19 + 12i},
71                         a: []complex128{
72                                 4 + 7i, 4 + 7i, 12 + 3i, 9 + 10i,
73                                 3 + 3i, 1 + 2i, 17 + 17i, 9 + 18i,
74                                 14 + 12i, 9 + 16i, 1 + 1i, 9 + 1i,
75                         },
76                         want: []complex128{
77                                 -551 - 68i, -216 - 133i, -353 - 322i, -646 - 5i,
78                                 -789 + 624i, -455 + 110i, -859 + 80i, -831 + 843i,
79                                 -832 + 270i, -399 - 40i, -737 - 225i, -941 + 411i,
80                         },
81                 },
82                 {
83                         incX:  1,
84                         incY:  -13,
85                         alpha: 1 + 2i,
86                         x:     []complex128{1 + 13i, 18 + 15i, 10 + 18i},
87                         y:     []complex128{19 + 12i, 5 + 16i, 4 + 8i, 15 + 12i},
88                         a: []complex128{
89                                 4 + 7i, 4 + 7i, 12 + 3i, 9 + 10i,
90                                 3 + 3i, 1 + 2i, 17 + 17i, 9 + 18i,
91                                 14 + 12i, 9 + 16i, 1 + 1i, 9 + 1i,
92                         },
93                         want: []complex128{
94                                 -551 - 68i, -216 - 133i, -353 - 322i, -646 - 5i,
95                                 -789 + 624i, -455 + 110i, -859 + 80i, -831 + 843i,
96                                 -832 + 270i, -399 - 40i, -737 - 225i, -941 + 411i,
97                         },
98                 },
99                 {
100                         incX:  7,
101                         incY:  1,
102                         alpha: 1 + 2i,
103                         x:     []complex128{1 + 13i, 18 + 15i, 10 + 18i},
104                         y:     []complex128{15 + 12i, 4 + 8i, 5 + 16i, 19 + 12i},
105                         a: []complex128{
106                                 4 + 7i, 4 + 7i, 12 + 3i, 9 + 10i,
107                                 3 + 3i, 1 + 2i, 17 + 17i, 9 + 18i,
108                                 14 + 12i, 9 + 16i, 1 + 1i, 9 + 1i,
109                         },
110                         want: []complex128{
111                                 -551 - 68i, -216 - 133i, -353 - 322i, -646 - 5i,
112                                 -789 + 624i, -455 + 110i, -859 + 80i, -831 + 843i,
113                                 -832 + 270i, -399 - 40i, -737 - 225i, -941 + 411i,
114                         },
115                 },
116                 {
117                         incX:  -7,
118                         incY:  1,
119                         alpha: 1 + 2i,
120                         x:     []complex128{10 + 18i, 18 + 15i, 1 + 13i},
121                         y:     []complex128{15 + 12i, 4 + 8i, 5 + 16i, 19 + 12i},
122                         a: []complex128{
123                                 4 + 7i, 4 + 7i, 12 + 3i, 9 + 10i,
124                                 3 + 3i, 1 + 2i, 17 + 17i, 9 + 18i,
125                                 14 + 12i, 9 + 16i, 1 + 1i, 9 + 1i,
126                         },
127                         want: []complex128{
128                                 -551 - 68i, -216 - 133i, -353 - 322i, -646 - 5i,
129                                 -789 + 624i, -455 + 110i, -859 + 80i, -831 + 843i,
130                                 -832 + 270i, -399 - 40i, -737 - 225i, -941 + 411i,
131                         },
132                 },
133                 {
134                         incX:  -7,
135                         incY:  -13,
136                         alpha: 1 + 2i,
137                         x:     []complex128{10 + 18i, 18 + 15i, 1 + 13i},
138                         y:     []complex128{19 + 12i, 5 + 16i, 4 + 8i, 15 + 12i},
139                         a: []complex128{
140                                 4 + 7i, 4 + 7i, 12 + 3i, 9 + 10i,
141                                 3 + 3i, 1 + 2i, 17 + 17i, 9 + 18i,
142                                 14 + 12i, 9 + 16i, 1 + 1i, 9 + 1i,
143                         },
144                         want: []complex128{
145                                 -551 - 68i, -216 - 133i, -353 - 322i, -646 - 5i,
146                                 -789 + 624i, -455 + 110i, -859 + 80i, -831 + 843i,
147                                 -832 + 270i, -399 - 40i, -737 - 225i, -941 + 411i,
148                         },
149                 },
150                 {
151                         incX:  1,
152                         incY:  1,
153                         alpha: 1 + 2i,
154                         x:     []complex128{5 + 16i, 12 + 19i, 9 + 7i, 2 + 4i},
155                         y:     []complex128{18 + 7i, 20 + 15i, 12 + 14i},
156                         a: []complex128{
157                                 8 + 17i, 2 + 2i, 8 + 17i,
158                                 1 + 10i, 10 + 15i, 4 + 18i,
159                                 11 + 3i, 15 + 7i, 12 + 15i,
160                                 20 + 10i, 8 + 13i, 19 + 10i,
161                         },
162                         want: []complex128{
163                                 -660 + 296i, -928 + 117i, -680 - 49i,
164                                 -768 + 602i, -1155 + 485i, -910 + 170i,
165                                 -254 + 418i, -460 + 432i, -398 + 245i,
166                                 -144 + 112i, -232 + 83i, -165 + 22i,
167                         },
168                 },
169                 {
170                         incX:  7,
171                         incY:  13,
172                         alpha: 1 + 2i,
173                         x:     []complex128{5 + 16i, 12 + 19i, 9 + 7i, 2 + 4i},
174                         y:     []complex128{18 + 7i, 20 + 15i, 12 + 14i},
175                         a: []complex128{
176                                 8 + 17i, 2 + 2i, 8 + 17i,
177                                 1 + 10i, 10 + 15i, 4 + 18i,
178                                 11 + 3i, 15 + 7i, 12 + 15i,
179                                 20 + 10i, 8 + 13i, 19 + 10i,
180                         },
181                         want: []complex128{
182                                 -660 + 296i, -928 + 117i, -680 - 49i,
183                                 -768 + 602i, -1155 + 485i, -910 + 170i,
184                                 -254 + 418i, -460 + 432i, -398 + 245i,
185                                 -144 + 112i, -232 + 83i, -165 + 22i,
186                         },
187                 },
188                 {
189                         incX:  -7,
190                         incY:  -13,
191                         alpha: 1 + 2i,
192                         x:     []complex128{2 + 4i, 9 + 7i, 12 + 19i, 5 + 16i},
193                         y:     []complex128{12 + 14i, 20 + 15i, 18 + 7i},
194                         a: []complex128{
195                                 8 + 17i, 2 + 2i, 8 + 17i,
196                                 1 + 10i, 10 + 15i, 4 + 18i,
197                                 11 + 3i, 15 + 7i, 12 + 15i,
198                                 20 + 10i, 8 + 13i, 19 + 10i,
199                         },
200                         want: []complex128{
201                                 -660 + 296i, -928 + 117i, -680 - 49i,
202                                 -768 + 602i, -1155 + 485i, -910 + 170i,
203                                 -254 + 418i, -460 + 432i, -398 + 245i,
204                                 -144 + 112i, -232 + 83i, -165 + 22i,
205                         },
206                 },
207                 {
208                         incX:  -7,
209                         incY:  -13,
210                         alpha: 0,
211                         x:     []complex128{5 + 16i, 12 + 19i, 9 + 7i, 2 + 4i},
212                         y:     []complex128{18 + 7i, 20 + 15i, 12 + 14i},
213                         a: []complex128{
214                                 8 + 17i, 2 + 2i, 8 + 17i,
215                                 1 + 10i, 10 + 15i, 4 + 18i,
216                                 11 + 3i, 15 + 7i, 12 + 15i,
217                                 20 + 10i, 8 + 13i, 19 + 10i,
218                         },
219                         want: []complex128{
220                                 8 + 17i, 2 + 2i, 8 + 17i,
221                                 1 + 10i, 10 + 15i, 4 + 18i,
222                                 11 + 3i, 15 + 7i, 12 + 15i,
223                                 20 + 10i, 8 + 13i, 19 + 10i,
224                         },
225                 },
226         } {
227                 m := len(test.x)
228                 n := len(test.y)
229                 incX := test.incX
230                 incY := test.incY
231
232                 for _, lda := range []int{max(1, n), n + 20} {
233                         x := makeZVector(test.x, incX)
234                         xCopy := make([]complex128, len(x))
235                         copy(xCopy, x)
236
237                         y := makeZVector(test.y, incY)
238                         yCopy := make([]complex128, len(y))
239                         copy(yCopy, y)
240
241                         a := makeZGeneral(test.a, m, n, lda)
242                         want := makeZGeneral(test.want, m, n, lda)
243
244                         impl.Zgeru(m, n, test.alpha, x, incX, y, incY, a, lda)
245
246                         if !zsame(x, xCopy) {
247                                 t.Errorf("Case %v: unexpected modification of x", tc)
248                         }
249                         if !zsame(y, yCopy) {
250                                 t.Errorf("Case %v: unexpected modification of y", tc)
251                         }
252                         if !zsame(want, a) {
253                                 t.Errorf("Case %v: unexpected result\nwant %v\ngot %v", tc, want, a)
254                         }
255                 }
256         }
257 }