From ac0e9cf8911b19d23bd724313d903c470c7d7c7c Mon Sep 17 00:00:00 2001 From: hneemann Date: Wed, 24 May 2017 18:03:51 +0200 Subject: [PATCH] added some more test cases for model analyser --- .../analyse/quinemc/ThreeStateValue.java | 28 +++++++++ .../digital/analyse/ModelAnalyserTest.java | 58 +++++++++++-------- .../resources/dig/analyze/multiBitCounter.dig | 18 ++++++ 3 files changed, 80 insertions(+), 24 deletions(-) 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 @@ + + + +