|
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
|