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