import java.util.ArrayList;

public class BenchPrioQ
{
   public static void main ( String[] args )
   {
      java.util.Random generator = new java.util.Random();
      long seed     = args.length > 0 ? Long.parseLong(args[0])
                                      : System.currentTimeMillis();
      int  maxEntry = args.length > 1 ? Integer.parseInt(args[1])
                                      : 100;
      PriorityQueue prioQue; // Constructed in the option loop

      int size     = 10,
          maxSize  = 250,
          incrSize = 10,
          run,
          nRuns    = 100000;

      System.out.println ("Number of remove/enter," + nRuns);
      System.out.println ("Size,Array,Linked List,MinHeap");

      for ( ; size <= maxSize; size += incrSize )
      {
         long elapsed[] = new long[3];
         int k;

         System.out.printf ("%4d", size);  System.out.flush();

         for ( int option = 0; option < 3; option++ )
         {

            elapsed[option] = System.currentTimeMillis();

            // Construct the appropriate class object
            switch ( option )
            {
               case 0:  prioQue = new SortedArrayPQ();  break;
               case 1:  prioQue = new SortedLinkedPQ();  break;
               default: prioQue = new MinHeap();  break;
            }

            generator.setSeed(seed);

            for ( k = 0; k < size; k++ )
               prioQue.append( generator.nextInt(maxEntry) );
            prioQue.correct();

            for ( run = 0; run < nRuns; run++ )
            {
               prioQue.remove();
               prioQue.enter( generator.nextInt(maxEntry) );
            }
            prioQue.clear();

            elapsed[option] = System.currentTimeMillis() -
                              elapsed[option];
         } // end for option
         for ( k = 0; k < 3; k++ )
            System.out.printf (", %d", elapsed[k]);
         System.out.println();  System.out.flush();
      } // end for size
   }  // end main
} // end class BenchPrioQ
