#include <stdio.h>
#include "stats.h"


// Print summary stats
void print_summary_stats(double elapsed_time, int total_bytes, int number_of_messages)
{
  printf("\nElapsed time (ms)                 :\t%.3f\n", elapsed_time);
  printf("Time per message (ms)               :\t%.3f\n", (double)elapsed_time/number_of_messages);
  printf("Rate (Sending + Receiving) (kbytes/s):\t%.3f\n", 
	 (double)((double)(total_bytes)/(double)elapsed_time));
}

// Print detailed stats concerning all the time differences stored in 'times'
// verbose flag causes all times to be printed.
void print_array_stats(char *label, double *times, 
		       int number_of_messages, int message_size, int verbose)
{
  double num_msgs = (double) (number_of_messages);
  double msg_size = (double) (message_size);
  double maximum = -1.0, minimum = -1.0;
  double total = 0.0;
  int i;

  // find total, maximum, minimum
  for (i=0; i < number_of_messages; i++) {
    total += times[i];
    if (times[i] < minimum || minimum == -1.0) {
      minimum = times[i];
    }
    if (times[i] > maximum || maximum == -1.0) {
      maximum = times[i];
    }
  }

  printf("\n%s times (Message Size: %.0f, Number Of Messages: %.0f)\n", 
	 label, msg_size, num_msgs);
  printf("\tMean message time:       %10.3f ms (%7.3f kbytes/s)\n", 
	 total/num_msgs, 
	 (msg_size/(total/num_msgs)));
  printf("\tShortest message time:   %10.3f ms (%7.3f kbytes/s)\n", 
	 minimum,
	 (msg_size/minimum));
  printf("\tLongest message time:    %10.3f ms (%7.3f kbytes/s)\n", 
	 maximum, 
	 (msg_size/maximum));

  printf("\n");

  // if verbose, print out all times
  if (verbose) {
    for (i =0; i < num_msgs; i++) {
      printf("Message #%5d   : %10.3f ms (%7.3f kbytes/s)\n", i,
	     times[i], 
	     (msg_size/times[i]));
    }
  }
}
