Skip to content

Commit 872b2cd

Browse files
committed
added test case for append prepend
1 parent 3ddfa93 commit 872b2cd

File tree

4 files changed

+227
-10
lines changed

4 files changed

+227
-10
lines changed

src/tests/stringlist/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
11
ADDTEST(insert_at)
2+
ADDTEST(append_prepend)

src/tests/stringlist/Makefile.manual

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
PROGS_SRC = test_insert_at.f90
1+
PROGS_SRC = test_insert_at.f90 /
2+
test_append_prepend.f90
23

34

45
include ../Makefile.manual.test.mk
Lines changed: 215 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,215 @@
1+
! SPDX-Identifier: MIT
2+
module test_append_prepend
3+
use stdlib_error, only: check
4+
use stdlib_string_type, only: string_type, operator(//), operator(==)
5+
use stdlib_stringlist, only: stringlist_type, stringlist_index_type, fidx, bidx, list_head, &
6+
& list_tail, operator(//), operator(==), operator(/=)
7+
use stdlib_ascii, only: to_string
8+
implicit none
9+
10+
contains
11+
12+
subroutine test_append_prepend_string
13+
type(stringlist_type) :: work_list
14+
type(stringlist_type) :: reference_list
15+
integer :: i
16+
integer, parameter :: first = -100
17+
integer, parameter :: last = 100
18+
character(len=:), allocatable :: string
19+
20+
do i = first, last
21+
string = to_string(i)
22+
work_list = work_list // string
23+
call check( work_list%get( fidx( i - first + 1 ) ) == string_type( string ), &
24+
& "test_append_prepend_string: get fidx( i - first + 1 ) " // string )
25+
26+
end do
27+
28+
call compare_list( work_list, first, last + 1, 1 )
29+
call check( work_list == [ ( to_string(i), i = first, last ) ], "test_append_prepend_string:&
30+
& work_list == [ ( to_string(i), i = first, last ) ]" )
31+
call check( [ ( string_type( to_string(i) ), i = first, last ) ] == work_list, &
32+
& "test_append_prepend_string: [ ( string_type( to_string(i) ),&
33+
& i = first, last ) ] == work_list" )
34+
35+
do i = last, first, -1
36+
call check( work_list /= reference_list, "test_append_prepend_string:&
37+
& work_list /= reference_list" )
38+
call check( reference_list /= work_list, "test_append_prepend_string:&
39+
& reference_list /= work_list" )
40+
41+
string = to_string(i)
42+
reference_list = string_type( string ) // reference_list
43+
call check( reference_list%get( bidx( last - i + 1 ) ) == string, &
44+
& "test_append_prepend_string: get bidx( last - i + 1 ) " // string )
45+
46+
end do
47+
48+
call compare_list( reference_list, first, last + 1, 2 )
49+
call check( reference_list == [ ( string_type( to_string(i) ), i = first, last ) ], "test_append_prepend_string:&
50+
& reference_list == [ ( string_type( to_string(i) ), i = first, last ) ]" )
51+
call check( [ ( to_string(i), i = first, last ) ] == reference_list, &
52+
& "test_append_prepend_string: [ ( to_string(i), i = first, last ) ] == reference_list" )
53+
54+
call check( work_list == reference_list, "test_append_prepend_string:&
55+
& work_list == reference_list" )
56+
call check( reference_list == work_list, "test_append_prepend_string:&
57+
& reference_list == work_list" )
58+
59+
end subroutine test_append_prepend_string
60+
61+
subroutine test_append_prepend_array
62+
type(stringlist_type) :: work_list
63+
type(stringlist_type) :: reference_list
64+
integer :: i, j
65+
integer, parameter :: first = -100
66+
integer, parameter :: last = 100
67+
integer, parameter :: stride = 10
68+
69+
do i = first, last - 1, stride
70+
work_list = work_list // [ ( to_string(j), j = i, i + stride - 1) ]
71+
call check( work_list == [ ( to_string(j), j = first, i + stride - 1) ], &
72+
& "test_append_prepend_array: work_list ==&
73+
& [ ( to_string(j), j = first, i + stride - 1) ]" )
74+
75+
end do
76+
77+
work_list = work_list // to_string(last)
78+
79+
call compare_list( work_list, first, last + 1, 3 )
80+
call check( work_list == [ ( to_string(i), i = first, last) ], "test_append_prepend_array:&
81+
& work_list == [ ( to_string(i), i = first, last) ]" )
82+
call check( [ ( string_type( to_string(i) ), i = first, last) ] == work_list, &
83+
& "test_append_prepend_array: [ ( string_type( to_string(i) ), i = first, last) ]&
84+
& == work_list" )
85+
86+
do i = last, first + 1, -1 * stride
87+
call check( work_list /= reference_list, "test_append_prepend_array:&
88+
& work_list /= reference_list" )
89+
call check( reference_list /= work_list, "test_append_prepend_array:&
90+
& reference_list /= work_list" )
91+
92+
reference_list = [ ( string_type( to_string(j) ), j = i - stride + 1, i ) ] &
93+
& // reference_list
94+
call check( reference_list == &
95+
& [ ( string_type( to_string(j) ), j = i - stride + 1, last ) ], &
96+
& "test_append_prepend_array: reference_list ==&
97+
& [ ( string_type( to_string(j) ), j = i - stride + 1, last ) ]" )
98+
99+
end do
100+
101+
reference_list = to_string(first) // reference_list
102+
103+
call compare_list( reference_list, first, last + 1, 4 )
104+
call check( [ ( string_type( to_string(i) ), i = first, last) ] == reference_list, &
105+
& "test_append_prepend_array:&
106+
& [ ( string_type( to_string(i) ), i = first, last) ] == reference_list" )
107+
call check( [ ( to_string(i), i = first, last) ] == reference_list, &
108+
& "test_append_prepend_array: [ ( to_string(i), i = first, last) ] == reference_list" )
109+
110+
call check( work_list == reference_list, "test_append_prepend_array:&
111+
& work_list == reference_list" )
112+
call check( reference_list == work_list, "test_append_prepend_array:&
113+
& reference_list == work_list" )
114+
115+
end subroutine test_append_prepend_array
116+
117+
subroutine test_append_prepend_list
118+
type(stringlist_type) :: work_list, reference_list
119+
type(stringlist_type) :: temp_list
120+
integer :: i, j
121+
integer, parameter :: first = -100
122+
integer, parameter :: last = 100
123+
integer, parameter :: stride = 10
124+
125+
do i = first, last - 1, stride
126+
call temp_list%destroy()
127+
do j = i, i + stride - 1
128+
call temp_list%insert_at( list_tail, string_type( to_string(j) ) )
129+
end do
130+
work_list = work_list // temp_list
131+
132+
call check( work_list == [ ( string_type( to_string(j) ), j = first, i + stride - 1 ) ], &
133+
& "test_append_prepend_list: work_list ==&
134+
& [ ( to_string(j), j = first, i + stride - 1) ]" )
135+
136+
end do
137+
138+
work_list = work_list // to_string(last)
139+
140+
call compare_list( work_list, first, last + 1, 5 )
141+
call check( work_list == [ ( to_string(i), i = first, last) ], "test_append_prepend_list:&
142+
& work_list == [ ( to_string(i), i = first, last) ]" )
143+
call check( [ ( string_type( to_string(i) ), i = first, last) ] == work_list, &
144+
& "test_append_prepend_list: [ ( string_type( to_string(i) ), i = first, last) ]&
145+
& == work_list" )
146+
147+
do i = last, first + 1, -1 * stride
148+
call check( work_list /= reference_list, "test_append_prepend_list:&
149+
& work_list /= reference_list" )
150+
call check( reference_list /= work_list, "test_append_prepend_list:&
151+
& reference_list /= work_list" )
152+
153+
call temp_list%destroy()
154+
do j = i - stride + 1, i
155+
call temp_list%insert_at( list_tail, to_string(j) )
156+
end do
157+
reference_list = temp_list // reference_list
158+
159+
call check( reference_list == &
160+
& [ ( string_type( to_string(j) ), j = i - stride + 1, last ) ], &
161+
& "test_append_prepend_list: reference_list ==&
162+
& [ ( string_type( to_string(j) ), j = i - stride + 1, last ) ]" )
163+
164+
end do
165+
166+
reference_list = to_string(first) // reference_list
167+
168+
call compare_list( reference_list, first, last + 1, 6 )
169+
call check( [ ( string_type( to_string(i) ), i = first, last) ] == reference_list, &
170+
& "test_append_prepend_list:&
171+
& [ ( string_type( to_string(i) ), i = first, last) ] == reference_list" )
172+
call check( [ ( to_string(i), i = first, last) ] == reference_list, &
173+
& "test_append_prepend_list: [ ( to_string(i), i = first, last) ] == reference_list" )
174+
175+
call check( work_list == reference_list, "test_append_prepend_list:&
176+
& work_list == reference_list" )
177+
call check( reference_list == work_list, "test_append_prepend_list:&
178+
& reference_list == work_list" )
179+
180+
end subroutine test_append_prepend_list
181+
182+
! compares input stringlist 'list' with an array of consecutive integers
183+
! array is 'first' inclusive and 'last' exclusive
184+
subroutine compare_list(list, first, last, call_number)
185+
type(stringlist_type), intent(in) :: list
186+
integer, intent(in) :: first, last, call_number
187+
integer :: i, j
188+
189+
call check( abs( last - first ) == list%len(), "compare_list: length mis-match&
190+
& call_number " // to_string( call_number ) )
191+
192+
j = merge(-1, 1, last < first)
193+
do i = 1, list%len()
194+
call check( list%get( fidx(i) ) == to_string( first + ( ( i - 1 ) * j ) ), &
195+
& "compare_list: call_number " // to_string( call_number ) &
196+
& // " fidx( " // to_string( i ) // " )")
197+
call check( list%get( bidx(i) ) == to_string( last - ( i * j ) ), &
198+
& "compare_list: call_number " // to_string( call_number ) &
199+
& // " bidx( " // to_string( i ) // " )")
200+
end do
201+
202+
end subroutine compare_list
203+
204+
end module test_append_prepend
205+
206+
207+
program tester
208+
use test_append_prepend
209+
implicit none
210+
211+
call test_append_prepend_string
212+
call test_append_prepend_array
213+
call test_append_prepend_list
214+
215+
end program tester

src/tests/stringlist/test_insert_at.f90

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,7 @@
22
module test_insert_at
33
use stdlib_error, only: check
44
use stdlib_string_type, only: string_type, operator(//), operator(==)
5-
use stdlib_stringlist, only: stringlist_type, stringlist_index_type, fidx, bidx, list_head, &
6-
& list_tail, operator(//), operator(==), operator(/=)
5+
use stdlib_stringlist, only: stringlist_type, fidx, bidx, list_head, list_tail
76
use stdlib_ascii, only: to_string
87
implicit none
98

@@ -13,7 +12,7 @@ subroutine test_insert_at_1
1312
type(stringlist_type) :: work_list
1413
integer :: i, current_length
1514
character(len=:), allocatable :: string
16-
integer, parameter :: first = -5
15+
integer, parameter :: first = -100
1716
integer, parameter :: last = 1
1817

1918
call check( work_list%to_current_idxn( list_tail ) == 0, "test_insert_at_1: list_tail == 0")
@@ -44,9 +43,10 @@ subroutine test_insert_at_1
4443

4544
end do
4645

47-
! compare work_list with [1, 0, -1, -2, -3, -4, -5]
46+
! compare work_list with [1, 0, -1, ..., ..., -99, -100]
4847
call compare_list( work_list, last, first - 1, 1)
4948

49+
call work_list%destroy()
5050
call work_list%destroy()
5151
current_length = 0
5252

@@ -74,7 +74,7 @@ subroutine test_insert_at_1
7474

7575
end do
7676

77-
! compare work_list with [-5, -4, -3, -2, -1, 0, 1]
77+
! compare work_list with [-100, -99, ..., ..., 0, 1]
7878
call compare_list( work_list, first, last + 1, 2)
7979

8080
end subroutine test_insert_at_1
@@ -84,7 +84,7 @@ subroutine test_insert_at_2
8484
integer :: i, current_length
8585
character(len=:), allocatable :: string
8686
integer, parameter :: first = 2
87-
integer, parameter :: last = 20
87+
integer, parameter :: last = 200
8888

8989
write (*,*) "test_insert_at_2: Starting test case 1!"
9090

@@ -145,7 +145,7 @@ subroutine test_insert_at_2
145145

146146
end do
147147

148-
! compare work_list with [1, 2, ..., ..., 19, 20]
148+
! compare work_list with [1, 2, ..., ..., 199, 200]
149149
call compare_list( work_list, first - 1, last + 1, 3 )
150150

151151
end subroutine test_insert_at_2
@@ -155,7 +155,7 @@ subroutine test_insert_at_3
155155
integer :: i, current_length
156156
character(len=:), allocatable :: string
157157
integer, parameter :: first = 2
158-
integer, parameter :: last = 20
158+
integer, parameter :: last = 200
159159

160160
write (*,*) "test_insert_at_3: Starting test case 1!"
161161

@@ -216,7 +216,7 @@ subroutine test_insert_at_3
216216

217217
end do
218218

219-
! compare work_list with [20, 19, ..., ..., 2, 1]
219+
! compare work_list with [200, 199, ..., ..., 2, 1]
220220
call compare_list( work_list, last, first - 2, 4 )
221221

222222
end subroutine test_insert_at_3

0 commit comments

Comments
 (0)