Skip to content

Commit 5dd2e2a

Browse files
authored
Merge pull request #15 from JHenneberg/master
extended test_suit_init, new subroutine test_suite_get_assert_results
2 parents 03cc4f4 + 1260821 commit 5dd2e2a

File tree

4 files changed

+107
-52
lines changed

4 files changed

+107
-52
lines changed

README.md

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -34,39 +34,43 @@ program good_test
3434
use unit_test
3535
3636
implicit none
37-
38-
type(test_suite_type) specific_suite
39-
40-
! example with default suite
41-
call test_case_init()
4237
38+
type(test_suite_type) :: specific_suite
39+
40+
! example with default suite
41+
call test_suite_init()
4342
call test_case_create('Test 1')
4443
4544
! By sending macros __FILE__ and __LINE__, report will print the file and line number where assertion fails.
4645
call assert_approximate(1.0, 2.0, __FILE__, __LINE__) ! line 14
4746
47+
! report the complete suite
4848
call test_suite_report()
49+
50+
! finalize
4951
call test_case_final()
50-
52+
5153
! example with specific suite
52-
specific_suite%name = 'my specific test suite'
54+
call test_suite_init('my specific test suite', specific_suite)
5355
call test_case_create('Specific Test 1', specific_suite)
5456
! suite = SUITE need in this case (cause optional argument eps, file_name, line_number is missing)
5557
call assert_approximate(1.0, 2.0, suite=specific_suite)
56-
58+
5759
call test_case_create('Specific Test 2', specific_suite)
5860
! suite = SUITE need in this case (cause optional argument eps is missing)
5961
call assert_equal(1.0, 2.0, __FILE__, __LINE__, suite=specific_suite)
60-
62+
6163
call test_case_create('Specific Test 3', specific_suite)
6264
call assert_approximate(1.0, 2.0, __FILE__, __LINE__, 1E-0, specific_suite)
63-
65+
6466
! report a test_case
6567
call test_case_report('Specific Test 2', specific_suite)
66-
68+
6769
! report the complete suite
6870
call test_suite_report(specific_suite)
69-
call test_case_final(specific_suite)
71+
72+
! finalize
73+
call test_suite_final(specific_suite)
7074
7175
end program good_test
7276
```

src/test/test_assert.F90

Lines changed: 34 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,15 @@ program test_assert
33
! uneven assertions fail and even assertions pass
44

55
use unit_test
6-
6+
77
type(test_suite_type) :: test_suite_approximate
88
type(test_suite_type) :: test_suite_boolean
99
type(test_suite_type) :: test_suite_equal
1010
type(test_suite_type) :: test_suite_great_than
11-
11+
1212
! test assert_approximate routines
13-
test_suite_approximate%name = 'Approximate'
14-
13+
call test_suite_init('Approximate', test_suite_approximate)
14+
1515
! -> real
1616
call test_case_create('real', test_suite_approximate)
1717
call assert_approximate(1.0, 2.0, suite=test_suite_approximate)
@@ -22,7 +22,7 @@ program test_assert
2222
call assert_approximate(1.0D0, 1.00000000001D0, suite=test_suite_approximate)
2323
call assert_approximate(1.0D0, 1.1D0, eps=0.01D0, suite=test_suite_approximate)
2424
call assert_approximate(1.0D0, 1.00000000001D0, eps=0.01D0, suite=test_suite_approximate)
25-
25+
2626
call assert_approximate([1.0, 1.0], [1.0, 1.10], suite=test_suite_approximate)
2727
call assert_approximate([1.0, 1.0], [1.0, 1.00000000001], suite=test_suite_approximate)
2828
call assert_approximate([1.0, 1.0], [1.0, 1.10], eps=0.01, suite=test_suite_approximate)
@@ -31,7 +31,7 @@ program test_assert
3131
call assert_approximate([1.0D0, 1.0D0], [1.0D0, 1.00000000001D0], suite=test_suite_approximate)
3232
call assert_approximate([1.0D0, 1.0D0], [1.0D0, 1.1D0], eps=0.01D0, suite=test_suite_approximate)
3333
call assert_approximate([1.0D0, 1.0D0], [1.0D0, 1.01D0], eps=0.01D0, suite=test_suite_approximate)
34-
34+
3535
call assert_approximate(reshape([1.0, 1.0, 1.0, 1.0], [2, 2]), reshape([1.0, 1.1, 1.0, 1.0], [2, 2]), suite=test_suite_approximate)
3636
call assert_approximate(reshape([1.0, 1.0, 1.0, 1.0], [2, 2]), reshape([1.0, 1.00000000001, 1.0, 1.0], [2, 2]), suite=test_suite_approximate)
3737
call assert_approximate(reshape([1.0, 1.0, 1.0, 1.0], [2, 2]), reshape([1.0, 1.10, 1.0, 1.0], [2, 2]), eps=0.01, suite=test_suite_approximate)
@@ -40,40 +40,40 @@ program test_assert
4040
call assert_approximate(reshape([1.0D0, 1.0D0, 1.0D0, 1.0D0], [2, 2]), reshape([1.0D0, 1.000000000001D0, 1.0D0, 1.0D0], [2, 2]), suite=test_suite_approximate)
4141
call assert_approximate(reshape([1.0D0, 1.0D0, 1.0D0, 1.0D0], [2, 2]), reshape([1.0D0, 1.10D0, 1.0D0, 1.0D0], [2, 2]), eps=0.01D0, suite=test_suite_approximate)
4242
call assert_approximate(reshape([1.0D0, 1.0D0, 1.0D0, 1.0D0], [2, 2]), reshape([1.0D0, 1.01D0, 1.0D0, 1.0D0], [2, 2]), eps=0.01D0, suite=test_suite_approximate)
43-
43+
4444
call test_suite_report(test_suite_approximate)
4545
call test_suite_final(test_suite_approximate)
46-
46+
4747
! test assert_false/_true routines
48-
test_suite_boolean%name = 'Boolean'
49-
48+
call test_suite_init('Boolean', test_suite_boolean)
49+
5050
! -> false
5151
call test_case_create('false', test_suite_boolean)
5252
call assert_false(.true., __FILE__, __LINE__, test_suite_boolean)
5353
call assert_false(.false., __FILE__, __LINE__, test_suite_boolean)
54-
54+
5555
! -> true
5656
call test_case_create('true', test_suite_boolean)
5757
call assert_true(.false., __FILE__, __LINE__, test_suite_boolean)
5858
call assert_true(.true., __FILE__, __LINE__, test_suite_boolean)
59-
59+
6060
call test_suite_report(test_suite_boolean)
6161
call test_suite_final(test_suite_boolean)
62-
62+
6363
! test assert_equal routines
64-
test_suite_equal%name = 'Equal'
65-
64+
call test_suite_init('Equal', test_suite_equal)
65+
6666
! -> string
6767
call test_case_create('string', test_suite_equal)
6868
call assert_equal('abc', 'abcd', __FILE__, __LINE__, test_suite_equal)
6969
call assert_equal('abc', 'abc', __FILE__, __LINE__, test_suite_equal)
70-
70+
7171
call assert_equal(['abc', 'abc'], ['abc', 'abd'], __FILE__, __LINE__, test_suite_equal)
7272
call assert_equal(['abc', 'abc'], ['abc', 'abc'], __FILE__, __LINE__, test_suite_equal)
73-
73+
7474
call assert_equal(reshape(['abc', 'abc', 'abc', 'abc'], [2, 2]), reshape(['abc', 'abd', 'abc', 'abd'], [2, 2]), __FILE__, __LINE__, test_suite_equal)
7575
call assert_equal(reshape(['abc', 'abc', 'abc', 'abc'], [2, 2]), reshape(['abc', 'abc', 'abc', 'abc'], [2, 2]), __FILE__, __LINE__, test_suite_equal)
76-
76+
7777
! -> integer (int8->kind=1, int16->kind=2, int32->kind=4, int64->kind=8)
7878
call test_case_create('integer', test_suite_equal)
7979
call assert_equal(int(1, 1), int(2, 1), __FILE__, __LINE__, test_suite_equal)
@@ -84,7 +84,7 @@ program test_assert
8484
call assert_equal(int(3, 4), int(3, 4), __FILE__, __LINE__, test_suite_equal)
8585
call assert_equal(int(1, 8), int(2, 8), __FILE__, __LINE__, test_suite_equal)
8686
call assert_equal(int(3, 8), int(3, 8), __FILE__, __LINE__, test_suite_equal)
87-
87+
8888
call assert_equal([int(1, 1), int(1, 1), int(1, 1), int(1, 1)], [int(1, 1), int(2, 1), int(1, 1), int(1, 1)], __FILE__, __LINE__, test_suite_equal)
8989
call assert_equal([int(1, 1), int(1, 1), int(1, 1), int(1, 1)], [int(1, 1), int(1, 1), int(1, 1), int(1, 1)], __FILE__, __LINE__, test_suite_equal)
9090
call assert_equal([int(1, 2), int(1, 2), int(1, 2), int(1, 2)], [int(1, 2), int(2, 2), int(1, 2), int(1, 2)], __FILE__, __LINE__, test_suite_equal)
@@ -93,7 +93,7 @@ program test_assert
9393
call assert_equal([int(1, 4), int(1, 4), int(1, 4), int(1, 4)], [int(1, 4), int(1, 4), int(1, 4), int(1, 4)], __FILE__, __LINE__, test_suite_equal)
9494
call assert_equal([int(1, 8), int(1, 8), int(1, 8), int(1, 8)], [int(1, 8), int(2, 8), int(1, 8), int(1, 8)], __FILE__, __LINE__, test_suite_equal)
9595
call assert_equal([int(1, 8), int(1, 8), int(1, 8), int(1, 8)], [int(1, 8), int(1, 8), int(1, 8), int(1, 8)], __FILE__, __LINE__, test_suite_equal)
96-
96+
9797
call assert_equal(reshape([int(1, 1), int(1, 1), int(1, 1), int(1, 1)], [2, 2]), &
9898
& reshape([int(1, 1), int(2, 1), int(1, 1), int(1, 1)], [2, 2]), __FILE__, __LINE__, test_suite_equal)
9999
call assert_equal(reshape([int(1, 1), int(1, 1), int(1, 1), int(1, 1)], [2, 2]), &
@@ -110,30 +110,30 @@ program test_assert
110110
& reshape([int(1, 8), int(2, 8), int(1, 8), int(1, 8)], [2, 2]), __FILE__, __LINE__, test_suite_equal)
111111
call assert_equal(reshape([int(1, 8), int(1, 8), int(1, 8), int(1, 8)], [2, 2]), &
112112
& reshape([int(1, 8), int(1, 8), int(1, 8), int(1, 8)], [2, 2]), __FILE__, __LINE__, test_suite_equal)
113-
113+
114114
! -> real (real4, real8)
115115
call test_case_create('real', test_suite_equal)
116116
call assert_equal(1.0, 2.0, __FILE__, __LINE__, test_suite_equal)
117117
call assert_equal(3.0, 3.0, __FILE__, __LINE__, test_suite_equal)
118118
call assert_equal(1.0D0, 2.0D0, __FILE__, __LINE__, test_suite_equal)
119119
call assert_equal(3.0D0, 3.0D0, __FILE__, __LINE__, test_suite_equal)
120-
120+
121121
call assert_equal([1.0, 1.0], [1.0, 2.0], __FILE__, __LINE__, test_suite_equal)
122122
call assert_equal([1.0, 1.0], [1.0, 1.0], __FILE__, __LINE__, test_suite_equal)
123123
call assert_equal([1.0D0, 1.0D0], [1.0D0, 2.0D0], __FILE__, __LINE__, test_suite_equal)
124124
call assert_equal([1.0D0, 1.0D0], [1.0D0, 1.0D0], __FILE__, __LINE__, test_suite_equal)
125-
125+
126126
call assert_equal(reshape([1.0, 1.0, 1.0, 1.0], [2, 2]), reshape([1.0, 2.0, 1.0, 1.0], [2, 2]), __FILE__, __LINE__, test_suite_equal)
127127
call assert_equal(reshape([1.0, 1.0, 1.0, 1.0], [2, 2]), reshape([1.0, 1.0, 1.0, 1.0], [2, 2]), __FILE__, __LINE__, test_suite_equal)
128128
call assert_equal(reshape([1.0D0, 1.0D0, 1.0D0, 1.0D0], [2, 2]), reshape([1.0D0, 2.0D0, 1.0D0, 1.0D0], [2, 2]), __FILE__, __LINE__, test_suite_equal)
129129
call assert_equal(reshape([1.0D0, 1.0D0, 1.0D0, 1.0D0], [2, 2]), reshape([1.0D0, 1.0D0, 1.0D0, 1.0D0], [2, 2]), __FILE__, __LINE__, test_suite_equal)
130-
130+
131131
call test_suite_report(test_suite_equal)
132132
call test_suite_final(test_suite_equal)
133133

134134
! test assert_great_than routines
135-
test_suite_great_than%name = 'great_then'
136-
135+
call test_suite_init('great_then', test_suite_great_than)
136+
137137
! -> integer (int8->kind=1, int16->kind=2, int32->kind=4, int64->kind=8)
138138
call test_case_create('integer', test_suite_great_than)
139139
call assert_great_than(int(1, 1), int(1, 1), __FILE__, __LINE__, test_suite_great_than)
@@ -144,7 +144,7 @@ program test_assert
144144
call assert_great_than(int(2, 4), int(1, 4), __FILE__, __LINE__, test_suite_great_than)
145145
call assert_great_than(int(1, 8), int(1, 8), __FILE__, __LINE__, test_suite_great_than)
146146
call assert_great_than(int(2, 8), int(1, 8), __FILE__, __LINE__, test_suite_great_than)
147-
147+
148148
call assert_great_than([int(1, 1), int(1, 1), int(1, 1), int(1, 1)], [int(0, 1), int(2, 1), int(0, 1), int(0, 1)], __FILE__, __LINE__, test_suite_great_than)
149149
call assert_great_than([int(1, 1), int(1, 1), int(1, 1), int(1, 1)], [int(0, 1), int(0, 1), int(0, 1), int(0, 1)], __FILE__, __LINE__, test_suite_great_than)
150150
call assert_great_than([int(1, 2), int(1, 2), int(1, 2), int(1, 2)], [int(0, 2), int(2, 2), int(0, 2), int(0, 2)], __FILE__, __LINE__, test_suite_great_than)
@@ -153,39 +153,39 @@ program test_assert
153153
call assert_great_than([int(1, 4), int(1, 4), int(1, 4), int(1, 4)], [int(0, 4), int(0, 4), int(0, 4), int(0, 4)], __FILE__, __LINE__, test_suite_great_than)
154154
call assert_great_than([int(1, 8), int(1, 8), int(1, 8), int(1, 8)], [int(0, 8), int(2, 8), int(0, 8), int(0, 8)], __FILE__, __LINE__, test_suite_great_than)
155155
call assert_great_than([int(1, 8), int(1, 8), int(1, 8), int(1, 8)], [int(0, 8), int(0, 8), int(0, 8), int(0, 8)], __FILE__, __LINE__, test_suite_great_than)
156-
156+
157157
call assert_great_than(reshape([int(1, 1), int(1, 1), int(1, 1), int(1, 1)], [2, 2]), &
158158
& reshape([int(0, 1), int(2, 1), int(0, 1), int(0, 1)], [2, 2]), __FILE__, __LINE__, test_suite_great_than)
159159
call assert_great_than(reshape([int(1, 1), int(1, 1), int(1, 1), int(1, 1)], [2, 2]), &
160160
& reshape([int(0, 1), int(0, 1), int(0, 1), int(0, 1)], [2, 2]), __FILE__, __LINE__, test_suite_great_than)
161-
161+
162162
call assert_great_than(reshape([int(1, 2), int(1, 2), int(1, 2), int(1, 2)], [2, 2]), &
163163
& reshape([int(0, 2), int(2, 2), int(0, 2), int(0, 2)], [2, 2]), __FILE__, __LINE__, test_suite_great_than)
164164
call assert_great_than(reshape([int(1, 2), int(1, 2), int(1, 2), int(1, 2)], [2, 2]), &
165165
& reshape([int(0, 2), int(0, 2), int(0, 2), int(0, 2)], [2, 2]), __FILE__, __LINE__, test_suite_great_than)
166-
166+
167167
call assert_great_than(reshape([int(1, 4), int(1, 4), int(1, 4), int(1, 4)], [2, 2]), &
168168
& reshape([int(0, 4), int(2, 4), int(0, 4), int(0, 4)], [2, 2]), __FILE__, __LINE__, test_suite_great_than)
169169
call assert_great_than(reshape([int(1, 4), int(1, 4), int(1, 4), int(1, 4)], [2, 2]), &
170170
& reshape([int(0, 4), int(0, 4), int(0, 4), int(0, 4)], [2, 2]), __FILE__, __LINE__, test_suite_great_than)
171-
171+
172172
call assert_great_than(reshape([int(1, 8), int(1, 8), int(1, 8), int(1, 8)], [2, 2]), &
173173
& reshape([int(0, 8), int(2, 8), int(0, 8), int(0, 8)], [2, 2]), __FILE__, __LINE__, test_suite_great_than)
174174
call assert_great_than(reshape([int(1, 8), int(1, 8), int(1, 8), int(1, 8)], [2, 2]), &
175175
& reshape([int(0, 8), int(0, 8), int(0, 8), int(0, 8)], [2, 2]), __FILE__, __LINE__, test_suite_great_than)
176-
176+
177177
! -> real (real4, real8)
178178
call test_case_create('real', test_suite_great_than)
179179
call assert_great_than(1.0, 1.0, __FILE__, __LINE__, test_suite_great_than)
180180
call assert_great_than(2.0, 1.0, __FILE__, __LINE__, test_suite_great_than)
181181
call assert_great_than(1.0D0, 1.0D0, __FILE__, __LINE__, test_suite_great_than)
182182
call assert_great_than(2.0D0, 1.0D0, __FILE__, __LINE__, test_suite_great_than)
183-
183+
184184
call assert_great_than([1.0, 1.0], [0.0, 2.0], __FILE__, __LINE__, test_suite_great_than)
185185
call assert_great_than([1.0, 1.0], [0.0, 0.0], __FILE__, __LINE__, test_suite_great_than)
186186
call assert_great_than([1.0D0, 1.0D0], [0.0D0, 2.0D0], __FILE__, __LINE__, test_suite_great_than)
187187
call assert_great_than([1.0D0, 1.0D0], [0.0D0, 0.0D0], __FILE__, __LINE__, test_suite_great_than)
188-
188+
189189
call assert_great_than(reshape([1.0, 1.0, 1.0, 1.0], [2, 2]), reshape([0.0, 2.0, 0.0, 0.0], [2, 2]), __FILE__, __LINE__, test_suite_great_than)
190190
call assert_great_than(reshape([1.0, 1.0, 1.0, 1.0], [2, 2]), reshape([0.0, 0.0, 0.0, 0.0], [2, 2]), __FILE__, __LINE__, test_suite_great_than)
191191
call assert_great_than(reshape([1.0D0, 1.0D0, 1.0D0, 1.0D0], [2, 2]), reshape([0.0D0, 2.0D0, 0.0D0, 0.0D0], [2, 2]), __FILE__, __LINE__, test_suite_great_than)

src/test_case_mod.F90

Lines changed: 56 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ module test_case_mod
1414
public test_case_append_assert
1515
public test_case_report
1616
public test_suite_type
17+
public test_suite_get_assert_results
1718

1819
type assert_result_type
1920
integer id
@@ -46,11 +47,19 @@ module test_case_mod
4647

4748
contains
4849

49-
subroutine test_suite_init(name)
50+
subroutine test_suite_init(name, suite)
5051

5152
character(*), intent(in) :: name
53+
type(test_suite_type), intent(in), optional, target :: suite
54+
type(test_suite_type), pointer :: dummy_suite
55+
56+
if (present(suite) ) then
57+
dummy_suite => suite
58+
else
59+
dummy_suite => default_test_suite
60+
end if
5261

53-
default_test_suite%name = name
62+
dummy_suite%name = name
5463

5564
end subroutine test_suite_init
5665

@@ -88,7 +97,7 @@ end subroutine test_suite_final
8897
subroutine test_case_create(name, suite)
8998

9099
character(*), intent(in) :: name
91-
type(test_suite_type), target, optional :: suite
100+
type(test_suite_type), intent(in), target, optional :: suite
92101
type(test_suite_type), pointer :: dummy_suite
93102

94103
! if no suite parameter was passed, use default test suite
@@ -114,7 +123,7 @@ end subroutine test_case_create
114123
subroutine test_case_report(name, suite)
115124

116125
character(*), intent(in) :: name
117-
type(test_suite_type), optional, target :: suite
126+
type(test_suite_type), intent(in), optional, target :: suite
118127
type(test_suite_type), pointer :: dummy_suite
119128
type(test_case_type), pointer :: test_case
120129
type(assert_result_type), pointer :: assert_result
@@ -265,8 +274,8 @@ function get_test_case(name, suite) result(res)
265274

266275
integer i
267276
character(*), intent(in) :: name
268-
type(test_case_type), pointer :: res
269277
type(test_suite_type), target, optional :: suite
278+
type(test_case_type), pointer :: res
270279
type(test_suite_type), pointer :: dummy_suite
271280

272281
! if no suite parameter was passed, use default test suite
@@ -286,4 +295,46 @@ function get_test_case(name, suite) result(res)
286295

287296
end function get_test_case
288297

298+
function test_suite_get_assert_results(suite) result(res)
299+
300+
type(test_suite_type), target, optional :: suite
301+
logical, allocatable :: res(:)
302+
type(test_suite_type), pointer :: dummy_suite
303+
type(test_case_type), pointer :: dummy_case
304+
type(assert_result_type), pointer :: dummy_assert_result
305+
integer :: num_assert, i, j, k
306+
307+
! if no suite parameter was passed, use default test suite
308+
if (present(suite) ) then
309+
dummy_suite => suite
310+
else
311+
dummy_suite => default_test_suite
312+
end if
313+
314+
num_assert = 0
315+
dummy_case => dummy_suite%test_case_head
316+
num_assert = num_assert + dummy_case%num_assert
317+
do i = 1, dummy_suite%num_test_case - 1
318+
dummy_case => dummy_case%next
319+
num_assert = num_assert + dummy_case%num_assert
320+
end do
321+
322+
allocate(res(num_assert))
323+
res = .FALSE.
324+
dummy_case => dummy_suite%test_case_head
325+
k = 0
326+
do i = 1, dummy_suite%num_test_case
327+
dummy_assert_result => dummy_case%assert_result_head
328+
k = k + 1
329+
res(k) = dummy_assert_result%passed
330+
do j = 1, dummy_case%num_assert - 1
331+
dummy_assert_result => dummy_assert_result%next
332+
k = k + 1
333+
res(k) = dummy_assert_result%passed
334+
end do
335+
dummy_case => dummy_case%next
336+
end do
337+
338+
end function test_suite_get_assert_results
339+
289340
end module test_case_mod

src/unit_test.F90

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,5 @@ module unit_test
22

33
use assert_mod
44
use test_case_mod
5-
5+
66
end module unit_test

0 commit comments

Comments
 (0)