blob: 42387f8387eca34bfad2b5ac75e3de136ad1373d [file] [log] [blame]
! { dg-do run }
!
! CO_BROADCAST
!
program test
implicit none
intrinsic co_broadcast
type t
integer :: i
character(len=1) :: c
real(8) :: x(3), y(3)
end type t
integer :: i, j(10), stat
complex :: a(5,5)
character(kind=1, len=5) :: str1, errstr
character(kind=4, len=8) :: str2(2)
type(t) :: dt(4)
i = 1
j = 55
a = 99.0
str1 = 1_"XXXXX"
str2 = 4_"YYYYYYYY"
dt = t(1, 'C', [1.,2.,3.], [3,3,3])
errstr = "ZZZZZ"
if (this_image() == num_images()) then
i = 2
j = 66
a = -99.0
str1 = 1_"abcd"
str2 = 4_"12 3 4 5"
dt = t(-1, 'a', [3.,1.,8.], [99,24,5])
end if
sync all
call co_broadcast(i, source_image=num_images(), stat=stat, errmsg=errstr)
if (stat /= 0) STOP 1
if (errstr /= "ZZZZZ") STOP 2
if (i /= 2) STOP 3
call co_broadcast(j, source_image=num_images(), stat=stat, errmsg=errstr)
if (stat /= 0) STOP 4
if (errstr /= "ZZZZZ") STOP 5
if (any (j /= 66)) STOP 1
call co_broadcast(a, source_image=num_images(), stat=stat, errmsg=errstr)
if (stat /= 0) STOP 6
if (errstr /= "ZZZZZ") STOP 7
if (any (a /= -99.0)) STOP 2
call co_broadcast(str1, source_image=num_images(), stat=stat, errmsg=errstr)
if (stat /= 0) STOP 8
if (errstr /= "ZZZZZ") STOP 9
if (str1 /= "abcd") STOP 10
call co_broadcast(str2, source_image=num_images(), stat=stat, errmsg=errstr)
if (stat /= 0) STOP 11
if (errstr /= "ZZZZZ") STOP 12
if (any (str2 /= 4_"12 3 4 5")) STOP 3
call co_broadcast(dt, source_image=num_images(), stat=stat, errmsg=errstr)
if (stat /= 0) STOP 13
if (errstr /= "ZZZZZ") STOP 14
if (any (dt(:)%i /= -1)) STOP 15
if (any (dt(:)%c /= 'a')) STOP 16
if (any (dt(:)%x(1) /= 3.)) STOP 17
if (any (dt(:)%x(2) /= 1.)) STOP 18
if (any (dt(:)%x(3) /= 8.)) STOP 19
if (any (dt(:)%y(1) /= 99.)) STOP 20
if (any (dt(:)%y(2) /= 24.)) STOP 21
if (any (dt(:)%y(3) /= 5.)) STOP 22
sync all
dt = t(1, 'C', [1.,2.,3.], [3,3,3])
sync all
if (this_image() == num_images()) then
str2 = 4_"001122"
dt(2:4) = t(-2, 'i', [9.,2.,3.], [4,44,321])
end if
call co_broadcast(str2(::2), source_image=num_images(), stat=stat, &
errmsg=errstr)
if (stat /= 0) STOP 23
if (errstr /= "ZZZZZ") STOP 24
if (str2(1) /= 4_"001122") STOP 25
if (this_image() == num_images()) then
if (str2(1) /= 4_"001122") STOP 26
else
if (str2(2) /= 4_"12 3 4 5") STOP 27
end if
call co_broadcast(dt(2::2), source_image=num_images(), stat=stat, &
errmsg=errstr)
if (stat /= 0) STOP 28
if (errstr /= "ZZZZZ") STOP 29
if (this_image() == num_images()) then
if (any (dt(1:1)%i /= 1)) STOP 30
if (any (dt(1:1)%c /= 'C')) STOP 31
if (any (dt(1:1)%x(1) /= 1.)) STOP 32
if (any (dt(1:1)%x(2) /= 2.)) STOP 33
if (any (dt(1:1)%x(3) /= 3.)) STOP 34
if (any (dt(1:1)%y(1) /= 3.)) STOP 35
if (any (dt(1:1)%y(2) /= 3.)) STOP 36
if (any (dt(1:1)%y(3) /= 3.)) STOP 37
if (any (dt(2:)%i /= -2)) STOP 38
if (any (dt(2:)%c /= 'i')) STOP 39
if (any (dt(2:)%x(1) /= 9.)) STOP 40
if (any (dt(2:)%x(2) /= 2.)) STOP 41
if (any (dt(2:)%x(3) /= 3.)) STOP 42
if (any (dt(2:)%y(1) /= 4.)) STOP 43
if (any (dt(2:)%y(2) /= 44.)) STOP 44
if (any (dt(2:)%y(3) /= 321.)) STOP 45
else
if (any (dt(1::2)%i /= 1)) STOP 46
if (any (dt(1::2)%c /= 'C')) STOP 47
if (any (dt(1::2)%x(1) /= 1.)) STOP 48
if (any (dt(1::2)%x(2) /= 2.)) STOP 49
if (any (dt(1::2)%x(3) /= 3.)) STOP 50
if (any (dt(1::2)%y(1) /= 3.)) STOP 51
if (any (dt(1::2)%y(2) /= 3.)) STOP 52
if (any (dt(1::2)%y(3) /= 3.)) STOP 53
if (any (dt(2::2)%i /= -2)) STOP 54
if (any (dt(2::2)%c /= 'i')) STOP 55
if (any (dt(2::2)%x(1) /= 9.)) STOP 56
if (any (dt(2::2)%x(2) /= 2.)) STOP 57
if (any (dt(2::2)%x(3) /= 3.)) STOP 58
if (any (dt(2::2)%y(1) /= 4.)) STOP 59
if (any (dt(2::2)%y(2) /= 44.)) STOP 60
if (any (dt(2::2)%y(3) /= 321.)) STOP 61
endif
end program test