mirror of
https://github.com/hneemann/Digital.git
synced 2025-09-14 23:36:27 -04:00
In the truth table it is possible to create a test case description, closes #351
This commit is contained in:
parent
a5ec767176
commit
8a75744578
@ -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
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
@ -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);
|
||||
}
|
||||
|
@ -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) {
|
||||
|
@ -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">0°</string>
|
||||
|
@ -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[
|
||||
|
Loading…
x
Reference in New Issue
Block a user