From 376f2e120956fbd4e31ca4031abce2f322773b8f Mon Sep 17 00:00:00 2001 From: Federico Perini Date: Thu, 16 May 2024 08:49:07 +0200 Subject: [PATCH 1/2] fix `copy_a` deallocation --- src/stdlib_linalg_determinant.fypp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/stdlib_linalg_determinant.fypp b/src/stdlib_linalg_determinant.fypp index 0091d596b..562498e26 100644 --- a/src/stdlib_linalg_determinant.fypp +++ b/src/stdlib_linalg_determinant.fypp @@ -224,7 +224,7 @@ submodule (stdlib_linalg) stdlib_linalg_determinant err0 = linalg_state_type(this,LINALG_INTERNAL_ERROR,'catastrophic error') end select - if (.not.copy_a) deallocate(amat) + if (copy_a) deallocate(amat) end select From 32f9a245a781cee380ecf61f4bb0f48dfe71e6cf Mon Sep 17 00:00:00 2001 From: Federico Perini Date: Thu, 16 May 2024 09:11:55 +0200 Subject: [PATCH 2/2] add test add test add test --- test/linalg/test_linalg_determinant.fypp | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/test/linalg/test_linalg_determinant.fypp b/test/linalg/test_linalg_determinant.fypp index 6b9310f72..c80d0f7bc 100644 --- a/test/linalg/test_linalg_determinant.fypp +++ b/test/linalg/test_linalg_determinant.fypp @@ -47,6 +47,7 @@ module test_linalg_determinant integer(ilp), parameter :: n = 128_ilp ${rt}$ :: a(n,n),deta + ${rt}$, allocatable :: aalloc(:,:) a = eye(n) @@ -55,8 +56,18 @@ module test_linalg_determinant call check(error,state%ok(),state%print()) if (allocated(error)) return - call check(error, abs(deta-1.0_${rk}$) Test with allocatable matrix + aalloc = eye(n) + deta = det(aalloc,overwrite_a=.false.,err=state) + call check(error,state%ok(),state%print()//' (allocatable a)') + if (allocated(error)) return + call check(error,allocated(aalloc),'a is still allocated') + if (allocated(error)) return + call check(error, abs(deta-1.0_${rk}$)