28c0c0c
From 704004634f6712645eb837cd86d7a09fa51ae36a Mon Sep 17 00:00:00 2001
28c0c0c
From: Milan Bouchet-Valat <nalimilan@club.fr>
28c0c0c
Date: Sat, 19 Mar 2016 17:21:15 +0100
28c0c0c
Subject: [PATCH] Fix non-deterministic tridiag test failure
28c0c0c
28c0c0c
The signs or eigenvectors are random. Fixes #15565.
28c0c0c
---
28c0c0c
 test/linalg/tridiag.jl | 16 ++++++++++++++--
28c0c0c
 1 file changed, 14 insertions(+), 2 deletions(-)
28c0c0c
28c0c0c
diff --git a/test/linalg/tridiag.jl b/test/linalg/tridiag.jl
28c0c0c
index 9441244..c43fd03 100644
28c0c0c
--- a/test/linalg/tridiag.jl
28c0c0c
+++ b/test/linalg/tridiag.jl
28c0c0c
@@ -313,13 +313,25 @@ let n = 12 #Size of matrix problem to test
28c0c0c
             debug && println("stegr! call with index range")
28c0c0c
             F = eigfact(SymTridiagonal(a, b),1:2)
28c0c0c
             fF = eigfact(Symmetric(full(SymTridiagonal(a, b))),1:2)
28c0c0c
-            @test_approx_eq F[:vectors] fF[:vectors]
28c0c0c
+            for i in 1:size(F[:vectors], 2)
28c0c0c
+                if sign(F[:vectors][1,i]) == sign(fF[:vectors][1,i])
28c0c0c
+                    @test_approx_eq F[:vectors][:,i] fF[:vectors][:,i]
28c0c0c
+                else
28c0c0c
+                    @test_approx_eq F[:vectors][:,i] -fF[:vectors][:,i]
28c0c0c
+                end
28c0c0c
+            end
28c0c0c
             @test_approx_eq F[:values] fF[:values]
28c0c0c
 
28c0c0c
             debug && println("stegr! call with value range")
28c0c0c
             F = eigfact(SymTridiagonal(a, b),0.0,1.0)
28c0c0c
             fF = eigfact(Symmetric(full(SymTridiagonal(a, b))),0.0,1.0)
28c0c0c
-            @test_approx_eq F[:vectors] fF[:vectors]
28c0c0c
+            for i in 1:size(F[:vectors], 2)
28c0c0c
+                if sign(F[:vectors][1,i]) == sign(fF[:vectors][1,i])
28c0c0c
+                    @test_approx_eq F[:vectors][:,i] fF[:vectors][:,i]
28c0c0c
+                else
28c0c0c
+                    @test_approx_eq F[:vectors][:,i] -fF[:vectors][:,i]
28c0c0c
+                end
28c0c0c
+            end
28c0c0c
             @test_approx_eq F[:values] fF[:values]
28c0c0c
         end
28c0c0c
 
28c0c0c
-- 
28c0c0c
2.5.0
28c0c0c