OSDN Git Service

test (#52)
[bytom/vapor.git] / vendor / gonum.org / v1 / gonum / blas / testblas / dtrmm.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 Dtrmmer interface {
11         Dtrmm(s blas.Side, ul blas.Uplo, tA blas.Transpose, d blas.Diag, m, n int, alpha float64, a []float64, lda int, b []float64, ldb int)
12 }
13
14 func DtrmmTest(t *testing.T, blasser Dtrmmer) {
15         for i, test := range []struct {
16                 s     blas.Side
17                 ul    blas.Uplo
18                 tA    blas.Transpose
19                 d     blas.Diag
20                 m     int
21                 n     int
22                 alpha float64
23                 a     [][]float64
24                 b     [][]float64
25                 ans   [][]float64
26         }{
27                 {
28                         s:     blas.Left,
29                         ul:    blas.Upper,
30                         tA:    blas.NoTrans,
31                         d:     blas.NonUnit,
32                         m:     4,
33                         n:     3,
34                         alpha: 2,
35                         a: [][]float64{
36                                 {1, 2, 3, 4},
37                                 {0, 5, 6, 7},
38                                 {0, 0, 8, 9},
39                                 {0, 0, 0, 10},
40                         },
41                         b: [][]float64{
42                                 {10, 11, 12},
43                                 {13, 14, 15},
44                                 {16, 17, 18},
45                                 {19, 20, 21},
46                         },
47                         ans: [][]float64{
48                                 {320, 340, 360},
49                                 {588, 624, 660},
50                                 {598, 632, 666},
51                                 {380, 400, 420},
52                         },
53                 },
54                 {
55                         s:     blas.Left,
56                         ul:    blas.Upper,
57                         tA:    blas.NoTrans,
58                         d:     blas.NonUnit,
59                         m:     2,
60                         n:     3,
61                         alpha: 2,
62                         a: [][]float64{
63                                 {1, 2},
64                                 {0, 5},
65                         },
66                         b: [][]float64{
67                                 {10, 11, 12},
68                                 {13, 14, 15},
69                         },
70                         ans: [][]float64{
71                                 {72, 78, 84},
72                                 {130, 140, 150},
73                         },
74                 },
75                 {
76                         s:     blas.Left,
77                         ul:    blas.Upper,
78                         tA:    blas.NoTrans,
79                         d:     blas.Unit,
80                         m:     4,
81                         n:     3,
82                         alpha: 2,
83                         a: [][]float64{
84                                 {1, 2, 3, 4},
85                                 {0, 5, 6, 7},
86                                 {0, 0, 8, 9},
87                                 {0, 0, 0, 10},
88                         },
89                         b: [][]float64{
90                                 {10, 11, 12},
91                                 {13, 14, 15},
92                                 {16, 17, 18},
93                                 {19, 20, 21},
94                         },
95                         ans: [][]float64{
96                                 {320, 340, 360},
97                                 {484, 512, 540},
98                                 {374, 394, 414},
99                                 {38, 40, 42},
100                         },
101                 },
102                 {
103                         s:     blas.Left,
104                         ul:    blas.Upper,
105                         tA:    blas.NoTrans,
106                         d:     blas.Unit,
107                         m:     2,
108                         n:     3,
109                         alpha: 2,
110                         a: [][]float64{
111                                 {1, 2},
112                                 {0, 5},
113                         },
114                         b: [][]float64{
115                                 {10, 11, 12},
116                                 {13, 14, 15},
117                         },
118                         ans: [][]float64{
119                                 {72, 78, 84},
120                                 {26, 28, 30},
121                         },
122                 },
123                 {
124                         s:     blas.Left,
125                         ul:    blas.Lower,
126                         tA:    blas.NoTrans,
127                         d:     blas.NonUnit,
128                         m:     4,
129                         n:     3,
130                         alpha: 2,
131                         a: [][]float64{
132                                 {1, 0, 0, 0},
133                                 {2, 5, 0, 0},
134                                 {3, 6, 8, 0},
135                                 {4, 7, 9, 10},
136                         },
137                         b: [][]float64{
138                                 {10, 11, 12},
139                                 {13, 14, 15},
140                                 {16, 17, 18},
141                                 {19, 20, 21},
142                         },
143                         ans: [][]float64{
144                                 {20, 22, 24},
145                                 {170, 184, 198},
146                                 {472, 506, 540},
147                                 {930, 990, 1050},
148                         },
149                 },
150                 {
151                         s:     blas.Left,
152                         ul:    blas.Lower,
153                         tA:    blas.NoTrans,
154                         d:     blas.NonUnit,
155                         m:     2,
156                         n:     3,
157                         alpha: 2,
158                         a: [][]float64{
159                                 {1, 0},
160                                 {2, 5},
161                         },
162                         b: [][]float64{
163                                 {10, 11, 12},
164                                 {13, 14, 15},
165                         },
166                         ans: [][]float64{
167                                 {20, 22, 24},
168                                 {170, 184, 198},
169                         },
170                 },
171                 {
172                         s:     blas.Left,
173                         ul:    blas.Lower,
174                         tA:    blas.NoTrans,
175                         d:     blas.Unit,
176                         m:     4,
177                         n:     3,
178                         alpha: 2,
179                         a: [][]float64{
180                                 {1, 0, 0, 0},
181                                 {2, 5, 0, 0},
182                                 {3, 6, 8, 0},
183                                 {4, 7, 9, 10},
184                         },
185                         b: [][]float64{
186                                 {10, 11, 12},
187                                 {13, 14, 15},
188                                 {16, 17, 18},
189                                 {19, 20, 21},
190                         },
191                         ans: [][]float64{
192                                 {20, 22, 24},
193                                 {66, 72, 78},
194                                 {248, 268, 288},
195                                 {588, 630, 672},
196                         },
197                 },
198                 {
199                         s:     blas.Left,
200                         ul:    blas.Lower,
201                         tA:    blas.NoTrans,
202                         d:     blas.Unit,
203                         m:     2,
204                         n:     3,
205                         alpha: 2,
206                         a: [][]float64{
207                                 {1, 0},
208                                 {2, 5},
209                         },
210                         b: [][]float64{
211                                 {10, 11, 12},
212                                 {13, 14, 15},
213                         },
214                         ans: [][]float64{
215                                 {20, 22, 24},
216                                 {66, 72, 78},
217                         },
218                 },
219                 {
220                         s:     blas.Left,
221                         ul:    blas.Upper,
222                         tA:    blas.Trans,
223                         d:     blas.NonUnit,
224                         m:     4,
225                         n:     3,
226                         alpha: 2,
227                         a: [][]float64{
228                                 {1, 2, 3, 4},
229                                 {0, 5, 6, 7},
230                                 {0, 0, 8, 9},
231                                 {0, 0, 0, 10},
232                         },
233                         b: [][]float64{
234                                 {10, 11, 12},
235                                 {13, 14, 15},
236                                 {16, 17, 18},
237                                 {19, 20, 21},
238                         },
239                         ans: [][]float64{
240                                 {20, 22, 24},
241                                 {170, 184, 198},
242                                 {472, 506, 540},
243                                 {930, 990, 1050},
244                         },
245                 },
246                 {
247                         s:     blas.Left,
248                         ul:    blas.Upper,
249                         tA:    blas.Trans,
250                         d:     blas.NonUnit,
251                         m:     2,
252                         n:     3,
253                         alpha: 2,
254                         a: [][]float64{
255                                 {1, 2},
256                                 {0, 5},
257                         },
258                         b: [][]float64{
259                                 {10, 11, 12},
260                                 {13, 14, 15},
261                         },
262                         ans: [][]float64{
263                                 {20, 22, 24},
264                                 {170, 184, 198},
265                         },
266                 },
267                 {
268                         s:     blas.Left,
269                         ul:    blas.Upper,
270                         tA:    blas.Trans,
271                         d:     blas.Unit,
272                         m:     4,
273                         n:     3,
274                         alpha: 2,
275                         a: [][]float64{
276                                 {1, 2, 3, 4},
277                                 {0, 5, 6, 7},
278                                 {0, 0, 8, 9},
279                                 {0, 0, 0, 10},
280                         },
281                         b: [][]float64{
282                                 {10, 11, 12},
283                                 {13, 14, 15},
284                                 {16, 17, 18},
285                                 {19, 20, 21},
286                         },
287                         ans: [][]float64{
288                                 {20, 22, 24},
289                                 {66, 72, 78},
290                                 {248, 268, 288},
291                                 {588, 630, 672},
292                         },
293                 },
294                 {
295                         s:     blas.Left,
296                         ul:    blas.Upper,
297                         tA:    blas.Trans,
298                         d:     blas.Unit,
299                         m:     2,
300                         n:     3,
301                         alpha: 2,
302                         a: [][]float64{
303                                 {1, 2},
304                                 {0, 5},
305                         },
306                         b: [][]float64{
307                                 {10, 11, 12},
308                                 {13, 14, 15},
309                         },
310                         ans: [][]float64{
311                                 {20, 22, 24},
312                                 {66, 72, 78},
313                         },
314                 },
315                 {
316                         s:     blas.Left,
317                         ul:    blas.Lower,
318                         tA:    blas.Trans,
319                         d:     blas.NonUnit,
320                         m:     4,
321                         n:     3,
322                         alpha: 2,
323                         a: [][]float64{
324                                 {1, 0, 0, 0},
325                                 {2, 5, 0, 0},
326                                 {3, 6, 8, 0},
327                                 {4, 7, 9, 10},
328                         },
329                         b: [][]float64{
330                                 {10, 11, 12},
331                                 {13, 14, 15},
332                                 {16, 17, 18},
333                                 {19, 20, 21},
334                         },
335                         ans: [][]float64{
336                                 {320, 340, 360},
337                                 {588, 624, 660},
338                                 {598, 632, 666},
339                                 {380, 400, 420},
340                         },
341                 },
342                 {
343                         s:     blas.Left,
344                         ul:    blas.Lower,
345                         tA:    blas.Trans,
346                         d:     blas.NonUnit,
347                         m:     2,
348                         n:     3,
349                         alpha: 2,
350                         a: [][]float64{
351                                 {1, 0},
352                                 {2, 5},
353                         },
354                         b: [][]float64{
355                                 {10, 11, 12},
356                                 {13, 14, 15},
357                         },
358                         ans: [][]float64{
359                                 {72, 78, 84},
360                                 {130, 140, 150},
361                         },
362                 },
363                 {
364                         s:     blas.Left,
365                         ul:    blas.Lower,
366                         tA:    blas.Trans,
367                         d:     blas.Unit,
368                         m:     4,
369                         n:     3,
370                         alpha: 2,
371                         a: [][]float64{
372                                 {1, 0, 0, 0},
373                                 {2, 5, 0, 0},
374                                 {3, 6, 8, 0},
375                                 {4, 7, 9, 10},
376                         },
377                         b: [][]float64{
378                                 {10, 11, 12},
379                                 {13, 14, 15},
380                                 {16, 17, 18},
381                                 {19, 20, 21},
382                         },
383                         ans: [][]float64{
384                                 {320, 340, 360},
385                                 {484, 512, 540},
386                                 {374, 394, 414},
387                                 {38, 40, 42},
388                         },
389                 },
390                 {
391                         s:     blas.Left,
392                         ul:    blas.Lower,
393                         tA:    blas.Trans,
394                         d:     blas.Unit,
395                         m:     2,
396                         n:     3,
397                         alpha: 2,
398                         a: [][]float64{
399                                 {1, 0},
400                                 {2, 5},
401                         },
402                         b: [][]float64{
403                                 {10, 11, 12},
404                                 {13, 14, 15},
405                         },
406                         ans: [][]float64{
407                                 {72, 78, 84},
408                                 {26, 28, 30},
409                         },
410                 },
411                 {
412                         s:     blas.Right,
413                         ul:    blas.Upper,
414                         tA:    blas.NoTrans,
415                         d:     blas.NonUnit,
416                         m:     4,
417                         n:     3,
418                         alpha: 2,
419                         a: [][]float64{
420                                 {1, 2, 3},
421                                 {0, 4, 5},
422                                 {0, 0, 6},
423                         },
424                         b: [][]float64{
425                                 {10, 11, 12},
426                                 {13, 14, 15},
427                                 {16, 17, 18},
428                                 {19, 20, 21},
429                         },
430                         ans: [][]float64{
431                                 {20, 128, 314},
432                                 {26, 164, 398},
433                                 {32, 200, 482},
434                                 {38, 236, 566},
435                         },
436                 },
437                 {
438                         s:     blas.Right,
439                         ul:    blas.Upper,
440                         tA:    blas.NoTrans,
441                         d:     blas.NonUnit,
442                         m:     2,
443                         n:     3,
444                         alpha: 2,
445                         a: [][]float64{
446                                 {1, 2, 3},
447                                 {0, 4, 5},
448                                 {0, 0, 6},
449                         },
450                         b: [][]float64{
451                                 {10, 11, 12},
452                                 {13, 14, 15},
453                         },
454                         ans: [][]float64{
455                                 {20, 128, 314},
456                                 {26, 164, 398},
457                         },
458                 },
459                 {
460                         s:     blas.Right,
461                         ul:    blas.Upper,
462                         tA:    blas.NoTrans,
463                         d:     blas.Unit,
464                         m:     4,
465                         n:     3,
466                         alpha: 2,
467                         a: [][]float64{
468                                 {1, 2, 3},
469                                 {0, 4, 5},
470                                 {0, 0, 6},
471                         },
472                         b: [][]float64{
473                                 {10, 11, 12},
474                                 {13, 14, 15},
475                                 {16, 17, 18},
476                                 {19, 20, 21},
477                         },
478                         ans: [][]float64{
479                                 {20, 62, 194},
480                                 {26, 80, 248},
481                                 {32, 98, 302},
482                                 {38, 116, 356},
483                         },
484                 },
485                 {
486                         s:     blas.Right,
487                         ul:    blas.Upper,
488                         tA:    blas.NoTrans,
489                         d:     blas.Unit,
490                         m:     2,
491                         n:     3,
492                         alpha: 2,
493                         a: [][]float64{
494                                 {1, 2, 3},
495                                 {0, 4, 5},
496                                 {0, 0, 6},
497                         },
498                         b: [][]float64{
499                                 {10, 11, 12},
500                                 {13, 14, 15},
501                         },
502                         ans: [][]float64{
503                                 {20, 62, 194},
504                                 {26, 80, 248},
505                         },
506                 },
507                 {
508                         s:     blas.Right,
509                         ul:    blas.Lower,
510                         tA:    blas.NoTrans,
511                         d:     blas.NonUnit,
512                         m:     4,
513                         n:     3,
514                         alpha: 2,
515                         a: [][]float64{
516                                 {1, 0, 0},
517                                 {2, 4, 0},
518                                 {3, 5, 6},
519                         },
520                         b: [][]float64{
521                                 {10, 11, 12},
522                                 {13, 14, 15},
523                                 {16, 17, 18},
524                                 {19, 20, 21},
525                         },
526                         ans: [][]float64{
527                                 {136, 208, 144},
528                                 {172, 262, 180},
529                                 {208, 316, 216},
530                                 {244, 370, 252},
531                         },
532                 },
533                 {
534                         s:     blas.Right,
535                         ul:    blas.Lower,
536                         tA:    blas.NoTrans,
537                         d:     blas.NonUnit,
538                         m:     2,
539                         n:     3,
540                         alpha: 2,
541                         a: [][]float64{
542                                 {1, 0, 0},
543                                 {2, 4, 0},
544                                 {3, 5, 6},
545                         },
546                         b: [][]float64{
547                                 {10, 11, 12},
548                                 {13, 14, 15},
549                         },
550                         ans: [][]float64{
551                                 {136, 208, 144},
552                                 {172, 262, 180},
553                         },
554                 },
555                 {
556                         s:     blas.Right,
557                         ul:    blas.Lower,
558                         tA:    blas.NoTrans,
559                         d:     blas.Unit,
560                         m:     4,
561                         n:     3,
562                         alpha: 2,
563                         a: [][]float64{
564                                 {1, 0, 0},
565                                 {2, 4, 0},
566                                 {3, 5, 6},
567                         },
568                         b: [][]float64{
569                                 {10, 11, 12},
570                                 {13, 14, 15},
571                                 {16, 17, 18},
572                                 {19, 20, 21},
573                         },
574                         ans: [][]float64{
575                                 {136, 142, 24},
576                                 {172, 178, 30},
577                                 {208, 214, 36},
578                                 {244, 250, 42},
579                         },
580                 },
581                 {
582                         s:     blas.Right,
583                         ul:    blas.Lower,
584                         tA:    blas.NoTrans,
585                         d:     blas.Unit,
586                         m:     2,
587                         n:     3,
588                         alpha: 2,
589                         a: [][]float64{
590                                 {1, 0, 0},
591                                 {2, 4, 0},
592                                 {3, 5, 6},
593                         },
594                         b: [][]float64{
595                                 {10, 11, 12},
596                                 {13, 14, 15},
597                         },
598                         ans: [][]float64{
599                                 {136, 142, 24},
600                                 {172, 178, 30},
601                         },
602                 },
603
604                 {
605                         s:     blas.Right,
606                         ul:    blas.Upper,
607                         tA:    blas.Trans,
608                         d:     blas.NonUnit,
609                         m:     4,
610                         n:     3,
611                         alpha: 2,
612                         a: [][]float64{
613                                 {1, 2, 3},
614                                 {0, 4, 5},
615                                 {0, 0, 6},
616                         },
617                         b: [][]float64{
618                                 {10, 11, 12},
619                                 {13, 14, 15},
620                                 {16, 17, 18},
621                                 {19, 20, 21},
622                         },
623                         ans: [][]float64{
624                                 {136, 208, 144},
625                                 {172, 262, 180},
626                                 {208, 316, 216},
627                                 {244, 370, 252},
628                         },
629                 },
630                 {
631                         s:     blas.Right,
632                         ul:    blas.Upper,
633                         tA:    blas.Trans,
634                         d:     blas.NonUnit,
635                         m:     2,
636                         n:     3,
637                         alpha: 2,
638                         a: [][]float64{
639                                 {1, 2, 3},
640                                 {0, 4, 5},
641                                 {0, 0, 6},
642                         },
643                         b: [][]float64{
644                                 {10, 11, 12},
645                                 {13, 14, 15},
646                         },
647                         ans: [][]float64{
648                                 {136, 208, 144},
649                                 {172, 262, 180},
650                         },
651                 },
652                 {
653                         s:     blas.Right,
654                         ul:    blas.Upper,
655                         tA:    blas.Trans,
656                         d:     blas.Unit,
657                         m:     4,
658                         n:     3,
659                         alpha: 2,
660                         a: [][]float64{
661                                 {1, 2, 3},
662                                 {0, 4, 5},
663                                 {0, 0, 6},
664                         },
665                         b: [][]float64{
666                                 {10, 11, 12},
667                                 {13, 14, 15},
668                                 {16, 17, 18},
669                                 {19, 20, 21},
670                         },
671                         ans: [][]float64{
672                                 {136, 142, 24},
673                                 {172, 178, 30},
674                                 {208, 214, 36},
675                                 {244, 250, 42},
676                         },
677                 },
678                 {
679                         s:     blas.Right,
680                         ul:    blas.Upper,
681                         tA:    blas.Trans,
682                         d:     blas.Unit,
683                         m:     2,
684                         n:     3,
685                         alpha: 2,
686                         a: [][]float64{
687                                 {1, 2, 3},
688                                 {0, 4, 5},
689                                 {0, 0, 6},
690                         },
691                         b: [][]float64{
692                                 {10, 11, 12},
693                                 {13, 14, 15},
694                         },
695                         ans: [][]float64{
696                                 {136, 142, 24},
697                                 {172, 178, 30},
698                         },
699                 },
700
701                 {
702                         s:     blas.Right,
703                         ul:    blas.Lower,
704                         tA:    blas.Trans,
705                         d:     blas.NonUnit,
706                         m:     4,
707                         n:     3,
708                         alpha: 2,
709                         a: [][]float64{
710                                 {1, 0, 0},
711                                 {2, 4, 0},
712                                 {3, 5, 6},
713                         },
714                         b: [][]float64{
715                                 {10, 11, 12},
716                                 {13, 14, 15},
717                                 {16, 17, 18},
718                                 {19, 20, 21},
719                         },
720                         ans: [][]float64{
721                                 {20, 128, 314},
722                                 {26, 164, 398},
723                                 {32, 200, 482},
724                                 {38, 236, 566},
725                         },
726                 },
727                 {
728                         s:     blas.Right,
729                         ul:    blas.Lower,
730                         tA:    blas.Trans,
731                         d:     blas.NonUnit,
732                         m:     2,
733                         n:     3,
734                         alpha: 2,
735                         a: [][]float64{
736                                 {1, 0, 0},
737                                 {2, 4, 0},
738                                 {3, 5, 6},
739                         },
740                         b: [][]float64{
741                                 {10, 11, 12},
742                                 {13, 14, 15},
743                         },
744                         ans: [][]float64{
745                                 {20, 128, 314},
746                                 {26, 164, 398},
747                         },
748                 },
749                 {
750                         s:     blas.Right,
751                         ul:    blas.Lower,
752                         tA:    blas.Trans,
753                         d:     blas.Unit,
754                         m:     4,
755                         n:     3,
756                         alpha: 2,
757                         a: [][]float64{
758                                 {1, 0, 0},
759                                 {2, 4, 0},
760                                 {3, 5, 6},
761                         },
762                         b: [][]float64{
763                                 {10, 11, 12},
764                                 {13, 14, 15},
765                                 {16, 17, 18},
766                                 {19, 20, 21},
767                         },
768                         ans: [][]float64{
769                                 {20, 62, 194},
770                                 {26, 80, 248},
771                                 {32, 98, 302},
772                                 {38, 116, 356},
773                         },
774                 },
775                 {
776                         s:     blas.Right,
777                         ul:    blas.Lower,
778                         tA:    blas.Trans,
779                         d:     blas.Unit,
780                         m:     2,
781                         n:     3,
782                         alpha: 2,
783                         a: [][]float64{
784                                 {1, 0, 0},
785                                 {2, 4, 0},
786                                 {3, 5, 6},
787                         },
788                         b: [][]float64{
789                                 {10, 11, 12},
790                                 {13, 14, 15},
791                         },
792                         ans: [][]float64{
793                                 {20, 62, 194},
794                                 {26, 80, 248},
795                         },
796                 },
797         } {
798                 aFlat := flatten(test.a)
799                 bFlat := flatten(test.b)
800                 ansFlat := flatten(test.ans)
801                 blasser.Dtrmm(test.s, test.ul, test.tA, test.d, test.m, test.n, test.alpha, aFlat, len(test.a[0]), bFlat, len(test.b[0]))
802                 if !floats.EqualApprox(ansFlat, bFlat, 1e-14) {
803                         t.Errorf("Case %v. Want %v, got %v.", i, ansFlat, bFlat)
804                 }
805         }
806 }