view gcc/testsuite/gfortran.dg/random_3.f90 @ 131:84e7813d76e9

gcc-8.2
author mir3636
date Thu, 25 Oct 2018 07:37:49 +0900
parents 04ced10e8804
children
line wrap: on
line source

! { dg-do run }
! { dg-require-effective-target fortran_large_real }
! Check that the random_seed for real(10) exists and that
! real(8) and real(10) random number generators
! return the same sequence of values.
! Mostly copied from random_2.f90
program random_3
  integer,parameter :: k = selected_real_kind (precision (0.0_8) + 1)

  integer, dimension(:), allocatable :: seed
  real(kind=8), dimension(10) :: r8
  real(kind=k), dimension(10) :: r10
  real, parameter :: delta = 1.d-10
  integer n

  ! Run the test only if real(10) is available. With the current
  ! xorshift1024* PRNG the real(16) generator uses two uint64_t values
  ! for every real(16) value generated, and hence the sequences won't
  ! be the same as with real(4,8,10).
  if (k == 10) then
     call random_seed (size=n)
     allocate (seed(n))
     call random_seed (get=seed)
     ! Test both array valued and scalar routines.
     call random_number(r8)
     call random_number (r8(10))

     ! Reset the seed and get the real(8) values.
     call random_seed (put=seed)
     call random_number(r10)
     call random_number (r10(10))

     if (any ((r8 - r10) .gt. delta)) STOP 1
  end if
end program random_3