1 /* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
3 * (C) 2001 by Argonne National Laboratory.
4 * See COPYRIGHT in top-level directory.
10 #include "mpitestconf.h"
16 The default behavior of the test routines should be to briefly indicate
17 the cause of any errors - in this test, that means that verbose needs
18 to be set. Verbose should turn on output that is independent of error
21 static int verbose = 1;
24 int int_with_lb_ub_test(void);
25 int contig_of_int_with_lb_ub_test(void);
26 int contig_negextent_of_int_with_lb_ub_test(void);
27 int vector_of_int_with_lb_ub_test(void);
28 int vector_blklen_of_int_with_lb_ub_test(void);
29 int vector_blklen_stride_of_int_with_lb_ub_test(void);
30 int vector_blklen_stride_negextent_of_int_with_lb_ub_test(void);
31 int vector_blklen_negstride_negextent_of_int_with_lb_ub_test(void);
32 int int_with_negextent_test(void);
33 int vector_blklen_negstride_of_int_with_lb_ub_test(void);
35 /* helper functions */
36 int parse_args(int argc, char **argv);
38 int main(int argc, char **argv)
42 MTest_Init( &argc, &argv );
43 parse_args(argc, argv);
45 /* To improve reporting of problems about operations, we
46 change the error handler to errors return */
47 MPI_Comm_set_errhandler( MPI_COMM_WORLD, MPI_ERRORS_RETURN );
49 /* perform some tests */
50 err = int_with_lb_ub_test();
51 if (err && verbose) fprintf(stderr, "found %d errors in simple lb/ub test\n", err);
54 err = contig_of_int_with_lb_ub_test();
55 if (err && verbose) fprintf(stderr, "found %d errors in contig test\n", err);
58 err = contig_negextent_of_int_with_lb_ub_test();
59 if (err && verbose) fprintf(stderr, "found %d errors in negextent contig test\n", err);
62 err = vector_of_int_with_lb_ub_test();
63 if (err && verbose) fprintf(stderr, "found %d errors in simple vector test\n", err);
66 err = vector_blklen_of_int_with_lb_ub_test();
67 if (err && verbose) fprintf(stderr, "found %d errors in vector blklen test\n", err);
70 err = vector_blklen_stride_of_int_with_lb_ub_test();
71 if (err && verbose) fprintf(stderr, "found %d errors in strided vector test\n", err);
74 err = vector_blklen_negstride_of_int_with_lb_ub_test();
75 if (err && verbose) fprintf(stderr, "found %d errors in negstrided vector test\n", err);
78 err = int_with_negextent_test();
79 if (err && verbose) fprintf(stderr, "found %d errors in negextent lb/ub test\n", err);
82 err = vector_blklen_stride_negextent_of_int_with_lb_ub_test();
83 if (err && verbose) fprintf(stderr, "found %d errors in strided negextent vector test\n", err);
86 err = vector_blklen_negstride_negextent_of_int_with_lb_ub_test();
87 if (err && verbose) fprintf(stderr, "found %d errors in negstrided negextent vector test\n", err);
90 MTest_Finalize( errs );
95 int parse_args(int argc, char **argv)
100 while ((ret = getopt(argc, argv, "v")) >= 0)
109 if (argc > 1 && strcmp(argv[1], "-v") == 0)
114 int int_with_lb_ub_test(void)
116 int err, errs = 0, val;
117 MPI_Aint lb, extent, aval, true_lb;
118 int blocks[3] = { 1, 4, 1 };
119 MPI_Aint disps[3] = { -3, 0, 6 };
120 MPI_Datatype types[3] = { MPI_LB, MPI_BYTE, MPI_UB };
122 MPI_Datatype eviltype;
124 err = MPI_Type_struct(3, blocks, disps, types, &eviltype);
125 if (err != MPI_SUCCESS) {
127 if (verbose) fprintf(stderr, " MPI_Type_struct failed.\n");
128 if (verbose) MTestPrintError( err );
131 err = MPI_Type_size(eviltype, &val);
132 if (err != MPI_SUCCESS) {
134 if (verbose) fprintf(stderr, " MPI_Type_size failed.\n");
135 if (verbose) MTestPrintError( err );
140 if (verbose) fprintf(stderr, " size of type = %d; should be %d\n", val, 4);
143 err = MPI_Type_extent(eviltype, &aval);
144 if (err != MPI_SUCCESS) {
146 if (verbose) fprintf(stderr, " MPI_Type_extent failed.\n");
147 if (verbose) MTestPrintError( err );
152 if (verbose) fprintf(stderr, " extent of type = %ld; should be %d\n", (long) aval, 9);
155 err = MPI_Type_lb(eviltype, &aval);
156 if (err != MPI_SUCCESS) {
158 if (verbose) fprintf(stderr, " MPI_Type_lb failed.\n");
159 if (verbose) MTestPrintError( err );
164 if (verbose) fprintf(stderr, " lb of type = %d; should be %d\n", (int) aval, -3);
167 err = MPI_Type_get_extent(eviltype, &lb, &extent);
168 if (err != MPI_SUCCESS) {
170 if (verbose) fprintf(stderr, " MPI_Type_get_extent failed.\n");
171 if (verbose) MTestPrintError( err );
176 if (verbose) fprintf(stderr, " lb of type = %d; should be %d\n",
182 if (verbose) fprintf(stderr, " extent of type = %d; should be %d\n",
186 err = MPI_Type_ub(eviltype, &aval);
187 if (err != MPI_SUCCESS) {
189 if (verbose) fprintf(stderr, " MPI_Type_ub failed.\n");
190 if (verbose) MTestPrintError( err );
195 if (verbose) fprintf(stderr, " ub of type = %d; should be %d\n", (int) aval, 6);
198 err = MPI_Type_get_true_extent(eviltype, &true_lb, &aval);
199 if (err != MPI_SUCCESS) {
201 if (verbose) fprintf(stderr, " MPI_Type_get_true_extent failed.\n");
202 if (verbose) MTestPrintError( err );
207 if (verbose) fprintf(stderr, " true_lb of type = %d; should be %d\n", (int) true_lb, 0);
212 if (verbose) fprintf(stderr, " true extent of type = %d; should be %d\n", (int) aval, 4);
215 MPI_Type_free(&eviltype);
220 int contig_of_int_with_lb_ub_test(void)
222 int err, errs = 0, val;
223 MPI_Aint lb, extent, aval, true_lb;
224 int blocks[3] = { 1, 4, 1 };
225 MPI_Aint disps[3] = { -3, 0, 6 };
226 MPI_Datatype types[3] = { MPI_LB, MPI_BYTE, MPI_UB };
227 char *typemapstring = 0;
229 MPI_Datatype inttype, eviltype;
231 /* build same type as in int_with_lb_ub_test() */
232 typemapstring = (char*)"{ (LB,-3),4*(BYTE,0),(UB,6) }";
233 err = MPI_Type_struct(3, blocks, disps, types, &inttype);
234 if (err != MPI_SUCCESS) {
236 if (verbose) fprintf(stderr, " MPI_Type_struct of %s failed.\n",
238 if (verbose) MTestPrintError( err );
239 /* no point in continuing */
243 typemapstring=(char*)"{ (LB,-3),4*(BYTE,0),(UB,6),(LB,6),4*(BYTE,9),(UB,15),(LB,15),4*(BYTE,18),(UB,24)}";
244 err = MPI_Type_contiguous(3, inttype, &eviltype);
245 if (err != MPI_SUCCESS) {
247 if (verbose) fprintf(stderr, " MPI_Type_contiguous of %s failed.\n",
249 if (verbose) MTestPrintError( err );
250 /* no point in continuing */
254 err = MPI_Type_size(eviltype, &val);
255 if (err != MPI_SUCCESS) {
257 if (verbose) fprintf(stderr, " MPI_Type_size of %s failed.\n",
259 if (verbose) MTestPrintError( err );
264 if (verbose) fprintf(stderr, " size of type = %d; should be %d\n",
268 err = MPI_Type_extent(eviltype, &aval);
269 if (err != MPI_SUCCESS) {
271 if (verbose) fprintf(stderr, " MPI_Type_extent failed.\n");
272 if (verbose) MTestPrintError( err );
277 if (verbose) fprintf(stderr, " extent of type = %d; should be %d\n", (int) aval, 27);
278 if (verbose) fprintf( stderr, " for type %s\n", typemapstring );
281 err = MPI_Type_lb(eviltype, &aval);
282 if (err != MPI_SUCCESS) {
284 if (verbose) fprintf(stderr, " MPI_Type_lb failed.\n");
285 if (verbose) MTestPrintError( err );
290 if (verbose) fprintf(stderr, " lb of type = %d from Type_lb; should be %d in %s\n", (int) aval, -3, typemapstring );
293 err = MPI_Type_get_extent(eviltype, &lb, &extent);
294 if (err != MPI_SUCCESS) {
296 if (verbose) fprintf(stderr, " MPI_Type_get_extent failed.\n");
297 if (verbose) MTestPrintError( err );
302 if (verbose) fprintf(stderr, " lb of type = %d from Type_get_extent; should be %d in %s\n",
303 (int) aval, -3, typemapstring );
308 if (verbose) fprintf(stderr, " extent of type = %d from Type_get_extent; should be %d in %s\n",
309 (int) extent, 27, typemapstring);
312 err = MPI_Type_ub(eviltype, &aval);
313 if (err != MPI_SUCCESS) {
315 if (verbose) fprintf(stderr, " MPI_Type_ub failed.\n");
316 if (verbose) MTestPrintError( err );
321 if (verbose) fprintf(stderr, " ub of type = %d in Type_ub; should be %din %s\n", (int) aval, 24, typemapstring);
324 err = MPI_Type_get_true_extent(eviltype, &true_lb, &aval);
325 if (err != MPI_SUCCESS) {
327 if (verbose) fprintf(stderr, " MPI_Type_get_true_extent failed.\n");
328 if (verbose) MTestPrintError( err );
333 if (verbose) fprintf(stderr, " true_lb of type = %d; should be %d in %s\n", (int) true_lb, 0, typemapstring);
338 if (verbose) fprintf(stderr, " true extent of type = %d; should be %d in %s\n", (int) aval, 22, typemapstring);
341 MPI_Type_free( &inttype );
342 MPI_Type_free( &eviltype );
347 int contig_negextent_of_int_with_lb_ub_test(void)
349 int err, errs = 0, val;
350 MPI_Aint lb, extent, aval, true_lb;
351 int blocks[3] = { 1, 4, 1 };
352 MPI_Aint disps[3] = { 6, 0, -3 };
353 MPI_Datatype types[3] = { MPI_LB, MPI_BYTE, MPI_UB };
354 char *typemapstring = 0;
356 MPI_Datatype inttype, eviltype;
358 /* build same type as in int_with_lb_ub_test() */
359 typemapstring = (char*)"{ (LB,6),4*(BYTE,0),(UB,-3) }";
360 err = MPI_Type_struct(3, blocks, disps, types, &inttype);
361 if (err != MPI_SUCCESS) {
363 if (verbose) fprintf(stderr, " MPI_Type_struct of %s failed.\n",
365 if (verbose) MTestPrintError( err );
366 /* No point in continuing */
370 typemapstring = (char*)"{ (LB,6),4*(BYTE,0),(UB,-3),(LB,-3),4*(BYTE,-9),(UB,-12),(LB,-12),4*(BYTE,-18),(UB,-21) }";
371 err = MPI_Type_contiguous(3, inttype, &eviltype);
372 if (err != MPI_SUCCESS) {
374 if (verbose) fprintf(stderr, " MPI_Type_contiguous of %s failed.\n",
376 if (verbose) MTestPrintError( err );
377 /* No point in continuing */
381 err = MPI_Type_size(eviltype, &val);
382 if (err != MPI_SUCCESS) {
384 if (verbose) fprintf(stderr, " MPI_Type_size of %s failed.\n",
386 if (verbose) MTestPrintError( err );
391 if (verbose) fprintf(stderr, " size of type = %d; should be %d\n", val, 12);
394 err = MPI_Type_extent(eviltype, &aval);
395 if (err != MPI_SUCCESS) {
397 if (verbose) fprintf(stderr, " MPI_Type_extent failed.\n");
398 if (verbose) MTestPrintError( err );
403 if (verbose) fprintf(stderr, " extent of type = %d; should be %d\n", (int) aval, 9);
406 err = MPI_Type_lb(eviltype, &aval);
407 if (err != MPI_SUCCESS) {
409 if (verbose) fprintf(stderr, " MPI_Type_lb failed.\n");
410 if (verbose) MTestPrintError( err );
415 if (verbose) fprintf(stderr, " lb of type = %d; should be %d\n", (int) aval, -12);
418 err = MPI_Type_get_extent(eviltype, &lb, &extent);
419 if (err != MPI_SUCCESS) {
421 if (verbose) fprintf(stderr, " MPI_Type_get_extent failed.\n");
422 if (verbose) MTestPrintError( err );
427 if (verbose) fprintf(stderr, " lb of type = %d; should be %d\n",
433 if (verbose) fprintf(stderr, " extent of type = %d; should be %d\n",
437 err = MPI_Type_ub(eviltype, &aval);
438 if (err != MPI_SUCCESS) {
440 if (verbose) fprintf(stderr, " MPI_Type_ub failed.\n");
441 if (verbose) MTestPrintError( err );
446 if (verbose) fprintf(stderr, " ub of type = %d; should be %d\n", (int) aval, -3);
449 err = MPI_Type_get_true_extent(eviltype, &true_lb, &aval);
450 if (err != MPI_SUCCESS) {
452 if (verbose) fprintf(stderr, " MPI_Type_get_true_extent failed.\n");
453 if (verbose) MTestPrintError( err );
456 if (true_lb != -18) {
458 if (verbose) fprintf(stderr, " true_lb of type = %d; should be %d\n", (int) true_lb, -18);
463 if (verbose) fprintf(stderr, " true extent of type = %d; should be %d\n", (int) aval, 22);
466 MPI_Type_free( &inttype );
467 MPI_Type_free( &eviltype );
472 int vector_of_int_with_lb_ub_test(void)
474 int err, errs = 0, val;
475 MPI_Aint lb, extent, aval, true_lb;
476 int blocks[3] = { 1, 4, 1 };
477 MPI_Aint disps[3] = { -3, 0, 6 };
478 MPI_Datatype types[3] = { MPI_LB, MPI_BYTE, MPI_UB };
480 MPI_Datatype inttype, eviltype;
482 /* build same type as in int_with_lb_ub_test() */
483 err = MPI_Type_struct(3, blocks, disps, types, &inttype);
484 if (err != MPI_SUCCESS) {
486 if (verbose) fprintf(stderr, " MPI_Type_struct failed.\n");
487 if (verbose) MTestPrintError( err );
488 /* no point in continuing */
492 err = MPI_Type_vector(3, 1, 1, inttype, &eviltype);
493 if (err != MPI_SUCCESS) {
495 if (verbose) fprintf(stderr, " MPI_Type_vector failed.\n");
496 if (verbose) MTestPrintError( err );
497 /* no point in continuing */
501 err = MPI_Type_size(eviltype, &val);
502 if (err != MPI_SUCCESS) {
504 if (verbose) fprintf(stderr, " MPI_Type_size failed.\n");
505 if (verbose) MTestPrintError( err );
510 if (verbose) fprintf(stderr, " size of type = %d; should be %d\n", val, 12);
513 err = MPI_Type_extent(eviltype, &aval);
514 if (err != MPI_SUCCESS) {
516 if (verbose) fprintf(stderr, " MPI_Type_extent failed.\n");
517 if (verbose) MTestPrintError( err );
522 if (verbose) fprintf(stderr, " extent of type = %d; should be %d\n", (int) aval, 27);
525 err = MPI_Type_lb(eviltype, &aval);
526 if (err != MPI_SUCCESS) {
528 if (verbose) fprintf(stderr, " MPI_Type_lb failed.\n");
529 if (verbose) MTestPrintError( err );
534 if (verbose) fprintf(stderr, " lb of type = %d; should be %d\n", (int) aval, -3);
537 err = MPI_Type_get_extent(eviltype, &lb, &extent);
538 if (err != MPI_SUCCESS) {
540 if (verbose) fprintf(stderr, " MPI_Type_get_extent failed.\n");
541 if (verbose) MTestPrintError( err );
546 if (verbose) fprintf(stderr, " lb of type = %d; should be %d\n",
552 if (verbose) fprintf(stderr, " extent of type = %d; should be %d\n",
556 err = MPI_Type_ub(eviltype, &aval);
557 if (err != MPI_SUCCESS) {
559 if (verbose) fprintf(stderr, " MPI_Type_ub failed.\n");
560 if (verbose) MTestPrintError( err );
565 if (verbose) fprintf(stderr, " ub of type = %d; should be %d\n", (int) aval, 24);
568 err = MPI_Type_get_true_extent(eviltype, &true_lb, &aval);
569 if (err != MPI_SUCCESS) {
571 if (verbose) fprintf(stderr, " MPI_Type_get_true_extent failed.\n");
572 if (verbose) MTestPrintError( err );
577 if (verbose) fprintf(stderr, " true_lb of type = %d; should be %d\n", (int) true_lb, 0);
582 if (verbose) fprintf(stderr, " true extent of type = %d; should be %d\n", (int) aval, 22);
585 MPI_Type_free( &inttype );
586 MPI_Type_free( &eviltype );
594 int vector_blklen_of_int_with_lb_ub_test(void)
596 int err, errs = 0, val;
597 MPI_Aint lb, extent, aval, true_lb;
598 int blocks[3] = { 1, 4, 1 };
599 MPI_Aint disps[3] = { -3, 0, 6 };
600 MPI_Datatype types[3] = { MPI_LB, MPI_BYTE, MPI_UB };
602 MPI_Datatype inttype, eviltype;
604 /* build same type as in int_with_lb_ub_test() */
605 err = MPI_Type_struct(3, blocks, disps, types, &inttype);
606 if (err != MPI_SUCCESS) {
608 if (verbose) fprintf(stderr, " MPI_Type_struct failed.\n");
609 if (verbose) MTestPrintError( err );
610 /* no point in continuing */
614 err = MPI_Type_vector(3, 4, 1, inttype, &eviltype);
615 if (err != MPI_SUCCESS) {
617 if (verbose) fprintf(stderr, " MPI_Type_vector failed.\n");
618 if (verbose) MTestPrintError( err );
619 /* no point in continuing */
623 err = MPI_Type_size(eviltype, &val);
624 if (err != MPI_SUCCESS) {
626 if (verbose) fprintf(stderr, " MPI_Type_size failed.\n");
627 if (verbose) MTestPrintError( err );
632 if (verbose) fprintf(stderr, " size of type = %d; should be %d\n", val, 48);
635 err = MPI_Type_extent(eviltype, &aval);
636 if (err != MPI_SUCCESS) {
638 if (verbose) fprintf(stderr, " MPI_Type_extent failed.\n");
639 if (verbose) MTestPrintError( err );
644 if (verbose) fprintf(stderr, " extent of type = %d; should be %d\n", (int) aval, 54);
647 err = MPI_Type_lb(eviltype, &aval);
648 if (err != MPI_SUCCESS) {
650 if (verbose) fprintf(stderr, " MPI_Type_lb failed.\n");
651 if (verbose) MTestPrintError( err );
656 if (verbose) fprintf(stderr, " lb of type = %d; should be %d\n", (int) aval, -3);
657 if (verbose) MTestPrintError( err );
660 err = MPI_Type_get_extent(eviltype, &lb, &extent);
661 if (err != MPI_SUCCESS) {
663 if (verbose) fprintf(stderr, " MPI_Type_get_extent failed.\n");
664 if (verbose) MTestPrintError( err );
669 if (verbose) fprintf(stderr, " lb of type = %d; should be %d\n",
675 if (verbose) fprintf(stderr, " extent of type = %d; should be %d\n",
679 err = MPI_Type_ub(eviltype, &aval);
680 if (err != MPI_SUCCESS) {
682 if (verbose) fprintf(stderr, " MPI_Type_ub failed.\n");
683 if (verbose) MTestPrintError( err );
688 if (verbose) fprintf(stderr, " ub of type = %d; should be %d\n", (int) aval, 51);
691 err = MPI_Type_get_true_extent(eviltype, &true_lb, &aval);
692 if (err != MPI_SUCCESS) {
694 if (verbose) fprintf(stderr, " MPI_Type_get_true_extent failed.\n");
695 if (verbose) MTestPrintError( err );
700 if (verbose) fprintf(stderr, " true_lb of type = %d; should be %d\n", (int) true_lb, 0);
705 if (verbose) fprintf(stderr, " true extent of type = %d; should be %d\n", (int) aval, 49);
708 MPI_Type_free( &inttype );
709 MPI_Type_free( &eviltype );
714 int vector_blklen_stride_of_int_with_lb_ub_test(void)
716 int err, errs = 0, val;
717 MPI_Aint lb, extent, aval, true_lb;
718 int blocks[3] = { 1, 4, 1 };
719 MPI_Aint disps[3] = { -3, 0, 6 };
720 MPI_Datatype types[3] = { MPI_LB, MPI_BYTE, MPI_UB };
721 char *typemapstring = 0;
723 MPI_Datatype inttype, eviltype;
725 /* build same type as in int_with_lb_ub_test() */
726 typemapstring = (char*)"{ (LB,-3),4*(BYTE,0),(UB,6) }";
727 err = MPI_Type_struct(3, blocks, disps, types, &inttype);
728 if (err != MPI_SUCCESS) {
730 if (verbose) fprintf(stderr, " MPI_Type_struct of %s failed.\n",
732 if (verbose) MTestPrintError( err );
733 /* No point in continuing */
737 err = MPI_Type_vector(3, 4, 5, inttype, &eviltype);
738 if (err != MPI_SUCCESS) {
740 if (verbose) fprintf(stderr, " MPI_Type_vector failed.\n");
741 if (verbose) MTestPrintError( err );
742 /* no point in continuing */
746 err = MPI_Type_size(eviltype, &val);
747 if (err != MPI_SUCCESS) {
749 if (verbose) fprintf(stderr, " MPI_Type_size failed.\n");
750 if (verbose) MTestPrintError( err );
755 if (verbose) fprintf(stderr, " size of type = %d; should be %d\n", val, 48);
758 err = MPI_Type_extent(eviltype, &aval);
759 if (err != MPI_SUCCESS) {
761 if (verbose) fprintf(stderr, " MPI_Type_extent failed.\n");
762 if (verbose) MTestPrintError( err );
767 if (verbose) fprintf(stderr, " extent of type = %d; should be %d\n", (int) aval, 126);
770 err = MPI_Type_lb(eviltype, &aval);
771 if (err != MPI_SUCCESS) {
773 if (verbose) fprintf(stderr, " MPI_Type_lb failed.\n");
774 if (verbose) MTestPrintError( err );
779 if (verbose) fprintf(stderr, " lb of type = %d; should be %d\n", (int) aval, -3);
782 err = MPI_Type_get_extent(eviltype, &lb, &extent);
783 if (err != MPI_SUCCESS) {
785 if (verbose) fprintf(stderr, " MPI_Type_get_extent failed.\n");
786 if (verbose) MTestPrintError( err );
791 if (verbose) fprintf(stderr, " lb of type = %d; should be %d\n",
797 if (verbose) fprintf(stderr, " extent of type = %d; should be %d\n",
801 err = MPI_Type_ub(eviltype, &aval);
802 if (err != MPI_SUCCESS) {
804 if (verbose) fprintf(stderr, " MPI_Type_ub failed.\n");
805 if (verbose) MTestPrintError( err );
810 if (verbose) fprintf(stderr, " ub of type = %d; should be %d\n", (int) aval, 123);
813 err = MPI_Type_get_true_extent(eviltype, &true_lb, &aval);
814 if (err != MPI_SUCCESS) {
816 if (verbose) fprintf(stderr, " MPI_Type_get_true_extent failed.\n");
817 if (verbose) MTestPrintError( err );
822 if (verbose) fprintf(stderr, " true_lb of type = %d; should be %d\n", (int) true_lb, 0);
827 if (verbose) fprintf(stderr, " true extent of type = %d; should be %d\n", (int) aval, 121);
830 MPI_Type_free( &inttype );
831 MPI_Type_free( &eviltype );
836 int vector_blklen_negstride_of_int_with_lb_ub_test(void)
838 int err, errs = 0, val;
839 MPI_Aint lb, extent, aval, true_lb;
840 int blocks[3] = { 1, 4, 1 };
841 MPI_Aint disps[3] = { -3, 0, 6 };
842 MPI_Datatype types[3] = { MPI_LB, MPI_BYTE, MPI_UB };
844 MPI_Datatype inttype, eviltype;
846 /* build same type as in int_with_lb_ub_test() */
847 err = MPI_Type_struct(3, blocks, disps, types, &inttype);
848 if (err != MPI_SUCCESS) {
850 if (verbose) fprintf(stderr, " MPI_Type_struct failed.\n");
851 if (verbose) MTestPrintError( err );
852 /* no point in continuing */
856 err = MPI_Type_vector(3, 4, -5, inttype, &eviltype);
857 if (err != MPI_SUCCESS) {
859 if (verbose) fprintf(stderr, " MPI_Type_vector failed.\n");
860 if (verbose) MTestPrintError( err );
861 /* no point in continuing */
865 err = MPI_Type_size(eviltype, &val);
866 if (err != MPI_SUCCESS) {
868 if (verbose) fprintf(stderr, " MPI_Type_size failed.\n");
869 if (verbose) MTestPrintError( err );
874 if (verbose) fprintf(stderr, " size of type = %d; should be %d\n", val, 48);
877 err = MPI_Type_extent(eviltype, &aval);
878 if (err != MPI_SUCCESS) {
880 if (verbose) fprintf(stderr, " MPI_Type_extent failed.\n");
881 if (verbose) MTestPrintError( err );
886 if (verbose) fprintf(stderr, " extent of type = %d; should be %d\n", (int) aval, 126);
889 err = MPI_Type_lb(eviltype, &aval);
890 if (err != MPI_SUCCESS) {
892 if (verbose) fprintf(stderr, " MPI_Type_lb failed.\n");
893 if (verbose) MTestPrintError( err );
898 if (verbose) fprintf(stderr, " lb of type = %d; should be %d\n", (int) aval, -93);
901 err = MPI_Type_get_extent(eviltype, &lb, &extent);
902 if (err != MPI_SUCCESS) {
904 if (verbose) fprintf(stderr, " MPI_Type_get_extent failed.\n");
905 if (verbose) MTestPrintError( err );
910 if (verbose) fprintf(stderr, " lb of type = %d; should be %d\n",
916 if (verbose) fprintf(stderr, " extent of type = %d; should be %d\n",
920 err = MPI_Type_ub(eviltype, &aval);
921 if (err != MPI_SUCCESS) {
923 if (verbose) fprintf(stderr, " MPI_Type_ub failed.\n");
924 if (verbose) MTestPrintError( err );
929 if (verbose) fprintf(stderr, " ub of type = %d; should be %d\n", (int) aval, 33);
932 err = MPI_Type_get_true_extent(eviltype, &true_lb, &aval);
933 if (err != MPI_SUCCESS) {
935 if (verbose) fprintf(stderr, " MPI_Type_get_true_extent failed.\n");
936 if (verbose) MTestPrintError( err );
939 if (true_lb != -90) {
941 if (verbose) fprintf(stderr, " true_lb of type = %d; should be %d\n", (int) true_lb, -90);
946 if (verbose) fprintf(stderr, " true extent of type = %d; should be %d\n", (int) aval, 121);
949 MPI_Type_free( &inttype );
950 MPI_Type_free( &eviltype );
955 int int_with_negextent_test(void)
957 int err, errs = 0, val;
958 MPI_Aint lb, extent, aval, true_lb;
959 int blocks[3] = { 1, 4, 1 };
960 MPI_Aint disps[3] = { 6, 0, -3 };
961 MPI_Datatype types[3] = { MPI_LB, MPI_BYTE, MPI_UB };
962 char *typemapstring =0;
964 MPI_Datatype eviltype;
966 typemapstring = (char*)"{ (LB,6),4*(BYTE,0),(UB,-3) }";
967 err = MPI_Type_struct(3, blocks, disps, types, &eviltype);
968 if (err != MPI_SUCCESS) {
970 if (verbose) fprintf(stderr, " MPI_Type_struct of %s failed.\n",
972 if (verbose) MTestPrintError( err );
973 /* No point in contiuing */
977 err = MPI_Type_size(eviltype, &val);
978 if (err != MPI_SUCCESS) {
980 if (verbose) fprintf(stderr, " MPI_Type_size failed.\n");
981 if (verbose) MTestPrintError( err );
986 if (verbose) fprintf(stderr, " size of type = %d; should be %d\n", val, 4);
989 err = MPI_Type_extent(eviltype, &aval);
990 if (err != MPI_SUCCESS) {
992 if (verbose) fprintf(stderr, " MPI_Type_extent failed.\n");
993 if (verbose) MTestPrintError( err );
998 if (verbose) fprintf(stderr, " extent of type = %d; should be %d\n", (int) aval, -9);
1001 err = MPI_Type_lb(eviltype, &aval);
1002 if (err != MPI_SUCCESS) {
1004 if (verbose) fprintf(stderr, " MPI_Type_lb failed.\n");
1005 if (verbose) MTestPrintError( err );
1010 if (verbose) fprintf(stderr, " lb of type = %d; should be %d\n", (int) aval, 6);
1013 err = MPI_Type_get_extent(eviltype, &lb, &extent);
1014 if (err != MPI_SUCCESS) {
1016 if (verbose) fprintf(stderr, " MPI_Type_get_extent failed.\n");
1017 if (verbose) MTestPrintError( err );
1022 if (verbose) fprintf(stderr, " lb of type = %d; should be %d\n",
1028 if (verbose) fprintf(stderr, " extent of type = %d; should be %d\n",
1032 err = MPI_Type_ub(eviltype, &aval);
1033 if (err != MPI_SUCCESS) {
1035 if (verbose) fprintf(stderr, " MPI_Type_ub failed.\n");
1036 if (verbose) MTestPrintError( err );
1041 if (verbose) fprintf(stderr, " ub of type = %d; should be %d\n", (int) aval, -3);
1044 err = MPI_Type_get_true_extent(eviltype, &true_lb, &aval);
1045 if (err != MPI_SUCCESS) {
1047 if (verbose) fprintf(stderr, " MPI_Type_get_true_extent failed.\n");
1048 if (verbose) MTestPrintError( err );
1053 if (verbose) fprintf(stderr, " true_lb of type = %d; should be %d\n", (int) true_lb, 0);
1058 if (verbose) fprintf(stderr, " true extent of type = %d; should be %d\n", (int) aval, 4);
1061 MPI_Type_free(&eviltype);
1066 int vector_blklen_stride_negextent_of_int_with_lb_ub_test(void)
1068 int err, errs = 0, val;
1069 MPI_Aint lb, extent, true_lb, aval;
1070 int blocks[3] = { 1, 4, 1 };
1071 MPI_Aint disps[3] = { 6, 0, -3 };
1072 MPI_Datatype types[3] = { MPI_LB, MPI_BYTE, MPI_UB };
1073 MPI_Datatype inttype, eviltype;
1074 char *typemapstring = 0;
1076 /* build same type as in int_with_lb_ub_test() */
1077 typemapstring = (char*)"{ (LB,6),4*(BYTE,0),(UB,-3) }";
1078 err = MPI_Type_struct(3, blocks, disps, types, &inttype);
1079 if (err != MPI_SUCCESS) {
1081 if (verbose) fprintf(stderr, " MPI_Type_struct of %s failed.\n",
1083 if (verbose) MTestPrintError( err );
1084 /* No point in continuing */
1088 err = MPI_Type_vector(3, 4, 5, inttype, &eviltype);
1089 if (err != MPI_SUCCESS) {
1091 if (verbose) fprintf(stderr, " MPI_Type_vector failed.\n");
1092 if (verbose) MTestPrintError( err );
1093 /* no point in continuing */
1097 err = MPI_Type_size(eviltype, &val);
1098 if (err != MPI_SUCCESS) {
1100 if (verbose) fprintf(stderr, " MPI_Type_size failed.\n");
1101 if (verbose) MTestPrintError( err );
1106 if (verbose) fprintf(stderr, " size of type = %d; should be %d\n", val, 48);
1109 err = MPI_Type_extent(eviltype, &aval);
1110 if (err != MPI_SUCCESS) {
1112 if (verbose) fprintf(stderr, " MPI_Type_extent failed.\n");
1113 if (verbose) MTestPrintError( err );
1118 if (verbose) fprintf(stderr, " extent of type = %d; should be %d\n", (int) aval, 108);
1121 err = MPI_Type_lb(eviltype, &aval);
1122 if (err != MPI_SUCCESS) {
1124 if (verbose) fprintf(stderr, " MPI_Type_lb failed.\n");
1125 if (verbose) MTestPrintError( err );
1130 if (verbose) fprintf(stderr, " lb of type = %d; should be %d\n", (int) aval, -111);
1133 err = MPI_Type_get_extent(eviltype, &lb, &extent);
1134 if (err != MPI_SUCCESS) {
1136 if (verbose) fprintf(stderr, " MPI_Type_get_extent failed.\n");
1137 if (verbose) MTestPrintError( err );
1142 if (verbose) fprintf(stderr, " lb of type = %d; should be %d\n",
1146 if (extent != 108) {
1148 if (verbose) fprintf(stderr, " extent of type = %d; should be %d\n",
1152 err = MPI_Type_ub(eviltype, &aval);
1153 if (err != MPI_SUCCESS) {
1155 if (verbose) fprintf(stderr, " MPI_Type_ub failed.\n");
1156 if (verbose) MTestPrintError( err );
1161 if (verbose) fprintf(stderr, " ub of type = %d; should be %d\n", (int) aval, -3);
1164 err = MPI_Type_get_true_extent(eviltype, &true_lb, &aval);
1165 if (err != MPI_SUCCESS) {
1167 if (verbose) fprintf(stderr, " MPI_Type_get_true_extent failed.\n");
1168 if (verbose) MTestPrintError( err );
1171 if (true_lb != -117) {
1173 if (verbose) fprintf(stderr, " true_lb of type = %d; should be %d\n", (int) true_lb, -117);
1178 if (verbose) fprintf(stderr, " true extent of type = %d; should be %d\n", (int) aval, 121);
1181 MPI_Type_free( &inttype );
1182 MPI_Type_free( &eviltype );
1187 int vector_blklen_negstride_negextent_of_int_with_lb_ub_test(void)
1189 int err, errs = 0, val;
1190 MPI_Aint extent, lb, aval, true_lb;
1191 int blocks[3] = { 1, 4, 1 };
1192 MPI_Aint disps[3] = { 6, 0, -3 };
1193 MPI_Datatype types[3] = { MPI_LB, MPI_BYTE, MPI_UB };
1195 MPI_Datatype inttype, eviltype;
1197 /* build same type as in int_with_lb_ub_test() */
1198 err = MPI_Type_struct(3, blocks, disps, types, &inttype);
1199 if (err != MPI_SUCCESS) {
1201 if (verbose) fprintf(stderr, " MPI_Type_struct failed.\n");
1202 if (verbose) MTestPrintError( err );
1203 /* no point in continuing */
1207 err = MPI_Type_vector(3, 4, -5, inttype, &eviltype);
1208 if (err != MPI_SUCCESS) {
1210 if (verbose) fprintf(stderr, " MPI_Type_vector failed.\n");
1211 if (verbose) MTestPrintError( err );
1212 /* no point in continuing */
1216 err = MPI_Type_size(eviltype, &val);
1217 if (err != MPI_SUCCESS) {
1219 if (verbose) fprintf(stderr, " MPI_Type_size failed.\n");
1220 if (verbose) MTestPrintError( err );
1225 if (verbose) fprintf(stderr, " size of type = %d; should be %d\n", val, 48);
1228 err = MPI_Type_extent(eviltype, &aval);
1229 if (err != MPI_SUCCESS) {
1231 if (verbose) fprintf(stderr, " MPI_Type_extent failed.\n");
1232 if (verbose) MTestPrintError( err );
1237 if (verbose) fprintf(stderr, " extent of type = %ld; should be %d\n", (long) aval, 108);
1240 err = MPI_Type_lb(eviltype, &aval);
1241 if (err != MPI_SUCCESS) {
1243 if (verbose) fprintf(stderr, " MPI_Type_lb failed.\n");
1244 if (verbose) MTestPrintError( err );
1249 if (verbose) fprintf(stderr, " lb of type = %ld; should be %d\n", (long) aval, -21);
1252 err = MPI_Type_get_extent(eviltype, &lb, &extent);
1253 if (err != MPI_SUCCESS) {
1255 if (verbose) fprintf(stderr, " MPI_Type_get_extent failed.\n");
1256 if (verbose) MTestPrintError( err );
1261 if (verbose) fprintf(stderr, " lb of type = %ld; should be %d\n",
1265 if (extent != 108) {
1267 if (verbose) fprintf(stderr, " extent of type = %ld; should be %d\n",
1268 (long) extent, 108);
1272 err = MPI_Type_ub(eviltype, &aval);
1273 if (err != MPI_SUCCESS) {
1275 if (verbose) fprintf(stderr, " MPI_Type_ub failed.\n");
1276 if (verbose) MTestPrintError( err );
1281 if (verbose) fprintf(stderr, " ub of type = %ld; should be %d\n", (long) aval, 87);
1284 err = MPI_Type_get_true_extent(eviltype, &true_lb, &aval);
1285 if (err != MPI_SUCCESS) {
1287 if (verbose) fprintf(stderr, " MPI_Type_get_true_extent failed.\n");
1288 if (verbose) MTestPrintError( err );
1291 if (true_lb != -27) {
1293 if (verbose) fprintf(stderr, " true_lb of type = %ld; should be %d\n", (long) true_lb, -27);
1298 if (verbose) fprintf(stderr, " true extent of type = %ld; should be %d\n", (long) aval, 121);
1301 MPI_Type_free( &inttype );
1302 MPI_Type_free( &eviltype );