package nloc;

import java.util.List;
import java.util.ArrayList;
import java.util.ListIterator;
import java.util.Arrays;

public class TestNloc {


  public static void main(String[] args) {

    Nloc nloc0 = new Nloc(getNloc0());
    Nloc nloc1 = new Nloc(getNloc1());
    Nloc nloc2 = new Nloc(getNloc2());
    Nloc nloc3 = new Nloc(getNloc3());
    Nloc nloc4 = new Nloc(getNloc4());

  }

  public static void printPath(List<Channel> path) {
    for (Channel ch : path) {
      System.out.print("ID: " + ch.getID() + " ");
    }
    System.out.println("");
  }

  public static void printPaths(List<List<Channel>> pathlist) {
    System.out.println("Number of paths found: " + pathlist.size());
    for (List<Channel> p : pathlist) {
      printPath(p);
    }
  }

  public static List<Channel> getNloc0() {

    Channel chan0 = new Channel("ch0",6,6);
    Channel chan1 = new Channel("ch1",8,8);
    Channel chan2 = new Channel("ch2",9,9);
    Channel chan3 = new Channel("ch3",11,12);
    Channel chan4 = new Channel("ch4",19,21);
    Channel chan5 = new Channel("ch5",5,5);
    Channel chan6 = new Channel("ch6",8,8);
    Channel chan7 = new Channel("ch7",9,10);
    Channel chan8 = new Channel("ch8",25,28);

    Module m0 = new Module("m0", 22,10);
    Module m1 = new Module("m1", 10,10);

    Pump p0 = new Pump();
    Sink s0 = new Sink();

    List<Channel> chanlist = Arrays.asList(chan0, chan1, chan2, chan3, chan4,
        chan5, chan6, chan7, chan8, m0, m1, p0, s0);

    p0.addChild(chan0);
    chan0.addChild(chan1);
    chan1.addChild(chan2);
    chan1.addChild(chan3);
    chan2.addChild(chan4);
    chan3.addChild(chan5);
    chan5.addChild(m0);
    m0.addChild(chan6);
    chan4.addChild(chan7);
    chan6.addChild(chan7);
    chan7.addChild(m1);
    m1.addChild(chan8);
    chan8.addChild(s0);

    return chanlist;
  }

  public static List<Channel> getNloc0() {

    Channel chan0 = new Channel("ch0",6,6);
    Channel chan1 = new Channel("ch1",8,8);
    Channel chan2 = new Channel("ch2",9,9);
    Channel chan3 = new Channel("ch3",11,12);
    Channel chan4 = new Channel("ch4",19,21);
    Channel chan5 = new Channel("ch5",5,5);
    Channel chan6 = new Channel("ch6",8,8);
    Channel chan7 = new Channel("ch7",9,10);
    Channel chan8 = new Channel("ch8",25,28);

    Module m0 = new Module("m0", 22,10);
    Module m1 = new Module("m1", 10,10);

    Pump p0 = new Pump();
    Sink s0 = new Sink();

    List<Channel> chanlist = Arrays.asList(chan0, chan1, chan2, chan3, chan4,
        chan5, chan6, chan7, chan8, m0, m1, p0, s0);

    p0.addChild(chan0);
    chan0.addChild(chan1);
    chan1.addChild(chan2);
    chan1.addChild(chan3);
    chan2.addChild(chan4);
    chan3.addChild(chan5);
    chan5.addChild(m0);
    m0.addChild(chan6);
    chan4.addChild(chan7);
    chan6.addChild(chan7);
    chan7.addChild(m1);
    m1.addChild(chan8);
    chan8.addChild(s0);

    return chanlist;
  }

  public static List<Channel> getNloc1() {
    Channel chan0 = new Channel("ch0",8,8);
    Channel chan1 = new Channel("ch1",8,8);
    Channel chan2 = new Channel("ch2",11,12);
    Channel chan3 = new Channel("ch3",19,21);
    Channel chan4 = new Channel("ch4",35,39);
    Channel chan5 = new Channel("ch5",10,11);
    Channel chan6 = new Channel("ch6",10,11);
    Channel chan7 = new Channel("ch7",12,13);
    Channel chan8 = new Channel("ch8",10,11);
    Channel chan9 = new Channel("ch9",10,11);
    Channel chan10 = new Channel("ch10",25,27);
    Channel chan11 = new Channel("ch11",10,11);
    Channel chan12 = new Channel("ch12",12,13);
    Channel chan13 = new Channel("ch13",13,14);
    Channel chan14 = new Channel("ch14",8,8);
    Channel chan15 = new Channel("ch15",8,8);
    Channel chan16 = new Channel("ch16",8,8);
    Channel chan17 = new Channel("ch17",8,8);
    Channel chan18 = new Channel("ch18",20,21);
    Channel chan19 = new Channel("ch19",20,21);
    Channel chan20 = new Channel("ch20",99,108);

    Module m0 = new Module("m0", 12,10);
    Module m1 = new Module("m1", 10,10);
    Module m2 = new Module("m2", 12,10);
    Module m3 = new Module("m3", 10,10);
    Module m4 = new Module("m4", 10,10);

    Pump p0 = new Pump();
    Sink s0 = new Sink();

    List<Channel> chanlist = Arrays.asList(chan0, chan1, chan2, chan3, chan4,
        chan5, chan6, chan7, chan8, chan9, chan10, chan11, chan12, chan13,
        chan14, chan15, chan16, chan17, chan18, chan19, chan20, m0, m1, m2, 
        m3, m4, p0, s0);

    p0.addChild(chan0);
    chan0.addChild(chan1);
    chan0.addChild(chan2);
    chan1.addChild(chan3);
    chan3.addChild(m0);
    m0.addChild(chan4);
    chan4.addChild(chan20);
    chan20.addChild(s0);

    chan2.addChild(chan5);
    chan5.addChild(chan6);
    chan5.addChild(chan7);
    chan6.addChild(chan8);
    chan8.addChild(m1);
    m1.addChild(chan10);
    chan10.addChild(chan19);
    chan19.addChild(chan20);

    chan7.addChild(chan9);
    chan9.addChild(m2);
    m2.addChild(chan11);
    chan11.addChild(chan12);
    chan11.addChild(chan13);
    chan12.addChild(chan14);
    chan14.addChild(m3);
    m3.addChild(chan16);
    chan16.addChild(chan18);
    chan18.addChild(chan19);

    chan13.addChild(chan15);
    chan15.addChild(m4);
    m4.addChild(chan17);
    chan17.addChild(chan18);

    return chanlist;
  }

  public static List<Channel> getNloc2() {
    Channel chan0 = new Channel("ch0",8,8);
    Channel chan1 = new Channel("ch1",10,11);
    Channel chan2 = new Channel("ch2",11,12);
    Channel chan3 = new Channel("ch3",19,21);
    Channel chan4 = new Channel("ch4",19,21);
    Channel chan5 = new Channel("ch5",35,39);
    Channel chan6 = new Channel("ch6",8,8);
    Channel chan7 = new Channel("ch7",10,11);
    Channel chan8 = new Channel("ch8",11,12);
    Channel chan9 = new Channel("ch9",10,11);
    Channel chan10 = new Channel("ch10",10,11);
    Channel chan11 = new Channel("ch11",8,8);
    Channel chan12 = new Channel("ch12",10,11);
    Channel chan13 = new Channel("ch13",11,12);
    Channel chan14 = new Channel("ch14",10,11);
    Channel chan15 = new Channel("ch15",10,11);
    Channel chan16 = new Channel("ch16",13,14);

    Module m0 = new Module("m0", 12,10);
    Module m1 = new Module("m1", 10,10);
    Module m2 = new Module("m2", 12,10);
    Module m3 = new Module("m3", 10,10);
    Module m4 = new Module("m4", 10,10);

    Pump p0 = new Pump();
    Sink s0 = new Sink();

    List<Channel> chanlist = Arrays.asList(chan0, chan1, chan2, chan3, chan4,
        chan5, chan6, chan7, chan8, chan9, chan10, chan11, chan12, chan13,
        chan14, chan15, chan16, m0, m1, m2, m3, m4, p0, s0);

    p0.addChild(chan0);
    chan0.addChild(chan1);
    chan0.addChild(chan2);
    chan1.addChild(chan3);
    chan3.addChild(m4);
    m4.addChild(chan4);
    chan4.addChild(chan5);
    chan5.addChild(s0);

    chan2.addChild(chan6);
    chan6.addChild(chan7);
    chan6.addChild(chan8);
    chan7.addChild(m0);
    chan8.addChild(m1);
    m0.addChild(chan9);
    m1.addChild(chan10);
    chan9.addChild(chan11);
    chan10.addChild(chan11);

    chan11.addChild(chan12);
    chan11.addChild(chan13);
    chan12.addChild(m2);
    chan13.addChild(m3);
    m2.addChild(chan14);
    m3.addChild(chan15);
    chan15.addChild(chan16);
    chan14.addChild(chan16);
    chan16.addChild(chan5);

    return chanlist;
  }

  public static List<Channel> getNloc3() {
    Channel chan0 = new Channel("ch0",7,7);
    Channel chan1 = new Channel("ch1",8,8);
    Channel chan2 = new Channel("ch2",9,9);
    Channel chan3 = new Channel("ch3",19,19);
    Channel chan4 = new Channel("ch4",19,19);
    Channel chan5 = new Channel("ch5",7,7);
    Channel chan6 = new Channel("ch6",8,8);
    Channel chan7 = new Channel("ch7",9,9);
    Channel chan8 = new Channel("ch8",25,28);
    Channel chan9 = new Channel("ch9",25,28);
    Channel chan10 = new Channel("ch10",25,28);

    Module m0 = new Module("m0", 10,10);
    Module m1 = new Module("m1", 10,10);
    Module m2 = new Module("m2", 10,10);
    Module m3 = new Module("m3", 10,10);

    Pump p0 = new Pump();
    Sink s0 = new Sink();

    List<Channel> chanlist = Arrays.asList(chan0, chan1, chan2, chan3, chan4,
        chan5, chan6, chan7, chan8, chan9, chan10, m0, m1, m2, m3, p0, s0);

    p0.addChild(chan0);
    chan0.addChild(chan1);
    chan0.addChild(chan2);
    chan1.addChild(m0);
    m0.addChild(chan3);
    chan3.addChild(chan5);
    chan2.addChild(m1);
    m1.addChild(chan4);
    chan4.addChild(chan5);
    chan5.addChild(chan6);
    chan5.addChild(chan7);
    chan6.addChild(m2);
    chan7.addChild(m3);
    m2.addChild(chan8);
    m3.addChild(chan9);
    chan8.addChild(chan10);
    chan9.addChild(chan10);
    chan10.addChild(s0);

    return chanlist;
  }

  public static List<Channel> getNloc4() {
    Channel chan0 = new Channel("ch0",8,8);
    Channel chan1 = new Channel("ch1",8,8);
    Channel chan2 = new Channel("ch2",9,9);
    Channel chan3 = new Channel("ch3",19,19);
    Channel chan4 = new Channel("ch4",19,19);
    Channel chan5 = new Channel("ch5",8,8);
    Channel chan6 = new Channel("ch6",12,13);
    Channel chan7 = new Channel("ch7",13,14);
    Channel chan8 = new Channel("ch8",25,28);
    Channel chan9 = new Channel("ch9",25,28);
    Channel chan10 = new Channel("ch10",8,8);
    Channel chan11 = new Channel("ch11",12,13);
    Channel chan12 = new Channel("ch12",13,14);
    Channel chan13 = new Channel("ch13",25,28);
    Channel chan14 = new Channel("ch14",25,28);
    Channel chan15 = new Channel("ch15",99,108);

    Module m0 = new Module("m0", 10,10);
    Module m1 = new Module("m1", 10,10);
    Module m2 = new Module("m2", 10,10);
    Module m3 = new Module("m3", 10,10);
    Module m4 = new Module("m4", 10,10);
    Module m5 = new Module("m5", 10,10);

    Pump p0 = new Pump();
    Sink s0 = new Sink();

    List<Channel> chanlist = Arrays.asList(chan0, chan1, chan2, chan3, chan4,
        chan5, chan6, chan7, chan8, chan9, chan10, chan11, chan12, chan13, 
        chan14, chan15, m0, m1, m2, m3, p0, s0);

    p0.addChild(chan0);
    chan0.addChild(chan1);
    chan0.addChild(chan2);
    chan1.addChild(m0);
    chan2.addChild(m1);
    m0.addChild(chan3);
    m1.addChild(chan4);
    chan3.addChild(chan5);
    chan4.addChild(chan5);

    chan5.addChild(chan6);
    chan5.addChild(chan7);
    chan6.addChild(m2);
    chan7.addChild(m3);
    m2.addChild(chan8);
    m3.addChild(chan9);
    chan8.addChild(chan10);
    chan9.addChild(chan10);

    chan10.addChild(chan11);
    chan10.addChild(chan12);
    chan11.addChild(m4);
    chan12.addChild(m5);
    m4.addChild(chan13);
    m5.addChild(chan14);
    chan13.addChild(chan15);
    chan14.addChild(chan15);

    chan15.addChild(s0);

    return chanlist;
  }
}