/**
* {@link StageBlock#compaction()}
*/
@Test
public void compaction_bypass() {
FlowGraphGenerator gen = new FlowGraphGenerator();
gen.defineInput("in1");
gen.definePseud("id");
gen.defineOperator("op1", "in", "out");
gen.defineOutput("out1");
gen.connect("in1", "id").connect("id", "out1");
gen.connect("in1", "op1").connect("op1", "out1");
FlowBlock bin = FlowBlock.fromPorts(
0,
gen.toGraph(),
new ArrayList<FlowElementInput>(gen.inputs()),
Arrays.asList(gen.output("in1")),
gen.getAsSet("in1"));
FlowBlock b1 = FlowBlock.fromPorts(
0,
gen.toGraph(),
Arrays.asList(gen.input("op1"), gen.input("id")),
Arrays.asList(gen.output("op1"), gen.output("id")),
gen.getAsSet("op1", "id"));
FlowBlock bout = FlowBlock.fromPorts(
0,
gen.toGraph(),
Arrays.asList(gen.input("out1")),
new ArrayList<FlowElementOutput>(gen.outputs()),
gen.getAsSet("out1"));
FlowBlock.connect(bin.getBlockOutputs().get(0), b1.getBlockInputs().get(0));
FlowBlock.connect(bin.getBlockOutputs().get(0), b1.getBlockInputs().get(1));
FlowBlock.connect(b1.getBlockOutputs().get(0), bout.getBlockInputs().get(0));
FlowBlock.connect(b1.getBlockOutputs().get(1), bout.getBlockInputs().get(0));
bin.detach();
b1.detach();
bout.detach();
StageBlock stage = new StageBlock(set(b1), set());
assertThat(stage.compaction(), is(true));
assertThat(stage.getMapBlocks().size(), is(1));
assertThat(b1.getBlockInputs().size(), is(1));
assertThat(b1.getBlockOutputs().size(), is(1));
assertThat(b1.getBlockInputs().get(0).getElementPort().getDescription(),
is(gen.input("op1").getDescription()));
assertThat(b1.getBlockOutputs().get(0).getElementPort().getDescription(),
is(gen.output("op1").getDescription()));
FlowBlock.Output binOut = bin.getBlockOutputs().get(0);
FlowBlock.Input boutIn = bout.getBlockInputs().get(0);
assertThat(binOut.getConnections().size(), is(2));
assertThat(boutIn.getConnections().size(), is(2));