5
5
package testlapack
6
6
7
7
import (
8
- "archive/zip"
8
+ "compress/gzip"
9
+ "encoding/json"
9
10
"fmt"
10
- "io"
11
11
"log"
12
+ "os"
12
13
"testing"
13
14
)
14
15
15
16
type Dlaqr5er interface {
16
17
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 )
17
18
}
18
19
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
+
19
32
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 )
21
39
if err != nil {
22
40
log .Fatal (err )
23
41
}
24
42
defer r .Close ()
25
43
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
33
54
34
55
v := make ([]float64 , nshfts / 2 * 3 )
35
56
u := make ([]float64 , (3 * nshfts - 3 )* (3 * nshfts - 3 ))
@@ -40,8 +61,9 @@ func Dlaqr5Test(t *testing.T, impl Dlaqr5er) {
40
61
41
62
for _ , ldh := range []int {n , n + 1 , n + 10 } {
42
63
h := make ([]float64 , (n - 1 )* ldh + n )
64
+
43
65
for _ , kacc22 := range []int {0 , 1 , 2 } {
44
- copyMatrix (n , n , h , ldh , hOrig )
66
+ copyMatrix (n , n , h , ldh , test . H )
45
67
z := eye (n , ldh )
46
68
47
69
impl .Dlaqr5 (wantt , true , kacc22 ,
@@ -54,66 +76,15 @@ func Dlaqr5Test(t *testing.T, impl Dlaqr5er) {
54
76
nh , wh , nh ,
55
77
nv , wv , 3 * nshfts - 3 )
56
78
57
- if ! equalApprox (n , n , h , ldh , hwant , 1e-13 ) {
58
- t .Errorf ("Case %v, kacc22=%v: unexpected matrix H\n h =%v\n hwant=%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\n h =%v\n hwant=%v" , prefix , h , test .HWant )
59
83
}
60
- if ! equalApprox (n , n , z , ldh , zwant , 1e-13 ) {
61
- t .Errorf ("Case %v, kacc22=%v : unexpected matrix Z\n z =%v\n zwant=%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\n z =%v\n zwant=%v" , prefix , z , test . ZWant )
62
86
}
63
87
}
64
88
}
65
89
}
66
90
}
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