-
Notifications
You must be signed in to change notification settings - Fork 394
Expand file tree
/
Copy pathleading_zero_format.f90
More file actions
102 lines (83 loc) · 2.85 KB
/
leading_zero_format.f90
File metadata and controls
102 lines (83 loc) · 2.85 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
! Execution tests for LZ, LZP, and LZS edit descriptors (Fortran 2023).
! LZ = processor-defined leading zero (flang prints the zero)
! LZP = always print the optional leading zero
! LZS = suppress the optional leading zero
program leading_zero_format
implicit none
real :: val
! === LZP tests (print leading zero) ===
! F descriptor
write(*,'(A)') "LZP with F descriptor:"
write(*,'(LZP,F6.1)') 0.2
write(*,'(LZP,F10.3)') 0.2
write(*,'(LZP,F4.1)') 0.1
! E descriptor
write(*,'(A)') "LZP with E descriptor:"
write(*,'(LZP,E10.3)') 0.2
write(*,'(LZP,E12.5)') 0.2
! D descriptor
write(*,'(A)') "LZP with D descriptor:"
write(*,'(LZP,D10.3)') 0.2d0
! G descriptor (F-path: value in range)
write(*,'(A)') "LZP with G descriptor (F-path):"
write(*,'(LZP,G10.3)') 0.2
! G descriptor (E-path: value out of range)
write(*,'(A)') "LZP with G descriptor (E-path):"
write(*,'(LZP,G10.3)') 0.0002
! === LZS tests (suppress leading zero) ===
! F descriptor
write(*,'(A)') "LZS with F descriptor:"
write(*,'(LZS,F6.1)') 0.2
write(*,'(LZS,F10.3)') 0.2
write(*,'(LZS,F4.1)') 0.1
! E descriptor
write(*,'(A)') "LZS with E descriptor:"
write(*,'(LZS,E10.3)') 0.2
write(*,'(LZS,E12.5)') 0.2
! D descriptor
write(*,'(A)') "LZS with D descriptor:"
write(*,'(LZS,D10.3)') 0.2d0
! G descriptor (F-path)
write(*,'(A)') "LZS with G descriptor (F-path):"
write(*,'(LZS,G10.3)') 0.2
! G descriptor (E-path)
write(*,'(A)') "LZS with G descriptor (E-path):"
write(*,'(LZS,G10.3)') 0.0002
! === LZ tests (processor-defined, flang prints the zero) ===
write(*,'(A)') "LZ with F descriptor:"
write(*,'(LZ,F6.1)') 0.2
! === Negative values less than 1 ===
write(*,'(A)') "Negative values:"
write(*,'(LZP,F7.1)') -0.2
write(*,'(LZS,F7.1)') -0.2
! === Values >= 1 (leading zero control has no effect) ===
write(*,'(A)') "Values >= 1 (no effect):"
write(*,'(LZP,F6.1)') 1.2
write(*,'(LZS,F6.1)') 1.2
! === Zero value ===
write(*,'(A)') "Zero value:"
write(*,'(LZP,F6.1)') 0.0
write(*,'(LZS,F6.1)') 0.0
! === Switching mid-format ===
write(*,'(A)') "Switch mid-format:"
write(*,'(LZP,F6.1,LZS,F6.1)') 0.5, 0.5
! === With 1P scale factor (no effect on leading zero) ===
write(*,'(A)') "With 1P scale (no effect):"
write(*,'(LZP,1P,E10.3)') 0.2
write(*,'(LZS,1P,E10.3)') 0.2
! === Without comma separator ===
write(*,'(A)') "Without comma separator:"
write(*,'(LZPF6.1)') 0.2
write(*,'(LZSF6.1)') 0.2
! === Spaces between characters of the edit descriptors ===
write(*,'(A)') "Spaces in descriptors:"
write(*,'(L ZP,F6.1)') 0.2
write(*,'(L ZS,F6.1)') 0.2
write(*,'(LZ P,F6.1)') 0.2
write(*,'(LZ S,F6.1)') 0.2
write(*,'(L Z P,F6.1)') 0.2
write(*,'(L Z S,F6.1)') 0.2
write(*,'(L Z,F6.1)') 0.2
write(*,'(L Z P,F6.1)') 0.2
write(*,'(L Z S,F6.1)') 0.2
end program leading_zero_format