OSDN Git Service

Hulk did something
[bytom/vapor.git] / vendor / gonum.org / v1 / gonum / blas / testblas / ztrmv.go
diff --git a/vendor/gonum.org/v1/gonum/blas/testblas/ztrmv.go b/vendor/gonum.org/v1/gonum/blas/testblas/ztrmv.go
new file mode 100644 (file)
index 0000000..3478410
--- /dev/null
@@ -0,0 +1,285 @@
+// Copyright ©2017 The Gonum Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package testblas
+
+import (
+       "testing"
+
+       "gonum.org/v1/gonum/blas"
+)
+
+var ztrmvTestCases = []struct {
+       uplo blas.Uplo
+       a    []complex128
+       x    []complex128
+
+       // Results with non-unit diagonal.
+       want             []complex128
+       wantNeg          []complex128
+       wantTrans        []complex128
+       wantTransNeg     []complex128
+       wantConjTrans    []complex128
+       wantConjTransNeg []complex128
+
+       // Results with unit diagonal.
+       wantUnit             []complex128
+       wantUnitNeg          []complex128
+       wantUnitTrans        []complex128
+       wantUnitTransNeg     []complex128
+       wantUnitConjTrans    []complex128
+       wantUnitConjTransNeg []complex128
+}{
+       {uplo: blas.Upper},
+       {uplo: blas.Lower},
+       {
+               uplo: blas.Upper,
+               a: []complex128{
+                       6 - 8i, -10 + 10i, -6 - 3i, -1 - 8i,
+                       znan, 7 + 8i, -7 + 9i, 3 + 6i,
+                       znan, znan, 6 - 4i, -2 - 5i,
+                       znan, znan, znan, 4 - 8i,
+               },
+               x: []complex128{
+                       10 - 5i,
+                       -2 + 2i,
+                       8 - 1i,
+                       -7 + 9i,
+               },
+
+               want: []complex128{
+                       48 - 121i,
+                       -152 + 62i,
+                       103 - 21i,
+                       44 + 92i,
+               },
+               wantNeg: []complex128{
+                       0 - 100i,
+                       -49 - 20i,
+                       120 + 70i,
+                       -72 + 119i,
+               },
+               wantTrans: []complex128{
+                       20 - 110i,
+                       -80 + 148i,
+                       -35 - 70i,
+                       -45 - 27i,
+               },
+               wantTransNeg: []complex128{
+                       123 - 2i,
+                       18 + 66i,
+                       44 - 103i,
+                       30 + 110i,
+               },
+               wantConjTrans: []complex128{
+                       100 + 50i,
+                       -148 - 20i,
+                       39 + 90i,
+                       -75 + 125i,
+               },
+               wantConjTransNeg: []complex128{
+                       27 - 70i,
+                       -70 - 136i,
+                       208 - 91i,
+                       -114 - 2i,
+               },
+
+               wantUnit: []complex128{
+                       38 - 16i,
+                       -124 + 66i,
+                       67 + 16i,
+                       -7 + 9i,
+               },
+               wantUnitNeg: []complex128{
+                       10 - 5i,
+                       -47 - 38i,
+                       64 + 12i,
+                       -109 + 18i,
+               },
+               wantUnitTrans: []complex128{
+                       10 - 5i,
+                       -52 + 152i,
+                       -71 - 33i,
+                       -96 - 110i,
+               },
+               wantUnitTransNeg: []complex128{
+                       133 + 93i,
+                       20 + 48i,
+                       -12 - 161i,
+                       -7 + 9i,
+               },
+               wantUnitConjTrans: []complex128{
+                       10 - 5i,
+                       -152 - 48i,
+                       -5 + 63i,
+                       18 + 154i,
+               },
+               wantUnitConjTransNeg: []complex128{
+                       -43 - 135i,
+                       -52 - 138i,
+                       168 - 21i,
+                       -7 + 9i,
+               },
+       },
+       {
+               uplo: blas.Lower,
+               a: []complex128{
+                       10 - 8i, znan, znan, znan,
+                       1 - 6i, -4 + 8i, znan, znan,
+                       2 - 6i, 4 - 8i, 5 + 3i, znan,
+                       -7 - 4i, 1 + 3i, -2 - 4i, 9 + 8i,
+               },
+               x: []complex128{
+                       10 + 5i,
+                       -7 + 1i,
+                       3 - 1i,
+                       9 + 10i,
+               },
+
+               want: []complex128{
+                       140 - 30i,
+                       60 - 115i,
+                       48 + 14i,
+                       -69 + 57i,
+               },
+               wantNeg: []complex128{
+                       51 + 53i,
+                       44 - 78i,
+                       65 - 16i,
+                       170 + 28i,
+               },
+               wantTrans: []complex128{
+                       116 - 113i,
+                       3 - 51i,
+                       40 - 52i,
+                       1 + 162i,
+               },
+               wantTransNeg: []complex128{
+                       50 + 125i,
+                       -38 - 66i,
+                       -29 + 123i,
+                       109 - 22i,
+               },
+               wantConjTrans: []complex128{
+                       -44 + 71i,
+                       95 + 55i,
+                       -46 + 2i,
+                       161 + 18i,
+               },
+               wantConjTransNeg: []complex128{
+                       130 - 35i,
+                       -72 + 56i,
+                       -31 - 97i,
+                       -91 + 154i,
+               },
+
+               wantUnit: []complex128{
+                       10 + 5i,
+                       33 - 54i,
+                       33 + 9i,
+                       -61 - 95i,
+               },
+               wantUnitNeg: []complex128{
+                       11 - 67i,
+                       75 - 61i,
+                       72 - 45i,
+                       9 + 10i,
+               },
+               wantUnitTrans: []complex128{
+                       -14 - 78i,
+                       -24 + 10i,
+                       25 - 57i,
+                       9 + 10i,
+               },
+               wantUnitTransNeg: []complex128{
+                       10 + 5i,
+                       -7 - 49i,
+                       -22 + 94i,
+                       -52 - 40i,
+               },
+               wantUnitConjTrans: []complex128{
+                       -94 - 54i,
+                       52 + 4i,
+                       -55 + 15i,
+                       9 + 10i,
+               },
+               wantUnitConjTransNeg: []complex128{
+                       10 + 5i,
+                       -47 + 31i,
+                       -8 - 78i,
+                       -92 - 8i,
+               },
+       },
+}
+
+type Ztrmver interface {
+       Ztrmv(uplo blas.Uplo, trans blas.Transpose, diag blas.Diag, n int, a []complex128, lda int, x []complex128, incX int)
+}
+
+func ZtrmvTest(t *testing.T, impl Ztrmver) {
+       for tc, test := range ztrmvTestCases {
+               n := len(test.x)
+               uplo := test.uplo
+               for _, trans := range []blas.Transpose{blas.NoTrans, blas.Trans, blas.ConjTrans} {
+                       for _, diag := range []blas.Diag{blas.NonUnit, blas.Unit} {
+                               for _, incX := range []int{-11, -2, -1, 1, 2, 7} {
+                                       for _, lda := range []int{max(1, n), n + 11} {
+                                               a := makeZGeneral(test.a, n, n, lda)
+                                               if diag == blas.Unit {
+                                                       for i := 0; i < n; i++ {
+                                                               a[i*lda+i] = znan
+                                                       }
+                                               }
+                                               aCopy := make([]complex128, len(a))
+                                               copy(aCopy, a)
+
+                                               x := makeZVector(test.x, incX)
+
+                                               impl.Ztrmv(uplo, trans, diag, n, a, lda, x, incX)
+
+                                               if !zsame(a, aCopy) {
+                                                       t.Errorf("Case %v (uplo=%v,trans=%v,diag=%v,lda=%v,incX=%v): unexpected modification of A", tc, uplo, trans, diag, lda, incX)
+                                               }
+
+                                               var want []complex128
+                                               if diag == blas.NonUnit {
+                                                       switch {
+                                                       case trans == blas.NoTrans && incX > 0:
+                                                               want = makeZVector(test.want, incX)
+                                                       case trans == blas.NoTrans && incX < 0:
+                                                               want = makeZVector(test.wantNeg, incX)
+                                                       case trans == blas.Trans && incX > 0:
+                                                               want = makeZVector(test.wantTrans, incX)
+                                                       case trans == blas.Trans && incX < 0:
+                                                               want = makeZVector(test.wantTransNeg, incX)
+                                                       case trans == blas.ConjTrans && incX > 0:
+                                                               want = makeZVector(test.wantConjTrans, incX)
+                                                       case trans == blas.ConjTrans && incX < 0:
+                                                               want = makeZVector(test.wantConjTransNeg, incX)
+                                                       }
+                                               } else {
+                                                       switch {
+                                                       case trans == blas.NoTrans && incX > 0:
+                                                               want = makeZVector(test.wantUnit, incX)
+                                                       case trans == blas.NoTrans && incX < 0:
+                                                               want = makeZVector(test.wantUnitNeg, incX)
+                                                       case trans == blas.Trans && incX > 0:
+                                                               want = makeZVector(test.wantUnitTrans, incX)
+                                                       case trans == blas.Trans && incX < 0:
+                                                               want = makeZVector(test.wantUnitTransNeg, incX)
+                                                       case trans == blas.ConjTrans && incX > 0:
+                                                               want = makeZVector(test.wantUnitConjTrans, incX)
+                                                       case trans == blas.ConjTrans && incX < 0:
+                                                               want = makeZVector(test.wantUnitConjTransNeg, incX)
+                                                       }
+                                               }
+                                               if !zsame(x, want) {
+                                                       t.Errorf("Case %v (uplo=%v,trans=%v,diag=%v,lda=%v,incX=%v): unexpected result\nwant %v\ngot  %v", tc, uplo, trans, diag, lda, incX, want, x)
+                                               }
+                                       }
+                               }
+                       }
+               }
+       }
+}