diff --git a/src/main/java/de/neemann/digital/analyse/quinemc/ThreeStateValue.java b/src/main/java/de/neemann/digital/analyse/quinemc/ThreeStateValue.java
index 29826a094..b0d9fc4b3 100644
--- a/src/main/java/de/neemann/digital/analyse/quinemc/ThreeStateValue.java
+++ b/src/main/java/de/neemann/digital/analyse/quinemc/ThreeStateValue.java
@@ -58,4 +58,32 @@ public enum ThreeStateValue {
public int asInt() {
return ordinal();
}
+
+ /**
+ * @return the inverted value; DC remains DC
+ */
+ public ThreeStateValue invert() {
+ switch (this) {
+ case zero:
+ return one;
+ case one:
+ return zero;
+ default:
+ return dontCare;
+ }
+ }
+
+ /**
+ * @return returns the value as a bool
+ */
+ public boolean bool() {
+ switch (this) {
+ case zero:
+ return false;
+ case one:
+ return true;
+ default:
+ throw new RuntimeException("don't care not allowed");
+ }
+ }
}
diff --git a/src/test/java/de/neemann/digital/analyse/ModelAnalyserTest.java b/src/test/java/de/neemann/digital/analyse/ModelAnalyserTest.java
index 1df121e96..922586443 100644
--- a/src/test/java/de/neemann/digital/analyse/ModelAnalyserTest.java
+++ b/src/test/java/de/neemann/digital/analyse/ModelAnalyserTest.java
@@ -97,23 +97,33 @@ public class ModelAnalyserTest extends TestCase {
public void testAnalyzerMultiBit() throws Exception {
Model model = new ToBreakRunner("dig/analyze/multiBitCounter.dig", false).getModel();
TruthTable tt = new ModelAnalyser(model).analyse();
- assertEquals("Q0n+1",tt.getResultName(0));
+ assertEquals("Q0n+1", tt.getResultName(0));
final BoolTable r0 = tt.getResult(0);
- assertEquals(4,r0.size());
- assertEquals(one,r0.get(0));
- assertEquals(one,r0.get(1));
- assertEquals(zero,r0.get(2));
- assertEquals(zero,r0.get(3));
+ assertEquals(4, r0.size());
+ assertEquals(one, r0.get(0));
+ assertEquals(one, r0.get(1));
+ assertEquals(zero, r0.get(2));
+ assertEquals(zero, r0.get(3));
- assertEquals("Q1n+1",tt.getResultName(1));
+ assertEquals("Q1n+1", tt.getResultName(1));
final BoolTable r1 = tt.getResult(1);
- assertEquals(4,r1.size());
- assertEquals(zero,r1.get(0));
- assertEquals(one,r1.get(1));
- assertEquals(one,r1.get(2));
- assertEquals(zero,r1.get(3));
+ assertEquals(4, r1.size());
+ assertEquals(zero, r1.get(0));
+ assertEquals(one, r1.get(1));
+ assertEquals(one, r1.get(2));
+ assertEquals(zero, r1.get(3));
+
+ assertEquals("Y0", tt.getResultName(2));
+ assertEquals("Y1", tt.getResultName(3));
+ final BoolTable y0 = tt.getResult(2);
+ final BoolTable y1 = tt.getResult(3);
+ for (int i = 0; i < 4; i++) {
+ assertEquals((i & 2) > 0, y0.get(i).invert().bool());
+ assertEquals((i & 1) > 0, y1.get(i).invert().bool());
+ }
}
+
public void testAnalyzerMultiBit2() throws Exception {
Model model = new ToBreakRunner("dig/analyze/multiBitInOut.dig", false).getModel();
TruthTable tt = new ModelAnalyser(model).analyse();
@@ -128,21 +138,21 @@ public class ModelAnalyserTest extends TestCase {
}
private void checkIdent(TruthTable tt) {
- assertEquals("B0",tt.getResultName(0));
+ assertEquals("B0", tt.getResultName(0));
final BoolTable r0 = tt.getResult(0);
- assertEquals(4,r0.size());
- assertEquals(zero,r0.get(0));
- assertEquals(zero,r0.get(1));
- assertEquals(one,r0.get(2));
- assertEquals(one,r0.get(3));
+ assertEquals(4, r0.size());
+ assertEquals(zero, r0.get(0));
+ assertEquals(zero, r0.get(1));
+ assertEquals(one, r0.get(2));
+ assertEquals(one, r0.get(3));
- assertEquals("B1",tt.getResultName(1));
+ assertEquals("B1", tt.getResultName(1));
final BoolTable r1 = tt.getResult(1);
- assertEquals(4,r1.size());
- assertEquals(zero,r1.get(0));
- assertEquals(one,r1.get(1));
- assertEquals(zero,r1.get(2));
- assertEquals(one,r1.get(3));
+ assertEquals(4, r1.size());
+ assertEquals(zero, r1.get(0));
+ assertEquals(one, r1.get(1));
+ assertEquals(zero, r1.get(2));
+ assertEquals(one, r1.get(3));
}
}
\ No newline at end of file
diff --git a/src/test/resources/dig/analyze/multiBitCounter.dig b/src/test/resources/dig/analyze/multiBitCounter.dig
index 2eadcb01f..8076f3432 100644
--- a/src/test/resources/dig/analyze/multiBitCounter.dig
+++ b/src/test/resources/dig/analyze/multiBitCounter.dig
@@ -56,6 +56,20 @@
+
+ Out
+
+
+ Label
+ Y
+
+
+ Bits
+ 2
+
+
+
+
@@ -82,6 +96,10 @@
+
+
+
+