ensure examples a buildable

This commit is contained in:
hneemann 2016-04-19 08:40:33 +02:00
parent bbe382990e
commit 25e6d6d420
5 changed files with 599 additions and 440 deletions

View File

@ -1,248 +1,324 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<circuit> <circuit>
<version>1</version> <version>1</version>
<visualElements> <visualElements>
<visualElement> <visualElement>
<elementName>Multiply.dig</elementName> <elementName>Multiply.dig</elementName>
<elementAttributes/> <elementAttributes/>
<pos x="340" y="120"/> <pos x="340" y="120"/>
<rotate>0</rotate> <rotate>0</rotate>
</visualElement> </visualElement>
<visualElement> <visualElement>
<elementName>Seven-Seg-Hex</elementName> <elementName>Seven-Seg-Hex</elementName>
<elementAttributes/> <elementAttributes/>
<pos x="280" y="-80"/> <pos x="300" y="-80"/>
<rotate>0</rotate> <rotate>0</rotate>
</visualElement> </visualElement>
<visualElement> <visualElement>
<elementName>Seven-Seg-Hex</elementName> <elementName>Seven-Seg-Hex</elementName>
<elementAttributes/> <elementAttributes/>
<pos x="120" y="-80"/> <pos x="140" y="-80"/>
<rotate>0</rotate> <rotate>0</rotate>
</visualElement> </visualElement>
<visualElement> <visualElement>
<elementName>Seven-Seg-Hex</elementName> <elementName>Seven-Seg-Hex</elementName>
<elementAttributes/> <elementAttributes/>
<pos x="540" y="-80"/> <pos x="560" y="-80"/>
<rotate>0</rotate> <rotate>0</rotate>
</visualElement> </visualElement>
<visualElement> <visualElement>
<elementName>Seven-Seg-Hex</elementName> <elementName>Seven-Seg-Hex</elementName>
<elementAttributes/> <elementAttributes/>
<pos x="460" y="-80"/> <pos x="480" y="-80"/>
<rotate>0</rotate> <rotate>0</rotate>
</visualElement> </visualElement>
<visualElement> <visualElement>
<elementName>In</elementName> <elementName>In</elementName>
<elementAttributes> <elementAttributes>
<entry> <entry>
<string>Label</string> <string>Label</string>
<string>P</string> <string>P</string>
</entry> </entry>
<entry> <entry>
<string>Bits</string> <string>Bits</string>
<int>4</int> <int>4</int>
</entry> </entry>
<entry> <entry>
<string>Default</string> <string>Default</string>
<int>4</int> <int>4</int>
</entry> </entry>
</elementAttributes> </elementAttributes>
<pos x="120" y="120"/> <pos x="120" y="120"/>
<rotate>0</rotate> <rotate>0</rotate>
</visualElement> </visualElement>
<visualElement> <visualElement>
<elementName>Splitter</elementName> <elementName>Splitter</elementName>
<elementAttributes> <elementAttributes>
<entry> <entry>
<string>Input Splitting</string> <string>Input Splitting</string>
<string>4</string> <string>4</string>
</entry> </entry>
<entry> <entry>
<string>Output Splitting</string> <string>Output Splitting</string>
<string>1*4</string> <string>1*4</string>
</entry> </entry>
</elementAttributes> </elementAttributes>
<pos x="280" y="120"/> <pos x="280" y="120"/>
<rotate>0</rotate> <rotate>0</rotate>
</visualElement> </visualElement>
<visualElement> <visualElement>
<elementName>Splitter</elementName> <elementName>Splitter</elementName>
<elementAttributes> <elementAttributes>
<entry> <entry>
<string>Input Splitting</string> <string>Input Splitting</string>
<string>4</string> <string>4</string>
</entry> </entry>
<entry> <entry>
<string>Output Splitting</string> <string>Output Splitting</string>
<string>1*4</string> <string>1*4</string>
</entry> </entry>
</elementAttributes> </elementAttributes>
<pos x="280" y="200"/> <pos x="280" y="200"/>
<rotate>0</rotate> <rotate>0</rotate>
</visualElement> </visualElement>
<visualElement> <visualElement>
<elementName>In</elementName> <elementName>In</elementName>
<elementAttributes> <elementAttributes>
<entry> <entry>
<string>Label</string> <string>Label</string>
<string>Q</string> <string>Q</string>
</entry> </entry>
<entry> <entry>
<string>Bits</string> <string>Bits</string>
<int>4</int> <int>4</int>
</entry> </entry>
<entry> <entry>
<string>Default</string> <string>Default</string>
<int>9</int> <int>9</int>
</entry> </entry>
</elementAttributes> </elementAttributes>
<pos x="120" y="200"/> <pos x="120" y="200"/>
<rotate>0</rotate> <rotate>0</rotate>
</visualElement> </visualElement>
<visualElement> <visualElement>
<elementName>Splitter</elementName> <elementName>Splitter</elementName>
<elementAttributes> <elementAttributes>
<entry> <entry>
<string>Input Splitting</string> <string>Input Splitting</string>
<string>1*4</string> <string>1*4</string>
</entry> </entry>
<entry> <entry>
<string>Output Splitting</string> <string>Output Splitting</string>
<string>4</string> <string>4</string>
</entry> </entry>
</elementAttributes> </elementAttributes>
<pos x="460" y="120"/> <pos x="460" y="120"/>
<rotate>0</rotate> <rotate>0</rotate>
</visualElement> </visualElement>
<visualElement> <visualElement>
<elementName>Splitter</elementName> <elementName>Splitter</elementName>
<elementAttributes> <elementAttributes>
<entry> <entry>
<string>Input Splitting</string> <string>Input Splitting</string>
<string>1*4</string> <string>1*4</string>
</entry> </entry>
<entry> <entry>
<string>Output Splitting</string> <string>Output Splitting</string>
<string>4</string> <string>4</string>
</entry> </entry>
</elementAttributes> </elementAttributes>
<pos x="460" y="200"/> <pos x="460" y="200"/>
<rotate>0</rotate> <rotate>0</rotate>
</visualElement> </visualElement>
</visualElements> <visualElement>
<wires> <elementName>Const</elementName>
<wire> <elementAttributes>
<p1 x="300" y="160"/> <entry>
<p2 x="340" y="160"/> <string>rotation</string>
</wire> <rotation rotation="1"/>
<wire> </entry>
<p1 x="420" y="160"/> <entry>
<p2 x="460" y="160"/> <string>Value</string>
</wire> <int>0</int>
<wire> </entry>
<p1 x="300" y="240"/> </elementAttributes>
<p2 x="340" y="240"/> <pos x="200" y="80"/>
</wire> <rotate>1</rotate>
<wire> </visualElement>
<p1 x="420" y="240"/> <visualElement>
<p2 x="460" y="240"/> <elementName>Const</elementName>
</wire> <elementAttributes>
<wire> <entry>
<p1 x="220" y="80"/> <string>rotation</string>
<p2 x="340" y="80"/> <rotation reference="../../../../visualElement[12]/elementAttributes/entry/rotation"/>
</wire> </entry>
<wire> <entry>
<p1 x="300" y="180"/> <string>Value</string>
<p2 x="340" y="180"/> <int>0</int>
</wire> </entry>
<wire> </elementAttributes>
<p1 x="420" y="180"/> <pos x="360" y="80"/>
<p2 x="460" y="180"/> <rotate>1</rotate>
</wire> </visualElement>
<wire> <visualElement>
<p1 x="300" y="260"/> <elementName>Const</elementName>
<p2 x="340" y="260"/> <elementAttributes>
</wire> <entry>
<wire> <string>rotation</string>
<p1 x="420" y="260"/> <rotation reference="../../../../visualElement[12]/elementAttributes/entry/rotation"/>
<p2 x="460" y="260"/> </entry>
</wire> <entry>
<wire> <string>Value</string>
<p1 x="300" y="120"/> <int>0</int>
<p2 x="340" y="120"/> </entry>
</wire> </elementAttributes>
<wire> <pos x="540" y="80"/>
<p1 x="120" y="120"/> <rotate>1</rotate>
<p2 x="220" y="120"/> </visualElement>
</wire> <visualElement>
<wire> <elementName>Const</elementName>
<p1 x="480" y="120"/> <elementAttributes>
<p2 x="600" y="120"/> <entry>
</wire> <string>rotation</string>
<wire> <rotation reference="../../../../visualElement[12]/elementAttributes/entry/rotation"/>
<p1 x="420" y="120"/> </entry>
<p2 x="460" y="120"/> <entry>
</wire> <string>Value</string>
<wire> <int>0</int>
<p1 x="220" y="120"/> </entry>
<p2 x="280" y="120"/> </elementAttributes>
</wire> <pos x="620" y="80"/>
<wire> <rotate>1</rotate>
<p1 x="300" y="200"/> </visualElement>
<p2 x="340" y="200"/> </visualElements>
</wire> <wires>
<wire> <wire>
<p1 x="120" y="200"/> <p1 x="300" y="160"/>
<p2 x="180" y="200"/> <p2 x="340" y="160"/>
</wire> </wire>
<wire> <wire>
<p1 x="420" y="200"/> <p1 x="420" y="160"/>
<p2 x="460" y="200"/> <p2 x="460" y="160"/>
</wire> </wire>
<wire> <wire>
<p1 x="480" y="200"/> <p1 x="300" y="240"/>
<p2 x="520" y="200"/> <p2 x="340" y="240"/>
</wire> </wire>
<wire> <wire>
<p1 x="180" y="200"/> <p1 x="420" y="240"/>
<p2 x="280" y="200"/> <p2 x="460" y="240"/>
</wire> </wire>
<wire> <wire>
<p1 x="300" y="140"/> <p1 x="220" y="80"/>
<p2 x="340" y="140"/> <p2 x="340" y="80"/>
</wire> </wire>
<wire> <wire>
<p1 x="420" y="140"/> <p1 x="300" y="180"/>
<p2 x="460" y="140"/> <p2 x="340" y="180"/>
</wire> </wire>
<wire> <wire>
<p1 x="300" y="220"/> <p1 x="420" y="180"/>
<p2 x="340" y="220"/> <p2 x="460" y="180"/>
</wire> </wire>
<wire> <wire>
<p1 x="420" y="220"/> <p1 x="300" y="260"/>
<p2 x="460" y="220"/> <p2 x="340" y="260"/>
</wire> </wire>
<wire> <wire>
<p1 x="340" y="60"/> <p1 x="420" y="260"/>
<p2 x="340" y="80"/> <p2 x="460" y="260"/>
</wire> </wire>
<wire> <wire>
<p1 x="180" y="60"/> <p1 x="300" y="120"/>
<p2 x="180" y="200"/> <p2 x="340" y="120"/>
</wire> </wire>
<wire> <wire>
<p1 x="600" y="60"/> <p1 x="120" y="120"/>
<p2 x="600" y="120"/> <p2 x="220" y="120"/>
</wire> </wire>
<wire> <wire>
<p1 x="520" y="60"/> <p1 x="480" y="120"/>
<p2 x="520" y="200"/> <p2 x="600" y="120"/>
</wire> </wire>
<wire> <wire>
<p1 x="220" y="80"/> <p1 x="420" y="120"/>
<p2 x="220" y="120"/> <p2 x="460" y="120"/>
</wire> </wire>
</wires> <wire>
<p1 x="220" y="120"/>
<p2 x="280" y="120"/>
</wire>
<wire>
<p1 x="300" y="200"/>
<p2 x="340" y="200"/>
</wire>
<wire>
<p1 x="120" y="200"/>
<p2 x="180" y="200"/>
</wire>
<wire>
<p1 x="420" y="200"/>
<p2 x="460" y="200"/>
</wire>
<wire>
<p1 x="480" y="200"/>
<p2 x="520" y="200"/>
</wire>
<wire>
<p1 x="180" y="200"/>
<p2 x="280" y="200"/>
</wire>
<wire>
<p1 x="300" y="140"/>
<p2 x="340" y="140"/>
</wire>
<wire>
<p1 x="420" y="140"/>
<p2 x="460" y="140"/>
</wire>
<wire>
<p1 x="300" y="220"/>
<p2 x="340" y="220"/>
</wire>
<wire>
<p1 x="420" y="220"/>
<p2 x="460" y="220"/>
</wire>
<wire>
<p1 x="340" y="60"/>
<p2 x="340" y="80"/>
</wire>
<wire>
<p1 x="180" y="60"/>
<p2 x="180" y="200"/>
</wire>
<wire>
<p1 x="600" y="60"/>
<p2 x="600" y="120"/>
</wire>
<wire>
<p1 x="520" y="60"/>
<p2 x="520" y="200"/>
</wire>
<wire>
<p1 x="200" y="60"/>
<p2 x="200" y="80"/>
</wire>
<wire>
<p1 x="360" y="60"/>
<p2 x="360" y="80"/>
</wire>
<wire>
<p1 x="220" y="80"/>
<p2 x="220" y="120"/>
</wire>
<wire>
<p1 x="540" y="60"/>
<p2 x="540" y="80"/>
</wire>
<wire>
<p1 x="620" y="60"/>
<p2 x="620" y="80"/>
</wire>
</wires>
</circuit> </circuit>

View File

@ -1,91 +1,96 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<circuit> <circuit>
<visualElements> <version>1</version>
<visualElement> <visualElements>
<elementName>In</elementName> <visualElement>
<elementAttributes> <elementName>In</elementName>
<entry> <elementAttributes>
<string>Label</string> <entry>
<string>Di</string> <string>Label</string>
</entry> <string>Di</string>
<entry> </entry>
<string>Default</string> <entry>
<int>16</int> <string>Bits</string>
</entry> <int>16</int>
</elementAttributes> </entry>
<pos x="160" y="100"/> <entry>
<rotate>0</rotate> <string>Default</string>
</visualElement> <int>16</int>
<visualElement> </entry>
<elementName>Splitter</elementName> </elementAttributes>
<elementAttributes> <pos x="320" y="200"/>
<entry> <rotate>0</rotate>
<string>Input Splitting</string> </visualElement>
<string>16</string> <visualElement>
</entry> <elementName>Splitter</elementName>
<entry> <elementAttributes>
<string>Output Splitting</string> <entry>
<string>8,8</string> <string>Input Splitting</string>
</entry> <string>16</string>
</elementAttributes> </entry>
<pos x="190" y="100"/> <entry>
<rotate>0</rotate> <string>Output Splitting</string>
</visualElement> <string>8,8</string>
<visualElement> </entry>
<elementName>Splitter</elementName> </elementAttributes>
<elementAttributes> <pos x="380" y="200"/>
<entry> <rotate>0</rotate>
<string>Input Splitting</string> </visualElement>
<string>8,8</string> <visualElement>
</entry> <elementName>Splitter</elementName>
<entry> <elementAttributes>
<string>Output Splitting</string> <entry>
<string>16</string> <string>Input Splitting</string>
</entry> <string>8,8</string>
</elementAttributes> </entry>
<pos x="260" y="110"/> <entry>
<rotate>0</rotate> <string>Output Splitting</string>
</visualElement> <string>16</string>
<visualElement> </entry>
<elementName>Out</elementName> </elementAttributes>
<elementAttributes> <pos x="520" y="220"/>
<entry> <rotate>0</rotate>
<string>Label</string> </visualElement>
<string>Do</string> <visualElement>
</entry> <elementName>Out</elementName>
<entry> <elementAttributes>
<string>Bits</string> <entry>
<int>16</int> <string>Label</string>
</entry> <string>Do</string>
</elementAttributes> </entry>
<pos x="310" y="110"/> <entry>
<rotate>0</rotate> <string>Bits</string>
</visualElement> <int>16</int>
</visualElements> </entry>
<wires> </elementAttributes>
<wire> <pos x="620" y="220"/>
<p1 x="160" y="100"/> <rotate>0</rotate>
<p2 x="190" y="100"/> </visualElement>
</wire> </visualElements>
<wire> <wires>
<p1 x="200" y="100"/> <wire>
<p2 x="230" y="100"/> <p1 x="460" y="240"/>
</wire> <p2 x="520" y="240"/>
<wire> </wire>
<p1 x="230" y="120"/> <wire>
<p2 x="260" y="120"/> <p1 x="320" y="200"/>
</wire> <p2 x="380" y="200"/>
<wire> </wire>
<p1 x="270" y="110"/> <wire>
<p2 x="310" y="110"/> <p1 x="400" y="200"/>
</wire> <p2 x="460" y="200"/>
<wire> </wire>
<p1 x="200" y="110"/> <wire>
<p2 x="260" y="110"/> <p1 x="540" y="220"/>
</wire> <p2 x="620" y="220"/>
<wire> </wire>
<p1 x="230" y="100"/> <wire>
<p2 x="230" y="120"/> <p1 x="400" y="220"/>
</wire> <p2 x="520" y="220"/>
</wires> </wire>
<wire>
<p1 x="460" y="200"/>
<p2 x="460" y="240"/>
</wire>
</wires>
</circuit> </circuit>

View File

@ -1,107 +1,112 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<circuit> <circuit>
<visualElements> <version>1</version>
<visualElement> <visualElements>
<elementName>In</elementName> <visualElement>
<elementAttributes> <elementName>In</elementName>
<entry> <elementAttributes>
<string>Label</string> <entry>
<string>Di</string> <string>Label</string>
</entry> <string>Di</string>
<entry> </entry>
<string>Default</string> <entry>
<int>16</int> <string>Bits</string>
</entry> <int>16</int>
</elementAttributes> </entry>
<pos x="160" y="100"/> <entry>
<rotate>0</rotate> <string>Default</string>
</visualElement> <int>16</int>
<visualElement> </entry>
<elementName>Splitter</elementName> </elementAttributes>
<elementAttributes> <pos x="320" y="200"/>
<entry> <rotate>0</rotate>
<string>Input Splitting</string> </visualElement>
<string>16</string> <visualElement>
</entry> <elementName>Splitter</elementName>
<entry> <elementAttributes>
<string>Output Splitting</string> <entry>
<string>4,4,4,4</string> <string>Input Splitting</string>
</entry> <string>16</string>
</elementAttributes> </entry>
<pos x="190" y="100"/> <entry>
<rotate>0</rotate> <string>Output Splitting</string>
</visualElement> <string>4,4,4,4</string>
<visualElement> </entry>
<elementName>Splitter</elementName> </elementAttributes>
<elementAttributes> <pos x="380" y="200"/>
<entry> <rotate>0</rotate>
<string>Input Splitting</string> </visualElement>
<string>4,4,4,4</string> <visualElement>
</entry> <elementName>Splitter</elementName>
<entry> <elementAttributes>
<string>Output Splitting</string> <entry>
<string>16</string> <string>Input Splitting</string>
</entry> <string>4,4,4,4</string>
</elementAttributes> </entry>
<pos x="270" y="110"/> <entry>
<rotate>0</rotate> <string>Output Splitting</string>
</visualElement> <string>16</string>
<visualElement> </entry>
<elementName>Out</elementName> </elementAttributes>
<elementAttributes> <pos x="540" y="220"/>
<entry> <rotate>0</rotate>
<string>Label</string> </visualElement>
<string>Do</string> <visualElement>
</entry> <elementName>Out</elementName>
<entry> <elementAttributes>
<string>Bits</string> <entry>
<int>16</int> <string>Label</string>
</entry> <string>Do</string>
</elementAttributes> </entry>
<pos x="310" y="110"/> <entry>
<rotate>0</rotate> <string>Bits</string>
</visualElement> <int>16</int>
</visualElements> </entry>
<wires> </elementAttributes>
<wire> <pos x="620" y="220"/>
<p1 x="200" y="130"/> <rotate>0</rotate>
<p2 x="270" y="130"/> </visualElement>
</wire> </visualElements>
<wire> <wires>
<p1 x="160" y="100"/> <wire>
<p2 x="190" y="100"/> <p1 x="480" y="240"/>
</wire> <p2 x="540" y="240"/>
<wire> </wire>
<p1 x="200" y="100"/> <wire>
<p2 x="240" y="100"/> <p1 x="400" y="240"/>
</wire> <p2 x="460" y="240"/>
<wire> </wire>
<p1 x="240" y="120"/> <wire>
<p2 x="270" y="120"/> <p1 x="400" y="260"/>
</wire> <p2 x="540" y="260"/>
<wire> </wire>
<p1 x="200" y="120"/> <wire>
<p2 x="230" y="120"/> <p1 x="320" y="200"/>
</wire> <p2 x="380" y="200"/>
<wire> </wire>
<p1 x="230" y="140"/> <wire>
<p2 x="270" y="140"/> <p1 x="400" y="200"/>
</wire> <p2 x="480" y="200"/>
<wire> </wire>
<p1 x="280" y="110"/> <wire>
<p2 x="310" y="110"/> <p1 x="460" y="280"/>
</wire> <p2 x="540" y="280"/>
<wire> </wire>
<p1 x="200" y="110"/> <wire>
<p2 x="270" y="110"/> <p1 x="560" y="220"/>
</wire> <p2 x="620" y="220"/>
<wire> </wire>
<p1 x="240" y="100"/> <wire>
<p2 x="240" y="120"/> <p1 x="400" y="220"/>
</wire> <p2 x="540" y="220"/>
<wire> </wire>
<p1 x="230" y="120"/> <wire>
<p2 x="230" y="140"/> <p1 x="480" y="200"/>
</wire> <p2 x="480" y="240"/>
</wires> </wire>
<wire>
<p1 x="460" y="240"/>
<p2 x="460" y="280"/>
</wire>
</wires>
</circuit> </circuit>

View File

@ -0,0 +1,63 @@
package de.neemann.digital.integration;
import de.neemann.digital.core.NodeException;
import de.neemann.digital.draw.elements.PinException;
import junit.framework.TestCase;
import java.io.File;
import java.io.IOException;
/**
* Reads all examples and tries to create the model.
* Makes sure that all examples are creatable (one can build the model)
* Does not ensure that they work correctly!
*
* @author hneemann
*/
public class TestExamples extends TestCase {
public void testExamples() throws Exception {
File res = Resources.getRoot();
File src = res.getParentFile().getParentFile();
File examples = new File(src, "/main/dig");
assertEquals(17, scan(new File(examples, "combinatorial")));
assertEquals(18, scan(new File(examples, "sequential")));
assertEquals(16, scan(new File(examples, "processor")));
assertEquals(4, scan(new File(examples, "hazard")));
}
private int scan(File path) {
int count = 0;
File[] files = path.listFiles();
if (files != null) {
for (File f : files) {
if (f.isDirectory()) {
if (f.getName().charAt(0) != '.') {
count += scan(f);
}
} else {
if (f.getName().endsWith(".dig")) {
check(f);
count++;
}
}
}
}
return count;
}
/**
* Loads the model and initializes it
*
* @param dig the model file
*/
private void check(File dig) {
try {
new ToBreakRunner(dig);
assertTrue(true);
} catch (PinException | NodeException | IOException e) {
assertTrue(dig.getPath() + ": " + e.getMessage(), false);
}
}
}

View File

@ -36,7 +36,18 @@ public class ToBreakRunner {
* @throws NodeException * @throws NodeException
*/ */
public ToBreakRunner(String file) throws IOException, PinException, NodeException { public ToBreakRunner(String file) throws IOException, PinException, NodeException {
File filename = new File(Resources.getRoot(), file); this(new File(Resources.getRoot(), file));
}
/**
* Creates a new instance
*
* @param filename the file to load
* @throws IOException
* @throws PinException
* @throws NodeException
*/
public ToBreakRunner(File filename) throws IOException, PinException, NodeException {
ElementLibrary library = new ElementLibrary(); ElementLibrary library = new ElementLibrary();
ShapeFactory shapeFactory = new ShapeFactory(library); ShapeFactory shapeFactory = new ShapeFactory(library);
circuit = Circuit.loadCircuit(filename, shapeFactory); circuit = Circuit.loadCircuit(filename, shapeFactory);
@ -46,8 +57,6 @@ public class ToBreakRunner {
ModelDescription md = new ModelDescription(circuit, library); ModelDescription md = new ModelDescription(circuit, library);
model = md.createModel(); model = md.createModel();
model.init(true); model.init(true);
assertTrue(model.isFastRunModel());
} }
/** /**
@ -58,6 +67,7 @@ public class ToBreakRunner {
* @throws NodeException * @throws NodeException
*/ */
public ToBreakRunner runToBreak(int steps) throws NodeException { public ToBreakRunner runToBreak(int steps) throws NodeException {
assertTrue(model.isFastRunModel());
assertEquals(steps, model.runToBreak()); assertEquals(steps, model.runToBreak());
return this; return this;
} }