1! { dg-do run { xfail spu-*-* } } 2! FAILs on SPU because of wrong compile-time rounding mode 3! { dg-options "" } 4! { dg-options "-ffloat-store" { target { { i?86-*-* x86_64-*-* } && ilp32 } } } 5! 6! 7module mod_check 8 implicit none 9 10 interface check 11 module procedure check_i8 12 module procedure check_i4 13 module procedure check_r8 14 module procedure check_r4 15 module procedure check_c8 16 module procedure check_c4 17 end interface check 18 19 interface acheck 20 module procedure acheck_c8 21 module procedure acheck_c4 22 end interface acheck 23 24contains 25 26 subroutine check_i8 (a, b) 27 integer(kind=8), intent(in) :: a, b 28 if (a /= b) call abort() 29 end subroutine check_i8 30 31 subroutine check_i4 (a, b) 32 integer(kind=4), intent(in) :: a, b 33 if (a /= b) call abort() 34 end subroutine check_i4 35 36 subroutine check_r8 (a, b) 37 real(kind=8), intent(in) :: a, b 38 if (a /= b) call abort() 39 end subroutine check_r8 40 41 subroutine check_r4 (a, b) 42 real(kind=4), intent(in) :: a, b 43 if (a /= b) call abort() 44 end subroutine check_r4 45 46 subroutine check_c8 (a, b) 47 complex(kind=8), intent(in) :: a, b 48 if (a /= b) call abort() 49 end subroutine check_c8 50 51 subroutine check_c4 (a, b) 52 complex(kind=4), intent(in) :: a, b 53 if (a /= b) call abort() 54 end subroutine check_c4 55 56 subroutine acheck_c8 (a, b) 57 complex(kind=8), intent(in) :: a, b 58 if (abs(a-b) > 1.d-9 * min(abs(a),abs(b))) call abort() 59 end subroutine acheck_c8 60 61 subroutine acheck_c4 (a, b) 62 complex(kind=4), intent(in) :: a, b 63 if (abs(a-b) > 1.e-5 * min(abs(a),abs(b))) call abort() 64 end subroutine acheck_c4 65 66end module mod_check 67 68program test 69 use mod_check 70 implicit none 71 72 integer(kind=4) :: i4 73 integer(kind=8) :: i8 74 real(kind=4) :: r4 75 real(kind=8) :: r8 76 complex(kind=4) :: c4 77 complex(kind=8) :: c8 78 79#define TEST(base,exp,var) var = base; call check((var)**(exp),(base)**(exp)) 80#define ATEST(base,exp,var) var = base; call acheck((var)**(exp),(base)**(exp)) 81 82!!!!! INTEGER BASE !!!!! 83 TEST(0,0,i4) 84 TEST(0_8,0_8,i8) 85 TEST(1,0,i4) 86 TEST(1_8,0_8,i8) 87 TEST(-1,0,i4) 88 TEST(-1_8,0_8,i8) 89 TEST(huge(0_4),0,i4) 90 TEST(huge(0_8),0_8,i8) 91 TEST(-huge(0_4)-1,0,i4) 92 TEST(-huge(0_8)-1_8,0_8,i8) 93 94 TEST(1,1,i4) 95 TEST(1_8,1_8,i8) 96 TEST(1,2,i4) 97 TEST(1_8,2_8,i8) 98 TEST(1,-1,i4) 99 TEST(1_8,-1_8,i8) 100 TEST(1,-2,i4) 101 TEST(1_8,-2_8,i8) 102 TEST(1,huge(0),i4) 103 TEST(1_8,huge(0_8),i8) 104 TEST(1,-huge(0)-1,i4) 105 TEST(1_8,-huge(0_8)-1_8,i8) 106 107 TEST(-1,1,i4) 108 TEST(-1_8,1_8,i8) 109 TEST(-1,2,i4) 110 TEST(-1_8,2_8,i8) 111 TEST(-1,-1,i4) 112 TEST(-1_8,-1_8,i8) 113 TEST(-1,-2,i4) 114 TEST(-1_8,-2_8,i8) 115 TEST(-1,huge(0),i4) 116 TEST(-1_8,huge(0_8),i8) 117 TEST(-1,-huge(0)-1,i4) 118 TEST(-1_8,-huge(0_8)-1_8,i8) 119 120 TEST(2,9,i4) 121 TEST(2_8,9_8,i8) 122 TEST(-2,9,i4) 123 TEST(-2_8,9_8,i8) 124 TEST(2,-9,i4) 125 TEST(2_8,-9_8,i8) 126 TEST(-2,-9,i4) 127 TEST(-2_8,-9_8,i8) 128 129!!!!! REAL BASE !!!!! 130 TEST(0.0,0,r4) 131 TEST(0.0,1,r4) 132 TEST(0.0,huge(0),r4) 133 TEST(0.0,0_8,r4) 134 TEST(0.0,1_8,r4) 135 TEST(0.0,huge(0_8),r4) 136 137 TEST(1.0,0,r4) 138 TEST(1.0,1,r4) 139 TEST(1.0,-1,r4) 140 TEST(1.0,huge(0),r4) 141 TEST(1.0,-huge(0)-1,r4) 142 TEST(1.0,0_8,r4) 143 TEST(1.0,1_8,r4) 144 TEST(1.0,-1_8,r4) 145 TEST(1.0,huge(0_8),r4) 146 TEST(1.0,-huge(0_8)-1_8,r4) 147 148 TEST(-1.0,0,r4) 149 TEST(-1.0,1,r4) 150 TEST(-1.0,-1,r4) 151 TEST(-1.0,huge(0),r4) 152 TEST(-1.0,-huge(0)-1,r4) 153 TEST(-1.0,0_8,r4) 154 TEST(-1.0,1_8,r4) 155 TEST(-1.0,-1_8,r4) 156 TEST(-1.0,huge(0_8),r4) 157 TEST(-1.0,-huge(0_8)-1_8,r4) 158 159 TEST(2.0,0,r4) 160 TEST(2.0,1,r4) 161 TEST(2.0,-1,r4) 162 TEST(2.0,3,r4) 163 TEST(2.0,-3,r4) 164 TEST(2.0,0_8,r4) 165 TEST(2.0,1_8,r4) 166 TEST(2.0,-1_8,r4) 167 TEST(2.0,3_8,r4) 168 TEST(2.0,-3_8,r4) 169 170 TEST(nearest(1.0,-1.0),0,r4) 171 TEST(nearest(1.0,-1.0),huge(0_4),r4) ! { dg-warning "Arithmetic underflow" } 172 TEST(nearest(1.0,-1.0),0_8,r4) 173 TEST(nearest(1.0_8,-1.0),huge(0_8),r8) ! { dg-warning "Arithmetic underflow" } 174 175 TEST(nearest(1.0,-1.0),107,r4) 176 TEST(nearest(1.0,1.0),107,r4) 177 178!!!!! COMPLEX BASE !!!!! 179 TEST((1.0,0.2),0,c4) 180 TEST((1.0,0.2),1,c4) 181 TEST((1.0,0.2),2,c4) 182 ATEST((1.0,0.2),9,c4) 183 ATEST((1.0,0.2),-1,c4) 184 ATEST((1.0,0.2),-2,c4) 185 ATEST((1.0,0.2),-9,c4) 186 187 TEST((0.0,0.2),0,c4) 188 TEST((0.0,0.2),1,c4) 189 TEST((0.0,0.2),2,c4) 190 ATEST((0.0,0.2),9,c4) 191 ATEST((0.0,0.2),-1,c4) 192 ATEST((0.0,0.2),-2,c4) 193 ATEST((0.0,0.2),-9,c4) 194 195 TEST((1.0,0.),0,c4) 196 TEST((1.0,0.),1,c4) 197 TEST((1.0,0.),2,c4) 198 TEST((1.0,0.),9,c4) 199 ATEST((1.0,0.),-1,c4) 200 ATEST((1.0,0.),-2,c4) 201 ATEST((1.0,0.),-9,c4) 202 203end program test 204