C -*- Mode: Fortran; -*- 
C
C  (C) 2003 by Argonne National Laboratory.
C      See COPYRIGHT in top-level directory.
C
      program main
      implicit none
      include 'mpif.h'
      integer value, commsize
      logical flag
      integer ierr, errs

      errs = 0
      call mpi_init( ierr )

      call mpi_comm_size( MPI_COMM_WORLD, commsize, ierr )
      call mpi_attr_get( MPI_COMM_WORLD, MPI_UNIVERSE_SIZE, value, flag
     $     , ierr)
      ! MPI_UNIVERSE_SIZE need not be set
      if (flag) then
         if (value .lt. commsize) then
            print *, "MPI_UNIVERSE_SIZE is ", value, " less than world "
     $           , commsize
            errs = errs + 1
         endif
      endif

      call mpi_attr_get( MPI_COMM_WORLD, MPI_LASTUSEDCODE, value, flag,
     $     ierr )
      ! Last used code must be defined and >= MPI_ERR_LASTCODE 
      if (flag) then
         if (value .lt. MPI_ERR_LASTCODE) then
            errs = errs + 1
            print *, "MPI_LASTUSEDCODE points to an integer
     $           (", value, ") smaller than MPI_ERR_LASTCODE (",
     $           MPI_ERR_LASTCODE, ")"
         endif
      else 
         errs = errs + 1
         print *, "MPI_LASTUSECODE is not defined"
      endif

      call mpi_attr_get( MPI_COMM_WORLD, MPI_APPNUM, value, flag, ierr )
      ! appnum need not be set
      if (flag) then
         if (value .lt. 0) then
            errs = errs + 1
            print *, "MPI_APPNUM is defined as ", value,
     $           " but must be nonnegative"
         endif
      endif

      ! Check for errors
      if (errs .eq. 0) then
         print *, " No Errors"
      else
         print *, " Found ", errs, " errors"
      endif

      call MPI_Finalize( ierr )

      end

