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