simplification of the ValueTableObserver

This commit is contained in:
hneemann 2021-05-01 10:08:49 +02:00
parent e6ea6f4ccd
commit f7ba7e2754
3 changed files with 49 additions and 44 deletions

View File

@ -8,10 +8,6 @@
{{de 4-Bit Ripple-Carry addierer bestehend aus vier
Volladdierern.}}</string>
</entry>
<entry>
<string>showDataGraphMicro</string>
<boolean>true</boolean>
</entry>
</attributes>
<visualElements>
<visualElement>

View File

@ -21,7 +21,8 @@ import java.util.ArrayList;
public class ValueTableObserver implements ModelStateObserverTyped {
private final ValueTable logData;
private final ModelEventType type;
private final Condition condition;
private final ModelEventType[] events;
private final ArrayList<Signal> signals;
/**
@ -33,10 +34,13 @@ public class ValueTableObserver implements ModelStateObserverTyped {
*/
public ValueTableObserver(boolean microStep, ArrayList<Signal> signals, int maxSize) {
this.signals = signals;
if (microStep)
this.type = ModelEventType.MICROSTEP;
else
this.type = ModelEventType.STEP;
if (microStep) {
condition = type -> type == ModelEventType.MICROSTEP;
events = new ModelEventType[]{ModelEventType.MICROSTEP};
} else {
condition = type -> type == ModelEventType.STEP || type == ModelEventType.CHECKBURN;
events = new ModelEventType[]{ModelEventType.STEP, ModelEventType.CHECKBURN};
}
String[] names = new String[signals.size()];
for (int i = 0; i < signals.size(); i++)
@ -49,7 +53,7 @@ public class ValueTableObserver implements ModelStateObserverTyped {
if (event == ModelEvent.STARTED)
logData.clear();
if (event.getType() == type || event.getType() == ModelEventType.CHECKBURN) {
if (condition.accept(event.getType())) {
Value[] row = new Value[logData.getColumns()];
for (int i = 0; i < logData.getColumns(); i++)
row[i] = new Value(signals.get(i).getValue());
@ -58,8 +62,8 @@ public class ValueTableObserver implements ModelStateObserverTyped {
}
@Override
public ModelEventType[] getEvents() { // missing of ModelEventType.CHECKBURN is intended!
return new ModelEventType[]{type, ModelEventType.STARTED};
public ModelEventType[] getEvents() {
return events;
}
/**
@ -68,4 +72,8 @@ public class ValueTableObserver implements ModelStateObserverTyped {
public ValueTable getLogData() {
return logData;
}
private interface Condition {
boolean accept(ModelEventType type);
}
}

View File

@ -35,11 +35,11 @@ public class TestCaseDescription extends TestCase {
.getObserver(ValueTableObserver.class)
.getLogData();
assertEquals(29, dataSet.getRows());
assertEquals(30, dataSet.getRows());
int i = 0;
for (TestRow ds : dataSet) {
assertEquals((~i) & 1, ds.getValue(0).getValue()); // clock
int s = i / 2 + 1;
assertEquals((i) & 1, ds.getValue(0).getValue()); // clock
int s = (i + 1) / 2;
assertEquals(s & 1, ds.getValue(1).getValue());//q_0
assertEquals((s >> 1) & 1, ds.getValue(2).getValue());//q_1
assertEquals((s >> 2) & 1, ds.getValue(3).getValue());//q_2
@ -59,34 +59,35 @@ public class TestCaseDescription extends TestCase {
StringWriter w = new StringWriter();
dataSet.saveCSV(new BufferedWriter(w));
assertEquals("\"step\",\"C\",\"q_0n\",\"q_1n\",\"q_2n\",\"q_3n\"\n" +
"\"0\",\"1\",\"1\",\"0\",\"0\",\"0\"\n" +
"\"1\",\"0\",\"1\",\"0\",\"0\",\"0\"\n" +
"\"2\",\"1\",\"0\",\"1\",\"0\",\"0\"\n" +
"\"3\",\"0\",\"0\",\"1\",\"0\",\"0\"\n" +
"\"4\",\"1\",\"1\",\"1\",\"0\",\"0\"\n" +
"\"5\",\"0\",\"1\",\"1\",\"0\",\"0\"\n" +
"\"6\",\"1\",\"0\",\"0\",\"1\",\"0\"\n" +
"\"7\",\"0\",\"0\",\"0\",\"1\",\"0\"\n" +
"\"8\",\"1\",\"1\",\"0\",\"1\",\"0\"\n" +
"\"9\",\"0\",\"1\",\"0\",\"1\",\"0\"\n" +
"\"10\",\"1\",\"0\",\"1\",\"1\",\"0\"\n" +
"\"11\",\"0\",\"0\",\"1\",\"1\",\"0\"\n" +
"\"12\",\"1\",\"1\",\"1\",\"1\",\"0\"\n" +
"\"13\",\"0\",\"1\",\"1\",\"1\",\"0\"\n" +
"\"14\",\"1\",\"0\",\"0\",\"0\",\"1\"\n" +
"\"15\",\"0\",\"0\",\"0\",\"0\",\"1\"\n" +
"\"16\",\"1\",\"1\",\"0\",\"0\",\"1\"\n" +
"\"17\",\"0\",\"1\",\"0\",\"0\",\"1\"\n" +
"\"18\",\"1\",\"0\",\"1\",\"0\",\"1\"\n" +
"\"19\",\"0\",\"0\",\"1\",\"0\",\"1\"\n" +
"\"20\",\"1\",\"1\",\"1\",\"0\",\"1\"\n" +
"\"21\",\"0\",\"1\",\"1\",\"0\",\"1\"\n" +
"\"22\",\"1\",\"0\",\"0\",\"1\",\"1\"\n" +
"\"23\",\"0\",\"0\",\"0\",\"1\",\"1\"\n" +
"\"24\",\"1\",\"1\",\"0\",\"1\",\"1\"\n" +
"\"25\",\"0\",\"1\",\"0\",\"1\",\"1\"\n" +
"\"26\",\"1\",\"0\",\"1\",\"1\",\"1\"\n" +
"\"27\",\"0\",\"0\",\"1\",\"1\",\"1\"\n" +
"\"28\",\"1\",\"1\",\"1\",\"1\",\"1\"\n", w.toString());
"\"0\",\"0\",\"0\",\"0\",\"0\",\"0\"\n" +
"\"1\",\"1\",\"1\",\"0\",\"0\",\"0\"\n" +
"\"2\",\"0\",\"1\",\"0\",\"0\",\"0\"\n" +
"\"3\",\"1\",\"0\",\"1\",\"0\",\"0\"\n" +
"\"4\",\"0\",\"0\",\"1\",\"0\",\"0\"\n" +
"\"5\",\"1\",\"1\",\"1\",\"0\",\"0\"\n" +
"\"6\",\"0\",\"1\",\"1\",\"0\",\"0\"\n" +
"\"7\",\"1\",\"0\",\"0\",\"1\",\"0\"\n" +
"\"8\",\"0\",\"0\",\"0\",\"1\",\"0\"\n" +
"\"9\",\"1\",\"1\",\"0\",\"1\",\"0\"\n" +
"\"10\",\"0\",\"1\",\"0\",\"1\",\"0\"\n" +
"\"11\",\"1\",\"0\",\"1\",\"1\",\"0\"\n" +
"\"12\",\"0\",\"0\",\"1\",\"1\",\"0\"\n" +
"\"13\",\"1\",\"1\",\"1\",\"1\",\"0\"\n" +
"\"14\",\"0\",\"1\",\"1\",\"1\",\"0\"\n" +
"\"15\",\"1\",\"0\",\"0\",\"0\",\"1\"\n" +
"\"16\",\"0\",\"0\",\"0\",\"0\",\"1\"\n" +
"\"17\",\"1\",\"1\",\"0\",\"0\",\"1\"\n" +
"\"18\",\"0\",\"1\",\"0\",\"0\",\"1\"\n" +
"\"19\",\"1\",\"0\",\"1\",\"0\",\"1\"\n" +
"\"20\",\"0\",\"0\",\"1\",\"0\",\"1\"\n" +
"\"21\",\"1\",\"1\",\"1\",\"0\",\"1\"\n" +
"\"22\",\"0\",\"1\",\"1\",\"0\",\"1\"\n" +
"\"23\",\"1\",\"0\",\"0\",\"1\",\"1\"\n" +
"\"24\",\"0\",\"0\",\"0\",\"1\",\"1\"\n" +
"\"25\",\"1\",\"1\",\"0\",\"1\",\"1\"\n" +
"\"26\",\"0\",\"1\",\"0\",\"1\",\"1\"\n" +
"\"27\",\"1\",\"0\",\"1\",\"1\",\"1\"\n" +
"\"28\",\"0\",\"0\",\"1\",\"1\",\"1\"\n" +
"\"29\",\"1\",\"1\",\"1\",\"1\",\"1\"\n", w.toString());
}
}