1! { dg-do run }
2! Check real value edit descriptors
3! Also checks that rounding is performed correctly
4program edit_real_1
5  character(len=20) s
6  character(len=20) x
7  character(len=200) t
8  parameter (x = "xxxxxxxxxxxxxxxxxxxx")
9
10  ! W append a "z" onto each test to check the field is the correct width
11  s = x
12  ! G -> F format
13  write (s, '(G10.3,A)') 12.36, "z"
14  if (s .ne. "  12.4    z") call abort
15  s = x
16  ! G -> E format
17  write (s, '(G10.3,A)') -0.0012346, "z"
18  if (s .ne. "-0.123E-02z") call abort
19  s = x
20  ! Gw.eEe format
21  write (s, '(G10.3e1,a)') 12.34, "z"
22  if (s .ne. "   12.3   z") call abort
23  ! E format with excessive precision
24  write (t, '(E199.192,A)') 1.5, "z"
25  if ((t(1:7) .ne. " 0.1500") .or. (t(194:200) .ne. "00E+01z")) call abort
26  ! EN format
27  s = x
28  write (s, '(EN15.3,A)') 12873.6, "z"
29  if (s .ne. "     12.874E+03z") call abort
30  ! EN format, negative exponent
31  s = x
32  write (s, '(EN15.3,A)') 12.345e-6, "z"
33  if (s .ne. "     12.345E-06z") call abort
34  ! ES format
35  s = x
36  write (s, '(ES10.3,A)') 16.235, "z"
37  if (s .ne. " 1.624E+01z") call abort
38  ! F format, small number
39  s = x
40  write (s, '(F10.8,A)') 1.0e-20, "z"
41  if (s .ne. "0.00000000z") call abort
42  ! E format, very large number.
43  ! Used to overflow with positive scale factor
44  s = x
45  write (s, '(1PE10.3,A)') huge(0d0), "z"
46  ! The actual value is target specific, so just do a basic check
47  if ((s(1:1) .eq. "*") .or. (s(7:7) .ne. "+") .or. &
48      (s(11:11) .ne. "z")) call abort
49  ! F format, round up with carry to most significant digit.
50  s = x
51  write (s, '(F10.3,A)') 0.9999, "z"
52  if (s .ne. "     1.000z") call abort
53  ! F format, round up with carry to most significant digit < 0.1.
54  s = x
55  write (s, '(F10.3,A)') 0.0099, "z"
56  if (s .ne. "     0.010z") call abort
57  ! E format, round up with carry to most significant digit.
58  s = x
59  write (s, '(E10.3,A)') 0.9999, "z"
60  if (s .ne. " 0.100E+01z") call abort
61  ! EN format, round up with carry to most significant digit.
62  s = x
63  write (s, '(EN15.3,A)') 999.9999, "z"
64  if (s .ne. "      1.000E+03z") call abort
65  ! E format, positive scale factor
66  s = x
67  write (s, '(2PE10.4,A)') 1.2345, "z"
68  if (s .ne. '12.345E-01z') call abort
69  ! E format, negative scale factor
70  s = x
71  write (s, '(-2PE10.4,A)') 1.250001, "z"
72  if (s .ne. '0.0013E+03z') call abort
73  ! E format, single digit precision
74  s = x
75  write (s, '(E10.1,A)') 1.1, "z"
76  if (s .ne. '   0.1E+01z') call abort
77end
78
79