3
3
module test_linalg_eigenvalues
4
4
use stdlib_linalg_constants
5
5
use stdlib_linalg_state
6
- use stdlib_linalg, only: eig, eigh, eigvals, eigvalsh, diag
6
+ use stdlib_linalg, only: eig, eigh, eigvals, eigvalsh, diag, eye
7
7
use testdrive, only: error_type, check, new_unittest, unittest_type
8
8
9
9
implicit none (type,external)
@@ -33,7 +33,8 @@ module test_linalg_eigenvalues
33
33
#:for ck,ct,ci in CMPLX_KINDS_TYPES
34
34
#:if ck!="xdp"
35
35
tests = [tests,new_unittest("test_eig_complex_${ci}$",test_eig_complex_${ci}$), &
36
- new_unittest("test_eig_generalized_complex_${ci}$",test_eigvals_generalized_complex_${ci}$)]
36
+ new_unittest("test_eig_generalized_complex_${ci}$",test_eigvals_generalized_complex_${ci}$), &
37
+ new_unittest("test_eig_issue_927_${ci}$",test_issue_927_${ci}$)]
37
38
#:endif
38
39
#: endfor
39
40
@@ -309,8 +310,6 @@ module test_linalg_eigenvalues
309
310
310
311
lambda = eigvals(A, B, err=state)
311
312
312
- print *, 'lambda = ',lambda
313
-
314
313
!> Expected eigenvalues
315
314
lres(1) = czero
316
315
lres(2) = 2*cone
@@ -324,10 +323,42 @@ module test_linalg_eigenvalues
324
323
325
324
end subroutine test_eigvals_generalized_complex_${ci}$
326
325
326
+ ! Generalized eigenvalues should not crash
327
+ subroutine test_issue_927_${ci}$(error)
328
+ type(error_type), allocatable, intent(out) :: error
329
+
330
+ ${ct}$, dimension(3,3) :: A_Z,S_Z,vecs_r
331
+ ${ct}$,dimension(3) :: eigs
332
+ real(${ck}$), dimension(3,3) :: A_D,S_D
333
+ type(linalg_state_type) :: state
334
+ integer :: i
335
+
336
+ ! Set matrix
337
+ A_Z = reshape( [ [1, 6, 3], &
338
+ [9, 2, 1], &
339
+ [8, 3, 4] ], [3,3] )
340
+
341
+ S_Z = eye(3, mold=0.0_${ck}$)
342
+
343
+ A_D = real(A_Z)
344
+ S_D = real(S_Z)
345
+
346
+ call eig(A_D,S_D,eigs,right=vecs_r,err=state)
347
+ call check(error, state%ok(), 'test issue 927 (${ct}$): '//state%print())
348
+ if (allocated(error)) return
349
+
350
+ call eig(A_Z,S_Z,eigs,right=vecs_r,err=state) !Fails
351
+ call check(error, state%ok(), 'test issue 927 (${ct}$): '//state%print())
352
+ if (allocated(error)) return
353
+
354
+ end subroutine test_issue_927_${ci}$
355
+
327
356
#:endif
328
357
#:endfor
329
358
330
359
360
+
361
+
331
362
end module test_linalg_eigenvalues
332
363
333
364
program test_eigenvalues
0 commit comments