GCC Code Coverage Report


Directory: src/lib/
File: src/lib/mod_misc.f90
Date: 2024-06-28 12:51:18
Exec Total Coverage
Lines: 40 49 81.6%
Functions: 0 0 -%
Branches: 79 146 54.1%

Line Branch Exec Source
1 !!!#############################################################################
2 !!! Code written by Ned Thaddeus Taylor and Francis Huw Davies
3 !!!#############################################################################
4 !!! module contains various miscellaneous functions and subroutines.
5 !!! module includes the following functions and subroutines:
6 !!! - Icount - counts words on line
7 !!! - grep - finds 1st line containing the pattern
8 !!! - to_upper - converts all characters in string to upper case
9 !!! - to_lower - converts all characters in string to lower case
10 !!!#############################################################################
11 module misc
12 use constants, only: real12
13 implicit none
14
15 contains
16
17 !!!#####################################################
18 !!! counts the number of words on a line
19 !!!#####################################################
20 17 integer function Icount(full_line,tmpchar)
21 implicit none
22 character(*), intent(in) :: full_line
23 character(*), optional, intent(in) :: tmpchar
24
25 17 character(len=:), allocatable :: fs
26 integer ::items,pos,k,length
27 17 items=0
28 17 pos=1
29
30 17 length=1
31
2/2
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 3 times.
5 if(present(tmpchar)) length=len(trim(tmpchar))
32
2/4
✗ Branch 0 not taken.
✓ Branch 1 taken 17 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 17 times.
17 allocate(character(len=length) :: fs)
33
2/2
✓ Branch 0 taken 5 times.
✓ Branch 1 taken 12 times.
17 if(present(tmpchar)) then
34
4/4
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 3 times.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 3 times.
5 if(trim(tmpchar).ne." ")then
35
5/10
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
2 fs=trim(tmpchar)
36 else
37
4/8
✗ Branch 0 not taken.
✓ Branch 1 taken 3 times.
✓ Branch 2 taken 3 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 3 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 3 times.
3 fs = tmpchar
38 end if
39 else
40
4/8
✗ Branch 0 not taken.
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 12 times.
✓ Branch 4 taken 12 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 12 times.
12 fs=" "
41 end if
42
43 32 loop: do
44
3/4
✓ Branch 0 taken 48 times.
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 48 times.
49 k=verify(full_line(pos:),fs)
45
2/2
✓ Branch 0 taken 13 times.
✓ Branch 1 taken 36 times.
49 if (k.eq.0) exit loop
46 36 items=items+1
47 36 pos=k+pos-1
48
2/4
✓ Branch 0 taken 36 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 36 times.
36 k=scan(full_line(pos:),fs)
49
2/2
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 32 times.
36 if (k.eq.0) exit loop
50 32 pos=k+pos-1
51 end do loop
52 17 Icount=items
53
3/4
✓ Branch 0 taken 5 times.
✓ Branch 1 taken 12 times.
✓ Branch 2 taken 17 times.
✗ Branch 3 not taken.
34 end function Icount
54 !!!#####################################################
55
56
57 !!!#####################################################
58 !!! grep
59 !!!#####################################################
60 !!! searches a file untill it finds the mattching patern
61 subroutine grep(unit,input,lstart)
62 implicit none
63 integer, intent(in) :: unit
64 character(*), intent(in) :: input
65 logical, optional, intent(in) :: lstart
66
67 integer :: Reason
68 character(1024) :: buffer
69 ! character(1024), intent(out), optional :: linechar
70 if(present(lstart))then
71 if(lstart) rewind(unit)
72 else
73 rewind(unit)
74 end if
75
76 greploop: do
77 read(unit,'(A100)',iostat=Reason) buffer
78 if(Reason.lt.0) return
79 if(index(trim(buffer),trim(input)).ne.0) exit greploop
80 end do greploop
81 end subroutine grep
82 !!!#####################################################
83
84
85 !!!#####################################################
86 !!! converts all characters in string to upper case
87 !!!#####################################################
88 3 pure function to_upper(buffer) result(upper)
89 implicit none
90 character(*), intent(in) :: buffer
91 character(len=:),allocatable :: upper
92
93 integer :: i,j
94
95
96
1/2
✗ Branch 1 not taken.
✓ Branch 2 taken 3 times.
3 allocate(character(len=len(buffer)) :: upper)
97
2/2
✓ Branch 0 taken 9 times.
✓ Branch 1 taken 3 times.
12 do i=1,len(buffer)
98
4/8
✓ Branch 0 taken 9 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 9 times.
✓ Branch 5 taken 9 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✓ Branch 8 taken 9 times.
9 j=iachar(buffer(i:i))
99
2/2
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 5 times.
12 if(j.ge.iachar("a").and.j.le.iachar("z"))then
100
4/8
✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 4 times.
✓ Branch 5 taken 4 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✓ Branch 8 taken 4 times.
4 upper(i:i)=achar(j-32)
101 else
102
8/16
✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 5 times.
✓ Branch 5 taken 5 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✓ Branch 8 taken 5 times.
✓ Branch 10 taken 5 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 5 times.
✓ Branch 15 taken 5 times.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✓ Branch 18 taken 5 times.
5 upper(i:i)=buffer(i:i)
103 end if
104 end do
105
106 3 return
107
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 3 times.
6 end function to_upper
108 !!!#####################################################
109
110
111 !!!#####################################################
112 !!! converts all characters in string to lower case
113 !!!#####################################################
114 643 pure function to_lower(buffer) result(lower)
115 implicit none
116 character(*), intent(in) :: buffer
117 character(len=:),allocatable :: lower
118
119 integer :: i,j
120
121
122
1/2
✗ Branch 1 not taken.
✓ Branch 2 taken 643 times.
643 allocate(character(len=len(buffer)) :: lower)
123
2/2
✓ Branch 0 taken 6226 times.
✓ Branch 1 taken 643 times.
6869 do i=1,len(buffer)
124
4/8
✓ Branch 0 taken 6226 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 6226 times.
✓ Branch 5 taken 6226 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✓ Branch 8 taken 6226 times.
6226 j=iachar(buffer(i:i))
125
2/2
✓ Branch 0 taken 5 times.
✓ Branch 1 taken 6221 times.
6869 if(j.ge.iachar("A").and.j.le.iachar("Z"))then
126
4/8
✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 5 times.
✓ Branch 5 taken 5 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✓ Branch 8 taken 5 times.
5 lower(i:i)=achar(j+32)
127 else
128
8/16
✓ Branch 0 taken 6221 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 6221 times.
✓ Branch 5 taken 6221 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✓ Branch 8 taken 6221 times.
✓ Branch 10 taken 6221 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 6221 times.
✓ Branch 15 taken 6221 times.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✓ Branch 18 taken 6221 times.
6221 lower(i:i)=buffer(i:i)
129 end if
130 end do
131
132 643 return
133
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 643 times.
1286 end function to_lower
134 !!!#####################################################
135
136 end module misc
137