-int MTestCheckRecv( MPI_Status *, MTestDatatype * );
-int MTestGetDatatypes( MTestDatatype *, MTestDatatype *, int );
-void MTestResetDatatypes( void );
-void MTestFreeDatatype( MTestDatatype * );
-const char *MTestGetDatatypeName( MTestDatatype * );
-int MTestGetDatatypeIndex( void );
-
-int MTestGetIntracomm( MPI_Comm *, int );
-int MTestGetIntracommGeneral( MPI_Comm *, int, int );
-int MTestGetIntercomm( MPI_Comm *, int *, int );
-int MTestGetComm( MPI_Comm *, int );
-const char *MTestGetIntracommName( void );
-const char *MTestGetIntercommName( void );
-void MTestFreeComm( MPI_Comm * );
+/* The max value of count must be very large to ensure that we
+ * reach the long message algorithms. (The maximal count or block length
+ * can be generated by 256K count is 4K or 32Kbytes respectively) */
+#define MTEST_DATATYPE_FOR_EACH_COUNT(count) \
+ for (count = 1; count <= 262144; count *= 64)
+
+/* Setup the full version of datatype tests.
+ * It generate tests for all basic datatypes and all derived datatypes except darray. */
+void MTestInitFullDatatypes(void);
+
+/* Setup the minimum version of datatype tests.
+ * It generate tests for all basic datatypes, vector and indexed. */
+void MTestInitMinDatatypes(void);
+
+/* Setup the basic version of datatype tests.
+ * It generate tests for all basic datatypes. */
+void MTestInitBasicDatatypes(void);
+
+int MTestCheckRecv(MPI_Status *, MTestDatatype *);
+int MTestGetDatatypes(MTestDatatype *, MTestDatatype *, MPI_Aint);
+void MTestResetDatatypes(void);
+void MTestFreeDatatype(MTestDatatype *);
+const char *MTestGetDatatypeName(MTestDatatype *);
+int MTestGetDatatypeIndex(void);
+
+int MTestGetIntracomm(MPI_Comm *, int);
+int MTestGetIntracommGeneral(MPI_Comm *, int, int);
+int MTestGetIntercomm(MPI_Comm *, int *, int);
+int MTestGetComm(MPI_Comm *, int);
+int MTestTestIntercomm(MPI_Comm intercomm);
+int MTestTestIntracomm(MPI_Comm intracomm);
+int MTestTestComm(MPI_Comm comm);
+const char *MTestGetIntracommName(void);
+const char *MTestGetIntercommName(void);
+void MTestFreeComm(MPI_Comm *);
+
+int MTestSpawnPossible(int *);