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