From b2a6ac558e67f6aee24bbe0018288d70db26987b Mon Sep 17 00:00:00 2001 From: Nelson Tavares de Sousa <stu103017@mail.uni-kiel.de> Date: Thu, 16 Oct 2014 16:08:12 +0200 Subject: [PATCH] added IterableProducer, which was not needed in the end, but could be helpful in the future added test, to validate signalhandling in interthread pipes --- .../java/teetime/stage/IterableProducer.java | 21 +++++++++ .../pipe/SignalQueueConfiguration.java | 24 ++++++++++ .../examples/pipe/SignalQueueTest.java | 44 +++++++++++++++++++ 3 files changed, 89 insertions(+) create mode 100644 src/main/java/teetime/stage/IterableProducer.java create mode 100644 src/test/java/teetime/examples/pipe/SignalQueueConfiguration.java create mode 100644 src/test/java/teetime/examples/pipe/SignalQueueTest.java diff --git a/src/main/java/teetime/stage/IterableProducer.java b/src/main/java/teetime/stage/IterableProducer.java new file mode 100644 index 00000000..7d9eadde --- /dev/null +++ b/src/main/java/teetime/stage/IterableProducer.java @@ -0,0 +1,21 @@ +package teetime.stage; + +import teetime.framework.ProducerStage; + +public class IterableProducer<O extends Iterable<T>, T> extends ProducerStage<T> { + + private O iter = null; + + public IterableProducer(final O iter) { + this.iter = iter; + } + + @Override + protected void execute() { + for (T i : iter) { + this.send(this.outputPort, i); + } + + } + +} diff --git a/src/test/java/teetime/examples/pipe/SignalQueueConfiguration.java b/src/test/java/teetime/examples/pipe/SignalQueueConfiguration.java new file mode 100644 index 00000000..b86c7023 --- /dev/null +++ b/src/test/java/teetime/examples/pipe/SignalQueueConfiguration.java @@ -0,0 +1,24 @@ +package teetime.examples.pipe; + +import teetime.framework.AnalysisConfiguration; +import teetime.framework.ConsumerStage; +import teetime.framework.ProducerStage; +import teetime.framework.pipe.PipeFactoryRegistry.PipeOrdering; +import teetime.framework.pipe.PipeFactoryRegistry.ThreadCommunication; +import teetime.framework.pipe.SpScPipe; +import teetime.stage.Cache; +import teetime.stage.Clock; + +public class SignalQueueConfiguration extends AnalysisConfiguration { + + public SpScPipe pipe; + + public SignalQueueConfiguration() { + + ProducerStage<Long> first = new Clock(); + ConsumerStage<Long> second = new Cache<Long>(); + + pipe = (SpScPipe) PIPE_FACTORY_REGISTRY.getPipeFactory(ThreadCommunication.INTER, PipeOrdering.QUEUE_BASED, false) + .create(first.getOutputPort(), second.getInputPort()); + } +} diff --git a/src/test/java/teetime/examples/pipe/SignalQueueTest.java b/src/test/java/teetime/examples/pipe/SignalQueueTest.java new file mode 100644 index 00000000..4b31ab26 --- /dev/null +++ b/src/test/java/teetime/examples/pipe/SignalQueueTest.java @@ -0,0 +1,44 @@ +package teetime.examples.pipe; + +import java.util.ArrayList; + +import org.junit.Assert; +import org.junit.Test; + +import teetime.framework.pipe.SpScPipe; +import teetime.framework.signal.ISignal; +import teetime.framework.signal.StartingSignal; +import teetime.framework.signal.TerminatingSignal; +import teetime.framework.signal.ValidatingSignal; + +public class SignalQueueTest { + + @Test + public void executeTest() { + ArrayList<ISignal> list = new ArrayList<ISignal>(); + list.add(new StartingSignal()); + list.add(new TerminatingSignal()); + list.add(new ValidatingSignal()); + list.add(new StartingSignal()); + list.add(new TerminatingSignal()); + list.add(new ValidatingSignal()); + list.add(new StartingSignal()); + list.add(new TerminatingSignal()); + list.add(new ValidatingSignal()); + + SpScPipe pipe = new SignalQueueConfiguration().pipe; + for (ISignal s : list) { + pipe.setSignal(s); + } + + ArrayList<ISignal> secondList = new ArrayList<ISignal>(); + while (true) { + ISignal temp = pipe.getSignal(); + if (temp == null) { + break; + } + secondList.add(temp); + } + Assert.assertEquals(list, secondList); + } +} -- GitLab