Skip to content

Commit a2cd6ea

Browse files
authored
Merge pull request #27 from nakib/issue26-bugfix
Allowed subscripting the last index of array.
2 parents 81df769 + 73559b9 commit a2cd6ea

File tree

3 files changed

+17
-13
lines changed

3 files changed

+17
-13
lines changed

fpm.toml

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
name = "functional"
2-
version = "0.6.1"
2+
version = "0.6.2"
33
license = "BSD-3-Clause"
44
author = "Milan Curcic"
55
maintainer = "[email protected]"
6-
copyright = "Copyright (c) 2016-2020, functional-fortran contributors"
6+
copyright = "Copyright (c) 2016-2022, functional-fortran contributors"

src/functional.f90

+10-10
Original file line numberDiff line numberDiff line change
@@ -3629,7 +3629,7 @@ pure function subscript_i1(x, ind) result(subscript)
36293629
integer(i1), dimension(:), allocatable :: subscript
36303630
integer(i1), dimension(:), allocatable :: indices
36313631
integer :: i
3632-
indices = pack(ind, ind > 0 .and. ind < size(x))
3632+
indices = pack(ind, ind > 0 .and. ind <= size(x))
36333633
allocate(subscript(size(indices)))
36343634
do concurrent(i = 1:size(indices))
36353635
subscript(i) = x(indices(i))
@@ -3646,7 +3646,7 @@ pure function subscript_i2(x, ind) result(subscript)
36463646
integer(i2), dimension(:), allocatable :: subscript
36473647
integer(i2), dimension(:), allocatable :: indices
36483648
integer :: i
3649-
indices = pack(ind, ind > 0 .and. ind < size(x))
3649+
indices = pack(ind, ind > 0 .and. ind <= size(x))
36503650
allocate(subscript(size(indices)))
36513651
do concurrent(i = 1:size(indices))
36523652
subscript(i) = x(indices(i))
@@ -3663,7 +3663,7 @@ pure function subscript_i4(x, ind) result(subscript)
36633663
integer(i4), dimension(:), allocatable :: subscript
36643664
integer(i4), dimension(:), allocatable :: indices
36653665
integer :: i
3666-
indices = pack(ind, ind > 0 .and. ind < size(x))
3666+
indices = pack(ind, ind > 0 .and. ind <= size(x))
36673667
allocate(subscript(size(indices)))
36683668
do concurrent(i = 1:size(indices))
36693669
subscript(i) = x(indices(i))
@@ -3680,7 +3680,7 @@ pure function subscript_i8(x, ind) result(subscript)
36803680
integer(i8), dimension(:), allocatable :: subscript
36813681
integer(i8), dimension(:), allocatable :: indices
36823682
integer :: i
3683-
indices = pack(ind, ind > 0 .and. ind < size(x))
3683+
indices = pack(ind, ind > 0 .and. ind <= size(x))
36843684
allocate(subscript(size(indices)))
36853685
do concurrent(i = 1:size(indices))
36863686
subscript(i) = x(indices(i))
@@ -3697,7 +3697,7 @@ pure function subscript_r4(x, ind) result(subscript)
36973697
real(r4), dimension(:), allocatable :: subscript
36983698
integer(i4), dimension(:), allocatable :: indices
36993699
integer :: i
3700-
indices = pack(ind, ind > 0 .and. ind < size(x))
3700+
indices = pack(ind, ind > 0 .and. ind <= size(x))
37013701
allocate(subscript(size(indices)))
37023702
do concurrent(i = 1:size(indices))
37033703
subscript(i) = x(indices(i))
@@ -3714,7 +3714,7 @@ pure function subscript_r8(x, ind) result(subscript)
37143714
real(r8), dimension(:), allocatable :: subscript
37153715
integer(i4), dimension(:), allocatable :: indices
37163716
integer :: i
3717-
indices = pack(ind, ind > 0 .and. ind < size(x))
3717+
indices = pack(ind, ind > 0 .and. ind <= size(x))
37183718
allocate(subscript(size(indices)))
37193719
do concurrent(i = 1:size(indices))
37203720
subscript(i) = x(indices(i))
@@ -3731,7 +3731,7 @@ pure function subscript_r16(x, ind) result(subscript)
37313731
real(r16), dimension(:), allocatable :: subscript
37323732
integer(i4), dimension(:), allocatable :: indices
37333733
integer :: i
3734-
indices = pack(ind, ind > 0 .and. ind < size(x))
3734+
indices = pack(ind, ind > 0 .and. ind <= size(x))
37353735
allocate(subscript(size(indices)))
37363736
do concurrent(i = 1:size(indices))
37373737
subscript(i) = x(indices(i))
@@ -3748,7 +3748,7 @@ pure function subscript_c4(x, ind) result(subscript)
37483748
complex(r4), dimension(:), allocatable :: subscript
37493749
integer(i4), dimension(:), allocatable :: indices
37503750
integer :: i
3751-
indices = pack(ind, ind > 0 .and. ind < size(x))
3751+
indices = pack(ind, ind > 0 .and. ind <= size(x))
37523752
allocate(subscript(size(indices)))
37533753
do concurrent(i = 1:size(indices))
37543754
subscript(i) = x(indices(i))
@@ -3765,7 +3765,7 @@ pure function subscript_c8(x, ind) result(subscript)
37653765
complex(r8), dimension(:), allocatable :: subscript
37663766
integer(i4), dimension(:), allocatable :: indices
37673767
integer :: i
3768-
indices = pack(ind, ind > 0 .and. ind < size(x))
3768+
indices = pack(ind, ind > 0 .and. ind <= size(x))
37693769
allocate(subscript(size(indices)))
37703770
do concurrent(i = 1:size(indices))
37713771
subscript(i) = x(indices(i))
@@ -3782,7 +3782,7 @@ pure function subscript_c16(x, ind) result(subscript)
37823782
complex(r16), dimension(:), allocatable :: subscript
37833783
integer(i4), dimension(:), allocatable :: indices
37843784
integer :: i
3785-
indices = pack(ind, ind > 0 .and. ind < size(x))
3785+
indices = pack(ind, ind > 0 .and. ind <= size(x))
37863786
allocate(subscript(size(indices)))
37873787
do concurrent(i = 1:size(indices))
37883788
subscript(i) = x(indices(i))

test/test_subscript.f90

+5-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ program test_subscript
1010
integer :: n, ntests
1111

1212
n = 1
13-
ntests = 11
13+
ntests = 12
1414
call initialize_tests(tests, ntests)
1515

1616
tests(n) = assert(all(subscript([1_int8, 2_int8, 3_int8], [2_int8]) == [2_int8]), &
@@ -45,6 +45,10 @@ program test_subscript
4545
'subscript out of bounds returns empty array')
4646
n = n + 1
4747

48+
tests(n) = assert(all(subscript([1, 2, 3], [3]) == [3]), &
49+
'subscript of last element')
50+
n = n + 1
51+
4852
tests(n) = assert(all(subscript(arange(cmplx(1._real32, 0._real32), &
4953
cmplx(3._real32, 0._real32)), [2])&
5054
== [cmplx(2._real32, 0._real32)]), &

0 commit comments

Comments
 (0)