cp2k/tools/precommit/prettify_cp2k/selftest.py

267 lines
6.1 KiB
Python

#!/usr/bin/env python3
content = """
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
END IF
END FUNCTION
SUBROUTINE write ()
END SUBROUTINE write
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, saved_var = 10
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
INTEGER, POINTER :: point_init => NULL()
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
END DO
END IF
END DO do_label
CASE (2)
l = i + j + k
END SELECT
END DO
! 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
END DO
END DO
END DO
END DO
END DO
END DO
END DO
! 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; END DO
ELSEIF (.NOT. j == 4) THEN
my_integer = 4
ELSE
WRITE (*, *) "hello"
END IF
END DO
CASE (2)
l = i + j + k
END SELECT
END DO
! 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
END IF
! 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
END IF
! example 4.5
DO i = 1, 2; IF (.TRUE.) THEN
WRITE (*, *) "hello"
END IF; END DO
END PROGRAM
"""
# EOF