Blame test/mpi/cxx/coll/reduceboolx.cxx

Packit 0848f5
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
Packit 0848f5
/*
Packit 0848f5
 *
Packit 0848f5
 *  (C) 2010 by Argonne National Laboratory.
Packit 0848f5
 *      See COPYRIGHT in top-level directory.
Packit 0848f5
 */
Packit 0848f5
Packit 0848f5
/* Sanity check that logical operations can be performed on C++ bool types
Packit 0848f5
 * via MPI::BOOL. */
Packit 0848f5
Packit 0848f5
#include "mpi.h"
Packit 0848f5
#include "mpitestconf.h"
Packit 0848f5
#ifdef HAVE_IOSTREAM
Packit 0848f5
// Not all C++ compilers have iostream instead of iostream.h
Packit 0848f5
#include <iostream>
Packit 0848f5
#ifdef HAVE_NAMESPACE_STD
Packit 0848f5
// Those that do often need the std namespace; otherwise, a bare "cout"
Packit 0848f5
// is likely to fail to compile
Packit 0848f5
using namespace std;
Packit 0848f5
#endif
Packit 0848f5
#else
Packit 0848f5
#include <iostream.h>
Packit 0848f5
#endif
Packit 0848f5
#include "mpitestcxx.h"
Packit 0848f5
Packit 0848f5
int main( int argc, char **argv )
Packit 0848f5
{
Packit 0848f5
    MPI::Intracomm comm = MPI::COMM_WORLD;
Packit 0848f5
    int errs = 0;
Packit 0848f5
    int size, i, count, root, rank;
Packit 0848f5
Packit 0848f5
    MTest_Init( );
Packit 0848f5
Packit 0848f5
    size = comm.Get_size();
Packit 0848f5
    rank = comm.Get_rank();
Packit 0848f5
Packit 0848f5
    for (count = 1; count < 66000; count = count * 2) {
Packit 0848f5
        bool *vin, *vout;
Packit 0848f5
        vin  = new bool[count];
Packit 0848f5
        vout = new bool[count];
Packit 0848f5
Packit 0848f5
        for (root = 0; root < size; root++) {
Packit 0848f5
            for (i=0; i
Packit 0848f5
                // only rank 0's elements are set to true
Packit 0848f5
                vin[i]  = (rank ? false : true);
Packit 0848f5
                vout[i] = false;
Packit 0848f5
            }
Packit 0848f5
            comm.Reduce(vin, vout, count, MPI::BOOL, MPI::LOR, root);
Packit 0848f5
            if (rank == root) {
Packit 0848f5
                for (i=0; i
Packit 0848f5
                    if (vout[i] != true) {
Packit 0848f5
                        errs++;
Packit 0848f5
                        if (errs < 10)
Packit 0848f5
                            cerr << rank << ": " << "count=" << count
Packit 0848f5
                                 << " root=" << root
Packit 0848f5
                                 << " vout[" << i << "]=" << vout[i] << endl;
Packit 0848f5
                    }
Packit 0848f5
                }
Packit 0848f5
            }
Packit 0848f5
        }
Packit 0848f5
        delete[] vin;
Packit 0848f5
        delete[] vout;
Packit 0848f5
    }
Packit 0848f5
Packit 0848f5
    MTest_Finalize( errs );
Packit 0848f5
    MPI::Finalize();
Packit 0848f5
    return 0;
Packit 0848f5
}