259 lines
5.7 KiB
Fortran
259 lines
5.7 KiB
Fortran
|
module prettify_selftest
|
||
|
implicit none
|
||
|
private
|
||
|
public :: dp, test_routine, &
|
||
|
test_function, test_type, str_function
|
||
|
integer, parameter :: dp = selected_real_kind ( 15 , 307)
|
||
|
type test_type
|
||
|
real (kind =dp ) :: r = 1.0d-3
|
||
|
integer :: i
|
||
|
end type test_type
|
||
|
|
||
|
contains
|
||
|
|
||
|
|
||
|
subroutine test_routine( &
|
||
|
r, i, j, k, l)
|
||
|
integer, intent(in) :: r, i, j, k
|
||
|
integer, intent (out) :: l
|
||
|
|
||
|
l = test_function(r,i,j,k)
|
||
|
end &
|
||
|
subroutine
|
||
|
|
||
|
pure function test_function(r, i, j, &
|
||
|
k) &
|
||
|
result(l)
|
||
|
integer, intent(in) :: r, i, j, k
|
||
|
integer :: l
|
||
|
|
||
|
l=r + i +j +k
|
||
|
end function
|
||
|
function &
|
||
|
str_function(a) result(l)
|
||
|
character(len=*) :: a
|
||
|
integer :: l
|
||
|
|
||
|
if(len(a)<5)then
|
||
|
l=0
|
||
|
else
|
||
|
l=1
|
||
|
endif
|
||
|
end function
|
||
|
|
||
|
end module
|
||
|
|
||
|
program example_prog
|
||
|
use example, only: dp, test_routine, test_function, test_type,str_function
|
||
|
|
||
|
implicit none
|
||
|
integer :: r,i,j,k,l,my_integer,m
|
||
|
integer, dimension(5) :: arr
|
||
|
integer, dimension(20) :: big_arr
|
||
|
integer :: endif
|
||
|
type(test_type) :: t
|
||
|
real(kind=dp) :: r1, r2, r3, r4, r5, r6
|
||
|
integer, pointer :: point
|
||
|
|
||
|
point=> null( )
|
||
|
|
||
|
! 1) white space formatting !
|
||
|
!***************************!
|
||
|
! example 1.1
|
||
|
r=1;i=-2;j=3;k=4;l=5
|
||
|
r2 = 0.0_dp; r3= 1.0_dp; r4 =2.0_dp; r5=3.0_dp; r6 = 4.0_dp
|
||
|
r1=-(r2**i*(r3+r5*(-r4)-r6))-2.e+2
|
||
|
if( r.eq.2.and.r<=5) i=3
|
||
|
write(*, *)(merge(3, 1, i<=2))
|
||
|
write(*, *)test_function(r,i,j , k)
|
||
|
t % r = 4.0_dp
|
||
|
t%i = str_function( "t % i = " )
|
||
|
|
||
|
! example 1.2
|
||
|
my_integer=2
|
||
|
i=3
|
||
|
j=5
|
||
|
|
||
|
big_arr = [1, 2, 3, 4, 5, &
|
||
|
6, 7, 8, 9, 10, &
|
||
|
11, 12, 13, 14, 15, &
|
||
|
16, 17, 18, 19, 20]
|
||
|
|
||
|
! example 1.3: disabling auto-formatter:
|
||
|
my_integer = 2 !&
|
||
|
i = 3 !&
|
||
|
j = 5 !&
|
||
|
|
||
|
!&<
|
||
|
my_integer = 2
|
||
|
i = 3
|
||
|
j = 5
|
||
|
!&>
|
||
|
|
||
|
big_arr = [ 1, 2, 3, 4, 5, & !&
|
||
|
6, 7, 8, 9, 10, & !&
|
||
|
11, 12, 13, 14, 15, & !&
|
||
|
16, 17, 18, 19, 20] !&
|
||
|
|
||
|
! example 1.4:
|
||
|
|
||
|
big_arr = [1, 2, 3, 4, 5,&
|
||
|
& 6, 7, 8, 9, 10, &
|
||
|
& 11, 12, 13, 14, 15,&
|
||
|
&16, 17, 18, 19, 20]
|
||
|
|
||
|
! 2) auto indentation for loops !
|
||
|
!*******************************!
|
||
|
|
||
|
! example 2.1
|
||
|
l = 0
|
||
|
do r= 1 , 10
|
||
|
select case (r)
|
||
|
case(1)
|
||
|
do_label: do i = 1,100
|
||
|
if (i<=2) then
|
||
|
m =0
|
||
|
do while(m <4)
|
||
|
m =m+1
|
||
|
do k=1,3
|
||
|
if (k==1) l =l +1
|
||
|
end do
|
||
|
enddo
|
||
|
endif
|
||
|
enddo do_label
|
||
|
case ( 2 )
|
||
|
l=i + j + k
|
||
|
end select
|
||
|
enddo
|
||
|
|
||
|
! example 2.2
|
||
|
do m = 1, 2
|
||
|
do r = 1, 3
|
||
|
write (*, *) r
|
||
|
do k = 1, 4
|
||
|
do l = 1, 3
|
||
|
do i = 4, 5
|
||
|
do my_integer = 1, 1
|
||
|
do j = 1, 2
|
||
|
write (*, *) test_function(m, r, k, l) + i
|
||
|
enddo
|
||
|
enddo
|
||
|
enddo
|
||
|
enddo
|
||
|
enddo
|
||
|
enddo
|
||
|
enddo
|
||
|
|
||
|
! 3) auto alignment for linebreaks !
|
||
|
!************************************!
|
||
|
|
||
|
! example 3.1
|
||
|
l = test_function(1, 2, test_function(1, 2, 3, 4), 4) + 3 *(2+1)
|
||
|
|
||
|
l = test_function (1, 2, test_function(1,2, 3, 4),4) +&
|
||
|
3*(2+ 1 )
|
||
|
|
||
|
l = test_function(1, 2, &
|
||
|
test_function(1, 2, 3, 4), 4)+ &
|
||
|
3 * (2+1)
|
||
|
|
||
|
l = test_function(1, 2, &
|
||
|
test_function(1, 2, 3, &
|
||
|
4), 4) + &
|
||
|
3*(2 + 1)
|
||
|
|
||
|
! example 3.2
|
||
|
arr = [1, (/3,4, 5/), 6] + [ 1, 2,3, 4,5 ]
|
||
|
|
||
|
arr = [1,(/ 3, 4, 5 /) , &
|
||
|
6] +[1,2, 3, 4, 5 ]
|
||
|
|
||
|
arr = [1,(/3,4,5/), &
|
||
|
6]+ &
|
||
|
[1, 2, 3, 4, 5]
|
||
|
|
||
|
arr = [1, (/3, 4, &
|
||
|
5/), &
|
||
|
6] + &
|
||
|
[1, 2,3, 4, 5 ]
|
||
|
|
||
|
! example 3.3
|
||
|
l = test_function(1, 2, &
|
||
|
3, 4)
|
||
|
|
||
|
l = test_function( &
|
||
|
1, 2, 3, 4)
|
||
|
|
||
|
arr = [1, 2, &
|
||
|
3, 4, 5]
|
||
|
arr = [ &
|
||
|
1, 2, 3, 4, 5]
|
||
|
|
||
|
! 4) more complex formatting and tricky test cases !
|
||
|
!**************************************************!
|
||
|
|
||
|
! example 4.1
|
||
|
l = 0
|
||
|
do r = 1, 10
|
||
|
select case ( r )
|
||
|
case( 1)
|
||
|
do i=1,100;if (i<=2) then! comment
|
||
|
do j = 1,5
|
||
|
do k= 1, 3
|
||
|
l = l + 1
|
||
|
! unindented comment
|
||
|
! indented comment
|
||
|
end do; enddo
|
||
|
elseif ( .not. j ==4 ) then
|
||
|
my_integer = 4
|
||
|
else
|
||
|
write (*,*) " hello"
|
||
|
endif
|
||
|
enddo
|
||
|
case(2 )
|
||
|
l = i+ j + k
|
||
|
end select
|
||
|
enddo
|
||
|
|
||
|
! example 4.2
|
||
|
if ( &
|
||
|
l == &
|
||
|
111) &
|
||
|
then
|
||
|
do k = 1, 2
|
||
|
if (k == 1) &
|
||
|
l = test_function(1, &
|
||
|
test_function(r=4, i=5, &
|
||
|
j=6, k=test_function(1,2*(3*(1 +1)), str_function ( ")a!(b['(;=dfe"), &
|
||
|
9) + &
|
||
|
test_function(1, 2, 3, 4)), 9, 10) &
|
||
|
! test_function(1,2,3,4)),9,10) &
|
||
|
! +13*str_function('') + str_function('"')
|
||
|
+ 13*str_function('') + str_function('"')
|
||
|
end & ! comment
|
||
|
! comment
|
||
|
do
|
||
|
endif
|
||
|
|
||
|
! example 4.3
|
||
|
arr = [1,( /3,4, &
|
||
|
5 /),&
|
||
|
6 ]+ &
|
||
|
[1,2, 3, 4,5] ; arr = [1, 2,&
|
||
|
3, 4, 5]
|
||
|
|
||
|
! example 4.4
|
||
|
endif = 3
|
||
|
if(endif==2)then
|
||
|
endif=5
|
||
|
else if(endif==3)then
|
||
|
write(*,*)endif
|
||
|
endif
|
||
|
|
||
|
! example 4.5
|
||
|
do i=1,2;if(.true.)then
|
||
|
write(*, *)"hello"
|
||
|
endif; enddo
|
||
|
|
||
|
end program
|