From e7f0672ef472dbf8d299bf925a6fff4908fc6aad Mon Sep 17 00:00:00 2001 From: Matteo Mortari Date: Mon, 30 Sep 2019 16:24:19 +0200 Subject: [PATCH] With the hard-coded benchmark for alphasupport.dmn (#10) * With the hard-coded benchmark for alphasupport.dmn * update 2019 09 30 not working --- kie-dmn/kie-dmn-core/pom.xml | 47 +- ...ecisionTableAlphaSupportingDraftBench.java | 102 + .../alphanetbased/CompiledAlphaNetwork.java | 21 + .../src/main/resources/logback.xml | 35 + .../dmn/core/alphasupport/alphasupport.dmn | 2537 +++++++++++++++++ .../DMNDecisionTableAlphaSupportingTest.java | 78 +- .../src/test/resources/logback.xml | 3 +- .../org/kie/dmn/core/alphasupport.dmn | 2294 ++++++++++++++- 8 files changed, 5105 insertions(+), 12 deletions(-) create mode 100644 kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/alphasupport/DMNDecisionTableAlphaSupportingDraftBench.java create mode 100644 kie-dmn/kie-dmn-core/src/main/resources/logback.xml create mode 100644 kie-dmn/kie-dmn-core/src/main/resources/org/kie/dmn/core/alphasupport/alphasupport.dmn diff --git a/kie-dmn/kie-dmn-core/pom.xml b/kie-dmn/kie-dmn-core/pom.xml index e0ca631bb7e..cd1e6afd670 100644 --- a/kie-dmn/kie-dmn-core/pom.xml +++ b/kie-dmn/kie-dmn-core/pom.xml @@ -46,6 +46,16 @@ + + org.openjdk.jmh + jmh-generator-annprocess + compile + + + org.openjdk.jmh + jmh-core + compile + org.kie kie-dmn-api @@ -193,7 +203,7 @@ ch.qos.logback logback-classic - test + compile org.hamcrest @@ -260,4 +270,39 @@ + + + alphasupport + + alphasupport + + + + + org.apache.maven.plugins + maven-shade-plugin + + + package + + shade + + + drools-benchmarks + + + META-INF/kie.conf + + + org.openjdk.jmh.Main + + + + + + + + + + diff --git a/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/alphasupport/DMNDecisionTableAlphaSupportingDraftBench.java b/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/alphasupport/DMNDecisionTableAlphaSupportingDraftBench.java new file mode 100644 index 00000000000..d871c1c5315 --- /dev/null +++ b/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/alphasupport/DMNDecisionTableAlphaSupportingDraftBench.java @@ -0,0 +1,102 @@ +/* +* Copyright 2019 Red Hat, Inc. and/or its affiliates. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +package org.kie.dmn.core.alphasupport; + +import java.math.BigDecimal; +import java.util.Random; +import java.util.UUID; +import java.util.concurrent.TimeUnit; + +import org.kie.api.KieServices; +import org.kie.api.runtime.KieContainer; +import org.kie.dmn.api.core.DMNContext; +import org.kie.dmn.api.core.DMNModel; +import org.kie.dmn.api.core.DMNResult; +import org.kie.dmn.api.core.DMNRuntime; +import org.kie.dmn.core.util.KieHelper; +import org.openjdk.jmh.annotations.Benchmark; +import org.openjdk.jmh.annotations.BenchmarkMode; +import org.openjdk.jmh.annotations.Level; +import org.openjdk.jmh.annotations.Measurement; +import org.openjdk.jmh.annotations.Mode; +import org.openjdk.jmh.annotations.OutputTimeUnit; +import org.openjdk.jmh.annotations.Scope; +import org.openjdk.jmh.annotations.Setup; +import org.openjdk.jmh.annotations.State; +import org.openjdk.jmh.annotations.Warmup; +import org.slf4j.Logger; + +@BenchmarkMode(Mode.SingleShotTime) +@State(Scope.Thread) +@Warmup(iterations = 100) +@Measurement(iterations = 50) +@OutputTimeUnit(TimeUnit.MILLISECONDS) +public class DMNDecisionTableAlphaSupportingDraftBench { + + private static final Logger LOG = org.slf4j.LoggerFactory.getLogger(DMNDecisionTableAlphaSupportingDraftBench.class); + private DMNRuntime runtime; + private DMNModel dmnModel; + private String existingCustomer; + private BigDecimal score; + + @Setup() + public void init() { + final KieServices ks = KieServices.Factory.get(); + final KieContainer kieContainer = KieHelper.getKieContainer(ks.newReleaseId("org.kie", "dmn-test-" + UUID.randomUUID(), "1.0"), + ks.getResources().newClassPathResource("alphasupport.dmn", DMNDecisionTableAlphaSupportingDraftBench.class)); + runtime = kieContainer.newKieSession().getKieRuntime(DMNRuntime.class); + dmnModel = runtime.getModel("http://www.trisotech.com/definitions/_c0cf6e20-0b43-43ce-9def-c759a5f86df2", "DMN Specification Chapter 11 Example Reduced"); + } + + @Setup(Level.Iteration) + public void initIterationValues() { + this.existingCustomer = existingCustomer(); + this.score = new BigDecimal(Double.valueOf((Math.random() * (140 - 70)) + 70).intValue()); + } + + public String existingCustomer() { + char[] alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".toCharArray(); + int randomIdx = new Random().nextInt(alphabet.length + 2); + if (randomIdx < alphabet.length - 2) { + return String.valueOf(alphabet[randomIdx]); + } else { + return (randomIdx - 2) == 0 ? "true" : "false"; + } + } + + @Benchmark + public DMNResult doTest() { + final DMNContext context = runtime.newContext(); + context.set("Existing Customer", existingCustomer); + context.set("Application Risk Score", score); + DMNResult evaluateAll = runtime.evaluateAll(dmnModel, context); + LOG.debug("{}", evaluateAll); + return evaluateAll; + } + + public void testSimpleDecision() { + final DMNResult dmnResult = doTest(); + LOG.debug("{}", dmnResult); + } + + public static void main(String[] args) { + DMNDecisionTableAlphaSupportingDraftBench u = new DMNDecisionTableAlphaSupportingDraftBench(); + u.init(); + u.initIterationValues(); + u.doTest(); + } +} diff --git a/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/compiler/alphanetbased/CompiledAlphaNetwork.java b/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/compiler/alphanetbased/CompiledAlphaNetwork.java index 746972c6530..e2fdb1a9019 100644 --- a/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/compiler/alphanetbased/CompiledAlphaNetwork.java +++ b/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/compiler/alphanetbased/CompiledAlphaNetwork.java @@ -142,6 +142,11 @@ public static CompiledAlphaNetwork generateCompiledNetwork() { AlphaNode alphac2r8 = createAlphaNode(ctx, alphac1r5, x -> UT10.apply(x, x.getValue("Application Risk Score"))); addResultSink(ctx, network, alphac2r8, "LOW"); + char[] alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".toCharArray(); + for (char c : alphabet) { + alphabet(network, ctx, String.valueOf(c)); + } + Index index3 = createIndex(String.class, x -> (String)x.getValue("Existing Customer"), "dummy"); AlphaNode alphaDummy = createAlphaNode(ctx, ctx.otn, x -> false, index3); addResultSink(ctx, network, alphaDummy, "DUMMY"); @@ -151,6 +156,22 @@ public static CompiledAlphaNetwork generateCompiledNetwork() { return network; } + private static void alphabet(CompiledAlphaNetwork network, NetworkBuilderContext ctx, String sChar) { + System.out.println(sChar); + final org.kie.dmn.feel.runtime.UnaryTest UTx = (feelExprCtx, left) -> gracefulEq(feelExprCtx, sChar, left); + Index index1 = createIndex(String.class, x -> (String) x.getValue("Existing Customer"), sChar); + AlphaNode alphac1r1 = createAlphaNode(ctx, ctx.otn, x -> UTx.apply(x, x.getValue("Existing Customer")), index1); + + AlphaNode alphac2r1 = createAlphaNode(ctx, alphac1r1, x -> UT2.apply(x, x.getValue("Application Risk Score"))); + addResultSink(ctx, network, alphac2r1, "HIGH"); + AlphaNode alphac2r2 = createAlphaNode(ctx, alphac1r1, x -> UT3.apply(x, x.getValue("Application Risk Score"))); + addResultSink(ctx, network, alphac2r2, "MEDIUM"); + AlphaNode alphac2r3 = createAlphaNode(ctx, alphac1r1, x -> UT4.apply(x, x.getValue("Application Risk Score"))); + addResultSink(ctx, network, alphac2r3, "LOW"); + AlphaNode alphac2r4 = createAlphaNode(ctx, alphac1r1, x -> UT5.apply(x, x.getValue("Application Risk Score"))); + addResultSink(ctx, network, alphac2r4, "VERY LOW"); + } + private static void addResultSink( NetworkBuilderContext ctx, CompiledAlphaNetwork network, ObjectSource source, Object result ) { source.addObjectSink( new ResultCollectorAlphaSink( ctx.buildContext.getNextId(), source, ctx.buildContext, result, network.resultCollector ) ); } diff --git a/kie-dmn/kie-dmn-core/src/main/resources/logback.xml b/kie-dmn/kie-dmn-core/src/main/resources/logback.xml new file mode 100644 index 00000000000..b7f6efe9153 --- /dev/null +++ b/kie-dmn/kie-dmn-core/src/main/resources/logback.xml @@ -0,0 +1,35 @@ + + + + + + + + %date{HH:mm:ss.SSS} [%thread] %-5level %class{36}.%method:%line - %msg%n + + + + + + + + + + + + + diff --git a/kie-dmn/kie-dmn-core/src/main/resources/org/kie/dmn/core/alphasupport/alphasupport.dmn b/kie-dmn/kie-dmn-core/src/main/resources/org/kie/dmn/core/alphasupport/alphasupport.dmn new file mode 100644 index 00000000000..9b36e5d206d --- /dev/null +++ b/kie-dmn/kie-dmn-core/src/main/resources/org/kie/dmn/core/alphasupport/alphasupport.dmn @@ -0,0 +1,2537 @@ + + + + + string + + "INELIGIBLE", "ELIGIBLE" + + + + string + + "FULL", "MINI", "NONE" + + + + string + + "DECLINE", "BUREAU", "THROUGH" + + + + string + + "DECLINE", "HIGH", "MEDIUM", "LOW", "VERY LOW" + + + + string + + "DECLINE", "REFER", "ACCEPT" + + + + + number + + [0..999], null + + + + boolean + + + + + + number + + + number + + + number + + + + number + + + boolean + + + string + + "S","M" + + + + string + + "EMPLOYED","SELF-EMPLOYED","STUDENT","UNEMPLOYED" + + + + + + string + + "STANDARD LOAN","SPECIAL LOAN" + + + + number + + + number + + + number + + + + string + + "FULL","MINI","NONE" + + + + <p align="LEFT"><span style="font-family: arial,helvetica,sans-serif; font-size: 10pt;"><span lang="JA">The </span><strong><span lang="JA">Pre-Bureau Risk Category Table </span></strong><span lang="JA">decision logic (Figure 82) defines a complete, unique-hit decision table </span>deriving Pre-Bureau Risk Category from Existing Customer and Application Risk Score.</span></p> + + + + + + + + + + + Existing Customer + + + + + Application Risk Score + + + + + "DECLINE", "HIGH", "MEDIUM", "LOW", "VERY LOW" + + + + + + "false" + + + <100 + + + "HIGH" + + + + + + + + "false" + + + [100..120) + + + "MEDIUM" + + + + + + + + "false" + + + [120..130] + + + "LOW" + + + + + + + + "false" + + + >130 + + + "VERY LOW" + + + + + + + + "true" + + + <80 + + + "DECLINE" + + + + + + + + "true" + + + [80..90) + + + "HIGH" + + + + + + + + "true" + + + [90..110] + + + "MEDIUM" + + + + + + + + "true" + + + >110 + + + "LOW" + + + + + + + + + "A" + + + <100 + + + "HIGH" + + + + + "A" + + + [100..120) + + + "MEDIUM" + + + + + "A" + + + [120..130] + + + "LOW" + + + + + "A" + + + >130 + + + "VERY LOW" + + + + + "B" + + + <100 + + + "HIGH" + + + + + "B" + + + [100..120) + + + "MEDIUM" + + + + + "B" + + + [120..130] + + + "LOW" + + + + + "B" + + + >130 + + + "VERY LOW" + + + + + "C" + + + <100 + + + "HIGH" + + + + + "C" + + + [100..120) + + + "MEDIUM" + + + + + "C" + + + [120..130] + + + "LOW" + + + + + "C" + + + >130 + + + "VERY LOW" + + + + + "D" + + + <100 + + + "HIGH" + + + + + "D" + + + [100..120) + + + "MEDIUM" + + + + + "D" + + + [120..130] + + + "LOW" + + + + + "D" + + + >130 + + + "VERY LOW" + + + + + "E" + + + <100 + + + "HIGH" + + + + + "E" + + + [100..120) + + + "MEDIUM" + + + + + "E" + + + [120..130] + + + "LOW" + + + + + "E" + + + >130 + + + "VERY LOW" + + + + + "F" + + + <100 + + + "HIGH" + + + + + "F" + + + [100..120) + + + "MEDIUM" + + + + + "F" + + + [120..130] + + + "LOW" + + + + + "F" + + + >130 + + + "VERY LOW" + + + + + "G" + + + <100 + + + "HIGH" + + + + + "G" + + + [100..120) + + + "MEDIUM" + + + + + "G" + + + [120..130] + + + "LOW" + + + + + "G" + + + >130 + + + "VERY LOW" + + + + + "H" + + + <100 + + + "HIGH" + + + + + "H" + + + [100..120) + + + "MEDIUM" + + + + + "H" + + + [120..130] + + + "LOW" + + + + + "H" + + + >130 + + + "VERY LOW" + + + + + "I" + + + <100 + + + "HIGH" + + + + + "I" + + + [100..120) + + + "MEDIUM" + + + + + "I" + + + [120..130] + + + "LOW" + + + + + "I" + + + >130 + + + "VERY LOW" + + + + + "J" + + + <100 + + + "HIGH" + + + + + "J" + + + [100..120) + + + "MEDIUM" + + + + + "J" + + + [120..130] + + + "LOW" + + + + + "J" + + + >130 + + + "VERY LOW" + + + + + "K" + + + <100 + + + "HIGH" + + + + + "K" + + + [100..120) + + + "MEDIUM" + + + + + "K" + + + [120..130] + + + "LOW" + + + + + "K" + + + >130 + + + "VERY LOW" + + + + + "L" + + + <100 + + + "HIGH" + + + + + "L" + + + [100..120) + + + "MEDIUM" + + + + + "L" + + + [120..130] + + + "LOW" + + + + + "L" + + + >130 + + + "VERY LOW" + + + + + "M" + + + <100 + + + "HIGH" + + + + + "M" + + + [100..120) + + + "MEDIUM" + + + + + "M" + + + [120..130] + + + "LOW" + + + + + "M" + + + >130 + + + "VERY LOW" + + + + + "N" + + + <100 + + + "HIGH" + + + + + "N" + + + [100..120) + + + "MEDIUM" + + + + + "N" + + + [120..130] + + + "LOW" + + + + + "N" + + + >130 + + + "VERY LOW" + + + + + "O" + + + <100 + + + "HIGH" + + + + + "O" + + + [100..120) + + + "MEDIUM" + + + + + "O" + + + [120..130] + + + "LOW" + + + + + "O" + + + >130 + + + "VERY LOW" + + + + + "P" + + + <100 + + + "HIGH" + + + + + "P" + + + [100..120) + + + "MEDIUM" + + + + + "P" + + + [120..130] + + + "LOW" + + + + + "P" + + + >130 + + + "VERY LOW" + + + + + "Q" + + + <100 + + + "HIGH" + + + + + "Q" + + + [100..120) + + + "MEDIUM" + + + + + "Q" + + + [120..130] + + + "LOW" + + + + + "Q" + + + >130 + + + "VERY LOW" + + + + + "R" + + + <100 + + + "HIGH" + + + + + "R" + + + [100..120) + + + "MEDIUM" + + + + + "R" + + + [120..130] + + + "LOW" + + + + + "R" + + + >130 + + + "VERY LOW" + + + + + "S" + + + <100 + + + "HIGH" + + + + + "S" + + + [100..120) + + + "MEDIUM" + + + + + "S" + + + [120..130] + + + "LOW" + + + + + "S" + + + >130 + + + "VERY LOW" + + + + + "T" + + + <100 + + + "HIGH" + + + + + "T" + + + [100..120) + + + "MEDIUM" + + + + + "T" + + + [120..130] + + + "LOW" + + + + + "T" + + + >130 + + + "VERY LOW" + + + + + "U" + + + <100 + + + "HIGH" + + + + + "U" + + + [100..120) + + + "MEDIUM" + + + + + "U" + + + [120..130] + + + "LOW" + + + + + "U" + + + >130 + + + "VERY LOW" + + + + + "V" + + + <100 + + + "HIGH" + + + + + "V" + + + [100..120) + + + "MEDIUM" + + + + + "V" + + + [120..130] + + + "LOW" + + + + + "V" + + + >130 + + + "VERY LOW" + + + + + "W" + + + <100 + + + "HIGH" + + + + + "W" + + + [100..120) + + + "MEDIUM" + + + + + "W" + + + [120..130] + + + "LOW" + + + + + "W" + + + >130 + + + "VERY LOW" + + + + + "X" + + + <100 + + + "HIGH" + + + + + "X" + + + [100..120) + + + "MEDIUM" + + + + + "X" + + + [120..130] + + + "LOW" + + + + + "X" + + + >130 + + + "VERY LOW" + + + + + "Y" + + + <100 + + + "HIGH" + + + + + "Y" + + + [100..120) + + + "MEDIUM" + + + + + "Y" + + + [120..130] + + + "LOW" + + + + + "Y" + + + >130 + + + "VERY LOW" + + + + + "Z" + + + <100 + + + "HIGH" + + + + + "Z" + + + [100..120) + + + "MEDIUM" + + + + + "Z" + + + [120..130] + + + "LOW" + + + + + "Z" + + + >130 + + + "VERY LOW" + + + + + "a" + + + <100 + + + "HIGH" + + + + + "a" + + + [100..120) + + + "MEDIUM" + + + + + "a" + + + [120..130] + + + "LOW" + + + + + "a" + + + >130 + + + "VERY LOW" + + + + + "b" + + + <100 + + + "HIGH" + + + + + "b" + + + [100..120) + + + "MEDIUM" + + + + + "b" + + + [120..130] + + + "LOW" + + + + + "b" + + + >130 + + + "VERY LOW" + + + + + "c" + + + <100 + + + "HIGH" + + + + + "c" + + + [100..120) + + + "MEDIUM" + + + + + "c" + + + [120..130] + + + "LOW" + + + + + "c" + + + >130 + + + "VERY LOW" + + + + + "d" + + + <100 + + + "HIGH" + + + + + "d" + + + [100..120) + + + "MEDIUM" + + + + + "d" + + + [120..130] + + + "LOW" + + + + + "d" + + + >130 + + + "VERY LOW" + + + + + "e" + + + <100 + + + "HIGH" + + + + + "e" + + + [100..120) + + + "MEDIUM" + + + + + "e" + + + [120..130] + + + "LOW" + + + + + "e" + + + >130 + + + "VERY LOW" + + + + + "f" + + + <100 + + + "HIGH" + + + + + "f" + + + [100..120) + + + "MEDIUM" + + + + + "f" + + + [120..130] + + + "LOW" + + + + + "f" + + + >130 + + + "VERY LOW" + + + + + "g" + + + <100 + + + "HIGH" + + + + + "g" + + + [100..120) + + + "MEDIUM" + + + + + "g" + + + [120..130] + + + "LOW" + + + + + "g" + + + >130 + + + "VERY LOW" + + + + + "h" + + + <100 + + + "HIGH" + + + + + "h" + + + [100..120) + + + "MEDIUM" + + + + + "h" + + + [120..130] + + + "LOW" + + + + + "h" + + + >130 + + + "VERY LOW" + + + + + "i" + + + <100 + + + "HIGH" + + + + + "i" + + + [100..120) + + + "MEDIUM" + + + + + "i" + + + [120..130] + + + "LOW" + + + + + "i" + + + >130 + + + "VERY LOW" + + + + + "j" + + + <100 + + + "HIGH" + + + + + "j" + + + [100..120) + + + "MEDIUM" + + + + + "j" + + + [120..130] + + + "LOW" + + + + + "j" + + + >130 + + + "VERY LOW" + + + + + "k" + + + <100 + + + "HIGH" + + + + + "k" + + + [100..120) + + + "MEDIUM" + + + + + "k" + + + [120..130] + + + "LOW" + + + + + "k" + + + >130 + + + "VERY LOW" + + + + + "l" + + + <100 + + + "HIGH" + + + + + "l" + + + [100..120) + + + "MEDIUM" + + + + + "l" + + + [120..130] + + + "LOW" + + + + + "l" + + + >130 + + + "VERY LOW" + + + + + "m" + + + <100 + + + "HIGH" + + + + + "m" + + + [100..120) + + + "MEDIUM" + + + + + "m" + + + [120..130] + + + "LOW" + + + + + "m" + + + >130 + + + "VERY LOW" + + + + + "n" + + + <100 + + + "HIGH" + + + + + "n" + + + [100..120) + + + "MEDIUM" + + + + + "n" + + + [120..130] + + + "LOW" + + + + + "n" + + + >130 + + + "VERY LOW" + + + + + "o" + + + <100 + + + "HIGH" + + + + + "o" + + + [100..120) + + + "MEDIUM" + + + + + "o" + + + [120..130] + + + "LOW" + + + + + "o" + + + >130 + + + "VERY LOW" + + + + + "p" + + + <100 + + + "HIGH" + + + + + "p" + + + [100..120) + + + "MEDIUM" + + + + + "p" + + + [120..130] + + + "LOW" + + + + + "p" + + + >130 + + + "VERY LOW" + + + + + "q" + + + <100 + + + "HIGH" + + + + + "q" + + + [100..120) + + + "MEDIUM" + + + + + "q" + + + [120..130] + + + "LOW" + + + + + "q" + + + >130 + + + "VERY LOW" + + + + + "r" + + + <100 + + + "HIGH" + + + + + "r" + + + [100..120) + + + "MEDIUM" + + + + + "r" + + + [120..130] + + + "LOW" + + + + + "r" + + + >130 + + + "VERY LOW" + + + + + "s" + + + <100 + + + "HIGH" + + + + + "s" + + + [100..120) + + + "MEDIUM" + + + + + "s" + + + [120..130] + + + "LOW" + + + + + "s" + + + >130 + + + "VERY LOW" + + + + + "t" + + + <100 + + + "HIGH" + + + + + "t" + + + [100..120) + + + "MEDIUM" + + + + + "t" + + + [120..130] + + + "LOW" + + + + + "t" + + + >130 + + + "VERY LOW" + + + + + "u" + + + <100 + + + "HIGH" + + + + + "u" + + + [100..120) + + + "MEDIUM" + + + + + "u" + + + [120..130] + + + "LOW" + + + + + "u" + + + >130 + + + "VERY LOW" + + + + + "v" + + + <100 + + + "HIGH" + + + + + "v" + + + [100..120) + + + "MEDIUM" + + + + + "v" + + + [120..130] + + + "LOW" + + + + + "v" + + + >130 + + + "VERY LOW" + + + + + "w" + + + <100 + + + "HIGH" + + + + + "w" + + + [100..120) + + + "MEDIUM" + + + + + "w" + + + [120..130] + + + "LOW" + + + + + "w" + + + >130 + + + "VERY LOW" + + + + + "x" + + + <100 + + + "HIGH" + + + + + "x" + + + [100..120) + + + "MEDIUM" + + + + + "x" + + + [120..130] + + + "LOW" + + + + + "x" + + + >130 + + + "VERY LOW" + + + + + "y" + + + <100 + + + "HIGH" + + + + + "y" + + + [100..120) + + + "MEDIUM" + + + + + "y" + + + [120..130] + + + "LOW" + + + + + "y" + + + >130 + + + "VERY LOW" + + + + + "z" + + + <100 + + + "HIGH" + + + + + "z" + + + [100..120) + + + "MEDIUM" + + + + + "z" + + + [120..130] + + + "LOW" + + + + + "z" + + + >130 + + + "VERY LOW" + + + + + + + + + + + + + + \ No newline at end of file diff --git a/kie-dmn/kie-dmn-core/src/test/java/org/kie/dmn/core/DMNDecisionTableAlphaSupportingTest.java b/kie-dmn/kie-dmn-core/src/test/java/org/kie/dmn/core/DMNDecisionTableAlphaSupportingTest.java index cacdf1b7924..c802719ad7a 100644 --- a/kie-dmn/kie-dmn-core/src/test/java/org/kie/dmn/core/DMNDecisionTableAlphaSupportingTest.java +++ b/kie-dmn/kie-dmn-core/src/test/java/org/kie/dmn/core/DMNDecisionTableAlphaSupportingTest.java @@ -18,6 +18,8 @@ import java.math.BigDecimal; +import org.junit.Before; +import org.junit.Ignore; import org.junit.Test; import org.kie.dmn.api.core.DMNContext; import org.kie.dmn.api.core.DMNModel; @@ -33,22 +35,84 @@ public class DMNDecisionTableAlphaSupportingTest extends BaseInterpretedVsCompiledTest { private static final Logger LOG = org.slf4j.LoggerFactory.getLogger(DMNDecisionTableAlphaSupportingTest.class); + private DMNRuntime runtime; + private DMNModel dmnModel; public DMNDecisionTableAlphaSupportingTest(final boolean useExecModelCompiler ) { super( useExecModelCompiler ); } - @Test - public void testSimpleDecision() { - final DMNRuntime runtime = DMNRuntimeUtil.createRuntime("alphasupport.dmn", this.getClass()); - final DMNModel dmnModel = runtime.getModel("http://www.trisotech.com/definitions/_c0cf6e20-0b43-43ce-9def-c759a5f86df2", "DMN Specification Chapter 11 Example Reduced"); + @Before + public void init() { + runtime = DMNRuntimeUtil.createRuntime("alphasupport.dmn", this.getClass()); + dmnModel = runtime.getModel("http://www.trisotech.com/definitions/_c0cf6e20-0b43-43ce-9def-c759a5f86df2", "DMN Specification Chapter 11 Example Reduced"); assertThat(dmnModel, notNullValue()); + } + public DMNResult doTest() { final DMNContext context = runtime.newContext(); - context.set("Existing Customer", "false"); + context.set("Existing Customer", "s"); context.set("Application Risk Score", new BigDecimal("123")); - final DMNResult dmnResult = runtime.evaluateAll(dmnModel, context); - LOG.info("{}", dmnResult); + return runtime.evaluateAll(dmnModel, context); + } + + @Test + public void testSimpleDecision() { + final DMNResult dmnResult = doTest(); + LOG.debug("{}", dmnResult); assertThat(dmnResult.getContext().get("Pre-bureau risk category table"), is("LOW")); } + + @Ignore + @Test + public void asd() { + String x = " \n" + + " \n" + + " \"%1$s\"\n" + + " \n" + + " \n" + + " <100\n" + + " \n" + + " \n" + + " \"HIGH\"\n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \"%1$s\"\n" + + " \n" + + " \n" + + " [100..120)\n" + + " \n" + + " \n" + + " \"MEDIUM\"\n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \"%1$s\"\n" + + " \n" + + " \n" + + " [120..130]\n" + + " \n" + + " \n" + + " \"LOW\"\n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \"%1$s\"\n" + + " \n" + + " \n" + + " >130\n" + + " \n" + + " \n" + + " \"VERY LOW\"\n" + + " \n" + + " "; + char[] alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".toCharArray(); + for (char c : alphabet) { + System.out.println(String.format(x, String.valueOf(c))); + } + } } diff --git a/kie-dmn/kie-dmn-core/src/test/resources/logback.xml b/kie-dmn/kie-dmn-core/src/test/resources/logback.xml index 36ab38c1044..55db3f2fa41 100644 --- a/kie-dmn/kie-dmn-core/src/test/resources/logback.xml +++ b/kie-dmn/kie-dmn-core/src/test/resources/logback.xml @@ -23,7 +23,8 @@ - + + diff --git a/kie-dmn/kie-dmn-core/src/test/resources/org/kie/dmn/core/alphasupport.dmn b/kie-dmn/kie-dmn-core/src/test/resources/org/kie/dmn/core/alphasupport.dmn index a2b552529ec..9b36e5d206d 100644 --- a/kie-dmn/kie-dmn-core/src/test/resources/org/kie/dmn/core/alphasupport.dmn +++ b/kie-dmn/kie-dmn-core/src/test/resources/org/kie/dmn/core/alphasupport.dmn @@ -110,9 +110,6 @@ Existing Customer - - "false","true" - @@ -237,6 +234,2297 @@ + + + + "A" + + + <100 + + + "HIGH" + + + + + "A" + + + [100..120) + + + "MEDIUM" + + + + + "A" + + + [120..130] + + + "LOW" + + + + + "A" + + + >130 + + + "VERY LOW" + + + + + "B" + + + <100 + + + "HIGH" + + + + + "B" + + + [100..120) + + + "MEDIUM" + + + + + "B" + + + [120..130] + + + "LOW" + + + + + "B" + + + >130 + + + "VERY LOW" + + + + + "C" + + + <100 + + + "HIGH" + + + + + "C" + + + [100..120) + + + "MEDIUM" + + + + + "C" + + + [120..130] + + + "LOW" + + + + + "C" + + + >130 + + + "VERY LOW" + + + + + "D" + + + <100 + + + "HIGH" + + + + + "D" + + + [100..120) + + + "MEDIUM" + + + + + "D" + + + [120..130] + + + "LOW" + + + + + "D" + + + >130 + + + "VERY LOW" + + + + + "E" + + + <100 + + + "HIGH" + + + + + "E" + + + [100..120) + + + "MEDIUM" + + + + + "E" + + + [120..130] + + + "LOW" + + + + + "E" + + + >130 + + + "VERY LOW" + + + + + "F" + + + <100 + + + "HIGH" + + + + + "F" + + + [100..120) + + + "MEDIUM" + + + + + "F" + + + [120..130] + + + "LOW" + + + + + "F" + + + >130 + + + "VERY LOW" + + + + + "G" + + + <100 + + + "HIGH" + + + + + "G" + + + [100..120) + + + "MEDIUM" + + + + + "G" + + + [120..130] + + + "LOW" + + + + + "G" + + + >130 + + + "VERY LOW" + + + + + "H" + + + <100 + + + "HIGH" + + + + + "H" + + + [100..120) + + + "MEDIUM" + + + + + "H" + + + [120..130] + + + "LOW" + + + + + "H" + + + >130 + + + "VERY LOW" + + + + + "I" + + + <100 + + + "HIGH" + + + + + "I" + + + [100..120) + + + "MEDIUM" + + + + + "I" + + + [120..130] + + + "LOW" + + + + + "I" + + + >130 + + + "VERY LOW" + + + + + "J" + + + <100 + + + "HIGH" + + + + + "J" + + + [100..120) + + + "MEDIUM" + + + + + "J" + + + [120..130] + + + "LOW" + + + + + "J" + + + >130 + + + "VERY LOW" + + + + + "K" + + + <100 + + + "HIGH" + + + + + "K" + + + [100..120) + + + "MEDIUM" + + + + + "K" + + + [120..130] + + + "LOW" + + + + + "K" + + + >130 + + + "VERY LOW" + + + + + "L" + + + <100 + + + "HIGH" + + + + + "L" + + + [100..120) + + + "MEDIUM" + + + + + "L" + + + [120..130] + + + "LOW" + + + + + "L" + + + >130 + + + "VERY LOW" + + + + + "M" + + + <100 + + + "HIGH" + + + + + "M" + + + [100..120) + + + "MEDIUM" + + + + + "M" + + + [120..130] + + + "LOW" + + + + + "M" + + + >130 + + + "VERY LOW" + + + + + "N" + + + <100 + + + "HIGH" + + + + + "N" + + + [100..120) + + + "MEDIUM" + + + + + "N" + + + [120..130] + + + "LOW" + + + + + "N" + + + >130 + + + "VERY LOW" + + + + + "O" + + + <100 + + + "HIGH" + + + + + "O" + + + [100..120) + + + "MEDIUM" + + + + + "O" + + + [120..130] + + + "LOW" + + + + + "O" + + + >130 + + + "VERY LOW" + + + + + "P" + + + <100 + + + "HIGH" + + + + + "P" + + + [100..120) + + + "MEDIUM" + + + + + "P" + + + [120..130] + + + "LOW" + + + + + "P" + + + >130 + + + "VERY LOW" + + + + + "Q" + + + <100 + + + "HIGH" + + + + + "Q" + + + [100..120) + + + "MEDIUM" + + + + + "Q" + + + [120..130] + + + "LOW" + + + + + "Q" + + + >130 + + + "VERY LOW" + + + + + "R" + + + <100 + + + "HIGH" + + + + + "R" + + + [100..120) + + + "MEDIUM" + + + + + "R" + + + [120..130] + + + "LOW" + + + + + "R" + + + >130 + + + "VERY LOW" + + + + + "S" + + + <100 + + + "HIGH" + + + + + "S" + + + [100..120) + + + "MEDIUM" + + + + + "S" + + + [120..130] + + + "LOW" + + + + + "S" + + + >130 + + + "VERY LOW" + + + + + "T" + + + <100 + + + "HIGH" + + + + + "T" + + + [100..120) + + + "MEDIUM" + + + + + "T" + + + [120..130] + + + "LOW" + + + + + "T" + + + >130 + + + "VERY LOW" + + + + + "U" + + + <100 + + + "HIGH" + + + + + "U" + + + [100..120) + + + "MEDIUM" + + + + + "U" + + + [120..130] + + + "LOW" + + + + + "U" + + + >130 + + + "VERY LOW" + + + + + "V" + + + <100 + + + "HIGH" + + + + + "V" + + + [100..120) + + + "MEDIUM" + + + + + "V" + + + [120..130] + + + "LOW" + + + + + "V" + + + >130 + + + "VERY LOW" + + + + + "W" + + + <100 + + + "HIGH" + + + + + "W" + + + [100..120) + + + "MEDIUM" + + + + + "W" + + + [120..130] + + + "LOW" + + + + + "W" + + + >130 + + + "VERY LOW" + + + + + "X" + + + <100 + + + "HIGH" + + + + + "X" + + + [100..120) + + + "MEDIUM" + + + + + "X" + + + [120..130] + + + "LOW" + + + + + "X" + + + >130 + + + "VERY LOW" + + + + + "Y" + + + <100 + + + "HIGH" + + + + + "Y" + + + [100..120) + + + "MEDIUM" + + + + + "Y" + + + [120..130] + + + "LOW" + + + + + "Y" + + + >130 + + + "VERY LOW" + + + + + "Z" + + + <100 + + + "HIGH" + + + + + "Z" + + + [100..120) + + + "MEDIUM" + + + + + "Z" + + + [120..130] + + + "LOW" + + + + + "Z" + + + >130 + + + "VERY LOW" + + + + + "a" + + + <100 + + + "HIGH" + + + + + "a" + + + [100..120) + + + "MEDIUM" + + + + + "a" + + + [120..130] + + + "LOW" + + + + + "a" + + + >130 + + + "VERY LOW" + + + + + "b" + + + <100 + + + "HIGH" + + + + + "b" + + + [100..120) + + + "MEDIUM" + + + + + "b" + + + [120..130] + + + "LOW" + + + + + "b" + + + >130 + + + "VERY LOW" + + + + + "c" + + + <100 + + + "HIGH" + + + + + "c" + + + [100..120) + + + "MEDIUM" + + + + + "c" + + + [120..130] + + + "LOW" + + + + + "c" + + + >130 + + + "VERY LOW" + + + + + "d" + + + <100 + + + "HIGH" + + + + + "d" + + + [100..120) + + + "MEDIUM" + + + + + "d" + + + [120..130] + + + "LOW" + + + + + "d" + + + >130 + + + "VERY LOW" + + + + + "e" + + + <100 + + + "HIGH" + + + + + "e" + + + [100..120) + + + "MEDIUM" + + + + + "e" + + + [120..130] + + + "LOW" + + + + + "e" + + + >130 + + + "VERY LOW" + + + + + "f" + + + <100 + + + "HIGH" + + + + + "f" + + + [100..120) + + + "MEDIUM" + + + + + "f" + + + [120..130] + + + "LOW" + + + + + "f" + + + >130 + + + "VERY LOW" + + + + + "g" + + + <100 + + + "HIGH" + + + + + "g" + + + [100..120) + + + "MEDIUM" + + + + + "g" + + + [120..130] + + + "LOW" + + + + + "g" + + + >130 + + + "VERY LOW" + + + + + "h" + + + <100 + + + "HIGH" + + + + + "h" + + + [100..120) + + + "MEDIUM" + + + + + "h" + + + [120..130] + + + "LOW" + + + + + "h" + + + >130 + + + "VERY LOW" + + + + + "i" + + + <100 + + + "HIGH" + + + + + "i" + + + [100..120) + + + "MEDIUM" + + + + + "i" + + + [120..130] + + + "LOW" + + + + + "i" + + + >130 + + + "VERY LOW" + + + + + "j" + + + <100 + + + "HIGH" + + + + + "j" + + + [100..120) + + + "MEDIUM" + + + + + "j" + + + [120..130] + + + "LOW" + + + + + "j" + + + >130 + + + "VERY LOW" + + + + + "k" + + + <100 + + + "HIGH" + + + + + "k" + + + [100..120) + + + "MEDIUM" + + + + + "k" + + + [120..130] + + + "LOW" + + + + + "k" + + + >130 + + + "VERY LOW" + + + + + "l" + + + <100 + + + "HIGH" + + + + + "l" + + + [100..120) + + + "MEDIUM" + + + + + "l" + + + [120..130] + + + "LOW" + + + + + "l" + + + >130 + + + "VERY LOW" + + + + + "m" + + + <100 + + + "HIGH" + + + + + "m" + + + [100..120) + + + "MEDIUM" + + + + + "m" + + + [120..130] + + + "LOW" + + + + + "m" + + + >130 + + + "VERY LOW" + + + + + "n" + + + <100 + + + "HIGH" + + + + + "n" + + + [100..120) + + + "MEDIUM" + + + + + "n" + + + [120..130] + + + "LOW" + + + + + "n" + + + >130 + + + "VERY LOW" + + + + + "o" + + + <100 + + + "HIGH" + + + + + "o" + + + [100..120) + + + "MEDIUM" + + + + + "o" + + + [120..130] + + + "LOW" + + + + + "o" + + + >130 + + + "VERY LOW" + + + + + "p" + + + <100 + + + "HIGH" + + + + + "p" + + + [100..120) + + + "MEDIUM" + + + + + "p" + + + [120..130] + + + "LOW" + + + + + "p" + + + >130 + + + "VERY LOW" + + + + + "q" + + + <100 + + + "HIGH" + + + + + "q" + + + [100..120) + + + "MEDIUM" + + + + + "q" + + + [120..130] + + + "LOW" + + + + + "q" + + + >130 + + + "VERY LOW" + + + + + "r" + + + <100 + + + "HIGH" + + + + + "r" + + + [100..120) + + + "MEDIUM" + + + + + "r" + + + [120..130] + + + "LOW" + + + + + "r" + + + >130 + + + "VERY LOW" + + + + + "s" + + + <100 + + + "HIGH" + + + + + "s" + + + [100..120) + + + "MEDIUM" + + + + + "s" + + + [120..130] + + + "LOW" + + + + + "s" + + + >130 + + + "VERY LOW" + + + + + "t" + + + <100 + + + "HIGH" + + + + + "t" + + + [100..120) + + + "MEDIUM" + + + + + "t" + + + [120..130] + + + "LOW" + + + + + "t" + + + >130 + + + "VERY LOW" + + + + + "u" + + + <100 + + + "HIGH" + + + + + "u" + + + [100..120) + + + "MEDIUM" + + + + + "u" + + + [120..130] + + + "LOW" + + + + + "u" + + + >130 + + + "VERY LOW" + + + + + "v" + + + <100 + + + "HIGH" + + + + + "v" + + + [100..120) + + + "MEDIUM" + + + + + "v" + + + [120..130] + + + "LOW" + + + + + "v" + + + >130 + + + "VERY LOW" + + + + + "w" + + + <100 + + + "HIGH" + + + + + "w" + + + [100..120) + + + "MEDIUM" + + + + + "w" + + + [120..130] + + + "LOW" + + + + + "w" + + + >130 + + + "VERY LOW" + + + + + "x" + + + <100 + + + "HIGH" + + + + + "x" + + + [100..120) + + + "MEDIUM" + + + + + "x" + + + [120..130] + + + "LOW" + + + + + "x" + + + >130 + + + "VERY LOW" + + + + + "y" + + + <100 + + + "HIGH" + + + + + "y" + + + [100..120) + + + "MEDIUM" + + + + + "y" + + + [120..130] + + + "LOW" + + + + + "y" + + + >130 + + + "VERY LOW" + + + + + "z" + + + <100 + + + "HIGH" + + + + + "z" + + + [100..120) + + + "MEDIUM" + + + + + "z" + + + [120..130] + + + "LOW" + + + + + "z" + + + >130 + + + "VERY LOW" + + + +