import java.util.*;

public class TestSet {

    public static Vector<Integer> sortInterInt(Vector<Integer> v, SetInterInt set) {
	for (int i: v) set.insert(i);
	return set.vector();
    }

    // Generic Version
    public static Vector<Integer> sortInter(Vector<Integer> v, SetInter<Integer> set) {
	for (Integer i: v) set.insert(i);
	return set.vector();
    }

    public static void main(String args[])
    {
	Vector<Integer> in = new Vector<Integer>
	    (Arrays.asList(3,11,7,2,0,8,12,5,6,5,25,3,1,9));

	System.out.println(in);
	System.out.println(sortInterInt(in, new BinTreeIntSimple()));
	System.out.println(sortInterInt(in, new BinTreeInt()));
	System.out.println(sortInter(in, new BinTree<Integer>()));

	System.out.println("\n\nDELETE (8, 2, 14):");
	SetInter<Integer> set = new BinTree<Integer>();
	for (Integer i : in) set.insert(i);
	System.out.println(set.vector());
	set.delete(8);
	set.delete(2);
	set.delete(14);
	System.out.println(set.vector());

	System.out.println("\n\nSPLIT:");
	BinTree<Integer> tr = new BinTree<Integer>();
	Random gen = new Random();
	for (int i=0; i<20; i++) tr.insert(gen.nextInt(100));
	System.out.println(tr.vector());
	int cut = gen.nextInt(100);
	System.out.println("cut = "+cut);
	BinTree<Integer> v = tr.split(cut);
	System.out.println(v.vector() + " | " + tr.vector());

	System.out.println("\n\nMERGE:");
	BinTree<Integer> tr2 = new BinTree<Integer>();
	for (int i=0; i<20; i++) tr2.insert(gen.nextInt(100));
	System.out.println(tr.vector() + " | " + tr2.vector());
	tr.merge(tr2);
	System.out.println(tr.vector() + " | " + tr2.vector());
	System.out.println("\n\nIterators:");
	System.out.print("Prefix  : ");
	for (int i : tr.prefix()) System.out.print(i+" ");
	System.out.println();
	System.out.print("Infix   : ");
	for (int i : tr.infix()) System.out.print(i+" ");
	System.out.println();
	System.out.print("Postfix : ");
	for (int i : tr.postfix()) System.out.print(i+" ");
	System.out.println();
    }

}

