package listFW.test;

import listFW.*;
import listFW.factory.*;
import listFW.visitor.*;

public class Test {

    private IListFactory _fact;
    private IListAlgo _remMin;
    private IList _list0;
    private IList _list1;
    private IList _list2;
    private IList _list3;

    public Test(IListFactory f) {
        _fact = f;
        _remMin = new RemMin(f);
        _list0 = f.makeEmptyList();
        _list1 = f.makeNEList(new Integer(55), _list0); // (55)
        _list2 = f.makeNEList(new Integer(13), _list1); // (13 55)
        _list3 = f.makeNEList(new Integer(40), _list2); // (40 13 55)
    }

    private String toStr(IList s, Object list) {
        //System.out.println(list.toString());
        //return null;
        return s.execute(ToString.Singleton, null) + " " +
                ((IList)list).execute(ToString.Singleton, null);
    }

    private void run() {
        System.out.println(toStr(_list0, _list0.execute(_remMin, null)));
        System.out.println(toStr(_list1, _list1.execute(_remMin, null)));
        System.out.println(toStr(_list2, _list2.execute(_remMin, null)));
        System.out.println(toStr(_list3, _list3.execute(_remMin, null)));
    }

    public static void main(String[] args) {
        Test test1 = new Test(CompositeListFactory.Singleton);
        test1.run();
    }
}