diff --git a/dmn-verifier-app/pom.xml b/dmn-verifier-app/pom.xml index 4323696b0a231960c07c2c314187bb65a6d93c77..b61fe67ffe13fbdd7a3bc1ae402ea66b6ef4580b 100644 --- a/dmn-verifier-app/pom.xml +++ b/dmn-verifier-app/pom.xml @@ -12,7 +12,7 @@ <properties> <build.name>ROOT</build.name> - <version.camunda>7.10.0</version.camunda> + <version.camunda>7.11.0</version.camunda> </properties> <repositories> diff --git a/dmn-verifier-app/src/main/java/de/unikoblenz/fgbks/dmn/core/dmnhelper/DmnRuleMap.java b/dmn-verifier-app/src/main/java/de/unikoblenz/fgbks/dmn/core/dmnhelper/DmnRuleMap.java index 32ed1a630ffc3c6f9c13a011f8c1801f82df6128..f733227431c63af264a13f5e93594ffe7b7e355e 100644 --- a/dmn-verifier-app/src/main/java/de/unikoblenz/fgbks/dmn/core/dmnhelper/DmnRuleMap.java +++ b/dmn-verifier-app/src/main/java/de/unikoblenz/fgbks/dmn/core/dmnhelper/DmnRuleMap.java @@ -87,6 +87,10 @@ public class DmnRuleMap { dmnRuleMap.inputColumns.add(it); dmnRuleMap.inputs.put(it, new ArrayList<>()); List<Value> inList = dmnRuleMap.inputs.get(it); + if (DataType.BOOLEAN == it.dataType) { + it.addPredefinedValues("true"); + it.addPredefinedValues("false"); + } int r = 0; for (DmnDecisionTableRuleImpl rule : table.getRules()) { DmnExpressionImpl condition = rule.getConditions().get(i); @@ -96,6 +100,12 @@ public class DmnRuleMap { dmnRuleMap.ruleInputValues.getOrDefault(value.getRuleIdentifier(), new ArrayList<>()); rules.add(value); dmnRuleMap.ruleInputValues.put(value.getRuleIdentifier(), rules); + // If string, add to possible values + if (DataType.STRING == it.dataType && value.getOrgExpression() != null) { + it.addPredefinedValues( + value.getOrgExpression()); // TODO: add predifined Values from org "Predefined + // Values" + } } i++; } @@ -106,6 +116,10 @@ public class DmnRuleMap { dmnRuleMap.outputColumns.add(ot); dmnRuleMap.outputs.put(ot, new ArrayList<>()); List<Value> outList = dmnRuleMap.outputs.get(ot); + if (DataType.BOOLEAN == ot.dataType) { + ot.addPredefinedValues("true"); + ot.addPredefinedValues("false"); + } int r = 0; for (DmnDecisionTableRuleImpl rule : table.getRules()) { DmnExpressionImpl conclusion = rule.getConclusions().get(i); @@ -116,6 +130,10 @@ public class DmnRuleMap { value.getRuleIdentifier(), new ArrayList<>()); rules.add(value); dmnRuleMap.ruleOutputValues.put(value.getRuleIdentifier(), rules); + // If string, add to possible values + if (DataType.STRING == ot.dataType && value.getOrgExpression() != null) { + ot.addPredefinedValues(value.getOrgExpression()); + } } i++; } @@ -163,12 +181,16 @@ public class DmnRuleMap { inputColumns.stream() .filter(i -> i.getDecisionKey().equals(ot.getDecisionKey())) .collect(Collectors.toList())) { - // only, if the label didnt exists in prev created cols - if (newInputTypes.stream() + // only, if the label didn't exists in previously created input + Optional<InputType> existingInputType = + newInputTypes.stream() .filter(i -> i.label.equals(inputType.label) && i.dataType == inputType.dataType) - .limit(1) - .count() - < 1) { + .findFirst(); + if (existingInputType.isPresent()) { + inputType + .getPredefinedValues() + .forEach(p -> existingInputType.get().addPredefinedValues(p)); + } else { InputType newInputType = new InputType(inputType); newInputType.setOverwrittenDecisionKey(newDmnKey); newInputTypes.add(newInputType); diff --git a/dmn-verifier-app/src/main/java/de/unikoblenz/fgbks/dmn/core/dmnhelper/Type.java b/dmn-verifier-app/src/main/java/de/unikoblenz/fgbks/dmn/core/dmnhelper/Type.java index 09eb087292aab86b907d280562fd09f63f4d9f74..ca97925656002ea00133643981d731fe41055c8e 100644 --- a/dmn-verifier-app/src/main/java/de/unikoblenz/fgbks/dmn/core/dmnhelper/Type.java +++ b/dmn-verifier-app/src/main/java/de/unikoblenz/fgbks/dmn/core/dmnhelper/Type.java @@ -1,7 +1,9 @@ package de.unikoblenz.fgbks.dmn.core.dmnhelper; import de.unikoblenz.fgbks.dmn.core.models.RuleIdentifier; +import java.util.HashSet; import java.util.Objects; +import java.util.Set; import org.camunda.bpm.dmn.engine.DmnDecision; import org.camunda.bpm.dmn.engine.impl.DmnExpressionImpl; @@ -12,6 +14,7 @@ public abstract class Type { protected final DataType dataType; protected final String label; protected String overwrittenDecisionKey; + protected Set<String> predefinedValues; public String getDecisionKey() { if (overwrittenDecisionKey != null) { @@ -40,12 +43,21 @@ public abstract class Type { this.overwrittenDecisionKey = overwrittenDecisionKey; } + public Set<String> getPredefinedValues() { + return new HashSet<>(predefinedValues); + } + + public void addPredefinedValues(String predefinedValue) { + predefinedValues.add(predefinedValue); + } + protected Type(DmnDecision decision, String id, DataType dataType, String label) { this.decision = decision; this.id = id; this.dataType = dataType; this.label = label; this.overwrittenDecisionKey = null; + this.predefinedValues = new HashSet<>(); } public Type(Type type) { @@ -54,6 +66,7 @@ public abstract class Type { this.dataType = type.dataType; this.label = type.label; this.overwrittenDecisionKey = type.overwrittenDecisionKey; + this.predefinedValues = new HashSet<>(type.predefinedValues); } public boolean isMergedType() { diff --git a/dmn-verifier-app/src/main/resources/sampleDMN.dmn b/dmn-verifier-app/src/main/resources/sampleDMN.dmn index 6f55a0830bd5bd36d9a6f03fc3dc9a303e39be45..ae0971edf4bfed2863986181ccda8be6f68b356d 100644 --- a/dmn-verifier-app/src/main/resources/sampleDMN.dmn +++ b/dmn-verifier-app/src/main/resources/sampleDMN.dmn @@ -14,6 +14,9 @@ <inputExpression id="LiteralExpression_16k88l6" typeRef="string"> <text>testString</text> </inputExpression> + <inputValues id="UnaryTests_1dqtimh"> + <text>"Hello","World","Nicole"</text> + </inputValues> </input> <output id="output_1" typeRef="string" /> <rule id="DecisionRule_1cwar6s"> @@ -21,7 +24,7 @@ <text>=10</text> </inputEntry> <inputEntry id="UnaryTests_1wdwt7k"> - <text>"Hallo"</text> + <text>"Hello"</text> </inputEntry> <outputEntry id="LiteralExpression_0q4dj07"> <text></text> @@ -43,7 +46,7 @@ <text>=10</text> </inputEntry> <inputEntry id="UnaryTests_04ee59d"> - <text>"Hallo"</text> + <text>"Hello"</text> </inputEntry> <outputEntry id="LiteralExpression_1vwq9kg"> <text></text> @@ -455,54 +458,54 @@ </rule> </decisionTable> </decision> - <decision id="Decision_13hi6aw" name="Missing 2"> - <extensionElements> - <biodi:bounds x="859" y="215" width="180" height="80" /> - </extensionElements> - <decisionTable id="DecisionTable_00f0o2m"> - <input id="InputClause_13up6c7" label="x"> - <inputExpression id="LiteralExpression_1dn7njr" typeRef="integer" /> - </input> - <input id="InputClause_0847npz" label="y"> - <inputExpression id="LiteralExpression_0obosay" typeRef="integer"> - <text></text> - </inputExpression> - </input> - <output id="OutputClause_18obzop" typeRef="string" /> - <rule id="DecisionRule_0oyfmhy"> - <inputEntry id="UnaryTests_0xy4bmj"> - <text>[2..4]</text> - </inputEntry> - <inputEntry id="UnaryTests_10fhwew"> - <text>[3..5]</text> - </inputEntry> - <outputEntry id="LiteralExpression_0dwkyvr"> - <text></text> - </outputEntry> - </rule> - <rule id="DecisionRule_0vgwssx"> - <inputEntry id="UnaryTests_1lqrnuq"> - <text>[6..7]</text> - </inputEntry> - <inputEntry id="UnaryTests_13svgy5"> - <text>[2..7]</text> - </inputEntry> - <outputEntry id="LiteralExpression_01uesqf"> - <text></text> - </outputEntry> - </rule> - <rule id="DecisionRule_1nc162p"> - <inputEntry id="UnaryTests_04orlte"> - <text>[3..5]</text> - </inputEntry> - <inputEntry id="UnaryTests_1au3mbz"> - <text>[6..8]</text> - </inputEntry> - <outputEntry id="LiteralExpression_1xsp0mf"> - <text></text> - </outputEntry> - </rule> - </decisionTable> + <decision id="Decision_13hi6aw" name="Missing 2"> + <extensionElements> + <biodi:bounds x="859" y="215" width="180" height="80" /> + </extensionElements> + <decisionTable id="DecisionTable_00f0o2m"> + <input id="InputClause_13up6c7" label="x"> + <inputExpression id="LiteralExpression_1dn7njr" typeRef="integer" /> + </input> + <input id="InputClause_0847npz" label="y"> + <inputExpression id="LiteralExpression_0obosay" typeRef="integer"> + <text></text> + </inputExpression> + </input> + <output id="OutputClause_18obzop" typeRef="string" /> + <rule id="DecisionRule_0oyfmhy"> + <inputEntry id="UnaryTests_0xy4bmj"> + <text>[2..4]</text> + </inputEntry> + <inputEntry id="UnaryTests_10fhwew"> + <text>[3..5]</text> + </inputEntry> + <outputEntry id="LiteralExpression_0dwkyvr"> + <text></text> + </outputEntry> + </rule> + <rule id="DecisionRule_0vgwssx"> + <inputEntry id="UnaryTests_1lqrnuq"> + <text>[6..7]</text> + </inputEntry> + <inputEntry id="UnaryTests_13svgy5"> + <text>[2..7]</text> + </inputEntry> + <outputEntry id="LiteralExpression_01uesqf"> + <text></text> + </outputEntry> + </rule> + <rule id="DecisionRule_1nc162p"> + <inputEntry id="UnaryTests_04orlte"> + <text>[3..5]</text> + </inputEntry> + <inputEntry id="UnaryTests_1au3mbz"> + <text>[6..8]</text> + </inputEntry> + <outputEntry id="LiteralExpression_1xsp0mf"> + <text></text> + </outputEntry> + </rule> + </decisionTable> </decision> <decision id="Decision_0m4xor4" name="Partial Reduction"> <extensionElements> diff --git a/dmn-verifier-app/src/test/java/de/unikoblenz/fgbks/dmn/core/dmnhelper/DmnRuleMapTest.java b/dmn-verifier-app/src/test/java/de/unikoblenz/fgbks/dmn/core/dmnhelper/DmnRuleMapTest.java index c587364bffac4b8b1f223f82fbb8b6b39812c1d7..7ebb2d48a9f8eda5b12ec2408ad5d601a6f1d6c9 100644 --- a/dmn-verifier-app/src/test/java/de/unikoblenz/fgbks/dmn/core/dmnhelper/DmnRuleMapTest.java +++ b/dmn-verifier-app/src/test/java/de/unikoblenz/fgbks/dmn/core/dmnhelper/DmnRuleMapTest.java @@ -7,26 +7,33 @@ import java.io.InputStream; import java.util.List; import org.camunda.bpm.dmn.engine.DmnDecision; import org.camunda.bpm.dmn.engine.DmnEngineConfiguration; -import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; class DmnRuleMapTest { - private List<DmnDecision> dmnDecisions; - @BeforeEach - void init() throws FileNotFoundException { + @Test + void testMultiTable() throws FileNotFoundException { File f = new File("."); InputStream inputStream = new FileInputStream( new File(getClass().getClassLoader().getResource("dmnMultiTable1.dmn").getFile())); - this.dmnDecisions = + List<DmnDecision> dmnDecisions = DmnEngineConfiguration.createDefaultDmnEngineConfiguration() .buildEngine() .parseDecisions(inputStream); + DmnRuleMap rm = DmnRuleMap.createMapFromDmn(dmnDecisions); } @Test - void testCreation() { + void testPredefinedValues() throws FileNotFoundException { + File f = new File("."); + InputStream inputStream = + new FileInputStream( + new File(getClass().getClassLoader().getResource("dmnPredefinedValues.dmn").getFile())); + List<DmnDecision> dmnDecisions = + DmnEngineConfiguration.createDefaultDmnEngineConfiguration() + .buildEngine() + .parseDecisions(inputStream); DmnRuleMap rm = DmnRuleMap.createMapFromDmn(dmnDecisions); } } diff --git a/dmn-verifier-app/src/test/resources/dmnPredefinedValues.dmn b/dmn-verifier-app/src/test/resources/dmnPredefinedValues.dmn new file mode 100644 index 0000000000000000000000000000000000000000..c8c8087854024c006fbe524e4d03dbe653f9ba5d --- /dev/null +++ b/dmn-verifier-app/src/test/resources/dmnPredefinedValues.dmn @@ -0,0 +1,79 @@ +<?xml version="1.0" encoding="UTF-8"?> +<definitions xmlns="http://www.omg.org/spec/DMN/20151101/dmn.xsd" xmlns:biodi="http://bpmn.io/schema/dmn/biodi/1.0" id="Definitions_1kjh9a2" name="DRD" namespace="http://camunda.org/schema/1.0/dmn"> + <decision id="Decision_13nychf" name="Identical"> + <extensionElements> + <biodi:bounds x="87" y="130" width="180" height="80" /> + </extensionElements> + <decisionTable id="decisionTable_1"> + <input id="input_1"> + <inputExpression id="inputExpression_1" typeRef="integer"> + <text>testNumber</text> + </inputExpression> + </input> + <input id="InputClause_0rrhtk1"> + <inputExpression id="LiteralExpression_16k88l6" typeRef="string"> + <text>testString</text> + </inputExpression> + <inputValues id="UnaryTests_1dqtimh"> + <text>"Hello","World","Nicole"</text> + </inputValues> + </input> + <output id="output_1" typeRef="string" /> + <rule id="DecisionRule_1cwar6s"> + <inputEntry id="UnaryTests_0pk3kty"> + <text>=10</text> + </inputEntry> + <inputEntry id="UnaryTests_1wdwt7k"> + <text>"Hello"</text> + </inputEntry> + <outputEntry id="LiteralExpression_0q4dj07"> + <text></text> + </outputEntry> + </rule> + <rule id="DecisionRule_1p34o1d"> + <inputEntry id="UnaryTests_1ch9v1c"> + <text>=10</text> + </inputEntry> + <inputEntry id="UnaryTests_01s94by"> + <text>"Nicole"</text> + </inputEntry> + <outputEntry id="LiteralExpression_06akk3i"> + <text></text> + </outputEntry> + </rule> + <rule id="DecisionRule_0qsr7sc"> + <inputEntry id="UnaryTests_15uwa59"> + <text>=10</text> + </inputEntry> + <inputEntry id="UnaryTests_04ee59d"> + <text>"Hello"</text> + </inputEntry> + <outputEntry id="LiteralExpression_1vwq9kg"> + <text></text> + </outputEntry> + </rule> + <rule id="DecisionRule_1js41zm"> + <inputEntry id="UnaryTests_1txm13n"> + <text>=11</text> + </inputEntry> + <inputEntry id="UnaryTests_1jlekat"> + <text></text> + </inputEntry> + <outputEntry id="LiteralExpression_1qpe5et"> + <text></text> + </outputEntry> + </rule> + <rule id="DecisionRule_12uwz7k"> + <inputEntry id="UnaryTests_18blk05"> + <text>=11</text> + </inputEntry> + <inputEntry id="UnaryTests_12rozq9"> + <text></text> + </inputEntry> + <outputEntry id="LiteralExpression_01a2ulw"> + <text></text> + </outputEntry> + </rule> + </decisionTable> + </decision> +</definitions> diff --git a/dmn-verifier-app/src/test/resources/emptyDMN.dmn b/dmn-verifier-app/src/test/resources/emptyDMN.dmn deleted file mode 100644 index 73f512d15fe89bed7f3029e37912e153ce10ef34..0000000000000000000000000000000000000000 --- a/dmn-verifier-app/src/test/resources/emptyDMN.dmn +++ /dev/null @@ -1,16 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<definitions xmlns="http://www.omg.org/spec/DMN/20151101/dmn.xsd" xmlns:biodi="http://bpmn.io/schema/dmn/biodi/1.0" id="Definitions_1kjh9a2" name="DRD" namespace="http://camunda.org/schema/1.0/dmn"> - <decision id="Decision_13nychf" name="Decision 1"> - <extensionElements> - <biodi:bounds x="120" y="145" width="180" height="80" /> - </extensionElements> - <decisionTable id="decisionTable_1"> - <input id="input_1"> - <inputExpression id="inputExpression_1" typeRef="string"> - <text></text> - </inputExpression> - </input> - <output id="output_1" typeRef="string" /> - </decisionTable> - </decision> -</definitions> diff --git a/dmn-verifier-app/src/test/resources/sampleDMN.dmn b/dmn-verifier-app/src/test/resources/sampleDMN.dmn deleted file mode 100644 index 45ebc85d2745f4868e2d2adbcf952bf6381ea8af..0000000000000000000000000000000000000000 --- a/dmn-verifier-app/src/test/resources/sampleDMN.dmn +++ /dev/null @@ -1,201 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<definitions xmlns="http://www.omg.org/spec/DMN/20151101/dmn.xsd" xmlns:biodi="http://bpmn.io/schema/dmn/biodi/1.0" id="Definitions_1kjh9a2" name="DRD" namespace="http://camunda.org/schema/1.0/dmn"> - <decision id="Decision_13nychf" name="Identical test"> - <extensionElements> - <biodi:bounds x="120" y="145" width="180" height="80" /> - </extensionElements> - <decisionTable id="decisionTable_1"> - <input id="input_1"> - <inputExpression id="inputExpression_1" typeRef="integer"> - <text>Testnumber</text> - </inputExpression> - </input> - <input id="InputClause_0rrhtk1"> - <inputExpression id="LiteralExpression_16k88l6" typeRef="string"> - <text></text> - </inputExpression> - </input> - <output id="output_1" typeRef="string" /> - <rule id="DecisionRule_1cwar6s"> - <inputEntry id="UnaryTests_0pk3kty"> - <text>=10</text> - </inputEntry> - <inputEntry id="UnaryTests_1wdwt7k"> - <text>"Hallo"</text> - </inputEntry> - <outputEntry id="LiteralExpression_0q4dj07"> - <text></text> - </outputEntry> - </rule> - <rule id="DecisionRule_1p34o1d"> - <inputEntry id="UnaryTests_1ch9v1c"> - <text>=10</text> - </inputEntry> - <inputEntry id="UnaryTests_01s94by"> - <text>"Anna"</text> - </inputEntry> - <outputEntry id="LiteralExpression_06akk3i"> - <text></text> - </outputEntry> - </rule> - <rule id="DecisionRule_0qsr7sc"> - <inputEntry id="UnaryTests_15uwa59"> - <text>=10</text> - </inputEntry> - <inputEntry id="UnaryTests_04ee59d"> - <text>"Hallo"</text> - </inputEntry> - <outputEntry id="LiteralExpression_1vwq9kg"> - <text></text> - </outputEntry> - </rule> - <rule id="DecisionRule_1js41zm"> - <inputEntry id="UnaryTests_1txm13n"> - <text>=11</text> - </inputEntry> - <inputEntry id="UnaryTests_1jlekat"> - <text></text> - </inputEntry> - <outputEntry id="LiteralExpression_1qpe5et"> - <text></text> - </outputEntry> - </rule> - <rule id="DecisionRule_12uwz7k"> - <inputEntry id="UnaryTests_18blk05"> - <text>=11</text> - </inputEntry> - <inputEntry id="UnaryTests_12rozq9"> - <text></text> - </inputEntry> - <outputEntry id="LiteralExpression_01a2ulw"> - <text></text> - </outputEntry> - </rule> - </decisionTable> - </decision> - <decision id="Decision_1vo386g" name="Subsumption test 1"> - <extensionElements> - <biodi:bounds x="344" y="74" width="180" height="80" /> - </extensionElements> - <decisionTable id="DecisionTable_0tq1rr0"> - <input id="InputClause_0f5fjmn"> - <inputExpression id="LiteralExpression_0flv94t" typeRef="integer" /> - </input> - <output id="OutputClause_0c6vpaw" typeRef="string" /> - <rule id="DecisionRule_15aojnz"> - <inputEntry id="UnaryTests_0wp6h38"> - <text>[0..10]</text> - </inputEntry> - <outputEntry id="LiteralExpression_0m0psw2"> - <text>"Hello"</text> - </outputEntry> - </rule> - <rule id="DecisionRule_0al9vbu"> - <inputEntry id="UnaryTests_0rynlvv"> - <text>[0..5]</text> - </inputEntry> - <outputEntry id="LiteralExpression_0f6oge7"> - <text>"World"</text> - </outputEntry> - </rule> - <rule id="DecisionRule_0p54cry"> - <inputEntry id="UnaryTests_0ntn86o"> - <text>[7..9]</text> - </inputEntry> - <outputEntry id="LiteralExpression_1atols8"> - <text>"Hello"</text> - </outputEntry> - </rule> - <rule id="DecisionRule_0h2fkl8"> - <inputEntry id="UnaryTests_11ajd7x"> - <text>[7..15]</text> - </inputEntry> - <outputEntry id="LiteralExpression_0drd4qx"> - <text>"FuBa"</text> - </outputEntry> - </rule> - </decisionTable> - </decision> - <decision id="Decision_19xi89b" name="Subsumption test 2"> - <extensionElements> - <biodi:bounds x="343" y="178" width="180" height="80" /> - </extensionElements> - <decisionTable id="DecisionTable_0p3gy3p"> - <input id="InputClause_095mouf"> - <inputExpression id="LiteralExpression_0by8u52" typeRef="integer" /> - </input> - <input id="InputClause_1noqtoh"> - <inputExpression id="LiteralExpression_1w9f5gq" typeRef="string"> - <text></text> - </inputExpression> - </input> - <output id="OutputClause_0xupopk" typeRef="string" /> - <rule id="DecisionRule_0kkfntw"> - <inputEntry id="UnaryTests_12wi462"> - <text>[10..20]</text> - </inputEntry> - <inputEntry id="UnaryTests_0kardbu"> - <text>"a"</text> - </inputEntry> - <outputEntry id="LiteralExpression_09o0uoj"> - <text></text> - </outputEntry> - </rule> - <rule id="DecisionRule_02ugnup"> - <inputEntry id="UnaryTests_10mg943"> - <text>[11..19]</text> - </inputEntry> - <inputEntry id="UnaryTests_16v2m5l"> - <text>"a"</text> - </inputEntry> - <outputEntry id="LiteralExpression_1n8yp0s"> - <text></text> - </outputEntry> - </rule> - <rule id="DecisionRule_1l9le35"> - <inputEntry id="UnaryTests_1nyire8"> - <text>[12..18]</text> - </inputEntry> - <inputEntry id="UnaryTests_1lbqwex"> - <text>"b"</text> - </inputEntry> - <outputEntry id="LiteralExpression_0h5ubao"> - <text></text> - </outputEntry> - </rule> - <rule id="DecisionRule_0ok83ek"> - <inputEntry id="UnaryTests_04p4mkt"> - <text>[12..18]</text> - </inputEntry> - <inputEntry id="UnaryTests_1w75h2z"> - <text>"a"</text> - </inputEntry> - <outputEntry id="LiteralExpression_1s6eocn"> - <text></text> - </outputEntry> - </rule> - <rule id="DecisionRule_1fy5k22"> - <inputEntry id="UnaryTests_09z2anu"> - <text>[13..17]</text> - </inputEntry> - <inputEntry id="UnaryTests_1yd8iel"> - <text></text> - </inputEntry> - <outputEntry id="LiteralExpression_0c4gtb4"> - <text></text> - </outputEntry> - </rule> - <rule id="DecisionRule_18921uy"> - <inputEntry id="UnaryTests_1cbt1dj"> - <text>[0..21]</text> - </inputEntry> - <inputEntry id="UnaryTests_1515ccv"> - <text></text> - </inputEntry> - <outputEntry id="LiteralExpression_1u5cl6z"> - <text></text> - </outputEntry> - </rule> - </decisionTable> - </decision> -</definitions>