2 ! { dg-options "-fno-range-check -pedantic" }
3 ! { dg-add-options ieee }
4 ! { dg-skip-if "NaN not supported" { spu-*-* } }
8 ! Check that (NaN /= NaN) == .TRUE.
9 ! and some other NaN options.
11 ! Contrary to nan_1.f90, PARAMETERs are used and thus
12 ! the front end resolves the min, max and binary operators at
18 module procedure isinf_r
19 module procedure isinf_d
22 pure
function isinf_r(x
) result (isinf
)
26 isinf
= (x
> huge(x
)) .or
. (x
< -huge(x
))
29 pure
function isinf_d(x
) result (isinf
)
31 double precision, intent(in
) :: x
33 isinf
= (x
> huge(x
)) .or
. (x
< -huge(x
))
40 real, parameter :: nan
= 0.0/0.0, large
= huge(large
), inf
= 1.0/0.0
42 if (nan
== nan
.or
. nan
> nan
.or
. nan
< nan
.or
. nan
>= nan
&
43 .or
. nan
<= nan
) STOP 1
44 if (isnan (2.d0
) .or
. (.not
. isnan(nan
)) .or
. &
45 (.not
. isnan(real(nan
,kind
=kind(2.d0
))))) STOP 2
47 ! Create an INF and check it
48 if (isinf(nan
) .or
. isinf(large
) .or
. .not
. isinf(inf
)) STOP 3
49 if (isinf(-nan
) .or
. isinf(-large
) .or
. .not
. isinf(-inf
)) STOP 4
51 ! Check that MIN and MAX behave correctly
52 if (max(2.0, nan
) /= 2.0) STOP 5
53 if (min(2.0, nan
) /= 2.0) STOP 6
54 if (max(nan
, 2.0) /= 2.0) STOP 7
55 if (min(nan
, 2.0) /= 2.0) STOP 8
57 if (max(2.d0
, nan
) /= 2.d0
) STOP 9! { dg-warning "Extension: Different type kinds" }
58 if (min(2.d0
, nan
) /= 2.d0
) STOP 10! { dg-warning "Extension: Different type kinds" }
59 if (max(nan
, 2.d0
) /= 2.d0
) STOP 11! { dg-warning "Extension: Different type kinds" }
60 if (min(nan
, 2.d0
) /= 2.d0
) STOP 12! { dg-warning "Extension: Different type kinds" }
62 if (.not
. isnan(min(nan
,nan
))) STOP 13
63 if (.not
. isnan(max(nan
,nan
))) STOP 14
65 ! Same thing, with more arguments
67 if (max(3.0, 2.0, nan
) /= 3.0) STOP 15
68 if (min(3.0, 2.0, nan
) /= 2.0) STOP 16
69 if (max(3.0, nan
, 2.0) /= 3.0) STOP 17
70 if (min(3.0, nan
, 2.0) /= 2.0) STOP 18
71 if (max(nan
, 3.0, 2.0) /= 3.0) STOP 19
72 if (min(nan
, 3.0, 2.0) /= 2.0) STOP 20
74 if (max(3.d0
, 2.d0
, nan
) /= 3.d0
) STOP 21! { dg-warning "Extension: Different type kinds" }
75 if (min(3.d0
, 2.d0
, nan
) /= 2.d0
) STOP 22! { dg-warning "Extension: Different type kinds" }
76 if (max(3.d0
, nan
, 2.d0
) /= 3.d0
) STOP 23! { dg-warning "Extension: Different type kinds" }
77 if (min(3.d0
, nan
, 2.d0
) /= 2.d0
) STOP 24! { dg-warning "Extension: Different type kinds" }
78 if (max(nan
, 3.d0
, 2.d0
) /= 3.d0
) STOP 25! { dg-warning "Extension: Different type kinds" }
79 if (min(nan
, 3.d0
, 2.d0
) /= 2.d0
) STOP 26! { dg-warning "Extension: Different type kinds" }
81 if (.not
. isnan(min(nan
,nan
,nan
))) STOP 27
82 if (.not
. isnan(max(nan
,nan
,nan
))) STOP 28
83 if (.not
. isnan(min(nan
,nan
,nan
,nan
))) STOP 29
84 if (.not
. isnan(max(nan
,nan
,nan
,nan
))) STOP 30
85 if (.not
. isnan(min(nan
,nan
,nan
,nan
,nan
))) STOP 31
86 if (.not
. isnan(max(nan
,nan
,nan
,nan
,nan
))) STOP 32
88 ! Large values, INF and NaNs
89 if (.not
. isinf(max(large
, inf
))) STOP 33
90 if (isinf(min(large
, inf
))) STOP 34
91 if (.not
. isinf(max(nan
, large
, inf
))) STOP 35
92 if (isinf(min(nan
, large
, inf
))) STOP 36
93 if (.not
. isinf(max(large
, nan
, inf
))) STOP 37
94 if (isinf(min(large
, nan
, inf
))) STOP 38
95 if (.not
. isinf(max(large
, inf
, nan
))) STOP 39
96 if (isinf(min(large
, inf
, nan
))) STOP 40
98 if (.not
. isinf(min(-large
, -inf
))) STOP 41
99 if (isinf(max(-large
, -inf
))) STOP 42
100 if (.not
. isinf(min(nan
, -large
, -inf
))) STOP 43
101 if (isinf(max(nan
, -large
, -inf
))) STOP 44
102 if (.not
. isinf(min(-large
, nan
, -inf
))) STOP 45
103 if (isinf(max(-large
, nan
, -inf
))) STOP 46
104 if (.not
. isinf(min(-large
, -inf
, nan
))) STOP 47
105 if (isinf(max(-large
, -inf
, nan
))) STOP 48