Search in sources :

Example 1 with TestingDataException

use of de.neemann.digital.testing.TestingDataException in project Digital by hneemann.

the class Main method startTests.

/**
 * starts the tests
 */
public void startTests() {
    try {
        ArrayList<ValueTableDialog.TestSet> tsl = new ArrayList<>();
        for (VisualElement el : circuitComponent.getCircuit().getElements()) if (el.equalsDescription(TestCaseElement.TESTCASEDESCRIPTION))
            tsl.add(new ValueTableDialog.TestSet(el.getElementAttributes().get(TestCaseElement.TESTDATA), el.getElementAttributes().getCleanLabel()));
        if (tsl.isEmpty())
            throw new TestingDataException(Lang.get("err_noTestData"));
        windowPosManager.register("testResult", new ValueTableDialog(Main.this, Lang.get("msg_testResult")).addTestResult(tsl, circuitComponent.getCircuit(), library)).setVisible(true);
        ensureModelIsStopped();
    } catch (NodeException | ElementNotFoundException | PinException | TestingDataException | RuntimeException e1) {
        showErrorWithoutARunningModel(Lang.get("msg_runningTestError"), e1);
    }
}
Also used : ValueTableDialog(de.neemann.digital.gui.components.testing.ValueTableDialog) TestingDataException(de.neemann.digital.testing.TestingDataException) ArrayList(java.util.ArrayList) ElementNotFoundException(de.neemann.digital.draw.library.ElementNotFoundException)

Example 2 with TestingDataException

use of de.neemann.digital.testing.TestingDataException in project Digital by hneemann.

the class VHDLTestBenchCreator method write.

/**
 * Writes the test benches
 *
 * @param file the original vhdl file
 * @return this for chained calls
 * @throws IOException  IOException
 * @throws HDLException HDLException
 */
public VHDLTestBenchCreator write(File file) throws IOException, HDLException {
    String filename = file.getName();
    int p = filename.indexOf('.');
    if (p > 0)
        filename = filename.substring(0, p);
    for (ElementAttributes tc : testCases) {
        String testName = tc.getCleanLabel();
        if (testName.length() > 0)
            testName = filename + "_" + testName + "_tb";
        else
            testName = filename + "_tb";
        File f = new File(file.getParentFile(), testName + ".vhdl");
        testFileWritten.add(f);
        try (CodePrinter out = new CodePrinter(f)) {
            try {
                writeTestBench(out, testName, tc);
            } catch (TestingDataException | ParserException | RuntimeException e) {
                throw new HDLException(Lang.get("err_vhdlErrorWritingTestBench"), e);
            }
        }
    }
    return this;
}
Also used : ParserException(de.neemann.digital.testing.parser.ParserException) TestingDataException(de.neemann.digital.testing.TestingDataException) CodePrinter(de.neemann.digital.hdl.printer.CodePrinter) ElementAttributes(de.neemann.digital.core.element.ElementAttributes) HDLException(de.neemann.digital.hdl.model2.HDLException) File(java.io.File)

Example 3 with TestingDataException

use of de.neemann.digital.testing.TestingDataException in project Digital by hneemann.

the class VHDLTestBenchCreator method writeTestBench.

private void writeTestBench(CodePrinter out, String testName, ElementAttributes tc) throws IOException, TestingDataException, ParserException {
    out.print("--  A testbench for ").println(testName);
    out.println("LIBRARY ieee;");
    out.println("USE ieee.std_logic_1164.all;");
    out.println("USE ieee.numeric_std.all;");
    out.println();
    out.print("entity ").print(testName).println(" is");
    out.print("end ").print(testName).println(";");
    out.println();
    out.print("architecture behav of ").print(testName).println(" is").inc();
    out.println("component main").inc();
    VHDLCreator.writePorts(out, main);
    out.dec().println("end component;");
    out.println();
    for (HDLPort p : main.getInputs()) out.print("signal ").print(p.getName()).print(" : ").print(VHDLCreator.getType(p.getBits())).println(";");
    for (HDLPort p : main.getOutputs()) out.print("signal ").print(p.getName()).print(" : ").print(VHDLCreator.getType(p.getBits())).println(";");
    out.dec().println("begin").inc();
    out.println("main_0 : main port map (").inc();
    Separator comma = new Separator(out, ",\n");
    for (HDLPort p : main.getInputs()) {
        comma.check();
        out.print(p.getName() + " => " + p.getName());
    }
    for (HDLPort p : main.getOutputs()) {
        comma.check();
        out.print(p.getName() + " => " + p.getName());
    }
    out.println(" );").dec();
    out.println("process").inc();
    TestCaseDescription testdata = tc.get(TESTDATA);
    ArrayList<HDLPort> dataOrder = new ArrayList<>();
    out.println("type pattern_type is record").inc();
    for (String name : testdata.getNames()) {
        String saveName = renaming.checkName(name);
        boolean found = false;
        for (HDLPort p : main.getPorts()) {
            if (p.getName().equals(saveName)) {
                out.print(p.getName()).print(" : ").print(VHDLCreator.getType(p.getBits())).println(";");
                dataOrder.add(p);
                found = true;
                break;
            }
        }
        if (!found)
            throw new TestingDataException(Lang.get("err_testSignal_N_notFound", name));
    }
    out.dec().println("end record;");
    out.println("type pattern_array is array (natural range <>) of pattern_type;");
    out.println("constant patterns : pattern_array := (").inc();
    LineListener parent = new LineListenerVHDL(out, dataOrder);
    testdata.getLines().emitLines(parent, new Context());
    out.println(");").dec();
    String loopVar = "i";
    int lv = 0;
    while (loopVarExists(loopVar, main.getPorts())) loopVar = "i" + (lv++);
    out.dec().println("begin").inc();
    out.print("for ").print(loopVar).println(" in patterns'range loop").inc();
    for (HDLPort p : main.getInputs()) out.print(p.getName()).print(" <= patterns(").print(loopVar).print(").").print(p.getName()).println(";");
    out.println("wait for 10 ns;");
    for (HDLPort p : main.getOutputs()) {
        out.print("assert std_match(").print(p.getName()).print(", patterns(").print(loopVar).print(").").print(p.getName()).print(")");
        out.print(" OR (").print(p.getName()).print(" = ").print(getSimpleValue(p.getBits(), 'Z')).print(" AND patterns(").print(loopVar).print(").").print(p.getName()).print(" = ").print(getSimpleValue(p.getBits(), 'Z')).print(")").eol();
        out.inc().print("report \"wrong value for ").print(p.getName()).print(" ").print(loopVar).print("=\" & integer'image(").print(loopVar).println(") severity error;").dec();
    }
    out.dec().println("end loop;");
    out.println("wait;");
    out.dec().println("end process;");
    out.dec().println("end behav;");
}
Also used : Context(de.neemann.digital.testing.parser.Context) TestingDataException(de.neemann.digital.testing.TestingDataException) LineListener(de.neemann.digital.testing.parser.LineListener) ArrayList(java.util.ArrayList) HDLPort(de.neemann.digital.hdl.model2.HDLPort) TestCaseDescription(de.neemann.digital.testing.TestCaseDescription)

Aggregations

TestingDataException (de.neemann.digital.testing.TestingDataException)3 ArrayList (java.util.ArrayList)2 ElementAttributes (de.neemann.digital.core.element.ElementAttributes)1 ElementNotFoundException (de.neemann.digital.draw.library.ElementNotFoundException)1 ValueTableDialog (de.neemann.digital.gui.components.testing.ValueTableDialog)1 HDLException (de.neemann.digital.hdl.model2.HDLException)1 HDLPort (de.neemann.digital.hdl.model2.HDLPort)1 CodePrinter (de.neemann.digital.hdl.printer.CodePrinter)1 TestCaseDescription (de.neemann.digital.testing.TestCaseDescription)1 Context (de.neemann.digital.testing.parser.Context)1 LineListener (de.neemann.digital.testing.parser.LineListener)1 ParserException (de.neemann.digital.testing.parser.ParserException)1 File (java.io.File)1