mirror of
https://github.com/gonum/gonum.git
synced 2025-10-04 14:52:57 +08:00
56 lines
1.1 KiB
Go
56 lines
1.1 KiB
Go
// Copyright ©2015 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 testlapack
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"golang.org/x/exp/rand"
|
|
)
|
|
|
|
type Dgebd2er interface {
|
|
Dgebd2(m, n int, a []float64, lda int, d, e, tauq, taup, work []float64)
|
|
}
|
|
|
|
func Dgebd2Test(t *testing.T, impl Dgebd2er) {
|
|
rnd := rand.New(rand.NewSource(1))
|
|
for _, test := range []struct {
|
|
m, n, lda int
|
|
}{
|
|
{3, 4, 0},
|
|
{4, 3, 0},
|
|
{3, 4, 10},
|
|
{4, 3, 10},
|
|
} {
|
|
m := test.m
|
|
n := test.n
|
|
lda := test.lda
|
|
if lda == 0 {
|
|
lda = n
|
|
}
|
|
nb := min(m, n) // 'nb' name parallel with Dlabrd code.
|
|
a := make([]float64, m*lda)
|
|
for i := range a {
|
|
a[i] = rnd.NormFloat64()
|
|
}
|
|
d := nanSlice(nb)
|
|
e := nanSlice(nb - 1)
|
|
tauP := nanSlice(nb)
|
|
tauQ := nanSlice(nb)
|
|
work := nanSlice(max(m, n))
|
|
aCopy := make([]float64, len(a))
|
|
copy(aCopy, a)
|
|
impl.Dgebd2(m, n, a, lda, d, e, tauQ, tauP, work)
|
|
if m >= n && nb == n {
|
|
tauP[n-1] = 0
|
|
}
|
|
if m < n && nb == m {
|
|
tauQ[m-1] = 0
|
|
}
|
|
|
|
checkBidiagonal(t, m, n, nb, a, lda, d, e, tauP, tauQ, aCopy)
|
|
}
|
|
}
|