From 6ed91b59cbbba8ac70fd64b1ce59f774b092bcbb Mon Sep 17 00:00:00 2001 From: hneemann Date: Thu, 18 May 2017 17:41:17 +0200 Subject: [PATCH] shows an error if a test data signal is used twice --- src/main/java/de/neemann/digital/lang/Lang.java | 6 ++++-- .../java/de/neemann/digital/testing/TestResult.java | 12 +++++++++--- .../de/neemann/digital/testing/parser/Parser.java | 5 ++++- src/main/resources/lang/lang_de.xml | 4 +++- src/main/resources/lang/lang_en.xml | 4 +++- 5 files changed, 23 insertions(+), 8 deletions(-) diff --git a/src/main/java/de/neemann/digital/lang/Lang.java b/src/main/java/de/neemann/digital/lang/Lang.java index f70df61d8..8440fce06 100644 --- a/src/main/java/de/neemann/digital/lang/Lang.java +++ b/src/main/java/de/neemann/digital/lang/Lang.java @@ -5,6 +5,7 @@ import de.neemann.gui.language.Language; import de.neemann.gui.language.Resources; import java.text.MessageFormat; +import java.util.Arrays; import java.util.Locale; import java.util.prefs.Preferences; @@ -90,6 +91,7 @@ public final class Lang { else currentLanguage = new Language("en"); } + /** * Only used for generation of documentation * @@ -111,9 +113,9 @@ public final class Lang { // if the 'testdata' system property is set, let the test fail! // If we are in production usage, don't let the program crash, simply return the key itself instead! if (System.getProperty("testdata") != null) - throw new Error("missing laguage key '" + key + "'"); + throw new Error("missing language key '" + key + "'"); - return key; + return key + " " + Arrays.asList(params).toString(); } } diff --git a/src/main/java/de/neemann/digital/testing/TestResult.java b/src/main/java/de/neemann/digital/testing/TestResult.java index 7c41fef55..6cb370a5a 100644 --- a/src/main/java/de/neemann/digital/testing/TestResult.java +++ b/src/main/java/de/neemann/digital/testing/TestResult.java @@ -61,14 +61,14 @@ public class TestResult { final int index = getIndexOf(s.getName()); if (index >= 0) { inputs.add(new TestSignal(index, s.getValue())); - usedSignals.add(s.getName()); + addTo(usedSignals, s.getName()); } } for (Clock c : model.getClocks()) { final int index = getIndexOf(c.getLabel()); if (index >= 0) { inputs.add(new TestSignal(index, c.getClockOutput())); - usedSignals.add(c.getLabel()); + addTo(usedSignals, c.getLabel()); } } @@ -77,7 +77,7 @@ public class TestResult { final int index = getIndexOf(s.getName()); if (index >= 0) { outputs.add(new TestSignal(index, s.getValue())); - usedSignals.add(s.getName()); + addTo(usedSignals, s.getName()); } } @@ -107,6 +107,12 @@ public class TestResult { return this; } + private void addTo(HashSet signals, String name) throws TestingDataException { + if (signals.contains(name)) + throw new TestingDataException(Lang.get("err_nameUsedTwice_N", name)); + signals.add(name); + } + private void checkRow(Model model, Value[] row) { Value[] res = new Value[row.length]; diff --git a/src/main/java/de/neemann/digital/testing/parser/Parser.java b/src/main/java/de/neemann/digital/testing/parser/Parser.java index 9ac0cd6fd..eec58085d 100644 --- a/src/main/java/de/neemann/digital/testing/parser/Parser.java +++ b/src/main/java/de/neemann/digital/testing/parser/Parser.java @@ -54,7 +54,10 @@ public class Parser { Tokenizer.Token token = tok.simpleIdent(); switch (token) { case IDENT: - names.add(tok.getIdent()); + final String name = tok.getIdent(); + if (names.contains(name)) + throw new ParserException(Lang.get("err_nameUsedTwice_N", name)); + names.add(name); break; case EOL: return; diff --git a/src/main/resources/lang/lang_de.xml b/src/main/resources/lang/lang_de.xml index 44fd7ad89..db98fd72b 100644 --- a/src/main/resources/lang/lang_de.xml +++ b/src/main/resources/lang/lang_de.xml @@ -424,7 +424,8 @@ Die gesammte Speichergröße beträgt damit damit dx*dy*2 Speicherworte.Die Nummer der aktuellen Spalte, dessen Zustand gerade am anderen Eingang anliegt. Transmissionsgatter - Ein reales Transmissionsgatter ist aus nur zwei Transistoren aufgebaut. + Ein reales Transmissionsgatter ist aus nur zwei Transistoren aufgebaut. + Daher wird es oft eingesetzt um Transistoren einzusparen. Eingang A Eingang_B Steuereingang @@ -523,6 +524,7 @@ Sind evtl. die Namen der Variablen nicht eindeutig? Es sind nur {1} Bits erlaubt, es sind jedoch {0} Bits angegeben! Es sind keine Flipflops mit mehr als einem Bit erlaubt! Die Steuereingänge eines Transmission-Gates müssen invertiert beschaltet werden! + Signal {0} wurde mehrfach verwendet! Adress-Bits Anzahl der Adress-Bits die verwendet werden. diff --git a/src/main/resources/lang/lang_en.xml b/src/main/resources/lang/lang_en.xml index ec20fc728..a3c852453 100644 --- a/src/main/resources/lang/lang_en.xml +++ b/src/main/resources/lang/lang_en.xml @@ -414,7 +414,8 @@ The number of the current column whose state is currently visible at the other input. Transmission-Gate - A real transmission-gate is build from only two transistors. + A real transmission-gate is build from only two transistors. + Therefore, it is often used to save transistors during implementation on silicon. input A input B control input. @@ -513,6 +514,7 @@ The names of the variables may not be unique. Only {1} bits allowed, but {0} bits found! Flipflops with more then one bits are not allowed! The two control inputs of a transmission gate must be inverted! + Signal {0} is used twice! Address Bits Number of address bits used.