OSDN Git Service

PR libfortran/20006
[pf3gnuchains/gcc-fork.git] / gcc / testsuite / gfortran.dg / int_1.f90
1 ! { dg-do run }
2 !
3 ! 13.7.53    INT(A [, KIND])
4 !
5 ! Description.  Convert to integer type.
6 ! Class.       Elemental function.
7 ! Arguments.
8 !    A               shall be of type integer, real, or complex,
9 !                    or a boz-literal-constant .
10 !    KIND (optional) shall be a scalar integer initialization expression.
11 !
12 ! Result Characteristics. Integer. If KIND is present, the kind type
13 !    parameter is that specified by the value of KIND; otherwise, the
14 !    kind type parameter is that of default integer type.
15 !
16 ! Result Value.
17 !
18 !    Case (1):  If A is of type integer, INT (A) = A.
19 !
20 !    Case (2):  If A is of type real, there are two cases:
21 !      (a) if |A| < 1, INT (A) has the value 0
22 !      (b) if |A| .ge. 1, INT (A) is the integer whose magnitude is the
23 !          largest integer that does not exceed the magnitude of A and
24 !          whose sign is the same as the sign of A.
25 !
26 !    Case (3):  If A is of type complex, INT(A) = INT(REAL(A, KIND(A))).
27 !
28 !    Case (4):  If A is a boz-literal-constant, it is treated as if it were
29 !               an int-literal-constant with a kind-param that specifies the
30 !               representation method with the largest decimal exponent range
31 !               supported by the processor.
32 !
33 !    Example. INT (­3.7) has the value ­3.
34 !
35 module mykinds
36    integer, parameter :: ik1 = selected_int_kind(2)
37    integer, parameter :: ik2 = selected_int_kind(4)
38    integer, parameter :: ik4 = selected_int_kind(9)
39    integer, parameter :: ik8 = selected_int_kind(18)
40    integer, parameter :: sp = selected_real_kind(6,30)
41    integer, parameter :: dp = selected_real_kind(15,300)
42    integer, parameter :: ck = kind('a')
43 end module mykinds
44
45 program test_int
46
47    use mykinds
48
49    integer(ik1) i1
50    integer(ik2) i2
51    integer(ik4) i4
52    integer(ik8) i8
53    real(sp) r4
54    real(dp) r8
55    complex(sp) c4
56    complex(dp) c8
57    !
58    ! Case 1
59    !
60    i1 = int(-3)
61    i2 = int(-3)
62    i4 = int(-3)
63    i8 = int(-3)
64    if (i1 /= -3_ik1 .or. i2 /= -3_ik2) call abort
65    if (i4 /= -3_ik4 .or. i8 /= -3_ik8) call abort
66
67    i1 = int(5,  ik1)
68    i2 = int(i1, ik2)
69    i4 = int(i1, ik4)
70    i8 = int(i1, ik8)
71    if (i1 /= 5_ik1 .or. i2 /= 5_ik2) call abort
72    if (i4 /= 5_ik4 .or. i8 /= 5_ik8) call abort
73
74    i8 = int(10, ik8)
75    i1 = int(i8, ik1)
76    i2 = int(i8, ik2)
77    i4 = int(i8, ik4)
78    if (i1 /= 10_ik1 .or. i2 /= 10_ik2) call abort
79    if (i4 /= 10_ik4 .or. i8 /= 10_ik8) call abort
80    !
81    ! case 2(b)
82    !
83    r4 = -3.7_sp
84    i1 = int(r4,  ik1)
85    i2 = int(r4, ik2)
86    i4 = int(r4, ik4)
87    i8 = int(r4, ik8)
88    if (i1 /= -3_ik1 .or. i2 /= -3_ik2) call abort
89    if (i4 /= -3_ik4 .or. i8 /= -3_ik8) call abort
90
91    r8 = -3.7_dp
92    i1 = int(r8,  ik1)
93    i2 = int(r8, ik2)
94    i4 = int(r8, ik4)
95    i8 = int(r8, ik8)
96    if (i1 /= -3_ik1 .or. i2 /= -3_ik2) call abort
97    if (i4 /= -3_ik4 .or. i8 /= -3_ik8) call abort
98    !
99    ! Case 2(a)
100    !
101    r4 = -3.7E-1_sp
102    i1 = int(r4, ik1)
103    i2 = int(r4, ik2)
104    i4 = int(r4, ik4)
105    i8 = int(r4, ik8)
106    if (i1 /= 0_ik1 .or. i2 /= 0_ik2) call abort
107    if (i4 /= 0_ik4 .or. i8 /= 0_ik8) call abort
108
109    r8 = -3.7E-1_dp
110    i1 = int(r8, ik1)
111    i2 = int(r8, ik2)
112    i4 = int(r8, ik4)
113    i8 = int(r8, ik8)
114    if (i1 /= 0_ik1 .or. i2 /= 0_ik2) call abort
115    if (i4 /= 0_ik4 .or. i8 /= 0_ik8) call abort
116    !
117    ! Case 3
118    !
119    c4 = (-3.7E-1_sp,3.7E-1_sp)
120    i1 = int(c4, ik1)
121    i2 = int(c4, ik2)
122    i4 = int(c4, ik4)
123    i8 = int(c4, ik8)
124    if (i1 /= 0_ik1 .or. i2 /= 0_ik2) call abort
125    if (i4 /= 0_ik4 .or. i8 /= 0_ik8) call abort
126
127    c8 = (-3.7E-1_dp,3.7E-1_dp)
128    i1 = int(c8, ik1)
129    i2 = int(c8, ik2)
130    i4 = int(c8, ik4)
131    i8 = int(c8, ik8)
132    if (i1 /= 0_ik1 .or. i2 /= 0_ik2) call abort
133    if (i4 /= 0_ik4 .or. i8 /= 0_ik8) call abort
134
135    c4 = (-3.7_sp,3.7_sp)
136    i1 = int(c4, ik1)
137    i2 = int(c4, ik2)
138    i4 = int(c4, ik4)
139    i8 = int(c4, ik8)
140    if (i1 /= -3_ik1 .or. i2 /= -3_ik2) call abort
141    if (i4 /= -3_ik4 .or. i8 /= -3_ik8) call abort
142
143    c8 = (3.7_dp,3.7_dp)
144    i1 = int(c8, ik1)
145    i2 = int(c8, ik2)
146    i4 = int(c8, ik4)
147    i8 = int(c8, ik8)
148    if (i1 /= 3_ik1 .or. i2 /= 3_ik2) call abort
149    if (i4 /= 3_ik4 .or. i8 /= 3_ik8) call abort
150    !
151    ! Case 4
152    !
153    i1 = int(b'0011', ik1)
154    i2 = int(b'0011', ik2)
155    i4 = int(b'0011', ik4)
156    i8 = int(b'0011', ik8)
157    if (i1 /= 3_ik1 .or. i2 /= 3_ik2) call abort
158    if (i4 /= 3_ik4 .or. i8 /= 3_ik8) call abort
159    i1 = int(o'0011', ik1)
160    i2 = int(o'0011', ik2)
161    i4 = int(o'0011', ik4)
162    i8 = int(o'0011', ik8)
163    if (i1 /= 9_ik1 .or. i2 /= 9_ik2) call abort
164    if (i4 /= 9_ik4 .or. i8 /= 9_ik8) call abort
165    i1 = int(z'0011', ik1)
166    i2 = int(z'0011', ik2)
167    i4 = int(z'0011', ik4)
168    i8 = int(z'0011', ik8)
169    if (i1 /= 17_ik1 .or. i2 /= 17_ik2) call abort
170    if (i4 /= 17_ik4 .or. i8 /= 17_ik8) call abort
171    
172 end program test_int