+++ /dev/null
-// Copyright ©2016 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.
-
-// dlahr2test generates test data for Dlahr2. Test cases are stored in
-// gzip-compressed JSON file testlapack/testdata/dlahr2data.json.gz which is
-// read during testing by testlapack/dlahr2.go.
-//
-// This program uses cgo to call Fortran version of DLAHR2. Therefore, matrices
-// passed to the Fortran routine are in column-major format but are written into
-// the output file in row-major format.
-package main
-
-import (
- "compress/gzip"
- "encoding/json"
- "log"
- "os"
- "path/filepath"
-
- "golang.org/x/exp/rand"
-
- "gonum.org/v1/gonum/lapack/internal/testdata/netlib"
-)
-
-type Dlahr2Test struct {
- N, K, NB int
- A []float64
-
- AWant []float64
- TWant []float64
- YWant []float64
- TauWant []float64
-}
-
-func main() {
- file, err := os.Create(filepath.FromSlash("../../../testlapack/testdata/dlahr2data.json.gz"))
- if err != nil {
- log.Fatal(err)
- }
- defer file.Close()
- w := gzip.NewWriter(file)
-
- rnd := rand.New(rand.NewSource(1))
-
- var tests []Dlahr2Test
- for _, n := range []int{4, 5, 6, 7, 11} {
- for k := 0; k <= n/2; k++ {
- for nb := 1; nb <= k; nb++ {
- ain := genrand(n, n-k+1, rnd)
- a := make([]float64, len(ain))
- copy(a, ain)
-
- t := genrand(nb, nb, rnd)
- y := genrand(n, nb, rnd)
- tau := genrand(nb, 1, rnd)
-
- netlib.Dlahr2(n, k, nb, a, n, tau, t, nb, y, n)
-
- tests = append(tests, Dlahr2Test{
- N: n,
- K: k,
- NB: nb,
- A: rowMajor(n, n-k+1, ain),
- AWant: rowMajor(n, n-k+1, a),
- TWant: rowMajor(nb, nb, t),
- YWant: rowMajor(n, nb, y),
- TauWant: tau,
- })
- }
- }
- }
- json.NewEncoder(w).Encode(tests)
-
- err = w.Close()
- if err != nil {
- log.Fatal(err)
- }
-}
-
-// genrand returns a general r×c matrix with random entries.
-func genrand(r, c int, rnd *rand.Rand) []float64 {
- m := make([]float64, r*c)
- for i := range m {
- m[i] = rnd.NormFloat64()
- }
- return m
-}
-
-// rowMajor returns the given r×c column-major matrix a in row-major format.
-func rowMajor(r, c int, a []float64) []float64 {
- if len(a) != r*c {
- panic("testdata: slice length mismatch")
- }
- m := make([]float64, len(a))
- for i := 0; i < r; i++ {
- for j := 0; j < c; j++ {
- m[i*c+j] = a[i+j*r]
- }
- }
- return m
-}