1! { dg-do run }
2! { dg-add-options ieee }
3! { dg-skip-if "NaN not supported" { spu-*-* } { "*" } { "" } }
4!
5! List-directed part of PR fortran/43298
6! and follow up to PR fortran/34319.
7!
8! Check handling of "NAN(alphanum)"
9!
10character(len=200) :: str
11real :: r
12complex :: z
13
14! read_real:
15
16r = 1.0
17str = 'INfinity' ; read(str,*) r
18if (r < 0 .or. r /= r*1.1) call abort()
19
20r = 1.0
21str = '-INF' ; read(str,*) r
22if (r > 0 .or. r /= r*1.1) call abort()
23
24r = 1.0
25str = '+INF' ; read(str,*) r
26if (r < 0 .or. r /= r*1.1) call abort()
27
28r = 1.0
29str = '-inFiniTY' ; read(str,*) r
30if (r > 0 .or. r /= r*1.1) call abort()
31
32r = 1.0
33str = 'NAN' ; read(str,*) r
34if (.not. isnan(r)) call abort()
35
36r = 1.0
37str = '-NAN' ; read(str,*) r
38if (.not. isnan(r)) call abort()
39
40r = 1.0
41str = '+NAN' ; read(str,*) r
42if (.not. isnan(r)) call abort()
43
44r = 1.0
45str = 'NAN(0x111)' ; read(str,*) r
46if (.not. isnan(r)) call abort()
47
48r = 1.0
49str = '-NAN(123)' ; read(str,*) r
50if (.not. isnan(r)) call abort()
51
52r = 1.0
53str = '+NAN(0xFFE)' ; read(str,*) r
54if (.not. isnan(r)) call abort()
55
56
57! parse_real
58
59z = cmplx(-2.0,-4.0)
60str = '(0.0,INfinity)' ; read(str,*) z
61if (aimag(z) < 0 .or. aimag(z) /= aimag(z)*1.1) call abort()
62
63z = cmplx(-2.0,-4.0)
64str = '(-INF,0.0)' ; read(str,*) z
65if (real(z) > 0 .or. real(z) /= real(z)*1.1) call abort()
66
67z = cmplx(-2.0,-4.0)
68str = '(0.0,+INF)' ; read(str,*) z
69if (aimag(z) < 0 .or. aimag(z) /= aimag(z)*1.1) call abort()
70
71z = cmplx(-2.0,-4.0)
72str = '(-inFiniTY,0.0)' ; read(str,*) z
73if (real(z) > 0 .or. real(z) /= real(z)*1.1) call abort()
74
75z = cmplx(-2.0,-4.0)
76str = '(NAN,0.0)' ; read(str,*) z
77if (.not. isnan(real(z))) call abort()
78
79z = cmplx(-2.0,-4.0)
80str = '(0.0,-NAN)' ; read(str,*) z
81if (.not. isnan(aimag(z))) call abort()
82
83z = cmplx(-2.0,-4.0)
84str = '(+NAN,0.0)' ; read(str,*) z
85if (.not. isnan(real(z))) call abort()
86
87z = cmplx(-2.0,-4.0)
88str = '(NAN(0x111),0.0)' ; read(str,*) z
89if (.not. isnan(real(z))) call abort()
90
91z = cmplx(-2.0,-4.0)
92str = '(0.0,-NaN(123))' ; read(str,*) z
93if (.not. isnan(aimag(z))) call abort()
94
95z = cmplx(-2.0,-4.0)
96str = '(+nan(0xFFE),0.0)' ; read(str,*) z
97if (.not. isnan(real(z))) call abort()
98
99end
100