added an cmos xor gate test case

This commit is contained in:
hneemann 2017-02-24 15:29:23 +01:00
parent bad4a92d10
commit 2262d7e3d2
3 changed files with 673 additions and 37 deletions

View File

@ -39,8 +39,8 @@ public class TestExamples extends TestCase {
*/
public void testTestExamples() throws Exception {
File examples = new File(Resources.getRoot(), "/dig/test");
assertEquals(41, new FileScanner(this::check).scan(examples));
assertEquals(31, testCasesInFiles);
assertEquals(42, new FileScanner(this::check).scan(examples));
assertEquals(33, testCasesInFiles);
}
@ -50,42 +50,52 @@ public class TestExamples extends TestCase {
* @param dig the model file
*/
private void check(File dig) throws Exception {
System.out.println("test " + dig);
boolean shouldFail = dig.getName().endsWith("Error.dig");
ToBreakRunner br = null;
boolean hasTest = false;
try {
br = new ToBreakRunner(dig);
} catch (Exception e) {
if (shouldFail)
return;
else
throw e;
boolean shouldFail = dig.getName().endsWith("Error.dig");
ToBreakRunner br = null;
try {
br = new ToBreakRunner(dig);
} catch (Exception e) {
if (shouldFail) {
hasTest = true;
return;
} else
throw e;
}
try {
for (VisualElement el : br.getCircuit().getElements())
if (el.equalsDescription(TestCaseElement.TESTCASEDESCRIPTION)) {
hasTest = true;
String label = el.getElementAttributes().getCleanLabel();
TestData td = el.getElementAttributes().get(TestCaseElement.TESTDATA);
Model model = new ModelCreator(br.getCircuit(), br.getLibrary()).createModel(false);
TestResult tr = new TestResult(td).create(model);
if (label.contains("Failing"))
assertFalse(dig.getName() + ":" + label, tr.allPassed());
else
assertTrue(dig.getName() + ":" + label, tr.allPassed());
testCasesInFiles++;
}
} catch (Exception e) {
if (shouldFail) {
hasTest = true;
return;
} else
throw e;
}
assertFalse("File should fail but doesn't!", shouldFail);
} finally {
System.out.print("tested " + dig);
if (!hasTest) System.out.println(" -- no test cases");
else System.out.println();
}
try {
for (VisualElement el : br.getCircuit().getElements())
if (el.equalsDescription(TestCaseElement.TESTCASEDESCRIPTION)) {
String label = el.getElementAttributes().getCleanLabel();
TestData td = el.getElementAttributes().get(TestCaseElement.TESTDATA);
Model model = new ModelCreator(br.getCircuit(), br.getLibrary()).createModel(false);
TestResult tr = new TestResult(td).create(model);
if (label.contains("Failing"))
assertFalse(dig.getName() + ":" + label, tr.allPassed());
else
assertTrue(dig.getName() + ":" + label, tr.allPassed());
testCasesInFiles++;
}
} catch (Exception e) {
if (shouldFail)
return;
else
throw e;
}
assertFalse("File should fail but doesn't!", shouldFail);
}
}

View File

@ -0,0 +1,611 @@
<?xml version="1.0" encoding="utf-8"?>
<circuit>
<version>1</version>
<visualElements>
<visualElement>
<elementName>VDD</elementName>
<elementAttributes/>
<pos x="260" y="240"/>
</visualElement>
<visualElement>
<elementName>In</elementName>
<elementAttributes>
<entry>
<string>Label</string>
<string>A</string>
</entry>
</elementAttributes>
<pos x="-220" y="340"/>
</visualElement>
<visualElement>
<elementName>NFET</elementName>
<elementAttributes>
<entry>
<string>Label</string>
<string>T15</string>
</entry>
</elementAttributes>
<pos x="240" y="420"/>
</visualElement>
<visualElement>
<elementName>PFET</elementName>
<elementAttributes>
<entry>
<string>Label</string>
<string>T13</string>
</entry>
</elementAttributes>
<pos x="240" y="280"/>
</visualElement>
<visualElement>
<elementName>Ground</elementName>
<elementAttributes/>
<pos x="260" y="560"/>
</visualElement>
<visualElement>
<elementName>In</elementName>
<elementAttributes>
<entry>
<string>Label</string>
<string>B</string>
</entry>
</elementAttributes>
<pos x="-220" y="460"/>
</visualElement>
<visualElement>
<elementName>NFET</elementName>
<elementAttributes>
<entry>
<string>Label</string>
<string>T16</string>
</entry>
</elementAttributes>
<pos x="240" y="480"/>
</visualElement>
<visualElement>
<elementName>PFET</elementName>
<elementAttributes>
<entry>
<string>Label</string>
<string>T14</string>
</entry>
</elementAttributes>
<pos x="300" y="340"/>
</visualElement>
<visualElement>
<elementName>NFET</elementName>
<elementAttributes>
<entry>
<string>Label</string>
<string>T6</string>
</entry>
</elementAttributes>
<pos x="-160" y="360"/>
</visualElement>
<visualElement>
<elementName>PFET</elementName>
<elementAttributes>
<entry>
<string>Label</string>
<string>T5</string>
</entry>
</elementAttributes>
<pos x="-160" y="280"/>
</visualElement>
<visualElement>
<elementName>Out</elementName>
<elementAttributes>
<entry>
<string>Label</string>
<string>Y</string>
</entry>
</elementAttributes>
<pos x="360" y="400"/>
</visualElement>
<visualElement>
<elementName>VDD</elementName>
<elementAttributes/>
<pos x="-20" y="120"/>
</visualElement>
<visualElement>
<elementName>NFET</elementName>
<elementAttributes>
<entry>
<string>Label</string>
<string>T3</string>
</entry>
</elementAttributes>
<pos x="-40" y="300"/>
</visualElement>
<visualElement>
<elementName>PFET</elementName>
<elementAttributes>
<entry>
<string>Label</string>
<string>T1</string>
</entry>
</elementAttributes>
<pos x="-40" y="160"/>
</visualElement>
<visualElement>
<elementName>Ground</elementName>
<elementAttributes/>
<pos x="-20" y="420"/>
</visualElement>
<visualElement>
<elementName>NFET</elementName>
<elementAttributes>
<entry>
<string>Label</string>
<string>T4</string>
</entry>
</elementAttributes>
<pos x="-40" y="360"/>
</visualElement>
<visualElement>
<elementName>PFET</elementName>
<elementAttributes>
<entry>
<string>Label</string>
<string>T2</string>
</entry>
</elementAttributes>
<pos x="0" y="220"/>
</visualElement>
<visualElement>
<elementName>VDD</elementName>
<elementAttributes/>
<pos x="100" y="360"/>
</visualElement>
<visualElement>
<elementName>NFET</elementName>
<elementAttributes>
<entry>
<string>Label</string>
<string>T9</string>
</entry>
</elementAttributes>
<pos x="80" y="540"/>
</visualElement>
<visualElement>
<elementName>PFET</elementName>
<elementAttributes>
<entry>
<string>Label</string>
<string>T7</string>
</entry>
</elementAttributes>
<pos x="80" y="400"/>
</visualElement>
<visualElement>
<elementName>Ground</elementName>
<elementAttributes/>
<pos x="100" y="660"/>
</visualElement>
<visualElement>
<elementName>NFET</elementName>
<elementAttributes>
<entry>
<string>Label</string>
<string>T10</string>
</entry>
</elementAttributes>
<pos x="80" y="600"/>
</visualElement>
<visualElement>
<elementName>PFET</elementName>
<elementAttributes>
<entry>
<string>Label</string>
<string>T8</string>
</entry>
</elementAttributes>
<pos x="120" y="460"/>
</visualElement>
<visualElement>
<elementName>Ground</elementName>
<elementAttributes/>
<pos x="-140" y="420"/>
</visualElement>
<visualElement>
<elementName>VDD</elementName>
<elementAttributes/>
<pos x="-140" y="260"/>
</visualElement>
<visualElement>
<elementName>NFET</elementName>
<elementAttributes>
<entry>
<string>Label</string>
<string>T12</string>
</entry>
</elementAttributes>
<pos x="-60" y="600"/>
</visualElement>
<visualElement>
<elementName>PFET</elementName>
<elementAttributes>
<entry>
<string>Label</string>
<string>T11</string>
</entry>
</elementAttributes>
<pos x="-60" y="520"/>
</visualElement>
<visualElement>
<elementName>Ground</elementName>
<elementAttributes/>
<pos x="-40" y="660"/>
</visualElement>
<visualElement>
<elementName>VDD</elementName>
<elementAttributes/>
<pos x="-40" y="500"/>
</visualElement>
<visualElement>
<elementName>Testcase</elementName>
<elementAttributes>
<entry>
<string>Testdata</string>
<testData>
<dataString>A B Y
0 0 0
0 1 1
1 0 1
1 1 0
# transitions
0 0 0
0 1 1
0 0 0
1 0 1
0 0 0
1 1 0
0 0 0
0 1 1
1 0 1
0 1 1
1 1 0
0 1 1
1 0 1
1 1 0
1 0 1
</dataString>
</testData>
</entry>
</elementAttributes>
<pos x="280" y="600"/>
</visualElement>
</visualElements>
<wires>
<wire>
<p1 x="180" y="460"/>
<p2 x="220" y="340"/>
</wire>
<wire>
<p1 x="180" y="340"/>
<p2 x="220" y="460"/>
</wire>
<wire>
<p1 x="-100" y="340"/>
<p2 x="-60" y="220"/>
</wire>
<wire>
<p1 x="-100" y="220"/>
<p2 x="-60" y="340"/>
</wire>
<wire>
<p1 x="20" y="580"/>
<p2 x="60" y="460"/>
</wire>
<wire>
<p1 x="20" y="460"/>
<p2 x="60" y="580"/>
</wire>
<wire>
<p1 x="20" y="640"/>
<p2 x="80" y="640"/>
</wire>
<wire>
<p1 x="-80" y="640"/>
<p2 x="-60" y="640"/>
</wire>
<wire>
<p1 x="-100" y="160"/>
<p2 x="-40" y="160"/>
</wire>
<wire>
<p1 x="-180" y="400"/>
<p2 x="-160" y="400"/>
</wire>
<wire>
<p1 x="20" y="400"/>
<p2 x="80" y="400"/>
</wire>
<wire>
<p1 x="260" y="400"/>
<p2 x="320" y="400"/>
</wire>
<wire>
<p1 x="-100" y="400"/>
<p2 x="-40" y="400"/>
</wire>
<wire>
<p1 x="320" y="400"/>
<p2 x="360" y="400"/>
</wire>
<wire>
<p1 x="-40" y="580"/>
<p2 x="20" y="580"/>
</wire>
<wire>
<p1 x="60" y="580"/>
<p2 x="80" y="580"/>
</wire>
<wire>
<p1 x="260" y="260"/>
<p2 x="320" y="260"/>
</wire>
<wire>
<p1 x="-220" y="340"/>
<p2 x="-180" y="340"/>
</wire>
<wire>
<p1 x="-140" y="340"/>
<p2 x="-100" y="340"/>
</wire>
<wire>
<p1 x="220" y="340"/>
<p2 x="300" y="340"/>
</wire>
<wire>
<p1 x="-60" y="340"/>
<p2 x="-40" y="340"/>
</wire>
<wire>
<p1 x="-200" y="520"/>
<p2 x="-80" y="520"/>
</wire>
<wire>
<p1 x="100" y="520"/>
<p2 x="140" y="520"/>
</wire>
<wire>
<p1 x="-80" y="520"/>
<p2 x="-60" y="520"/>
</wire>
<wire>
<p1 x="180" y="520"/>
<p2 x="240" y="520"/>
</wire>
<wire>
<p1 x="140" y="520"/>
<p2 x="180" y="520"/>
</wire>
<wire>
<p1 x="-180" y="280"/>
<p2 x="-160" y="280"/>
</wire>
<wire>
<p1 x="-20" y="280"/>
<p2 x="20" y="280"/>
</wire>
<wire>
<p1 x="20" y="280"/>
<p2 x="180" y="280"/>
</wire>
<wire>
<p1 x="180" y="280"/>
<p2 x="240" y="280"/>
</wire>
<wire>
<p1 x="-200" y="220"/>
<p2 x="-100" y="220"/>
</wire>
<wire>
<p1 x="-60" y="220"/>
<p2 x="0" y="220"/>
</wire>
<wire>
<p1 x="-180" y="460"/>
<p2 x="20" y="460"/>
</wire>
<wire>
<p1 x="60" y="460"/>
<p2 x="120" y="460"/>
</wire>
<wire>
<p1 x="-220" y="460"/>
<p2 x="-200" y="460"/>
</wire>
<wire>
<p1 x="220" y="460"/>
<p2 x="240" y="460"/>
</wire>
<wire>
<p1 x="-20" y="140"/>
<p2 x="20" y="140"/>
</wire>
<wire>
<p1 x="100" y="380"/>
<p2 x="140" y="380"/>
</wire>
<wire>
<p1 x="320" y="260"/>
<p2 x="320" y="340"/>
</wire>
<wire>
<p1 x="320" y="380"/>
<p2 x="320" y="400"/>
</wire>
<wire>
<p1 x="-100" y="160"/>
<p2 x="-100" y="220"/>
</wire>
<wire>
<p1 x="-100" y="340"/>
<p2 x="-100" y="400"/>
</wire>
<wire>
<p1 x="100" y="360"/>
<p2 x="100" y="380"/>
</wire>
<wire>
<p1 x="100" y="440"/>
<p2 x="100" y="520"/>
</wire>
<wire>
<p1 x="100" y="640"/>
<p2 x="100" y="660"/>
</wire>
<wire>
<p1 x="100" y="580"/>
<p2 x="100" y="600"/>
</wire>
<wire>
<p1 x="100" y="380"/>
<p2 x="100" y="400"/>
</wire>
<wire>
<p1 x="100" y="520"/>
<p2 x="100" y="540"/>
</wire>
<wire>
<p1 x="260" y="240"/>
<p2 x="260" y="260"/>
</wire>
<wire>
<p1 x="260" y="320"/>
<p2 x="260" y="400"/>
</wire>
<wire>
<p1 x="260" y="520"/>
<p2 x="260" y="560"/>
</wire>
<wire>
<p1 x="260" y="460"/>
<p2 x="260" y="480"/>
</wire>
<wire>
<p1 x="260" y="260"/>
<p2 x="260" y="280"/>
</wire>
<wire>
<p1 x="260" y="400"/>
<p2 x="260" y="420"/>
</wire>
<wire>
<p1 x="-40" y="560"/>
<p2 x="-40" y="580"/>
</wire>
<wire>
<p1 x="-40" y="640"/>
<p2 x="-40" y="660"/>
</wire>
<wire>
<p1 x="-40" y="500"/>
<p2 x="-40" y="520"/>
</wire>
<wire>
<p1 x="-40" y="580"/>
<p2 x="-40" y="600"/>
</wire>
<wire>
<p1 x="-200" y="220"/>
<p2 x="-200" y="460"/>
</wire>
<wire>
<p1 x="-200" y="460"/>
<p2 x="-200" y="520"/>
</wire>
<wire>
<p1 x="-140" y="320"/>
<p2 x="-140" y="340"/>
</wire>
<wire>
<p1 x="-140" y="400"/>
<p2 x="-140" y="420"/>
</wire>
<wire>
<p1 x="-140" y="260"/>
<p2 x="-140" y="280"/>
</wire>
<wire>
<p1 x="-140" y="340"/>
<p2 x="-140" y="360"/>
</wire>
<wire>
<p1 x="140" y="380"/>
<p2 x="140" y="460"/>
</wire>
<wire>
<p1 x="140" y="500"/>
<p2 x="140" y="520"/>
</wire>
<wire>
<p1 x="-80" y="520"/>
<p2 x="-80" y="640"/>
</wire>
<wire>
<p1 x="-20" y="120"/>
<p2 x="-20" y="140"/>
</wire>
<wire>
<p1 x="-20" y="200"/>
<p2 x="-20" y="280"/>
</wire>
<wire>
<p1 x="-20" y="400"/>
<p2 x="-20" y="420"/>
</wire>
<wire>
<p1 x="-20" y="340"/>
<p2 x="-20" y="360"/>
</wire>
<wire>
<p1 x="-20" y="280"/>
<p2 x="-20" y="300"/>
</wire>
<wire>
<p1 x="-20" y="140"/>
<p2 x="-20" y="160"/>
</wire>
<wire>
<p1 x="-180" y="280"/>
<p2 x="-180" y="340"/>
</wire>
<wire>
<p1 x="-180" y="400"/>
<p2 x="-180" y="460"/>
</wire>
<wire>
<p1 x="-180" y="340"/>
<p2 x="-180" y="400"/>
</wire>
<wire>
<p1 x="20" y="400"/>
<p2 x="20" y="460"/>
</wire>
<wire>
<p1 x="20" y="140"/>
<p2 x="20" y="220"/>
</wire>
<wire>
<p1 x="20" y="260"/>
<p2 x="20" y="280"/>
</wire>
<wire>
<p1 x="20" y="580"/>
<p2 x="20" y="640"/>
</wire>
<wire>
<p1 x="180" y="460"/>
<p2 x="180" y="520"/>
</wire>
<wire>
<p1 x="180" y="280"/>
<p2 x="180" y="340"/>
</wire>
</wires>
</circuit>

View File

@ -31,6 +31,21 @@
<elementAttributes/>
<pos x="540" y="300"/>
</visualElement>
<visualElement>
<elementName>Testcase</elementName>
<elementAttributes>
<entry>
<string>Testdata</string>
<testData>
<dataString>i o
0 0
1 1
z 1</dataString>
</testData>
</entry>
</elementAttributes>
<pos x="560" y="260"/>
</visualElement>
</visualElements>
<wires>
<wire>