54 #include <Teuchos_GlobalMPISession.hpp> 55 #include <Teuchos_RCP.hpp> 59 #define MAX(a,b) ((a) > (b) ? (a) : (b)) 61 #ifdef HAVE_ZOLTAN2_SCOTCH 65 #ifndef HAVE_ZOLTAN2_MPI 71 #endif // HAVE_ZOLTAN2_SCOTCH 73 #ifdef HAVE_ZOLTAN2_PARMETIS 75 #ifndef HAVE_ZOLTAN2_MPI 78 #error "TPL ParMETIS requires compilation with MPI. Configure with -DTPL_ENABLE_MPI:BOOL=ON or -DZoltan2_ENABLE_ParMETIS:BOOL=OFF" 86 #if (PARMETIS_MAJOR_VERSION < 4) 89 #error "Specified version of ParMETIS is not compatible with Zoltan2; upgrade to ParMETIS v4 or later, or build Zoltan2 without ParMETIS." 94 #define PARMETIS_IS_OK 1 96 #endif // ParMETIS version check 97 #endif // HAVE_ZOLTAN2_MPI 98 #endif // HAVE_ZOLTAN2_PARMETIS 102 #define PRINTMSG(s) \ 103 std::cout << (s) << " " << __FILE__ << ":" << __LINE__ << std::endl 105 int main(
int argc,
char *argv[])
107 Teuchos::GlobalMPISession session(&argc, &argv);
121 catch (std::exception &e) {
127 unsigned int zgno = 123;
130 catch (std::exception &e) {
131 PRINTMSG(
"FAIL: unsigned int to int");
139 catch (std::exception &e) {
148 catch (std::exception &e) {
155 long long zgno = (
long long)1 << 40;
158 catch (std::exception &e) {
159 PRINTMSG(
"GOOD: big long long to int throws exception");
163 size_t zgno = (size_t)1 << 40;
166 catch (std::exception &e) {
167 PRINTMSG(
"GOOD: big size_t to int throws exception");
171 unsigned zgno = (1 << 31) + 1;
174 catch (std::exception &e) {
175 PRINTMSG(
"GOOD: huge unsigned to int throws exception");
185 long long zgno = (
long long)1 << 40;
188 catch (std::exception &e) {
189 PRINTMSG(
"FAIL: big long long to size_t");
194 size_t zgno = (size_t)1 << 40;
197 catch (std::exception &e) {
198 PRINTMSG(
"FAIL: big size_t to size_t");
209 long long zgno = (
long long)1 << 40;
212 catch (std::exception &e) {
213 PRINTMSG(
"FAIL: big long long to int64_t");
218 size_t zgno = (size_t)1 << 40;
221 catch (std::exception &e) {
222 PRINTMSG(
"FAIL: big size_t to int64_t");
228 size_t zgno = ((size_t)1 << 63) + 1 ;
231 catch (std::exception &e) {
232 PRINTMSG(
"GOOD: huge size_t to int64_t threw exception");
235 #ifdef HAVE_ZOLTAN2_SCOTCH 239 SCOTCH_Num scotchIdx;
247 catch (std::exception &e) {
248 PRINTMSG(
"FAIL: int to SCOTCH_Num");
253 unsigned int zgno = 123;
256 catch (std::exception &e) {
257 PRINTMSG(
"FAIL: unsigned int to SCOTCH_Num");
265 catch (std::exception &e) {
266 PRINTMSG(
"FAIL: long to SCOTCH_Num");
274 catch (std::exception &e) {
275 PRINTMSG(
"FAIL: size_t to SCOTCH_Num");
279 if (
sizeof(SCOTCH_Num) == 8) {
282 long long zgno = (
long long)1 << 40;
285 catch (std::exception &e) {
286 PRINTMSG(
"FAIL: big unsigned int to SCOTCH_Num");
291 size_t zgno = (size_t)1 << 40;
294 catch (std::exception &e) {
295 PRINTMSG(
"FAIL: big size_t to SCOTCH_Num");
301 if (
sizeof(SCOTCH_Num) == 4) {
303 long long zgno = (
long long)1 << 40;
306 catch (std::exception &e) {
307 PRINTMSG(
"GOOD: big long long to 4-byte SCOTCH_Num throws exception");
311 size_t zgno = (size_t)1 << 40;
314 catch (std::exception &e) {
315 PRINTMSG(
"GOOD: big size_t to 4-byte SCOTCH_Num throws exception");
319 #endif // HAVE_ZOLTAN2_SCOTCH 321 #ifdef PARMETIS_IS_OK 333 catch (std::exception &e) {
334 PRINTMSG(
"FAIL: int to ParMETIS' idx_t");
339 unsigned int zgno = 123;
342 catch (std::exception &e) {
343 PRINTMSG(
"FAIL: unsigned int to ParMETIS' idx_t");
351 catch (std::exception &e) {
352 PRINTMSG(
"FAIL: long to ParMETIS' idx_t");
360 catch (std::exception &e) {
361 PRINTMSG(
"FAIL: size_t to ParMETIS' idx_t");
365 if (
sizeof(idx_t) == 8) {
368 long long zgno = (
long long)1 << 40;
371 catch (std::exception &e) {
372 PRINTMSG(
"FAIL: big unsigned int to ParMETIS' idx_t");
377 size_t zgno = (size_t)1 << 40;
380 catch (std::exception &e) {
381 PRINTMSG(
"FAIL: big size_t to ParMETIS' idx_t");
387 if (
sizeof(idx_t) == 4) {
389 long long zgno = (
long long)1 << 40;
392 catch (std::exception &e) {
393 PRINTMSG(
"GOOD: big long long to 4-byte ParMETIS' idx_t throws exception");
397 size_t zgno = (size_t)1 << 40;
400 catch (std::exception &e) {
401 PRINTMSG(
"GOOD: big size_t to 4-byte ParMETIS' idx_t throws exception");
409 ZOLTAN_ID_PTR zoltanGID =
new ZOLTAN_ID_TYPE[4];
414 zoltanGID[0] = 0; zoltanGID[1] = 0; zoltanGID[2] = 0; zoltanGID[3] = 0;
416 int num_gid =
MAX(1,
sizeof(test_t) /
sizeof(ZOLTAN_ID_TYPE));
418 PRINTMSG(
"FAIL: NUM_ID wrong for char");
423 if (zoltanGID[0] != ZOLTAN_ID_TYPE(zgno) || zoltanGID[1] != 0 ||
424 zoltanGID[2] != 0 || zoltanGID[3] != 0) {
425 PRINTMSG(
"FAIL: char to ZOLTAN_ID_PTR");
432 PRINTMSG(
"FAIL: ZOLTAN_ID_PTR to char");
438 typedef short test_t;
440 zoltanGID[0] = 0; zoltanGID[1] = 0; zoltanGID[2] = 0; zoltanGID[3] = 0;
442 int num_gid =
MAX(1,
sizeof(test_t) /
sizeof(ZOLTAN_ID_TYPE));
444 PRINTMSG(
"FAIL: NUM_ID wrong for short");
449 if (zoltanGID[0] != ZOLTAN_ID_TYPE(zgno) || zoltanGID[1] != 0 ||
450 zoltanGID[2] != 0 || zoltanGID[3] != 0) {
451 PRINTMSG(
"FAIL: short to ZOLTAN_ID_PTR");
458 PRINTMSG(
"FAIL: ZOLTAN_ID_PTR to short");
466 zoltanGID[0] = 0; zoltanGID[1] = 0; zoltanGID[2] = 0; zoltanGID[3] = 0;
468 int num_gid =
MAX(1,
sizeof(test_t) /
sizeof(ZOLTAN_ID_TYPE));
470 PRINTMSG(
"FAIL: NUM_ID wrong for int");
475 if (zoltanGID[0] != ZOLTAN_ID_TYPE(zgno) || zoltanGID[1] != 0 ||
476 zoltanGID[2] != 0 || zoltanGID[3] != 0) {
477 PRINTMSG(
"FAIL: int to ZOLTAN_ID_PTR");
484 PRINTMSG(
"FAIL: ZOLTAN_ID_PTR to int");
490 typedef unsigned int test_t;
492 zoltanGID[0] = 0; zoltanGID[1] = 0; zoltanGID[2] = 0; zoltanGID[3] = 0;
494 int num_gid =
MAX(1,
sizeof(test_t) /
sizeof(ZOLTAN_ID_TYPE));
496 PRINTMSG(
"FAIL: NUM_ID wrong for unsigned int");
501 if (zoltanGID[0] != zgno || zoltanGID[1] != 0 ||
502 zoltanGID[2] != 0 || zoltanGID[3] != 0) {
503 PRINTMSG(
"FAIL: unsigned int to ZOLTAN_ID_PTR");
510 PRINTMSG(
"FAIL: ZOLTAN_ID_PTR to unsigned int");
516 typedef long long test_t;
517 test_t zgno = ((test_t)1 << 34) + (test_t)17;
518 zoltanGID[0] = 0; zoltanGID[1] = 0; zoltanGID[2] = 0; zoltanGID[3] = 0;
520 int num_gid =
MAX(1,
sizeof(test_t) /
sizeof(ZOLTAN_ID_TYPE));
522 PRINTMSG(
"FAIL: NUM_ID wrong for long long");
527 if (zoltanGID[0] != 17 || zoltanGID[1] != 4 ||
528 zoltanGID[2] != 0 || zoltanGID[3] != 0) {
529 PRINTMSG(
"FAIL: long long to ZOLTAN_ID_PTR");
536 std::cout <<
"back " << back <<
" != zgno " << zgno << std::endl;
537 PRINTMSG(
"FAIL: ZOLTAN_ID_PTR to long long");
543 typedef unsigned long long test_t;
544 test_t zgno = ((test_t)1 << 36) + (test_t)25;
545 zoltanGID[0] = 0; zoltanGID[1] = 0; zoltanGID[2] = 0; zoltanGID[3] = 0;
547 int num_gid =
MAX(1,
sizeof(test_t) /
sizeof(ZOLTAN_ID_TYPE));
549 PRINTMSG(
"FAIL: NUM_ID wrong for unsigned long long");
554 if (zoltanGID[0] != 25 || zoltanGID[1] != 16 ||
555 zoltanGID[2] != 0 || zoltanGID[3] != 0) {
556 PRINTMSG(
"FAIL: unsigned long long to ZOLTAN_ID_PTR");
563 std::cout <<
"back " << back <<
" != zgno " << zgno << std::endl;
564 PRINTMSG(
"FAIL: ZOLTAN_ID_PTR to unsigned long long");
570 typedef size_t test_t;
572 for (
size_t i = 0; i < 8*
sizeof(test_t); i++) zgno += (test_t)1<<i;
573 zoltanGID[0] = 0; zoltanGID[1] = 0; zoltanGID[2] = 0; zoltanGID[3] = 0;
575 int num_gid =
MAX(1,
sizeof(test_t) /
sizeof(ZOLTAN_ID_TYPE));
577 PRINTMSG(
"FAIL: NUM_ID wrong for size_t");
582 for (
int i = 0; i < num_gid; i++)
583 if (zoltanGID[i] != std::numeric_limits<ZOLTAN_ID_TYPE>::max()) {
584 PRINTMSG(
"FAIL: size_t to ZOLTAN_ID_PTR");
587 for (
int i = num_gid; i < 4; i++)
588 if (zoltanGID[i] != 0) {
589 PRINTMSG(
"FAIL: size_t to ZOLTAN_ID_PTR");
596 std::cout <<
"back " << back <<
" != zgno " << zgno << std::endl;
597 PRINTMSG(
"FAIL: ZOLTAN_ID_PTR to size_t");
606 std::cout <<
"PASS" << std::endl;
608 std::cout <<
"FAIL" << std::endl;
int main(int argc, char *argv[])
Traits class to handle conversions between gno_t/lno_t and TPL data types (e.g., ParMETIS's idx_t...
Defines the Environment class.
static void ASSIGN_TPL_T(tpl_t &a, zno_t b)