Skip to content
This repository was archived by the owner on Nov 24, 2018. It is now read-only.

Commit 1c7bff8

Browse files
committed
testlapack: update test for Dlaqr5 to read testing data in JSON format
1 parent cf03564 commit 1c7bff8

File tree

1 file changed

+39
-68
lines changed

1 file changed

+39
-68
lines changed

testlapack/dlaqr5.go

Lines changed: 39 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -5,31 +5,52 @@
55
package testlapack
66

77
import (
8-
"archive/zip"
8+
"compress/gzip"
9+
"encoding/json"
910
"fmt"
10-
"io"
1111
"log"
12+
"os"
1213
"testing"
1314
)
1415

1516
type Dlaqr5er interface {
1617
Dlaqr5(wantt, wantz bool, kacc22 int, n, ktop, kbot, nshfts int, sr, si []float64, h []float64, ldh int, iloz, ihiz int, z []float64, ldz int, v []float64, ldv int, u []float64, ldu int, nh int, wh []float64, ldwh int, nv int, wv []float64, ldwv int)
1718
}
1819

20+
type Dlaqr5test struct {
21+
WantT bool
22+
N int
23+
NShifts int
24+
KTop, KBot int
25+
ShiftR, ShiftI []float64
26+
H []float64
27+
28+
HWant []float64
29+
ZWant []float64
30+
}
31+
1932
func Dlaqr5Test(t *testing.T, impl Dlaqr5er) {
20-
r, err := zip.OpenReader("../internal/testdata/dlaqr5test/dlaqr5data.zip")
33+
file, err := os.Open("../testlapack/testdata/dlaqr5data.json.gz")
34+
if err != nil {
35+
log.Fatal(err)
36+
}
37+
defer file.Close()
38+
r, err := gzip.NewReader(file)
2139
if err != nil {
2240
log.Fatal(err)
2341
}
2442
defer r.Close()
2543

26-
for _, f := range r.File {
27-
tc, err := f.Open()
28-
if err != nil {
29-
log.Fatal(err)
30-
}
31-
wantt, n, nshfts, ktop, kbot, sr, si, hOrig, hwant, zwant := readDlaqr5Case(tc)
32-
tc.Close()
44+
var tests []Dlaqr5test
45+
json.NewDecoder(r).Decode(&tests)
46+
for _, test := range tests {
47+
wantt := test.WantT
48+
n := test.N
49+
nshfts := test.NShifts
50+
ktop := test.KTop
51+
kbot := test.KBot
52+
sr := test.ShiftR
53+
si := test.ShiftI
3354

3455
v := make([]float64, nshfts/2*3)
3556
u := make([]float64, (3*nshfts-3)*(3*nshfts-3))
@@ -40,8 +61,9 @@ func Dlaqr5Test(t *testing.T, impl Dlaqr5er) {
4061

4162
for _, ldh := range []int{n, n + 1, n + 10} {
4263
h := make([]float64, (n-1)*ldh+n)
64+
4365
for _, kacc22 := range []int{0, 1, 2} {
44-
copyMatrix(n, n, h, ldh, hOrig)
66+
copyMatrix(n, n, h, ldh, test.H)
4567
z := eye(n, ldh)
4668

4769
impl.Dlaqr5(wantt, true, kacc22,
@@ -54,66 +76,15 @@ func Dlaqr5Test(t *testing.T, impl Dlaqr5er) {
5476
nh, wh, nh,
5577
nv, wv, 3*nshfts-3)
5678

57-
if !equalApprox(n, n, h, ldh, hwant, 1e-13) {
58-
t.Errorf("Case %v, kacc22=%v: unexpected matrix H\nh =%v\nhwant=%v", f.Name, kacc22, h, hwant)
79+
prefix := fmt.Sprintf("wantt=%v, n=%v, nshfts=%v, ktop=%v, kbot=%v, ldh=%v, kacc22=%v",
80+
wantt, n, nshfts, ktop, kbot, ldh, kacc22)
81+
if !equalApprox(n, n, h, ldh, test.HWant, 1e-13) {
82+
t.Errorf("Case %v: unexpected matrix H\nh =%v\nhwant=%v", prefix, h, test.HWant)
5983
}
60-
if !equalApprox(n, n, z, ldh, zwant, 1e-13) {
61-
t.Errorf("Case %v, kacc22=%v: unexpected matrix Z\nz =%v\nzwant=%v", f.Name, kacc22, z, zwant)
84+
if !equalApprox(n, n, z, ldh, test.ZWant, 1e-13) {
85+
t.Errorf("Case %v: unexpected matrix Z\nz =%v\nzwant=%v", prefix, z, test.ZWant)
6286
}
6387
}
6488
}
6589
}
6690
}
67-
68-
// readDlaqr5Case reads and returns test data written by internal/testdata/dlaqr5test/main.go.
69-
func readDlaqr5Case(r io.Reader) (wantt bool, n, nshfts, ktop, kbot int, sr, si []float64, h, hwant, zwant []float64) {
70-
_, err := fmt.Fscanln(r, &wantt, &n, &nshfts, &ktop, &kbot)
71-
if err != nil {
72-
log.Fatal(err)
73-
}
74-
75-
sr = make([]float64, nshfts)
76-
si = make([]float64, nshfts)
77-
h = make([]float64, n*n)
78-
hwant = make([]float64, n*n)
79-
zwant = make([]float64, n*n)
80-
81-
for i := range sr {
82-
_, err = fmt.Fscanln(r, &sr[i])
83-
if err != nil {
84-
log.Fatal(err)
85-
}
86-
}
87-
for i := range si {
88-
_, err = fmt.Fscanln(r, &si[i])
89-
if err != nil {
90-
log.Fatal(err)
91-
}
92-
}
93-
for i := 0; i < n; i++ {
94-
for j := 0; j < n; j++ {
95-
_, err = fmt.Fscanln(r, &h[i*n+j])
96-
if err != nil {
97-
log.Fatal(err)
98-
}
99-
}
100-
}
101-
for i := 0; i < n; i++ {
102-
for j := 0; j < n; j++ {
103-
_, err = fmt.Fscanln(r, &hwant[i*n+j])
104-
if err != nil {
105-
log.Fatal(err)
106-
}
107-
}
108-
}
109-
for i := 0; i < n; i++ {
110-
for j := 0; j < n; j++ {
111-
_, err = fmt.Fscanln(r, &zwant[i*n+j])
112-
if err != nil {
113-
log.Fatal(err)
114-
}
115-
}
116-
}
117-
118-
return wantt, n, nshfts, ktop, kbot, sr, si, h, hwant, zwant
119-
}

0 commit comments

Comments
 (0)