Blame test/mpi/f90/info/infotest2f90.f90

Packit 0848f5
! This file created from test/mpi/f77/info/infotest2f.f with f77tof90
Packit 0848f5
! -*- Mode: Fortran; -*- 
Packit 0848f5
!
Packit 0848f5
!  (C) 2003 by Argonne National Laboratory.
Packit 0848f5
!      See COPYRIGHT in top-level directory.
Packit 0848f5
!
Packit 0848f5
      program main
Packit 0848f5
      use mpi
Packit 0848f5
      integer ierr, errs
Packit 0848f5
      integer i1, i2
Packit 0848f5
      integer nkeys, i, j, sumindex, vlen, ln, valuelen
Packit 0848f5
      logical found, flag
Packit 0848f5
      character*(MPI_MAX_INFO_KEY) keys(6)
Packit 0848f5
      character*(MPI_MAX_INFO_VAL) values(6)
Packit 0848f5
      character*(MPI_MAX_INFO_KEY) mykey
Packit 0848f5
      character*(MPI_MAX_INFO_VAL) myvalue
Packit 0848f5
!
Packit 0848f5
      data keys/"Key1", "key2", "KeY3", "A Key With Blanks","See Below", &
Packit 0848f5
      &          "last"/
Packit 0848f5
      data values/"value 1", "value 2", "VaLue 3", "key=valu:3","false", &
Packit 0848f5
      &            "no test"/
Packit 0848f5
!
Packit 0848f5
      errs = 0
Packit 0848f5
Packit 0848f5
      call mtest_init( ierr )
Packit 0848f5
      
Packit 0848f5
! Note that the MPI standard requires that leading an trailing blanks
Packit 0848f5
! are stripped from keys and values (Section 4.10, The Info Object)
Packit 0848f5
!
Packit 0848f5
! First, create and initialize an info
Packit 0848f5
      call mpi_info_create( i1, ierr )
Packit 0848f5
      call mpi_info_set( i1, keys(1), values(1), ierr )
Packit 0848f5
      call mpi_info_set( i1, keys(2), values(2), ierr )
Packit 0848f5
      call mpi_info_set( i1, keys(3), values(3), ierr )
Packit 0848f5
      call mpi_info_set( i1, keys(4), values(4), ierr )
Packit 0848f5
      call mpi_info_set( i1, " See Below", values(5), ierr )
Packit 0848f5
      call mpi_info_set( i1, keys(6), " no test ", ierr )
Packit 0848f5
!
Packit 0848f5
      call mpi_info_get_nkeys( i1, nkeys, ierr )
Packit 0848f5
      if (nkeys .ne. 6) then
Packit 0848f5
         print *, ' Number of keys should be 6, is ', nkeys
Packit 0848f5
      endif
Packit 0848f5
      sumindex = 0
Packit 0848f5
      do i=1, nkeys
Packit 0848f5
!        keys are number from 0 to n-1, even in Fortran (Section 4.10)
Packit 0848f5
         call mpi_info_get_nthkey( i1, i-1, mykey, ierr )
Packit 0848f5
         found = .false.
Packit 0848f5
         do j=1, 6
Packit 0848f5
            if (mykey .eq. keys(j)) then
Packit 0848f5
               found = .true.
Packit 0848f5
               sumindex = sumindex + j
Packit 0848f5
               call mpi_info_get_valuelen( i1, mykey, vlen, flag, ierr )
Packit 0848f5
               if (.not.flag) then
Packit 0848f5
                  errs = errs + 1
Packit 0848f5
                  print *, ' no value for key', mykey
Packit 0848f5
               else
Packit 0848f5
                  call mpi_info_get( i1, mykey, MPI_MAX_INFO_VAL, &
Packit 0848f5
      &                               myvalue, flag, ierr )
Packit 0848f5
                  if (myvalue .ne. values(j)) then
Packit 0848f5
                     errs = errs + 1
Packit 0848f5
                     print *, ' Value for ', mykey, ' not expected'
Packit 0848f5
                  else
Packit 0848f5
                     do ln=MPI_MAX_INFO_VAL,1,-1
Packit 0848f5
                        if (myvalue(ln:ln) .ne. ' ') then
Packit 0848f5
                           if (vlen .ne. ln) then
Packit 0848f5
                              errs = errs + 1
Packit 0848f5
                              print *, ' length is ', ln,  &
Packit 0848f5
      &                          ' but valuelen gave ',  vlen,  &
Packit 0848f5
      &                          ' for key ', mykey
Packit 0848f5
                           endif
Packit 0848f5
                           goto 100
Packit 0848f5
                        endif
Packit 0848f5
                     enddo
Packit 0848f5
 100                 continue
Packit 0848f5
                  endif
Packit 0848f5
               endif
Packit 0848f5
            endif
Packit 0848f5
         enddo
Packit 0848f5
         if (.not.found) then
Packit 0848f5
            print *, i, 'th key ', mykey, ' not in list'
Packit 0848f5
         endif
Packit 0848f5
      enddo
Packit 0848f5
      if (sumindex .ne. 21) then
Packit 0848f5
         errs = errs + 1
Packit 0848f5
         print *, ' Not all keys found'
Packit 0848f5
      endif
Packit 0848f5
!
Packit 0848f5
! delete 2, then dup, then delete 2 more
Packit 0848f5
      call mpi_info_delete( i1, keys(1), ierr )
Packit 0848f5
      call mpi_info_delete( i1, keys(2), ierr )
Packit 0848f5
      call mpi_info_dup( i1, i2, ierr )
Packit 0848f5
      call mpi_info_delete( i1, keys(3), ierr )
Packit 0848f5
!
Packit 0848f5
! check the contents of i2
Packit 0848f5
! valuelen does not signal an error for unknown keys; instead, sets
Packit 0848f5
! flag to false
Packit 0848f5
      do i=1,2
Packit 0848f5
         flag = .true.
Packit 0848f5
         call mpi_info_get_valuelen( i2, keys(i), valuelen, flag, ierr )
Packit 0848f5
         if (flag) then
Packit 0848f5
            errs = errs + 1
Packit 0848f5
            print *, ' Found unexpected key ', keys(i)
Packit 0848f5
         endif
Packit 0848f5
         myvalue = 'A test'
Packit 0848f5
         call mpi_info_get( i2, keys(i), MPI_MAX_INFO_VAL,  &
Packit 0848f5
      &                      myvalue, flag, ierr )
Packit 0848f5
         if (flag) then
Packit 0848f5
            errs = errs + 1
Packit 0848f5
            print *, ' Found unexpected key in MPI_Info_get ', keys(i)
Packit 0848f5
         else 
Packit 0848f5
            if (myvalue .ne. 'A test') then
Packit 0848f5
               errs = errs + 1
Packit 0848f5
               print *, ' Returned value overwritten, is now ', myvalue
Packit 0848f5
            endif
Packit 0848f5
         endif
Packit 0848f5
         
Packit 0848f5
      enddo
Packit 0848f5
      do i=3,6
Packit 0848f5
         myvalue = ' '
Packit 0848f5
         call mpi_info_get( i2, keys(i), MPI_MAX_INFO_VAL,  &
Packit 0848f5
      &                      myvalue, flag, ierr )
Packit 0848f5
         if (.not. flag) then
Packit 0848f5
             errs = errs + 1
Packit 0848f5
             print *, ' Did not find key ', keys(i)
Packit 0848f5
         else 
Packit 0848f5
            if (myvalue .ne. values(i)) then
Packit 0848f5
               errs = errs + 1
Packit 0848f5
               print *, ' Found wrong value (', myvalue, ') for key ',  &
Packit 0848f5
      &                  keys(i)
Packit 0848f5
            endif
Packit 0848f5
         endif
Packit 0848f5
      enddo
Packit 0848f5
!
Packit 0848f5
!     Free info
Packit 0848f5
      call mpi_info_free( i1, ierr )
Packit 0848f5
      call mpi_info_free( i2, ierr )
Packit 0848f5
Packit 0848f5
      call mtest_finalize( errs )
Packit 0848f5
      call mpi_finalize( ierr )
Packit 0848f5
Packit 0848f5
      end