package uk.ac.imperial.lsds.seepworker.core;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import org.junit.Test;
import uk.ac.imperial.lsds.seep.api.API;
import uk.ac.imperial.lsds.seep.api.data.ITuple;
import uk.ac.imperial.lsds.seep.api.data.OTuple;
import uk.ac.imperial.lsds.seep.api.data.Schema;
import uk.ac.imperial.lsds.seep.api.data.Schema.SchemaBuilder;
import uk.ac.imperial.lsds.seep.api.data.TransporterITuple;
import uk.ac.imperial.lsds.seep.api.data.Type;
import uk.ac.imperial.lsds.seep.api.operator.SeepLogicalQuery;
import uk.ac.imperial.lsds.seep.scheduler.ScheduleDescription;
import uk.ac.imperial.lsds.seep.scheduler.Stage;
import uk.ac.imperial.lsds.seep.testutils.LongPipelineBase;
public class ScheduleTaskTest {
@Test
public void testCreateScheduleTasks() {
LongPipelineBase lpb = new LongPipelineBase();
SeepLogicalQuery lsq = lpb.compose();
// Create stage manually (scheduler not accessible from this module)
Stage s1 = new Stage(0);
s1.add(-1);
Stage s2 = new Stage(1);
s2.add(-10);
Stage s3 = new Stage(2);
s3.add(1);
s3.add(2);
s3.add(3);
Stage s4 = new Stage(3);
s4.add(4);
Stage s5 = new Stage(4);
s5.add(5);
Stage s6 = new Stage(5);
s6.add(-2);
// Create ScheduleDescription, with stages and operators
Set<Stage> stages = new HashSet<>();
stages.add(s1);
stages.add(s2);
stages.add(s3);
stages.add(s4);
stages.add(s5);
stages.add(s6);
ScheduleDescription sd = new ScheduleDescription(stages, lsq.getAllOperators());
// Build scheduleTasks from Stages
ScheduleTask st1 = ScheduleTask.buildTaskFor(0, s1, sd);
ScheduleTask st2 = ScheduleTask.buildTaskFor(0, s2, sd);
ScheduleTask st3 = ScheduleTask.buildTaskFor(0, s3, sd);
ScheduleTask st4 = ScheduleTask.buildTaskFor(0, s4, sd);
ScheduleTask st5 = ScheduleTask.buildTaskFor(0, s5, sd);
ScheduleTask st6 = ScheduleTask.buildTaskFor(0, s6, sd);
// setUp tasks
st1.setUp();
st2.setUp();
st3.setUp();
st4.setUp();
st5.setUp();
st6.setUp();
// print tasks for visual inspection
System.out.println("T1: "+st1.toString());
System.out.println("T2: "+st2.toString());
System.out.println("T3: "+st3.toString());
System.out.println("T4: "+st4.toString());
System.out.println("T5: "+st5.toString());
System.out.println("T6: "+st6.toString());
List<Integer> l = new ArrayList<>();
Iterator<Integer> i = l.iterator();
boolean yes = i.hasNext();
// run tasks
Schema schema = SchemaBuilder.getInstance().newField(Type.SHORT, "id").build();
//byte[] d = OTuple.create(schema, schema.names(), schema.defaultValues());
OTuple o = new OTuple(schema);
o.setValues(schema.defaultValues());
//ITuple data = new ITuple(schema);
TransporterITuple data = new TransporterITuple(schema);
// data.setData(d);
data.setValues(o.getValues());
API api = new SimpleCollector();
st1.processData(data, api);
//byte[] output = ((SimpleCollector)api).collect();
OTuple ot = ((SimpleCollector)api).collect();
TransporterITuple out = new TransporterITuple(schema);
out.setValues(ot.getValues());
System.out.println(out.toString());
st3.processData(data, api);
OTuple output = ((SimpleCollector)api).collect();
out = new TransporterITuple(schema);
out.setValues(output.getValues());
System.out.println(out.toString());
}
}