From 1510bc00bd949d1f46c7c700f7275fb8d2ab7089 Mon Sep 17 00:00:00 2001 From: Nakib Haider Date: Wed, 16 Nov 2022 21:35:33 +0100 Subject: [PATCH 1/3] Allowed subscripting the last index of array. --- src/functional.f90 | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/functional.f90 b/src/functional.f90 index 63d6b45..d4786db 100644 --- a/src/functional.f90 +++ b/src/functional.f90 @@ -3629,7 +3629,7 @@ pure function subscript_i1(x, ind) result(subscript) integer(i1), dimension(:), allocatable :: subscript integer(i1), dimension(:), allocatable :: indices integer :: i - indices = pack(ind, ind > 0 .and. ind < size(x)) + indices = pack(ind, ind > 0 .and. ind <= size(x)) allocate(subscript(size(indices))) do concurrent(i = 1:size(indices)) subscript(i) = x(indices(i)) @@ -3646,7 +3646,7 @@ pure function subscript_i2(x, ind) result(subscript) integer(i2), dimension(:), allocatable :: subscript integer(i2), dimension(:), allocatable :: indices integer :: i - indices = pack(ind, ind > 0 .and. ind < size(x)) + indices = pack(ind, ind > 0 .and. ind <= size(x)) allocate(subscript(size(indices))) do concurrent(i = 1:size(indices)) subscript(i) = x(indices(i)) @@ -3663,7 +3663,7 @@ pure function subscript_i4(x, ind) result(subscript) integer(i4), dimension(:), allocatable :: subscript integer(i4), dimension(:), allocatable :: indices integer :: i - indices = pack(ind, ind > 0 .and. ind < size(x)) + indices = pack(ind, ind > 0 .and. ind <= size(x)) allocate(subscript(size(indices))) do concurrent(i = 1:size(indices)) subscript(i) = x(indices(i)) @@ -3680,7 +3680,7 @@ pure function subscript_i8(x, ind) result(subscript) integer(i8), dimension(:), allocatable :: subscript integer(i8), dimension(:), allocatable :: indices integer :: i - indices = pack(ind, ind > 0 .and. ind < size(x)) + indices = pack(ind, ind > 0 .and. ind <= size(x)) allocate(subscript(size(indices))) do concurrent(i = 1:size(indices)) subscript(i) = x(indices(i)) @@ -3697,7 +3697,7 @@ pure function subscript_r4(x, ind) result(subscript) real(r4), dimension(:), allocatable :: subscript integer(i4), dimension(:), allocatable :: indices integer :: i - indices = pack(ind, ind > 0 .and. ind < size(x)) + indices = pack(ind, ind > 0 .and. ind <= size(x)) allocate(subscript(size(indices))) do concurrent(i = 1:size(indices)) subscript(i) = x(indices(i)) @@ -3714,7 +3714,7 @@ pure function subscript_r8(x, ind) result(subscript) real(r8), dimension(:), allocatable :: subscript integer(i4), dimension(:), allocatable :: indices integer :: i - indices = pack(ind, ind > 0 .and. ind < size(x)) + indices = pack(ind, ind > 0 .and. ind <= size(x)) allocate(subscript(size(indices))) do concurrent(i = 1:size(indices)) subscript(i) = x(indices(i)) @@ -3731,7 +3731,7 @@ pure function subscript_r16(x, ind) result(subscript) real(r16), dimension(:), allocatable :: subscript integer(i4), dimension(:), allocatable :: indices integer :: i - indices = pack(ind, ind > 0 .and. ind < size(x)) + indices = pack(ind, ind > 0 .and. ind <= size(x)) allocate(subscript(size(indices))) do concurrent(i = 1:size(indices)) subscript(i) = x(indices(i)) @@ -3748,7 +3748,7 @@ pure function subscript_c4(x, ind) result(subscript) complex(r4), dimension(:), allocatable :: subscript integer(i4), dimension(:), allocatable :: indices integer :: i - indices = pack(ind, ind > 0 .and. ind < size(x)) + indices = pack(ind, ind > 0 .and. ind <= size(x)) allocate(subscript(size(indices))) do concurrent(i = 1:size(indices)) subscript(i) = x(indices(i)) @@ -3765,7 +3765,7 @@ pure function subscript_c8(x, ind) result(subscript) complex(r8), dimension(:), allocatable :: subscript integer(i4), dimension(:), allocatable :: indices integer :: i - indices = pack(ind, ind > 0 .and. ind < size(x)) + indices = pack(ind, ind > 0 .and. ind <= size(x)) allocate(subscript(size(indices))) do concurrent(i = 1:size(indices)) subscript(i) = x(indices(i)) @@ -3782,7 +3782,7 @@ pure function subscript_c16(x, ind) result(subscript) complex(r16), dimension(:), allocatable :: subscript integer(i4), dimension(:), allocatable :: indices integer :: i - indices = pack(ind, ind > 0 .and. ind < size(x)) + indices = pack(ind, ind > 0 .and. ind <= size(x)) allocate(subscript(size(indices))) do concurrent(i = 1:size(indices)) subscript(i) = x(indices(i)) From 8976bfab305b63fc9595e76b185ba5c5b6d61d7e Mon Sep 17 00:00:00 2001 From: milancurcic Date: Wed, 7 Dec 2022 17:42:08 -0500 Subject: [PATCH 2/3] Add test for subscripting the last element --- test/test_subscript.f90 | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/test/test_subscript.f90 b/test/test_subscript.f90 index 39009f4..fe6e5fc 100644 --- a/test/test_subscript.f90 +++ b/test/test_subscript.f90 @@ -10,7 +10,7 @@ program test_subscript integer :: n, ntests n = 1 -ntests = 11 +ntests = 12 call initialize_tests(tests, ntests) tests(n) = assert(all(subscript([1_int8, 2_int8, 3_int8], [2_int8]) == [2_int8]), & @@ -45,6 +45,10 @@ program test_subscript 'subscript out of bounds returns empty array') n = n + 1 +tests(n) = assert(all(subscript([1, 2, 3], [3]) == [3]), & + 'subscript of last element') +n = n + 1 + tests(n) = assert(all(subscript(arange(cmplx(1._real32, 0._real32), & cmplx(3._real32, 0._real32)), [2])& == [cmplx(2._real32, 0._real32)]), & From 73559b95f43a0675000aebe3d79550ebb261a316 Mon Sep 17 00:00:00 2001 From: milancurcic Date: Wed, 7 Dec 2022 17:42:22 -0500 Subject: [PATCH 3/3] Bump version to 0.6.2 --- fpm.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/fpm.toml b/fpm.toml index 6fd4f47..75d037e 100644 --- a/fpm.toml +++ b/fpm.toml @@ -1,6 +1,6 @@ name = "functional" -version = "0.6.1" +version = "0.6.2" license = "BSD-3-Clause" author = "Milan Curcic" maintainer = "milancurcic@hey.com" -copyright = "Copyright (c) 2016-2020, functional-fortran contributors" +copyright = "Copyright (c) 2016-2022, functional-fortran contributors"