1
+ using Base. Test
2
+ using LinearAlgebra
3
+ using LinearAlgebra. LAPACK2
4
+
5
+ @testset " LAPACK wrappers" begin
6
+
7
+ n = 100
8
+
9
+ T = SymTridiagonal (randn (n), randn (n - 1 ))
10
+ vals, vecs = eig (T)
11
+ @testset " steqr" begin
12
+ _vals, _vecs = LAPACK2. steqr! (' N' , copy (T. dv), copy (T. ev))
13
+ @test vals ≈ _vals
14
+
15
+ _vals, _vecs = LAPACK2. steqr! (' I' , copy (T. dv), copy (T. ev))
16
+ @test vals ≈ _vals
17
+ @test abs .(_vecs' vecs) ≈ eye (n)
18
+
19
+ _vals, _vecs = LAPACK2. steqr! (' V' , copy (T. dv), copy (T. ev), eye (n))
20
+ @test vals ≈ _vals
21
+ @test abs .(_vecs' vecs) ≈ eye (n)
22
+ end
23
+
24
+ @testset " sterf" begin
25
+ _vals = LAPACK2. sterf! (copy (T. dv), copy (T. ev))
26
+ @test _vals ≈ vals
27
+ end
28
+
29
+ @testset " stedc" begin
30
+ _vals, _vecs = LAPACK2. stedc! (' N' , copy (T. dv), copy (T. ev))
31
+ @test vals ≈ _vals
32
+
33
+ _vals, _vecs = LAPACK2. stedc! (' I' , copy (T. dv), copy (T. ev))
34
+ @test vals ≈ _vals
35
+ @test abs .(_vecs' vecs) ≈ eye (n)
36
+
37
+ _vals, _vecs = LAPACK2. stedc! (' V' , copy (T. dv), copy (T. ev), eye (n))
38
+ @test vals ≈ _vals
39
+ @test abs .(_vecs' vecs) ≈ eye (n)
40
+ end
41
+
42
+ @testset " stemr" begin
43
+ _vals, _vecs, __ = LAPACK2. stemr! (' N' , ' A' , copy (T. dv), copy (T. ev))
44
+ @test vals ≈ _vals
45
+
46
+ _vals, _vecs, __ = LAPACK2. stemr! (' N' , ' V' , copy (T. dv), copy (T. ev))
47
+ @test vals ≈ _vals
48
+
49
+ _vals, _vecs, __ = LAPACK2. stemr! (' N' , ' I' , copy (T. dv), copy (T. ev))
50
+ @test vals ≈ _vals
51
+
52
+ _vals, _vecs, __ = LAPACK2. stemr! (' V' , ' A' , copy (T. dv), copy (T. ev))
53
+ @test vals ≈ _vals
54
+ @test abs .(_vecs' vecs) ≈ eye (n)
55
+
56
+ _vals, _vecs, __ = LAPACK2. stemr! (' V' , ' V' , copy (T. dv), copy (T. ev))
57
+ @test vals ≈ _vals
58
+ @test abs .(_vecs' vecs) ≈ eye (n)
59
+
60
+ _vals, _vecs, __ = LAPACK2. stemr! (' V' , ' I' , copy (T. dv), copy (T. ev))
61
+ @test vals ≈ _vals
62
+ @test abs .(_vecs' vecs) ≈ eye (n)
63
+ end
64
+
65
+ @testset " lahqr" begin
66
+ T = Array (Tridiagonal (fill (0.1 , 99 ), fill (0.0 , 100 ), fill (40.0 , 99 )))
67
+ _vals = sort (LinearAlgebra. LAPACK2. lahqr! (copy (T))[1 ])
68
+ @test _vals ≈ sort (real .(LinearAlgebra. EigenGeneral. eigvals! (copy (T))))
69
+ # LAPACK's multishift algorithm (the default) seems to be broken
70
+ @test ! (_vals ≈ sort (eigvals (T)))
71
+ end
72
+ end
0 commit comments