#include <mpi.h>
#include <stdio.h>

#include "timer.h"

int main (int argc, char **argv)
{
	double timed = 0;
	timer watch;
	int myID, numProcs, i;

	char buffer[5];
	MPI_Status status;

	MPI_Init (&argc, &argv);

	MPI_Comm_size (MPI_COMM_WORLD, &numProcs);
	MPI_Comm_rank (MPI_COMM_WORLD, &myID);

	for (i=0; i<10000; i++)
	{

		if (myID == 0)
		{
			watch.start ();

			MPI_Send ((void*)buffer, 4, MPI_CHAR, myID+1, 42, MPI_COMM_WORLD);
			MPI_Recv((void*)buffer, 4, MPI_CHAR, myID+1, 42, MPI_COMM_WORLD, &status);

			watch.stop ();
			timed += watch.read ();
		}
		else
		{
			MPI_Recv((void*)buffer, 4, MPI_CHAR, 0, 42, MPI_COMM_WORLD, &status);
			MPI_Send ((void*)buffer, 4, MPI_CHAR, 0, 42, MPI_COMM_WORLD);
		}
	}

	MPI_Finalize ();

	if (myID == 0)
	{
		printf ("%.3f\n", timed/10000.0f);
	}

	return 0;
}