Skip to content
Snippets Groups Projects
Commit 4d542a15 authored by Nelson Tavares de Sousa's avatar Nelson Tavares de Sousa
Browse files

Merge branch 'onSignal-visibility' into 'master'

Fixes #260

As the merger does not have any separated logic anymore, the tests can
be moved to AStageTest

See merge request !79
parents 72ce2501 8f1dfb66
Branches
Tags
No related merge requests found
...@@ -210,7 +210,7 @@ public abstract class AbstractStage { ...@@ -210,7 +210,7 @@ public abstract class AbstractStage {
* The port which received the signal * The port which received the signal
*/ */
@SuppressWarnings("PMD.DataflowAnomalyAnalysis") @SuppressWarnings("PMD.DataflowAnomalyAnalysis")
public final void onSignal(final ISignal signal, final InputPort<?> inputPort) { final void onSignal(final ISignal signal, final InputPort<?> inputPort) {
Class<? extends ISignal> signalClass = signal.getClass(); Class<? extends ISignal> signalClass = signal.getClass();
Set<InputPort<?>> signalReceivedInputPorts; Set<InputPort<?>> signalReceivedInputPorts;
......
...@@ -23,11 +23,16 @@ import static org.junit.Assert.assertThat; ...@@ -23,11 +23,16 @@ import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue; import static org.junit.Assert.assertTrue;
import org.junit.Assert; import org.junit.Assert;
import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import teetime.framework.signal.StartingSignal;
import teetime.framework.signal.TerminatingSignal;
import teetime.stage.Cache; import teetime.stage.Cache;
import teetime.stage.Counter; import teetime.stage.Counter;
import teetime.stage.InitialElementProducer; import teetime.stage.InitialElementProducer;
import teetime.stage.basic.merger.Merger;
import teetime.stage.basic.merger.MergerTestingPipe;
public class AbstractStageTest { public class AbstractStageTest {
...@@ -93,4 +98,91 @@ public class AbstractStageTest { ...@@ -93,4 +98,91 @@ public class AbstractStageTest {
} }
//
//
// Moved from MergerSignalTest
//
//
private Merger<Integer> arbitraryStage;
private InputPort<Integer> firstPort;
private InputPort<Integer> secondPort;
private MergerTestingPipe mergerOutputPipe;
@Before
public void beforeSignalTesting() {
arbitraryStage = new Merger<Integer>();
arbitraryStage.declareActive(); // necessary to initialize the owning thread for onStarting()
firstPort = arbitraryStage.getNewInputPort();
secondPort = arbitraryStage.getNewInputPort();
mergerOutputPipe = new MergerTestingPipe();
arbitraryStage.getOutputPort().setPipe(mergerOutputPipe);
}
@Test
public void testSameSignal() {
((AbstractStage) arbitraryStage).onSignal(new StartingSignal(), firstPort);
assertTrue(mergerOutputPipe.startSent());
mergerOutputPipe.reset();
((AbstractStage) arbitraryStage).onSignal(new StartingSignal(), secondPort);
assertFalse(mergerOutputPipe.startSent());
}
@Test
public void testDifferentSignals() {
((AbstractStage) arbitraryStage).onSignal(new StartingSignal(), firstPort);
assertTrue(mergerOutputPipe.startSent());
mergerOutputPipe.reset();
((AbstractStage) arbitraryStage).onSignal(new TerminatingSignal(), secondPort);
assertFalse(mergerOutputPipe.startSent());
}
@Test
public void testInterleavedSignals() {
((AbstractStage) arbitraryStage).onSignal(new StartingSignal(), firstPort);
assertTrue(mergerOutputPipe.startSent());
assertFalse(mergerOutputPipe.terminateSent());
mergerOutputPipe.reset();
((AbstractStage) arbitraryStage).onSignal(new TerminatingSignal(), secondPort);
assertFalse(mergerOutputPipe.startSent());
assertFalse(mergerOutputPipe.terminateSent());
mergerOutputPipe.reset();
((AbstractStage) arbitraryStage).onSignal(new TerminatingSignal(), firstPort);
assertFalse(mergerOutputPipe.startSent());
assertTrue(mergerOutputPipe.terminateSent());
mergerOutputPipe.reset();
((AbstractStage) arbitraryStage).onSignal(new TerminatingSignal(), firstPort);
assertFalse(mergerOutputPipe.startSent());
assertFalse(mergerOutputPipe.terminateSent());
mergerOutputPipe.reset();
((AbstractStage) arbitraryStage).onSignal(new StartingSignal(), secondPort);
assertFalse(mergerOutputPipe.startSent());
assertFalse(mergerOutputPipe.terminateSent());
}
@Test
public void testMultipleSignals() {
((AbstractStage) arbitraryStage).onSignal(new StartingSignal(), firstPort);
assertTrue(mergerOutputPipe.startSent());
mergerOutputPipe.reset();
((AbstractStage) arbitraryStage).onSignal(new StartingSignal(), firstPort);
assertFalse(mergerOutputPipe.startSent());
mergerOutputPipe.reset();
((AbstractStage) arbitraryStage).onSignal(new StartingSignal(), firstPort);
assertFalse(mergerOutputPipe.startSent());
mergerOutputPipe.reset();
((AbstractStage) arbitraryStage).onSignal(new StartingSignal(), secondPort);
assertFalse(mergerOutputPipe.startSent());
}
} }
/**
* Copyright (C) 2015 Christian Wulf, Nelson Tavares de Sousa (http://teetime-framework.github.io)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package teetime.stage.basic.merger;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import org.junit.Before;
import org.junit.Test;
import teetime.framework.InputPort;
import teetime.framework.signal.StartingSignal;
import teetime.framework.signal.TerminatingSignal;
public class MergerSignalTest {
private Merger<Integer> merger;
private InputPort<Integer> firstPort;
private InputPort<Integer> secondPort;
private MergerTestingPipe mergerOutputPipe;
@Before
public void beforeSignalTesting() {
merger = new Merger<Integer>();
merger.declareActive(); // necessary to initialize the owning thread for onStarting()
firstPort = merger.getNewInputPort();
secondPort = merger.getNewInputPort();
mergerOutputPipe = new MergerTestingPipe();
merger.getOutputPort().setPipe(mergerOutputPipe);
}
@Test
public void testSameSignal() {
merger.onSignal(new StartingSignal(), firstPort);
assertTrue(mergerOutputPipe.startSent());
mergerOutputPipe.reset();
merger.onSignal(new StartingSignal(), secondPort);
assertFalse(mergerOutputPipe.startSent());
}
@Test
public void testDifferentSignals() {
merger.onSignal(new StartingSignal(), firstPort);
assertTrue(mergerOutputPipe.startSent());
mergerOutputPipe.reset();
merger.onSignal(new TerminatingSignal(), secondPort);
assertFalse(mergerOutputPipe.startSent());
}
@Test
public void testInterleavedSignals() {
merger.onSignal(new StartingSignal(), firstPort);
assertTrue(mergerOutputPipe.startSent());
assertFalse(mergerOutputPipe.terminateSent());
mergerOutputPipe.reset();
merger.onSignal(new TerminatingSignal(), secondPort);
assertFalse(mergerOutputPipe.startSent());
assertFalse(mergerOutputPipe.terminateSent());
mergerOutputPipe.reset();
merger.onSignal(new TerminatingSignal(), firstPort);
assertFalse(mergerOutputPipe.startSent());
assertTrue(mergerOutputPipe.terminateSent());
mergerOutputPipe.reset();
merger.onSignal(new TerminatingSignal(), firstPort);
assertFalse(mergerOutputPipe.startSent());
assertFalse(mergerOutputPipe.terminateSent());
mergerOutputPipe.reset();
merger.onSignal(new StartingSignal(), secondPort);
assertFalse(mergerOutputPipe.startSent());
assertFalse(mergerOutputPipe.terminateSent());
}
@Test
public void testMultipleSignals() {
merger.onSignal(new StartingSignal(), firstPort);
assertTrue(mergerOutputPipe.startSent());
mergerOutputPipe.reset();
merger.onSignal(new StartingSignal(), firstPort);
assertFalse(mergerOutputPipe.startSent());
mergerOutputPipe.reset();
merger.onSignal(new StartingSignal(), firstPort);
assertFalse(mergerOutputPipe.startSent());
mergerOutputPipe.reset();
merger.onSignal(new StartingSignal(), secondPort);
assertFalse(mergerOutputPipe.startSent());
}
}
...@@ -22,7 +22,7 @@ import teetime.framework.signal.ISignal; ...@@ -22,7 +22,7 @@ import teetime.framework.signal.ISignal;
import teetime.framework.signal.StartingSignal; import teetime.framework.signal.StartingSignal;
import teetime.framework.signal.TerminatingSignal; import teetime.framework.signal.TerminatingSignal;
class MergerTestingPipe implements IPipe<Object> { public class MergerTestingPipe implements IPipe<Object> {
private boolean startSent = false; private boolean startSent = false;
private boolean terminateSent = false; private boolean terminateSent = false;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment