// 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) } }