--- /dev/null
+// 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 testlapack
+
+import (
+ "math"
+ "testing"
+
+ "golang.org/x/exp/rand"
+
+ "gonum.org/v1/gonum/blas/blas64"
+)
+
+func TestDlagsy(t *testing.T) {
+ const tol = 1e-14
+ rnd := rand.New(rand.NewSource(1))
+ for _, n := range []int{0, 1, 2, 3, 4, 5, 10, 50} {
+ for _, lda := range []int{0, 2*n + 1} {
+ if lda == 0 {
+ lda = max(1, n)
+ }
+ d := make([]float64, n)
+ for i := range d {
+ d[i] = 1
+ }
+ a := blas64.General{
+ Rows: n,
+ Cols: n,
+ Stride: lda,
+ Data: nanSlice(n * lda),
+ }
+ work := make([]float64, a.Rows+a.Cols)
+
+ Dlagsy(a.Rows, 0, d, a.Data, a.Stride, rnd, work)
+
+ isIdentity := true
+ identityLoop:
+ for i := 0; i < n; i++ {
+ for j := 0; j < n; j++ {
+ aij := a.Data[i*a.Stride+j]
+ if math.IsNaN(aij) {
+ isIdentity = false
+ }
+ if i == j && math.Abs(aij-1) > tol {
+ isIdentity = false
+ }
+ if i != j && math.Abs(aij) > tol {
+ isIdentity = false
+ }
+ if !isIdentity {
+ break identityLoop
+ }
+ }
+ }
+ if !isIdentity {
+ t.Errorf("Case n=%v,lda=%v: unexpected result", n, lda)
+ }
+ }
+ }
+}
+
+func TestDlagge(t *testing.T) {
+ rnd := rand.New(rand.NewSource(1))
+ for _, n := range []int{0, 1, 2, 3, 4, 5, 10, 50} {
+ for _, lda := range []int{0, 2*n + 1} {
+ if lda == 0 {
+ lda = max(1, n)
+ }
+ d := make([]float64, n)
+ for i := range d {
+ d[i] = 1
+ }
+ a := blas64.General{
+ Rows: n,
+ Cols: n,
+ Stride: lda,
+ Data: nanSlice(n * lda),
+ }
+ work := make([]float64, a.Rows+a.Cols)
+
+ Dlagge(a.Rows, a.Cols, 0, 0, d, a.Data, a.Stride, rnd, work)
+
+ if !isOrthonormal(a) {
+ t.Errorf("Case n=%v,lda=%v: unexpected result", n, lda)
+ }
+ }
+ }
+
+}