summaryrefslogtreecommitdiff
path: root/gcc/testsuite/gfortran.dg
diff options
context:
space:
mode:
authorburnus <burnus@138bc75d-0d04-0410-961f-82ee72b054a4>2010-06-28 20:04:40 +0000
committerburnus <burnus@138bc75d-0d04-0410-961f-82ee72b054a4>2010-06-28 20:04:40 +0000
commite9389957ad71366e7db47450a43ed0d85ffcc610 (patch)
tree6c019cf873b129f993fd59f070c6f6e47c3df1ba /gcc/testsuite/gfortran.dg
parentd3237426929c302bcab9d683353b041667b22488 (diff)
downloadgcc-e9389957ad71366e7db47450a43ed0d85ffcc610.tar.gz
2010-06-28 Tobias Burnus <burnus@net-b.de>
PR fortran/43298 * list_read.c (parse_real, read_real): Support NAN(alphanum). 2010-06-28 Tobias Burnus <burnus@net-b.de> PR fortran/43298 * gfortran.dg/nan_6.f90: New. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@161510 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/testsuite/gfortran.dg')
-rw-r--r--gcc/testsuite/gfortran.dg/nan_6.f9099
1 files changed, 99 insertions, 0 deletions
diff --git a/gcc/testsuite/gfortran.dg/nan_6.f90 b/gcc/testsuite/gfortran.dg/nan_6.f90
new file mode 100644
index 00000000000..8f0af294420
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/nan_6.f90
@@ -0,0 +1,99 @@
+! { dg-do run }
+! { dg-add-options ieee }
+! { dg-skip-if "NaN not supported" { spu-*-* } { "*" } { "" } }
+!
+! List-directed part of PR fortran/43298
+! and follow up to PR fortran/34319.
+!
+! Check handling of "NAN(alphanum)"
+!
+character(len=200) :: str
+real :: r
+complex :: z
+
+! read_real:
+
+r = 1.0
+str = 'INfinity' ; read(str,*) r
+if (r < 0 .or. r /= r*1.1) call abort()
+
+r = 1.0
+str = '-INF' ; read(str,*) r
+if (r > 0 .or. r /= r*1.1) call abort()
+
+r = 1.0
+str = '+INF' ; read(str,*) r
+if (r < 0 .or. r /= r*1.1) call abort()
+
+r = 1.0
+str = '-inFiniTY' ; read(str,*) r
+if (r > 0 .or. r /= r*1.1) call abort()
+
+r = 1.0
+str = 'NAN' ; read(str,*) r
+if (.not. isnan(r)) call abort()
+
+r = 1.0
+str = '-NAN' ; read(str,*) r
+if (.not. isnan(r)) call abort()
+
+r = 1.0
+str = '+NAN' ; read(str,*) r
+if (.not. isnan(r)) call abort()
+
+r = 1.0
+str = 'NAN(0x111)' ; read(str,*) r
+if (.not. isnan(r)) call abort()
+
+r = 1.0
+str = '-NAN(123)' ; read(str,*) r
+if (.not. isnan(r)) call abort()
+
+r = 1.0
+str = '+NAN(0xFFE)' ; read(str,*) r
+if (.not. isnan(r)) call abort()
+
+
+! parse_real
+
+z = cmplx(-2.0,-4.0)
+str = '(0.0,INfinity)' ; read(str,*) z
+if (aimag(z) < 0 .or. aimag(z) /= aimag(z)*1.1) call abort()
+
+z = cmplx(-2.0,-4.0)
+str = '(-INF,0.0)' ; read(str,*) z
+if (real(z) > 0 .or. real(z) /= real(z)*1.1) call abort()
+
+z = cmplx(-2.0,-4.0)
+str = '(0.0,+INF)' ; read(str,*) z
+if (aimag(z) < 0 .or. aimag(z) /= aimag(z)*1.1) call abort()
+
+z = cmplx(-2.0,-4.0)
+str = '(-inFiniTY,0.0)' ; read(str,*) z
+if (real(z) > 0 .or. real(z) /= real(z)*1.1) call abort()
+
+z = cmplx(-2.0,-4.0)
+str = '(NAN,0.0)' ; read(str,*) z
+if (.not. isnan(real(z))) call abort()
+
+z = cmplx(-2.0,-4.0)
+str = '(0.0,-NAN)' ; read(str,*) z
+if (.not. isnan(aimag(z))) call abort()
+
+z = cmplx(-2.0,-4.0)
+str = '(+NAN,0.0)' ; read(str,*) z
+if (.not. isnan(real(z))) call abort()
+
+z = cmplx(-2.0,-4.0)
+str = '(NAN(0x111),0.0)' ; read(str,*) z
+if (.not. isnan(real(z))) call abort()
+
+z = cmplx(-2.0,-4.0)
+str = '(0.0,-NaN(123))' ; read(str,*) z
+if (.not. isnan(aimag(z))) call abort()
+
+z = cmplx(-2.0,-4.0)
+str = '(+nan(0xFFE),0.0)' ; read(str,*) z
+if (.not. isnan(real(z))) call abort()
+
+end