Skip to content

Commit a15fdbb

Browse files
committed
Deploying to stdlib-fpm from @ 42182b0 🚀
1 parent 8caa640 commit a15fdbb

File tree

2 files changed

+52
-8
lines changed

2 files changed

+52
-8
lines changed

src/stdlib_linalg_determinant.f90

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -220,7 +220,7 @@ module function stdlib_linalg_rspdeterminant(a,overwrite_a,err) result(det)
220220
err0 = linalg_state_type(this,LINALG_INTERNAL_ERROR,'catastrophic error')
221221
end select
222222

223-
if (.not.copy_a) deallocate(amat)
223+
if (copy_a) deallocate(amat)
224224

225225
end select
226226

@@ -437,7 +437,7 @@ module function stdlib_linalg_rdpdeterminant(a,overwrite_a,err) result(det)
437437
err0 = linalg_state_type(this,LINALG_INTERNAL_ERROR,'catastrophic error')
438438
end select
439439

440-
if (.not.copy_a) deallocate(amat)
440+
if (copy_a) deallocate(amat)
441441

442442
end select
443443

@@ -654,7 +654,7 @@ module function stdlib_linalg_cspdeterminant(a,overwrite_a,err) result(det)
654654
err0 = linalg_state_type(this,LINALG_INTERNAL_ERROR,'catastrophic error')
655655
end select
656656

657-
if (.not.copy_a) deallocate(amat)
657+
if (copy_a) deallocate(amat)
658658

659659
end select
660660

@@ -871,7 +871,7 @@ module function stdlib_linalg_cdpdeterminant(a,overwrite_a,err) result(det)
871871
err0 = linalg_state_type(this,LINALG_INTERNAL_ERROR,'catastrophic error')
872872
end select
873873

874-
if (.not.copy_a) deallocate(amat)
874+
if (copy_a) deallocate(amat)
875875

876876
end select
877877

test/test_linalg_determinant.f90

Lines changed: 48 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ subroutine test_rsp_eye_determinant(error)
4242
integer(ilp), parameter :: n = 128_ilp
4343

4444
real(sp) :: a(n,n),deta
45+
real(sp), allocatable :: aalloc(:,:)
4546

4647
a = eye(n)
4748

@@ -50,8 +51,18 @@ subroutine test_rsp_eye_determinant(error)
5051

5152
call check(error,state%ok(),state%print())
5253
if (allocated(error)) return
53-
5454
call check(error, abs(deta-1.0_sp)<epsilon(0.0_sp), 'det(eye(n))==1')
55+
if (allocated(error)) return
56+
57+
!> Test with allocatable matrix
58+
aalloc = eye(n)
59+
deta = det(aalloc,overwrite_a=.false.,err=state)
60+
call check(error,state%ok(),state%print()//' (allocatable a)')
61+
if (allocated(error)) return
62+
call check(error,allocated(aalloc),'a is still allocated')
63+
if (allocated(error)) return
64+
call check(error, abs(deta-1.0_sp)<epsilon(0.0_sp), 'det(eye(n))==1 (allocatable a))')
65+
if (allocated(error)) return
5566

5667
end subroutine test_rsp_eye_determinant
5768

@@ -91,6 +102,7 @@ subroutine test_rdp_eye_determinant(error)
91102
integer(ilp), parameter :: n = 128_ilp
92103

93104
real(dp) :: a(n,n),deta
105+
real(dp), allocatable :: aalloc(:,:)
94106

95107
a = eye(n)
96108

@@ -99,8 +111,18 @@ subroutine test_rdp_eye_determinant(error)
99111

100112
call check(error,state%ok(),state%print())
101113
if (allocated(error)) return
102-
103114
call check(error, abs(deta-1.0_dp)<epsilon(0.0_dp), 'det(eye(n))==1')
115+
if (allocated(error)) return
116+
117+
!> Test with allocatable matrix
118+
aalloc = eye(n)
119+
deta = det(aalloc,overwrite_a=.false.,err=state)
120+
call check(error,state%ok(),state%print()//' (allocatable a)')
121+
if (allocated(error)) return
122+
call check(error,allocated(aalloc),'a is still allocated')
123+
if (allocated(error)) return
124+
call check(error, abs(deta-1.0_dp)<epsilon(0.0_dp), 'det(eye(n))==1 (allocatable a))')
125+
if (allocated(error)) return
104126

105127
end subroutine test_rdp_eye_determinant
106128

@@ -140,6 +162,7 @@ subroutine test_csp_eye_determinant(error)
140162
integer(ilp), parameter :: n = 128_ilp
141163

142164
complex(sp) :: a(n,n),deta
165+
complex(sp), allocatable :: aalloc(:,:)
143166

144167
a = eye(n)
145168

@@ -148,8 +171,18 @@ subroutine test_csp_eye_determinant(error)
148171

149172
call check(error,state%ok(),state%print())
150173
if (allocated(error)) return
151-
152174
call check(error, abs(deta-1.0_sp)<epsilon(0.0_sp), 'det(eye(n))==1')
175+
if (allocated(error)) return
176+
177+
!> Test with allocatable matrix
178+
aalloc = eye(n)
179+
deta = det(aalloc,overwrite_a=.false.,err=state)
180+
call check(error,state%ok(),state%print()//' (allocatable a)')
181+
if (allocated(error)) return
182+
call check(error,allocated(aalloc),'a is still allocated')
183+
if (allocated(error)) return
184+
call check(error, abs(deta-1.0_sp)<epsilon(0.0_sp), 'det(eye(n))==1 (allocatable a))')
185+
if (allocated(error)) return
153186

154187
end subroutine test_csp_eye_determinant
155188

@@ -189,6 +222,7 @@ subroutine test_cdp_eye_determinant(error)
189222
integer(ilp), parameter :: n = 128_ilp
190223

191224
complex(dp) :: a(n,n),deta
225+
complex(dp), allocatable :: aalloc(:,:)
192226

193227
a = eye(n)
194228

@@ -197,8 +231,18 @@ subroutine test_cdp_eye_determinant(error)
197231

198232
call check(error,state%ok(),state%print())
199233
if (allocated(error)) return
200-
201234
call check(error, abs(deta-1.0_dp)<epsilon(0.0_dp), 'det(eye(n))==1')
235+
if (allocated(error)) return
236+
237+
!> Test with allocatable matrix
238+
aalloc = eye(n)
239+
deta = det(aalloc,overwrite_a=.false.,err=state)
240+
call check(error,state%ok(),state%print()//' (allocatable a)')
241+
if (allocated(error)) return
242+
call check(error,allocated(aalloc),'a is still allocated')
243+
if (allocated(error)) return
244+
call check(error, abs(deta-1.0_dp)<epsilon(0.0_dp), 'det(eye(n))==1 (allocatable a))')
245+
if (allocated(error)) return
202246

203247
end subroutine test_cdp_eye_determinant
204248

0 commit comments

Comments
 (0)