In the truth table it is possible to create a test case description, closes #351

This commit is contained in:
hneemann 2019-09-28 18:13:18 +02:00
parent a5ec767176
commit 8a75744578
6 changed files with 118 additions and 1 deletions

View File

@ -13,6 +13,7 @@ import de.neemann.digital.analyse.quinemc.ThreeStateValue;
import de.neemann.digital.draw.graphics.text.formatter.LaTeXFormatter;
/**
* Creates a LaTeX table using the truth table data
*/
public class TruthTableFormatterLaTeX implements TruthTableFormatter {
@Override

View File

@ -0,0 +1,68 @@
/*
* 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.analyse.format;
import de.neemann.digital.analyse.TruthTable;
import de.neemann.digital.analyse.expression.ContextFiller;
import de.neemann.digital.analyse.expression.ExpressionException;
import de.neemann.digital.analyse.expression.Variable;
import de.neemann.digital.analyse.quinemc.ThreeStateValue;
/**
* Creates a test case which represents the truth table
*/
public class TruthTableFormatterTestCase implements TruthTableFormatter {
@Override
public String format(TruthTable truthTable) throws ExpressionException {
StringBuilder sb = new StringBuilder();
for (Variable v : truthTable.getVars())
sb.append(v.getIdentifier()).append(" ");
for (int i = 0; i < truthTable.getResultCount(); i++) {
sb.append(truthTable.getResultName(i));
if (i < truthTable.getResultCount() - 1)
sb.append(" ");
}
sb.append("\n\n");
ContextFiller cf = new ContextFiller(truthTable.getVars());
for (int i = 0; i < cf.getRowCount(); i++) {
cf.setContextTo(i);
for (Variable v : cf) {
sb.append(format(cf.get(v)));
for (int j = 0; j < v.getIdentifier().length(); j++)
sb.append(" ");
}
for (int j = 0; j < truthTable.getResultCount(); j++) {
ThreeStateValue r = truthTable.getResult(j).get(i);
sb.append(format(r));
if (j < truthTable.getResultCount() - 1)
for (int k = 0; k < truthTable.getResultName(j).length(); k++)
sb.append(" ");
}
sb.append("\n");
}
return sb.toString();
}
private String format(boolean b) {
return format(ThreeStateValue.value(b));
}
private String format(ThreeStateValue r) {
switch (r) {
case one:
return "1";
case zero:
return "0";
case dontCare:
return "x";
}
return null;
}
}

View File

@ -5,11 +5,16 @@
*/
package de.neemann.digital.gui.components.table;
import de.neemann.digital.lang.Lang;
import de.neemann.gui.Screen;
import de.neemann.gui.ToolTipAction;
import javax.swing.*;
import javax.swing.text.JTextComponent;
import java.awt.*;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.StringSelection;
import java.awt.event.ActionEvent;
/**
* Shows a simple string
@ -69,6 +74,23 @@ public class ShowStringDialog extends JDialog {
textComp.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
getContentPane().add(new JScrollPane(textComp));
JPanel buttons = new JPanel(new FlowLayout(FlowLayout.RIGHT));
buttons.add(new ToolTipAction(Lang.get("btn_copyToClipboard")) {
@Override
public void actionPerformed(ActionEvent actionEvent) {
StringSelection stringSelection = new StringSelection(str);
Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
clipboard.setContents(stringSelection, null);
}
}.createJButton());
buttons.add(new ToolTipAction(Lang.get("ok")) {
@Override
public void actionPerformed(ActionEvent actionEvent) {
dispose();
}
}.createJButton());
getContentPane().add(buttons, BorderLayout.SOUTH);
pack();
setLocationRelativeTo(parent);
}

View File

@ -15,6 +15,8 @@ import de.neemann.digital.analyse.expression.NamedExpression;
import de.neemann.digital.analyse.expression.Variable;
import de.neemann.digital.analyse.expression.format.FormatterException;
import de.neemann.digital.analyse.expression.modify.*;
import de.neemann.digital.analyse.format.TruthTableFormatter;
import de.neemann.digital.analyse.format.TruthTableFormatterTestCase;
import de.neemann.digital.analyse.quinemc.BoolTableByteArray;
import de.neemann.digital.builder.ATF150x.ATFDevice;
import de.neemann.digital.builder.ExpressionToFileExporter;
@ -421,6 +423,20 @@ public class TableDialog extends JDialog {
}
});
fileMenu.add(new ToolTipAction(Lang.get("menu_table_createFunctionFixture")) {
@Override
public void actionPerformed(ActionEvent e) {
try {
TruthTableFormatter test = new TruthTableFormatterTestCase();
String testCase = test.format(undoManager.getActual());
new ShowStringDialog(TableDialog.this, Lang.get("win_table_exportDialog"),
testCase).setVisible(true);
} catch (ExpressionException e1) {
new ErrorMessage(Lang.get("msg_errorDuringCalculation")).addCause(e1).show(TableDialog.this);
}
}
}.setToolTip(Lang.get("menu_table_createFunctionFixture_tt")).createJMenuItem());
fileMenu.add(new ToolTipAction(Lang.get("menu_table_exportHex")) {
@Override
public void actionPerformed(ActionEvent e) {

View File

@ -1539,7 +1539,11 @@ Sind evtl. die Namen der Variablen nicht eindeutig?</string>
<string name="menu_table_createThree_tt">Erzeugt eine Schaltung und verwendet nur Gatter mit maximal drei Eingängen.</string>
<string name="menu_table_create_hardware">Bausteine</string>
<string name="menu_table_create_jedec_tt">Erzeugt eine JEDEC Datei für den Baustein</string>
<string name="menu_table_exportTableLaTeX">Export LaTeX</string>
<string name="menu_table_exportTableLaTeX">Erzeuge LaTeX</string>
<string name="menu_table_createFunctionFixture">Erzeuge Testfall</string>
<string name="menu_table_createFunctionFixture_tt">Erzeugt eine Testfallbeschreibung, welche in einen Testfall
übernommen werden kann.
</string>
<string name="menu_table_exportHex">Erzeuge HEX</string>
<string name="menu_table_exportHex_tt">Die HEX-Datei kann in ein ROM oder eine LUT geladen werden.</string>
<string name="menu_table_new">Neu</string>
@ -1777,6 +1781,7 @@ Stellen Sie sicher, dass der Flash-Vorgang abgeschlossen ist, bevor Sie diesen D
Sollen alle {0} zu ''{2}'' umbenannt werden?</string>
<string name="msg_dataWillBeLost_n">Sollen die Änderungen im Feld "{0}" wirklich verworfen werden?</string>
<string name="btn_copyToClipboard">Zwischenablage</string>
<string name="ok">Ok</string>
<string name="rot_0"></string>

View File

@ -1523,6 +1523,10 @@
<string name="menu_table_create_hardware">Device</string>
<string name="menu_table_create_jedec_tt">Creates a JEDEC file for the device</string>
<string name="menu_table_exportTableLaTeX">Export LaTeX</string>
<string name="menu_table_createFunctionFixture">Export Test Case</string>
<string name="menu_table_createFunctionFixture_tt">Creates a test case description that can be used in a test
case.
</string>
<string name="menu_table_exportHex">Export HEX</string>
<string name="menu_table_exportHex_tt">You can load the HEX file to a ROM or a LUT.</string>
<string name="menu_table_new">New</string>
@ -1782,6 +1786,7 @@ Make sure the flash process is complete before closing this dialog!</string>
<string name="win_karnaughMap">Karnaugh Map</string>
<string name="btn_help">Help</string>
<string name="btn_copyToClipboard">Clipboard</string>
<string name="win_romDialogHelpTitle">Central ROM Content</string>
<string name="msg_romDialogHelp"><![CDATA[