25 CHARACTER(len=64) :: charbuf
27 INTEGER(kind=int_b) :: bcheck
29 DOUBLE PRECISION :: dcheck
30 INTEGER,
POINTER :: ws(:), we(:)
33 print*,
'=== Testing char_utilities module ==='
35 print*,
'Checking int_to_char'
37 READ(charbuf,
'(I10)') icheck
38 IF (icheck /= huge(1)) CALL
EXIT(1)
40 READ(charbuf,
'(I10)') icheck
41 IF (icheck /= -1000000) CALL
EXIT(1)
43 print*,
'Checking byte_to_char'
45 READ(charbuf,
'(I4)') bcheck
46 IF (bcheck /= 127_int_b) CALL
EXIT(1)
48 READ(charbuf,
'(I4)') bcheck
49 IF (bcheck /= -127_int_b) CALL
EXIT(1)
51 print*,
'Checking real_to_char'
53 READ(charbuf,
'(F15.0)') rcheck
54 IF (
abs((rcheck-1.0e+20)/1.0e+20) > 1.0e-30 ) CALL
EXIT(1)
56 READ(charbuf,
'(F15.0)') rcheck
57 IF (
abs((rcheck+1.0e-20)/1.0e+20) > 1.0e-30 ) CALL
EXIT(1)
59 print*,
'Checking double_to_char'
61 READ(charbuf,
'(D24.0)') dcheck
62 IF (
abs((dcheck-1.0d+120)/1.0d+120) > 1.0d-200 ) CALL
EXIT(1)
64 READ(charbuf,
'(D24.0)') dcheck
65 IF (
abs((dcheck+1.0d-120)/1.0d+120) > 1.0d-200 ) CALL
EXIT(1)
67 print*,
'Checking l_nblnk'
68 IF (l_nblnk(
'1234') /= 4 .OR. l_nblnk(
'12345 ') /= 5) CALL
EXIT(1)
69 print*,
'Checking l_nblnk partly degenerated'
70 IF (l_nblnk(
' ') /= 0) CALL
EXIT(1)
71 print*,
'Checking l_nblnk fully degenerated'
72 IF (l_nblnk(
'') /= 0) CALL
EXIT(1)
73 print*,
'Checking f_nblnk'
74 IF (f_nblnk(
'1234',
' ') /= 1 .OR. f_nblnk(
' 12345',
' ') /= 2) CALL
EXIT(1)
79 print*,
'Checking f_nblnk partly degenerated'
80 IF (f_nblnk(
' ') /= 5) CALL
EXIT(1)
81 print*,
'Checking f_nblnk fully degenerated'
82 IF (f_nblnk(
'') /= 1) CALL
EXIT(1)
92 print*,
'Checking align_center even'
93 IF (align_center(
' ciao') /=
' ciao ' .OR. align_center(
'ciao ') /=
' ciao ') CALL
EXIT(1)
94 print*,
'Checking align_center odd'
95 IF (align_center(
' ciao ') /=
' ciao ' .AND. align_center(
' ciao ') /=
' ciao ') CALL
EXIT(1)
96 print*,
'Checking align_center degenerated'
97 IF (align_center(
'') /=
'' .OR. align_center(
' ') /=
' ') CALL
EXIT(1)
99 print*,
'Checking word_split - 3 words'
100 IF (word_split(
' prima secunda tertia ') /= 3 .OR. &
101 word_split(
'prima secunda tertia ') /= 3 .OR. &
102 word_split(
' prima secunda tertia') /= 3 .OR. &
103 word_split(
'prima secunda tertia') /= 3) CALL
EXIT(1)
104 print*,
'Checking word_split degenerated - 1 word'
105 IF (word_split(
'prima') /= 1 .OR. word_split(
' prima') /= 1 &
106 .OR. word_split(
'prima ') /= 1) CALL
EXIT(1)
107 print*,
'Checking word_split degenerated - 0 words'
108 IF (word_split(
'') /= 0 .OR. word_split(
' ') /= 0) CALL
EXIT(1)
110 print*,
'Checking word_split with indices - 3 words'
111 IF (word_split(
' prima secunda tertia ', ws, we) /= 3) CALL
EXIT(1)
112 print*,
'Checking word_split with indices - 3 words - checking indices'
113 IF (any(ws(:) /= (/3,9,18/)) .OR. any(we(:) /= (/7,15,23/))) CALL
EXIT(1)
116 print*,
'Checking line_split'
117 longline=line_split_new(
'che bella cosa ''na jurna` de sole, l''aria serena dopo la tempesta', 20)
118 IF (line_split_get_nlines(longline) /= 4 .OR. &
119 line_split_get_line(longline, 1) /=
'che bella cosa ''na' .OR. &
120 line_split_get_line(longline, 2) /=
'jurna` de sole,' .OR. &
121 line_split_get_line(longline, 3) /=
'l''aria serena dopo' .OR. &
122 line_split_get_line(longline, 4) /=
'la tempesta') CALL
EXIT(1)
125 print*,
'checking wash_char'
126 IF (trim(wash_char(
'abcde12345')) /=
'abcde' .OR. &
127 trim(wash_char(
'abcde 12345',badchar=
'a')) /=
'bcde 12345' .OR. &
128 trim(wash_char(
'abcde12345',goodchar=
'a')) /=
'a') CALL
EXIT(1)
130 END PROGRAM char_test
Operatore di valore assoluto di un intervallo.
Distruttori per le 2 classi.
Restituiscono il valore dell'oggetto in forma di stringa stampabile.
Utilities for CHARACTER variables.
Class that allows splitting a long line into shorter lines of equal length at the occurrence of a spe...
Definition of constants to be used for declaring variables of a desired type.