3 ! Test various exponentations
4 ! initially designed for patch to PR31120
7 call run_me (1.0, 1, (1.0,0.0))
8 call run_me (-1.1, -1, (0.0,-1.0))
9 call run_me (42.0, 12, (1.0,7.0))
12 ! This subroutine is for runtime tests
13 subroutine run_me(a, i, z)
17 integer, intent(in) :: i
18 complex, intent(in) :: z
20 call check_equal_i (i**0, 1)
21 call check_equal_i (i**1, i)
22 call check_equal_i (i**2, i*i)
23 call check_equal_i (i**3, i*(i**2))
25 call check_equal_i (int(i**0_8,kind=4), 1)
26 call check_equal_i (int(i**1_8,kind=4), i)
27 call check_equal_i (int(i**2_8,kind=4), i*i)
28 call check_equal_i (int(i**3_8,kind=4), i*i*i)
30 call check_equal_r (a**0.0, 1.0)
31 call check_equal_r (a**1.0, a)
32 call check_equal_r (a**2.0, a*a)
33 call check_equal_r (a**3.0, a*(a**2))
34 call check_equal_r (a**-1.0, 1/a)
35 call check_equal_r (a**-2.0, (1/a)*(1/a))
37 call check_equal_r (a**0, 1.0)
38 call check_equal_r (a**1, a)
39 call check_equal_r (a**2, a*a)
40 call check_equal_r (a**3, a*(a**2))
41 call check_equal_r (a**-1, 1/a)
42 call check_equal_r (a**-2, (1/a)*(1/a))
44 call check_equal_r (a**0_8, 1.0)
45 call check_equal_r (a**1_8, a)
46 call check_equal_r (a**2_8, a*a)
47 call check_equal_r (a**3_8, a*(a**2))
48 call check_equal_r (a**-1_8, 1/a)
49 call check_equal_r (a**-2_8, (1/a)*(1/a))
51 call check_equal_c (z**0.0, (1.0,0.0))
52 call check_equal_c (z**1.0, z)
53 call check_equal_c (z**2.0, z*z)
54 call check_equal_c (z**3.0, z*(z**2))
55 call check_equal_c (z**-1.0, 1/z)
56 call check_equal_c (z**-2.0, (1/z)*(1/z))
58 call check_equal_c (z**(0.0,0.0), (1.0,0.0))
59 call check_equal_c (z**(1.0,0.0), z)
60 call check_equal_c (z**(2.0,0.0), z*z)
61 call check_equal_c (z**(3.0,0.0), z*(z**2))
62 call check_equal_c (z**(-1.0,0.0), 1/z)
63 call check_equal_c (z**(-2.0,0.0), (1/z)*(1/z))
65 call check_equal_c (z**0, (1.0,0.0))
66 call check_equal_c (z**1, z)
67 call check_equal_c (z**2, z*z)
68 call check_equal_c (z**3, z*(z**2))
69 call check_equal_c (z**-1, 1/z)
70 call check_equal_c (z**-2, (1/z)*(1/z))
72 call check_equal_c (z**0_8, (1.0,0.0))
73 call check_equal_c (z**1_8, z)
74 call check_equal_c (z**2_8, z*z)
75 call check_equal_c (z**3_8, z*(z**2))
76 call check_equal_c (z**-1_8, 1/z)
77 call check_equal_c (z**-2_8, (1/z)*(1/z))
82 subroutine check_equal_r (a, b)
83 real, intent(in) :: a, b
84 if (abs(a - b) > 1.e-5 * abs(b)) call abort
85 end subroutine check_equal_r
87 subroutine check_equal_c (a, b)
88 complex, intent(in) :: a, b
89 if (abs(a - b) > 1.e-5 * abs(b)) call abort
90 end subroutine check_equal_c
92 subroutine check_equal_i (a, b)
93 integer, intent(in) :: a, b
94 if (a /= b) call abort
95 end subroutine check_equal_i
99 ! subroutine foo is used for compilation test only
103 real, intent(in) :: a
115 call gee_i(i**huge(0_1))
116 call gee_i(i**-huge(0_1))
117 call gee_i(i**(-huge(0_1)-1_1))
126 call gee_i(i**huge(0_2))
127 call gee_i(i**-huge(0_2))
128 call gee_i(i**(-huge(0_2)-1_2))
137 call gee_i(i**huge(0_4))
138 call gee_i(i**-huge(0_4))
139 call gee_i(i**(-huge(0_4)-1_4))
148 call gee_i(i**huge(0_8))
149 call gee_i(i**-huge(0_8))
150 call gee_i(i**(-huge(0_8)-1_8))
160 call gee_r(a**huge(0_1))
161 call gee_r(a**-huge(0_1))
162 call gee_r(a**(-huge(0_1)-1_1))
171 call gee_r(a**huge(0_2))
172 call gee_r(a**-huge(0_2))
173 call gee_r(a**(-huge(0_2)-1_2))
182 call gee_r(a**huge(0_4))
183 call gee_r(a**-huge(0_4))
184 call gee_r(a**(-huge(0_4)-1_4))
193 call gee_r(a**huge(0_8))
194 call gee_r(a**-huge(0_8))
195 call gee_r(a**(-huge(0_8)-1_8))
205 call gee_z(z**huge(0_1))
206 call gee_z(z**-huge(0_1))
207 call gee_z(z**(-huge(0_1)-1_1))
216 call gee_z(z**huge(0_2))
217 call gee_z(z**-huge(0_2))
218 call gee_z(z**(-huge(0_2)-1_2))
227 call gee_z(z**huge(0_4))
228 call gee_z(z**-huge(0_4))
229 call gee_z(z**(-huge(0_4)-1_4))
238 call gee_z(z**huge(0_8))
239 call gee_z(z**-huge(0_8))
240 call gee_z(z**(-huge(0_8)-1_8))