| ! { dg-do run } |
| ! { dg-options "-fcoarray=single" } |
| program rantest |
| |
| implicit none |
| |
| logical, parameter :: debug = .false. |
| character(len=20) name |
| integer fd, i, n |
| integer, allocatable :: n1(:), n2(:), n3(:) |
| real x(4), y(4), z(4) |
| |
| if (debug) then |
| write(name,'(A,I0)') 'dat', this_image() |
| open(newunit=fd, file=name) |
| end if |
| |
| call random_seed(size=n) |
| allocate(n1(n), n2(n), n3(n)) |
| ! |
| ! Setup repeatable sequences (if co-arrays the seeds should be distinct |
| ! are different). Get the seeds. |
| ! |
| call random_init(.true., .true.) |
| call random_seed(get=n1) |
| call random_number(x) ! This changes internal state. |
| if (debug) then |
| write(fd,'(A,4F12.6)') 'x = ', x |
| end if |
| |
| call random_seed(get=n2) ! Grab current state. |
| ! |
| ! Use the gotten seed to reseed PRNG and grab sequence. |
| ! It should be the same sequence. |
| ! |
| call random_seed(put=n1) |
| call random_number(y) |
| if (debug) then |
| write(fd,'(A,4F12.6)') 'y = ', y |
| end if |
| ! |
| ! Setup repeatable sequences (if co-arrays the seeds should be distinct |
| ! are different). Get the seeds. It should be the same sequence. |
| ! |
| call random_init(.true., .true.) |
| call random_seed(get=n3) |
| call random_number(z) |
| if (debug) then |
| write(fd,'(A,4F12.6)') 'z = ', z |
| end if |
| |
| x = int(1e6*x) ! Convert to integer with at most 6 digits. |
| y = int(1e6*y) ! Convert to integer with at most 6 digits. |
| z = int(1e6*z) ! Convert to integer with at most 6 digits. |
| |
| if (any(x /= y)) call abort |
| if (any(x /= z)) call abort |
| |
| if (debug) then |
| write(fd,*) |
| do i = 1, n |
| if (n1(i) - n2(i) /= 0) then |
| write(fd,*) 'n1 /= n2', i, n1(i), n2(i) |
| end if |
| end do |
| write(fd,*) |
| do i = 1, n |
| if (n1(i) - n3(i) /= 0) then |
| write(fd,*) 'n1 /= n3', i, n1(i), n3(i) |
| end if |
| end do |
| end if |
| |
| end program rantest |