// Arup Guha
// 3/30/2026
// Some TreeSet tests (mostly unique to TreeSet and not in HashSet)
// A TreeSet can do everything a HashSet can, just a bit slower.

import java.util.*;

public class TestTreeSet {

	public static void main(String[] args) {
	
		// Make a TreeSet object.
		TreeSet<Integer> myTreeSet = new TreeSet<Integer>();
		
		Random rndObj = new Random();
		
		// Insert some random numbers into the set. We should see some repeats...
		for (int i=0; i<20; i++) {
			int term = rndObj.nextInt(100);
			System.out.println("Inserting "+term+" into set");
			myTreeSet.add(term);
			System.out.print("set is : ");
			print(myTreeSet);
		}
		
		// Tests for lower, higher, ceiling floor.
		for (int i=0; i<10; i++) {
			
			int term = rndObj.nextInt(100);
			System.out.println("Query number is "+term);
			
			// Test all four of these.
			Integer myLower = myTreeSet.lower(term);
			Integer myHigher = myTreeSet.higher(term);
			Integer myFloor = myTreeSet.floor(term);
			Integer myCeiling = myTreeSet.ceiling(term);
			
			// Make sure we don't crash!
			if (myLower != null) System.out.println("lower said "+myLower);
			if (myHigher != null) System.out.println("higher said "+myHigher);
			if (myFloor != null) System.out.println("floor said "+myFloor);
			if (myCeiling != null) System.out.println("ceiling said "+myCeiling);
			System.out.println();
		}
	
	}
	
	// How to loop through a set...
	public static void print(TreeSet<Integer> set) {
		for (Integer x: set)
			System.out.print(x+" ");
		System.out.println();
	}
}