Tests to create or code to modify
This list is based on the results of the coverage analysis. Because of errors
in the GNU coverage code (it appears to lose data if two processes
simulateously update the same coverage data file), there may be some
items listed here that are already sufficiently tested.
(completed tests moved below)
6. Collective code:
a) mark off heterogeneous code so that it is not compiled for
homogeneous devices -- partially done
b) make sure that all algorithms are covered: short and long
messages; differing numbers of processes, including non powers
of two. May only need to further divide the Intel tests to
include collective tests for varying numbers of processes.
opband types: logical (f77), unsigned, long, long_long,
unsigned long, short, unsigned short, char, unsigned char,
byte
opbor types: int, unsigned, long, long long, unsigned long, short,
unsigned short, char, unsigned char, byte
opbxor types: int, unsigned, long, long long, unsigned long, short,
unsigned short, char, unsigned char, byte
opland types: logical (f77), integer (f77)
oplor types: logical (f77), integer (f77)
oplxor types: int, unsigned, long, long long, unsigned long,
short, unsigned short, char, unsigned char, float, double,
long double, logical (f77), integer (f77)
opmax types: unsigned, long, long long, unsigned long, short,
unsigned short, char, unsigned char, float, double,
long double
opmaxloc types: (none tested?)
opmin types: (none tested?)
opminloc types: 2int, float_int, long_int, short_int, double_int,
longdouble_int, 2real (f77), 2double_precision (f77)
opprod types: long long, short, unsigned short, char, unsigned char,
long double, double complex
opsum types: unsigned, long, long long, unsigned long, short,
unsigned short, char, unsigned char, float, double,
long double, complex (f77), double complex (f77)
red_scat: differnt alg lengths
reduce: run with non powers of two, both odd and even values
run with root in various places, particularly with non
power of two nodes.
d) Intercommunicator collective tests are needed. These could be
implemented by using the non-collective definition code; e.g.,
the "trivial" implementation in terms of MPI_Send and MPI_Recv.
The tests should use intercomms with both the same and different
sized groups.
Reduce_scatter
Alltoallw
e) Tests for MPI_IN_PLACE are needed
f) Tests for sendcounts of 0 are needed, particularly in the xxxv functions
and in the allxxx functions (e.g., alltoallv for ghostpoint exchange)
7. Set and get name for comm, predefined name MPI_COMM_PARENT.
Also, test *ALL* datatype names.
9. Check the use of error macros in intercomm create and merge; also
consider adding tests that would exercise this code.
10. Datatype info routines: get address (use address test), get count
(for partial datatype; use example from MPI book), get elements
(for partial datatype, done with pack and datatype)
11. pack (see lines 184-208 in pack.c)
12. status_set_elements - combine with get_elements to ensure that the
correct values are set.
13. create_hindexed, create_hvector, and create-struct. These can use
the MPI-1 tests, with the data-types suitably updated. Add these
to the Intel tests. - done for C. Need to do Fortran (needs
Fortran address_kind type)
15. type_extent - check lines 99/100 (in coverage file)
16. type util - make sure that setup of builtins is performed.
16a. Type free, get-extent, true_extent for derived types. Make sure all
allocated space is freed
17a Add tests for comm call errhandler
18. comm set,get errhandler - use MPI-1 versions. Also apply to win, file.
Also user-defined errhandlers. Make sure references work correctly (e.g.,
if freed while still in communicator, or freed after communicator is
freed).
19. errutil.c - make sure MPIR_Err_preinit protected in error macros.
Test by compiling with error checking off, then check symbol
table of library
20. (win set/get/call errhandler) - see 18
22. Ensure group diff error checks are error macro protected
24. group intersection error check ; group union error check
26. ensure that attributes on comm self are freed in
the correct order by MPI_Finalize (see MPI-2 spec; comm_self is
freed FIRST, then the order is undefined). In particular, MPI_Finalized
returns false in the comm_self attribute delete functions.
27. Add tests for finalized, initthread, ismain, querythread, version
-- all but finalized and ismain from another thread
29. Add tests for generalized requests, including cancelling a generalized
request.
30. Add tests for Request_free for regular send or receive requests.
34. Topology tests:
graph-create - n == 0
topoutil - see line 92+; add test (dup communicator with topology)
35. Ixsend to self.
If thread multiple, all MPI_Issend, MPI_Ssend to self, with no posted
receive when send initiated.
38. Add tests for all RMA (get, put, accumulate,
win_complete, win_test, win_lock, win_unlock, win_post, win_start,
win_wait)
39. Add tests for dynamic processes
open_port, close_port, accept, connect, spawn, spawn multiple
40. Add tests for all of MPI-IO not already covered.
(These may now be covered by the John May test)
These include the routines in the files (entire file if no notes on that
file):
open.c (a few lines, including if(!rank)ADIO_Set_shared_fp
filenames with filesystem, e.g., nfs:name
Open in APPEND mode
delete.c
filenames with filesystem
get_view.c (roughly lines 99ff, at Type_contiguous)
set_view.c (for MPI_DISPLACEMENT_CURRENT)
set_info.c
seek_sh.c (for MPI_SEEK_CUR)
read_sh/write_sh
atomicity && file system NOT NFS
41. Delete/free attributes on datatypes, windows; Fortran versions (to
get int instead of pointer-to-int)
42. Keyval free (F90 and C++)
43. Type create indexed block
44. Type create resized
45. User-defined error handler invoked:
a. On comm from Fortran on communicator
b. On win from C++ and Fortran
46. Error output strings involving:
a. MPI_MODE_NOSTORE errors
b. MPI_MODE_NOCHECK errors
c. MPI_MODE_NOPUT errors
d. MPI_MODE_NOSUCCEED errors
e. MPI_MODE_NOPRECEED errors
f. Unknown assert value in window mode (as above)
g. Datatype = 0x0
h. MPI_Op = MPI_REPLACE
i. MPI_UNDEFINED
j. MPI_IN_PLACE
k. MPI_FILE_NULL
l. MPI_WIN_NULL
m. MPI_REQUEST_NULL
o. MPI_Count output (Note dangerous and improper assert! in errutil.c!)
47. Use of "CombineSpecificCodes" (static in file); MPIR_Err_combine_codes
Also,
Replace the calls to MPIR_Group_release in Finalize with
MPIR_Process.group_release, and set the pointer to this routine when
the group code is used.
--- DONE ---
1. Free keyvals, while in use in a communicator and while not in use
2. User copy and delete functions on keyvals
a) Also check error return on attribute copy during comm dup. This
should be a recoverable error.
3. Check all 7 predefined attributes on comm world
4. Set multiple attributes, in various orders (to ensure that all
branches of the insert-into-list of keyvals code are exercised).
5. Perform attribute tests with comm, type, win (same code?)
6. Collective tests:
b. Misc
opland types: long long, char, unsigned char, float, double,
long double
oplor types: long long, char, unsigned char, float, double,
long double
bcast: non contig input type (e.g., broadcast a vector).
bcast: long messages
alltoall: long messages are not covered
c) Need tests for Alltoallw, Exscan.
d. Intercomm collective
bcast
reduce
allreduce
allgather
Gatherv
Scatterv
Allgatherv
Alltoall
Alltoallv
Barrier
7. Set and get name for comm, type, win. Check predefined names.
8. dup an intercommunicator (context generation in commutil);
also check the handling of attributes after the dup.
- dup done, still need to check attribute handling - done
8a) Get group of an intercommunicator
14. type_dup. Apply to both predefined and user defined types.
(Should be done; see fkeyvaltype)
17. Add tests for add-error-class, code, string; -- done
21. Ensure group compare unequal (line 142--145 in source) are tested;
this is for groups of the same size but with different processes -- done
23. group incl with empty group as output (n == 0)
25. groupdebug.c - use debug macro marker for debug routine (and do
not compile unless enable-g=something is set).
28. bsendutil.c - construct tests to ensure that all branches are
tested. For example, arrange for different completion orders for
entries added to the buffer (e.g., use send but then do the
receives in a particular order, and make the data large enough to
trigger rendezvous sending in the internal Isend). - test added (need
to test against the coverage tests)
31. request_get_status; can be tested as if MPI_Test, but does not free
the request (really a nondestructive MPI_Test) (also see 29.)
32. For testall, testsome, waitall, and waitsome. Add tests that
trigger the MPI_ERR_IN_STATUS, by using MPI_ERR_TRUNCATE for
receives. -- done for all four.
33. Add tests for lookup/publish/unpublish. use host:port values as
port name. -- done
34. Topology tests:
cart-map - newrank undefined - done
cart-shift - displ == 0 - done
cart-sub - remove all dimensions - done
dims-create - see code FIXME (-done-maybe)
graph_map - newrank undefined - done
topotest - undefined - done
36. Add tests for info delete, dup, getvaluelen. Add enough tests to
check insert at beginning, middle, end. -- all done
37. Add tests for info set that replaces an existing value. -- done
38. Add tests for all RMA (alloc mem, free mem, (get, put, accumulate)-
with win_fence,
win_create, win_free, win_get_group,
win_get_name, win_set_name,
40. Add tests for all of MPI-IO not already covered.
Most of these were be covered by the John May test.
These include the routines in the files (entire file if no notes on that
file):
get_posn_sh.c
iotest.c
iread_sh.c
iwrite_sh.c
open.c (a few lines, including if(!rank)ADIO_Set_shared_fp
rd_atallb.c
rd_atalle.c
read_at.c (at "convert count and offset to bytes")
read_ord.c
read_ordb.c
read_sh.c (for ADIO_ReadStrided)
seek.c (for MPI_SEEK_SET)
seek_sh.c (for MPI_SEEK_END)
wr_atallb.c
write_at.c (at "convert bufocount and offset to bytes")
write_ord.c
write_ordb.c
write_sh.c (ADIOI_WRITE_LOCK and UNLOCK; also ADIO_WriteStrided)