comparison gcc/testsuite/gfortran.dg/char_eoshift_2.f90 @ 111:04ced10e8804

gcc 7
author kono
date Fri, 27 Oct 2017 22:46:09 +0900
parents
children 84e7813d76e9
comparison
equal deleted inserted replaced
68:561a7518be6b 111:04ced10e8804
1 ! Test eoshift1 for character arrays.
2 ! { dg-do run }
3 program main
4 implicit none
5 integer, parameter :: n1 = 2, n2 = 5, n3 = 4, slen = 3
6 character (len = slen), dimension (n1, n2, n3) :: a
7 character (len = slen) :: filler
8 integer (kind = 1), dimension (n1, n3) :: shift1
9 integer (kind = 2), dimension (n1, n3) :: shift2
10 integer (kind = 4), dimension (n1, n3) :: shift3
11 integer (kind = 8), dimension (n1, n3) :: shift4
12 integer :: i1, i2, i3
13
14 shift1 (1, :) = (/ 1, 3, 2, 2 /)
15 shift1 (2, :) = (/ 2, 1, 1, 3 /)
16 shift2 = shift1
17 shift3 = shift1
18 shift4 = shift1
19
20 do i3 = 1, n3
21 do i2 = 1, n2
22 do i1 = 1, n1
23 a (i1, i2, i3) = 'ab'(i1:i1) // 'cdefg'(i2:i2) // 'hijk'(i3:i3)
24 end do
25 end do
26 end do
27
28 call test (eoshift (a, shift1, 'foo', 2), 'foo')
29 call test (eoshift (a, shift2, 'foo', 2), 'foo')
30 call test (eoshift (a, shift3, 'foo', 2), 'foo')
31 call test (eoshift (a, shift4, 'foo', 2), 'foo')
32
33 filler = ''
34 call test (eoshift (a, shift1, dim = 2), filler)
35 call test (eoshift (a, shift2, dim = 2), filler)
36 call test (eoshift (a, shift3, dim = 2), filler)
37 call test (eoshift (a, shift4, dim = 2), filler)
38 contains
39 subroutine test (b, filler)
40 character (len = slen), dimension (n1, n2, n3) :: b
41 character (len = slen) :: filler
42 integer :: i2p
43
44 do i3 = 1, n3
45 do i2 = 1, n2
46 do i1 = 1, n1
47 i2p = i2 + shift1 (i1, i3)
48 if (i2p .gt. n2) then
49 if (b (i1, i2, i3) .ne. filler) call abort
50 else
51 if (b (i1, i2, i3) .ne. a (i1, i2p, i3)) call abort
52 end if
53 end do
54 end do
55 end do
56 end subroutine test
57 end program main