mirror of
https://github.com/hneemann/Digital.git
synced 2025-09-17 08:55:05 -04:00
Added a config regression test
This commit is contained in:
parent
9835a36263
commit
b0f47458fd
@ -126,7 +126,7 @@ public class ConfigurationTest extends TestCase {
|
|||||||
throw new RuntimeException(command.getName(), e);
|
throw new RuntimeException(command.getName(), e);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void clear() {
|
void clear() {
|
||||||
files.clear();
|
files.clear();
|
||||||
commands.clear();
|
commands.clear();
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,54 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2019 Helmut Neemann.
|
||||||
|
* Use of this source code is governed by the GPL v3 license
|
||||||
|
* that can be found in the LICENSE file.
|
||||||
|
*/
|
||||||
|
package de.neemann.digital.toolchain;
|
||||||
|
|
||||||
|
import de.neemann.digital.core.element.Keys;
|
||||||
|
import de.neemann.digital.core.wiring.Clock;
|
||||||
|
import de.neemann.digital.draw.elements.VisualElement;
|
||||||
|
import de.neemann.digital.integration.FileScanner;
|
||||||
|
import de.neemann.digital.integration.Resources;
|
||||||
|
import de.neemann.digital.integration.ToBreakRunner;
|
||||||
|
import junit.framework.TestCase;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Runs all the commands in all configs in the hdl folder.
|
||||||
|
* Tests only the file creation and ensures the templates are ok.
|
||||||
|
* Does not ensure the generated files are correct!
|
||||||
|
*/
|
||||||
|
public class RegressionTest extends TestCase {
|
||||||
|
private ToBreakRunner br;
|
||||||
|
private int[] frequencies = new int[]{20, 10000000};
|
||||||
|
private VisualElement clock;
|
||||||
|
private ConfigurationTest.TestIOInterface ioInterface;
|
||||||
|
|
||||||
|
public void testSimple() throws Exception {
|
||||||
|
ioInterface = new ConfigurationTest.TestIOInterface();
|
||||||
|
br = new ToBreakRunner(new File(Resources.getRoot(), "toolchain/ff.dig"));
|
||||||
|
clock = br.getCircuit().findElements(v -> v.equalsDescription(Clock.DESCRIPTION)).get(0);
|
||||||
|
File root = new File(Resources.getRoot(), "../../main/dig/hdl");
|
||||||
|
int fc = new FileScanner(this::doCheck).setSuffix(".config").scan(root);
|
||||||
|
|
||||||
|
assertEquals(3, fc);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void doCheck(File f) throws IOException, InterruptedException {
|
||||||
|
Configuration configuration = Configuration.load(f)
|
||||||
|
.setFilenameProvider(() -> new File("z/test.dig"))
|
||||||
|
.setLibraryProvider(br::getLibrary)
|
||||||
|
.setCircuitProvider(br::getCircuit)
|
||||||
|
.setIoInterface(ioInterface);
|
||||||
|
|
||||||
|
for (int freq : frequencies) {
|
||||||
|
ioInterface.clear();
|
||||||
|
clock.setAttribute(Keys.FREQUENCY, freq);
|
||||||
|
for (Command command : configuration.getCommands())
|
||||||
|
configuration.executeCommand(command, null).join();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
71
src/test/resources/toolchain/ff.dig
Normal file
71
src/test/resources/toolchain/ff.dig
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<circuit>
|
||||||
|
<version>1</version>
|
||||||
|
<attributes/>
|
||||||
|
<visualElements>
|
||||||
|
<visualElement>
|
||||||
|
<elementName>D_FF</elementName>
|
||||||
|
<elementAttributes/>
|
||||||
|
<pos x="460" y="220"/>
|
||||||
|
</visualElement>
|
||||||
|
<visualElement>
|
||||||
|
<elementName>Clock</elementName>
|
||||||
|
<elementAttributes>
|
||||||
|
<entry>
|
||||||
|
<string>Label</string>
|
||||||
|
<string>CLK</string>
|
||||||
|
</entry>
|
||||||
|
<entry>
|
||||||
|
<string>Frequency</string>
|
||||||
|
<int>200</int>
|
||||||
|
</entry>
|
||||||
|
<entry>
|
||||||
|
<string>runRealTime</string>
|
||||||
|
<boolean>true</boolean>
|
||||||
|
</entry>
|
||||||
|
</elementAttributes>
|
||||||
|
<pos x="420" y="240"/>
|
||||||
|
</visualElement>
|
||||||
|
<visualElement>
|
||||||
|
<elementName>Out</elementName>
|
||||||
|
<elementAttributes>
|
||||||
|
<entry>
|
||||||
|
<string>Label</string>
|
||||||
|
<string>Q</string>
|
||||||
|
</entry>
|
||||||
|
</elementAttributes>
|
||||||
|
<pos x="560" y="220"/>
|
||||||
|
</visualElement>
|
||||||
|
</visualElements>
|
||||||
|
<wires>
|
||||||
|
<wire>
|
||||||
|
<p1 x="520" y="240"/>
|
||||||
|
<p2 x="540" y="240"/>
|
||||||
|
</wire>
|
||||||
|
<wire>
|
||||||
|
<p1 x="420" y="240"/>
|
||||||
|
<p2 x="460" y="240"/>
|
||||||
|
</wire>
|
||||||
|
<wire>
|
||||||
|
<p1 x="440" y="180"/>
|
||||||
|
<p2 x="540" y="180"/>
|
||||||
|
</wire>
|
||||||
|
<wire>
|
||||||
|
<p1 x="440" y="220"/>
|
||||||
|
<p2 x="460" y="220"/>
|
||||||
|
</wire>
|
||||||
|
<wire>
|
||||||
|
<p1 x="520" y="220"/>
|
||||||
|
<p2 x="560" y="220"/>
|
||||||
|
</wire>
|
||||||
|
<wire>
|
||||||
|
<p1 x="440" y="180"/>
|
||||||
|
<p2 x="440" y="220"/>
|
||||||
|
</wire>
|
||||||
|
<wire>
|
||||||
|
<p1 x="540" y="180"/>
|
||||||
|
<p2 x="540" y="240"/>
|
||||||
|
</wire>
|
||||||
|
</wires>
|
||||||
|
<measurementOrdering/>
|
||||||
|
</circuit>
|
Loading…
x
Reference in New Issue
Block a user