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 {{de 4-Bit Ripple-Carry addierer bestehend aus vier
Volladdierern.}}</string> Volladdierern.}}</string>
</entry> </entry>
<entry>
<string>showDataGraphMicro</string>
<boolean>true</boolean>
</entry>
</attributes> </attributes>
<visualElements> <visualElements>
<visualElement> <visualElement>

View File

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

View File

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