
// CircularQueueTester.java
// https://www.baeldung.com/commons-circular-fifo-queue
// Andrew Davison, ad@coe.psu.ac.th, May 2023

/* A fixed-size, non-blocking queue, so that when you add an element 
   to a full queue, the oldest element is removed to make room 
   for the new one.

   Also see QueueTester.java

  Usage:
    > compile CircularFifoQueueTester.java
    > run CircularFifoQueueTester
*/

import java.util.*;

import org.apache.commons.collections4.queue.*;


public class CircularQueueTester
{
  public static void main(String[] args) 
  {
    CircularFifoQueue<String> colors = new CircularFifoQueue<>(5);
    colors.add("Red");
    colors.add("Blue");
    colors.add("Green");
    colors.offer("White");
    colors.offer("Black");

    System.out.println("circular queue (max=5): " + colors);

    System.out.println("Peek value: " + colors.peek());
    System.out.println("Color at pos 1: " + colors.get(1));
    System.out.println("Poll (remove) value: " + colors.poll()); 
    System.out.println("Color at pos 1: " + colors.get(1));
    System.out.println("Remove first element: " + colors.remove());
    System.out.println("Result: " + colors);

    System.out.println("\nClearing:");
    colors.clear();
    System.out.println("Result: " + colors);
    System.out.println("Is queue empty? " + colors.isEmpty());

    System.out.println("\nRefilling with 5 values");
    colors.add("Red");
    colors.add("Blue");
    colors.add("Green");
    colors.offer("White");
    colors.offer("Black");
    System.out.println("Result: " + colors);
    System.out.println("Is queue full? " + colors.isFull());
    System.out.println("Is queue at full capacity? " + 
                                   colors.isAtFullCapacity());

    System.out.println("\nAdding Orange, Violet, Pink...");
    colors.add("Orange");
    colors.add("Violet");
    colors.add("Pink");
    System.out.println("Result: " + colors);
    System.out.println("Is queue at full capacity? " + 
                                   colors.isAtFullCapacity());
  } // end of main()

}  // end of CircularQueueTester class
