added some more test cases for model analyser

This commit is contained in:
hneemann 2017-05-24 18:03:51 +02:00
parent 11aba9f471
commit ac0e9cf891
3 changed files with 80 additions and 24 deletions

View File

@ -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");
}
}
}

View File

@ -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));
}
}

View File

@ -56,6 +56,20 @@
</elementAttributes>
<pos x="400" y="280"/>
</visualElement>
<visualElement>
<elementName>Out</elementName>
<elementAttributes>
<entry>
<string>Label</string>
<string>Y</string>
</entry>
<entry>
<string>Bits</string>
<int>2</int>
</entry>
</elementAttributes>
<pos x="600" y="200"/>
</visualElement>
</visualElements>
<wires>
<wire>
@ -82,6 +96,10 @@
<p1 x="480" y="200"/>
<p2 x="500" y="200"/>
</wire>
<wire>
<p1 x="560" y="200"/>
<p2 x="600" y="200"/>
</wire>
<wire>
<p1 x="380" y="220"/>
<p2 x="400" y="220"/>