fixed an issue in creating a fsm with constant functions and D ff

This commit is contained in:
hneemann 2025-05-26 18:15:17 +02:00
parent 1b3bd04e6f
commit ff32d2d5bd
2 changed files with 8 additions and 4 deletions

View File

@ -58,6 +58,7 @@ public class CircuitBuilder implements BuilderInterface<CircuitBuilder> {
private int pos; private int pos;
private boolean useLUT; private boolean useLUT;
private boolean useJKff; private boolean useJKff;
private boolean useDWithConst;
private ModelAnalyserInfo mai; private ModelAnalyserInfo mai;
private int lutNumber; private int lutNumber;
private boolean resolveLocalVars; private boolean resolveLocalVars;
@ -82,6 +83,7 @@ public class CircuitBuilder implements BuilderInterface<CircuitBuilder> {
public CircuitBuilder(ShapeFactory shapeFactory, ArrayList<Variable> varOrdering) { public CircuitBuilder(ShapeFactory shapeFactory, ArrayList<Variable> varOrdering) {
this.shapeFactory = shapeFactory; this.shapeFactory = shapeFactory;
this.useJKff = false; this.useJKff = false;
this.useDWithConst = false;
this.useLUT = false; this.useLUT = false;
desiredVarOrdering = varOrdering; desiredVarOrdering = varOrdering;
variableVisitor = new VariableVisitor(); variableVisitor = new VariableVisitor();
@ -226,9 +228,11 @@ public class CircuitBuilder implements BuilderInterface<CircuitBuilder> {
if (useDff) { if (useDff) {
Fragment fr = createFragment(expression); Fragment fr = createFragment(expression);
Fragment fe; Fragment fe;
if (expression instanceof Constant) if (expression instanceof Constant && ((((Constant) expression).getValue() ? 1 : 0) == initValue))
fe = new FragmentVisualElement(Tunnel.DESCRIPTION, shapeFactory).setAttr(Keys.NETNAME, name); fe = new FragmentVisualElement(Tunnel.DESCRIPTION, shapeFactory).setAttr(Keys.NETNAME, name);
else { else {
if (expression instanceof Constant)
useDWithConst = true;
FragmentVisualElement ff = new FragmentVisualElement(FlipflopD.DESCRIPTION, shapeFactory) FragmentVisualElement ff = new FragmentVisualElement(FlipflopD.DESCRIPTION, shapeFactory)
.setAttr(Keys.LABEL, name) .setAttr(Keys.LABEL, name)
.setAttr(Keys.DEFAULT, initValue); .setAttr(Keys.DEFAULT, initValue);
@ -698,7 +702,7 @@ public class CircuitBuilder implements BuilderInterface<CircuitBuilder> {
if (p.y > yMax) yMax = p.y; if (p.y > yMax) yMax = p.y;
} }
x -= SIZE; x -= SIZE;
if (useJKff) x -= SIZE; if (useJKff || useDWithConst) x -= SIZE;
int yPos = yMin - SIZE * 3; int yPos = yMin - SIZE * 3;
if (useJKff) yPos = -SIZE; if (useJKff) yPos = -SIZE;

View File

@ -184,7 +184,7 @@ public class CircuitBuilderTest extends TestCase {
.createCircuit(); .createCircuit();
final ArrayList<VisualElement> el = circuit.getElements(); final ArrayList<VisualElement> el = circuit.getElements();
assertEquals(8, el.size()); assertEquals(10, el.size());
assertEquals(4, el.stream().filter(visualElement -> visualElement.equalsDescription(Tunnel.DESCRIPTION)).count()); assertEquals(4, el.stream().filter(visualElement -> visualElement.equalsDescription(Tunnel.DESCRIPTION)).count());
assertEquals(2, el.stream().filter(visualElement -> visualElement.equalsDescription(Const.DESCRIPTION)).count()); assertEquals(2, el.stream().filter(visualElement -> visualElement.equalsDescription(Const.DESCRIPTION)).count());
assertEquals(2, el.stream().filter(visualElement -> visualElement.equalsDescription(Out.DESCRIPTION)).count()); assertEquals(2, el.stream().filter(visualElement -> visualElement.equalsDescription(Out.DESCRIPTION)).count());
@ -199,7 +199,7 @@ public class CircuitBuilderTest extends TestCase {
.createCircuit(); .createCircuit();
final ArrayList<VisualElement> el = circuit.getElements(); final ArrayList<VisualElement> el = circuit.getElements();
assertEquals(8, el.size()); assertEquals(10, el.size());
assertEquals(4, el.stream().filter(visualElement -> visualElement.equalsDescription(Tunnel.DESCRIPTION)).count()); assertEquals(4, el.stream().filter(visualElement -> visualElement.equalsDescription(Tunnel.DESCRIPTION)).count());
assertEquals(2, el.stream().filter(visualElement -> visualElement.equalsDescription(Const.DESCRIPTION)).count()); assertEquals(2, el.stream().filter(visualElement -> visualElement.equalsDescription(Const.DESCRIPTION)).count());
assertEquals(2, el.stream().filter(visualElement -> visualElement.equalsDescription(Out.DESCRIPTION)).count()); assertEquals(2, el.stream().filter(visualElement -> visualElement.equalsDescription(Out.DESCRIPTION)).count());