mirror of
https://github.com/hneemann/Digital.git
synced 2025-09-23 04:11:54 -04:00
simplification of the ValueTableObserver
This commit is contained in:
parent
e6ea6f4ccd
commit
f7ba7e2754
@ -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>
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -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());
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user