gonum.org/v1/gonum@v0.14.0/blas/blas64/blas64_test.go (about) 1 // Copyright ©2019 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 blas64 6 7 import ( 8 "fmt" 9 "testing" 10 11 "gonum.org/v1/gonum/blas" 12 "gonum.org/v1/gonum/blas/testblas" 13 ) 14 15 var impl = b64{} 16 17 func TestDasum(t *testing.T) { testblas.DasumTest(t, impl) } 18 func TestDaxpy(t *testing.T) { testblas.DaxpyTest(t, impl) } 19 func TestDdot(t *testing.T) { testblas.DdotTest(t, impl) } 20 func TestDnrm2(t *testing.T) { testblas.Dnrm2Test(t, impl) } 21 func TestIdamax(t *testing.T) { testblas.IdamaxTest(t, impl) } 22 func TestDswap(t *testing.T) { testblas.DswapTest(t, impl) } 23 func TestDcopy(t *testing.T) { testblas.DcopyTest(t, impl) } 24 func TestDrotg(t *testing.T) { testblas.DrotgTest(t, impl, false) } 25 func TestDrotmg(t *testing.T) { testblas.DrotmgTest(t, impl) } 26 func TestDrot(t *testing.T) { testblas.DrotTest(t, impl) } 27 func TestDrotm(t *testing.T) { testblas.DrotmTest(t, impl) } 28 func TestDscal(t *testing.T) { testblas.DscalTest(t, impl) } 29 func TestDgemv(t *testing.T) { testblas.DgemvTest(t, impl) } 30 func TestDger(t *testing.T) { testblas.DgerTest(t, impl) } 31 func TestDtxmv(t *testing.T) { testblas.DtxmvTest(t, impl) } 32 func TestDgbmv(t *testing.T) { testblas.DgbmvTest(t, impl) } 33 func TestDtbsv(t *testing.T) { testblas.DtbsvTest(t, impl) } 34 func TestDsbmv(t *testing.T) { testblas.DsbmvTest(t, impl) } 35 func TestDtbmv(t *testing.T) { testblas.DtbmvTest(t, impl) } 36 func TestDtrsv(t *testing.T) { testblas.DtrsvTest(t, impl) } 37 func TestDtrmv(t *testing.T) { testblas.DtrmvTest(t, impl) } 38 func TestDsymv(t *testing.T) { testblas.DsymvTest(t, impl) } 39 func TestDsyr(t *testing.T) { testblas.DsyrTest(t, impl) } 40 func TestDsyr2(t *testing.T) { testblas.Dsyr2Test(t, impl) } 41 func TestDspr2(t *testing.T) { testblas.Dspr2Test(t, impl) } 42 func TestDspr(t *testing.T) { testblas.DsprTest(t, impl) } 43 func TestDspmv(t *testing.T) { testblas.DspmvTest(t, impl) } 44 func TestDtpsv(t *testing.T) { testblas.DtpsvTest(t, impl) } 45 func TestDtpmv(t *testing.T) { testblas.DtpmvTest(t, impl) } 46 func TestDgemm(t *testing.T) { testblas.TestDgemm(t, impl) } 47 func TestDsymm(t *testing.T) { testblas.DsymmTest(t, impl) } 48 func TestDtrsm(t *testing.T) { testblas.DtrsmTest(t, impl) } 49 func TestDsyrk(t *testing.T) { testblas.DsyrkTest(t, impl) } 50 func TestDsyr2k(t *testing.T) { testblas.Dsyr2kTest(t, impl) } 51 func TestDtrmm(t *testing.T) { testblas.DtrmmTest(t, impl) } 52 53 type b64 struct{} 54 55 var _ blas.Float64 = b64{} 56 57 func (b64) Ddot(n int, x []float64, incX int, y []float64, incY int) float64 { 58 return Dot(Vector{N: n, Inc: incX, Data: x}, Vector{N: n, Inc: incY, Data: y}) 59 } 60 func (b64) Dnrm2(n int, x []float64, incX int) float64 { 61 if incX < 0 { 62 return 0 63 } 64 return Nrm2(Vector{N: n, Inc: incX, Data: x}) 65 } 66 func (b64) Dasum(n int, x []float64, incX int) float64 { 67 if incX < 0 { 68 return 0 69 } 70 return Asum(Vector{N: n, Inc: incX, Data: x}) 71 } 72 func (b64) Idamax(n int, x []float64, incX int) int { 73 if incX < 0 { 74 return -1 75 } 76 return Iamax(Vector{N: n, Inc: incX, Data: x}) 77 } 78 func (b64) Dswap(n int, x []float64, incX int, y []float64, incY int) { 79 Swap(Vector{N: n, Inc: incX, Data: x}, Vector{N: n, Inc: incY, Data: y}) 80 } 81 func (b64) Dcopy(n int, x []float64, incX int, y []float64, incY int) { 82 Copy(Vector{N: n, Inc: incX, Data: x}, Vector{N: n, Inc: incY, Data: y}) 83 } 84 func (b64) Daxpy(n int, alpha float64, x []float64, incX int, y []float64, incY int) { 85 Axpy(alpha, Vector{N: n, Inc: incX, Data: x}, Vector{N: n, Inc: incY, Data: y}) 86 } 87 func (b64) Drotg(a, b float64) (c, s, r, z float64) { 88 return Rotg(a, b) 89 } 90 func (b64) Drotmg(d1, d2, b1, b2 float64) (p blas.DrotmParams, rd1, rd2, rb1 float64) { 91 return Rotmg(d1, d2, b1, b2) 92 } 93 func (b64) Drot(n int, x []float64, incX int, y []float64, incY int, c float64, s float64) { 94 Rot(Vector{N: n, Inc: incX, Data: x}, Vector{N: n, Inc: incY, Data: y}, c, s) 95 } 96 func (b64) Drotm(n int, x []float64, incX int, y []float64, incY int, p blas.DrotmParams) { 97 Rotm(Vector{N: n, Inc: incX, Data: x}, Vector{N: n, Inc: incY, Data: y}, p) 98 } 99 func (b64) Dscal(n int, alpha float64, x []float64, incX int) { 100 if incX < 0 { 101 return 102 } 103 Scal(alpha, Vector{N: n, Inc: incX, Data: x}) 104 } 105 func (b64) Dgemv(tA blas.Transpose, m, n int, alpha float64, a []float64, lda int, x []float64, incX int, beta float64, y []float64, incY int) { 106 lenX := m 107 lenY := n 108 if tA == blas.NoTrans { 109 lenX = n 110 lenY = m 111 } 112 Gemv(tA, alpha, 113 General{Rows: m, Cols: n, Data: a, Stride: lda}, 114 Vector{N: lenX, Inc: incX, Data: x}, 115 beta, 116 Vector{N: lenY, Inc: incY, Data: y}) 117 } 118 func (b64) Dgbmv(tA blas.Transpose, m, n, kL, kU int, alpha float64, a []float64, lda int, x []float64, incX int, beta float64, y []float64, incY int) { 119 lenX := m 120 lenY := n 121 if tA == blas.NoTrans { 122 lenX = n 123 lenY = m 124 } 125 Gbmv(tA, alpha, 126 Band{Rows: m, Cols: n, KL: kL, KU: kU, Data: a, Stride: lda}, 127 Vector{N: lenX, Inc: incX, Data: x}, 128 beta, 129 Vector{N: lenY, Inc: incY, Data: y}) 130 } 131 func (b64) Dtrmv(ul blas.Uplo, tA blas.Transpose, d blas.Diag, n int, a []float64, lda int, x []float64, incX int) { 132 Trmv(tA, 133 Triangular{Uplo: ul, Diag: d, N: n, Data: a, Stride: lda}, 134 Vector{N: n, Inc: incX, Data: x}) 135 } 136 func (b64) Dtbmv(ul blas.Uplo, tA blas.Transpose, d blas.Diag, n, k int, a []float64, lda int, x []float64, incX int) { 137 Tbmv(tA, 138 TriangularBand{Uplo: ul, Diag: d, N: n, K: k, Data: a, Stride: lda}, 139 Vector{N: n, Inc: incX, Data: x}) 140 } 141 func (b64) Dtpmv(ul blas.Uplo, tA blas.Transpose, d blas.Diag, n int, ap []float64, x []float64, incX int) { 142 Tpmv(tA, 143 TriangularPacked{Uplo: ul, Diag: d, N: n, Data: ap}, 144 Vector{N: n, Inc: incX, Data: x}) 145 } 146 func (b64) Dtrsv(ul blas.Uplo, tA blas.Transpose, d blas.Diag, n int, a []float64, lda int, x []float64, incX int) { 147 Trsv(tA, 148 Triangular{Uplo: ul, Diag: d, N: n, Data: a, Stride: lda}, 149 Vector{N: n, Inc: incX, Data: x}) 150 } 151 func (b64) Dtbsv(ul blas.Uplo, tA blas.Transpose, d blas.Diag, n, k int, a []float64, lda int, x []float64, incX int) { 152 Tbsv(tA, 153 TriangularBand{Uplo: ul, Diag: d, N: n, K: k, Data: a, Stride: lda}, 154 Vector{N: n, Inc: incX, Data: x}) 155 } 156 func (b64) Dtpsv(ul blas.Uplo, tA blas.Transpose, d blas.Diag, n int, ap []float64, x []float64, incX int) { 157 Tpsv(tA, 158 TriangularPacked{Uplo: ul, Diag: d, N: n, Data: ap}, 159 Vector{N: n, Inc: incX, Data: x}) 160 } 161 func (b64) Dsymv(ul blas.Uplo, n int, alpha float64, a []float64, lda int, x []float64, incX int, beta float64, y []float64, incY int) { 162 Symv(alpha, 163 Symmetric{Uplo: ul, N: n, Data: a, Stride: lda}, 164 Vector{N: n, Inc: incX, Data: x}, 165 beta, 166 Vector{N: n, Inc: incY, Data: y}) 167 } 168 func (b64) Dsbmv(ul blas.Uplo, n, k int, alpha float64, a []float64, lda int, x []float64, incX int, beta float64, y []float64, incY int) { 169 Sbmv(alpha, 170 SymmetricBand{Uplo: ul, N: n, K: k, Data: a, Stride: lda}, 171 Vector{N: n, Inc: incX, Data: x}, 172 beta, 173 Vector{N: n, Inc: incY, Data: y}) 174 } 175 func (b64) Dspmv(ul blas.Uplo, n int, alpha float64, ap []float64, x []float64, incX int, beta float64, y []float64, incY int) { 176 Spmv(alpha, 177 SymmetricPacked{Uplo: ul, N: n, Data: ap}, 178 Vector{N: n, Inc: incX, Data: x}, 179 beta, 180 Vector{N: n, Inc: incY, Data: y}) 181 } 182 func (b64) Dger(m, n int, alpha float64, x []float64, incX int, y []float64, incY int, a []float64, lda int) { 183 Ger(alpha, 184 Vector{N: m, Inc: incX, Data: x}, 185 Vector{N: n, Inc: incY, Data: y}, 186 General{Rows: m, Cols: n, Data: a, Stride: lda}) 187 } 188 func (b64) Dsyr(ul blas.Uplo, n int, alpha float64, x []float64, incX int, a []float64, lda int) { 189 Syr(alpha, 190 Vector{N: n, Inc: incX, Data: x}, 191 Symmetric{Uplo: ul, N: n, Data: a, Stride: lda}) 192 } 193 func (b64) Dspr(ul blas.Uplo, n int, alpha float64, x []float64, incX int, ap []float64) { 194 Spr(alpha, 195 Vector{N: n, Inc: incX, Data: x}, 196 SymmetricPacked{Uplo: ul, N: n, Data: ap}) 197 } 198 func (b64) Dsyr2(ul blas.Uplo, n int, alpha float64, x []float64, incX int, y []float64, incY int, a []float64, lda int) { 199 Syr2(alpha, 200 Vector{N: n, Inc: incX, Data: x}, 201 Vector{N: n, Inc: incY, Data: y}, 202 Symmetric{Uplo: ul, N: n, Data: a, Stride: lda}) 203 } 204 func (b64) Dspr2(ul blas.Uplo, n int, alpha float64, x []float64, incX int, y []float64, incY int, a []float64) { 205 Spr2(alpha, 206 Vector{N: n, Inc: incX, Data: x}, 207 Vector{N: n, Inc: incY, Data: y}, 208 SymmetricPacked{Uplo: ul, N: n, Data: a}) 209 } 210 func (b64) Dgemm(tA, tB blas.Transpose, m, n, k int, alpha float64, a []float64, lda int, b []float64, ldb int, beta float64, c []float64, ldc int) { 211 am, an := m, k 212 if tA != blas.NoTrans { 213 am, an = an, am 214 } 215 bm, bn := k, n 216 if tB != blas.NoTrans { 217 bm, bn = bn, bm 218 } 219 Gemm(tA, tB, alpha, 220 General{Rows: am, Cols: an, Data: a, Stride: lda}, 221 General{Rows: bm, Cols: bn, Data: b, Stride: ldb}, 222 beta, 223 General{Rows: m, Cols: n, Data: c, Stride: ldc}) 224 } 225 func (b64) 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) { 226 var an int 227 switch s { 228 case blas.Left: 229 an = m 230 case blas.Right: 231 an = n 232 default: 233 panic(fmt.Sprintf("blas64: bad test: invalid side: %q", s)) 234 } 235 Symm(s, alpha, 236 Symmetric{Uplo: ul, N: an, Data: a, Stride: lda}, 237 General{Rows: m, Cols: n, Data: b, Stride: ldb}, 238 beta, 239 General{Rows: m, Cols: n, Data: c, Stride: ldc}) 240 } 241 func (b64) Dsyrk(ul blas.Uplo, t blas.Transpose, n, k int, alpha float64, a []float64, lda int, beta float64, c []float64, ldc int) { 242 am, an := n, k 243 if t != blas.NoTrans { 244 am, an = an, am 245 } 246 Syrk(t, alpha, 247 General{Rows: am, Cols: an, Data: a, Stride: lda}, 248 beta, 249 Symmetric{Uplo: ul, N: n, Data: c, Stride: ldc}) 250 } 251 func (b64) Dsyr2k(ul blas.Uplo, t blas.Transpose, n, k int, alpha float64, a []float64, lda int, b []float64, ldb int, beta float64, c []float64, ldc int) { 252 am, an := n, k 253 if t != blas.NoTrans { 254 am, an = an, am 255 } 256 Syr2k(t, alpha, 257 General{Rows: am, Cols: an, Data: a, Stride: lda}, 258 General{Rows: am, Cols: an, Data: b, Stride: ldb}, 259 beta, 260 Symmetric{Uplo: ul, N: n, Data: c, Stride: ldc}) 261 } 262 func (b64) 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) { 263 var k int 264 switch s { 265 case blas.Left: 266 k = m 267 case blas.Right: 268 k = n 269 default: 270 panic(fmt.Sprintf("blas64: bad test: invalid side: %q", s)) 271 } 272 Trmm(s, tA, alpha, 273 Triangular{Uplo: ul, Diag: d, N: k, Data: a, Stride: lda}, 274 General{Rows: m, Cols: n, Data: b, Stride: ldb}) 275 } 276 func (b64) Dtrsm(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) { 277 var k int 278 switch s { 279 case blas.Left: 280 k = m 281 case blas.Right: 282 k = n 283 default: 284 panic(fmt.Sprintf("blas64: bad test: invalid side: %q", s)) 285 } 286 Trsm(s, tA, alpha, 287 Triangular{Uplo: ul, Diag: d, N: k, Data: a, Stride: lda}, 288 General{Rows: m, Cols: n, Data: b, Stride: ldb}) 289 }