mirror of
https://github.com/hneemann/Digital.git
synced 2025-09-24 04:42:51 -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
|
{{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>
|
||||||
|
@ -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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -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());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user