[jboss-jira] [JBoss JIRA] (DROOLS-4560) executable-model wrongly calculates in eval with parenthesis
Toshiya Kobayashi (Jira)
issues at jboss.org
Tue Sep 24 04:01:00 EDT 2019
[ https://issues.jboss.org/browse/DROOLS-4560?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Toshiya Kobayashi updated DROOLS-4560:
--------------------------------------
Git Pull Request: https://github.com/kiegroup/drools/pull/2551
> executable-model wrongly calculates in eval with parenthesis
> ------------------------------------------------------------
>
> Key: DROOLS-4560
> URL: https://issues.jboss.org/browse/DROOLS-4560
> Project: Drools
> Issue Type: Bug
> Components: executable model
> Affects Versions: 7.27.0.Final
> Environment: - executable-model
> Reporter: Toshiya Kobayashi
> Assignee: Luca Molteni
> Priority: Major
> Labels: support
>
> executable-model wrongly calculates in eval with parenthesis.
> For example, with this rule,
> {noformat}
> import org.drools.modelcompiler.domain.CalcFact;rule R when
> $p : CalcFact( $v1 : value1, $v2 : value2 )
> eval( ($v1 / ($v2 * 10) * 10) > 25 )
> then
> end
> {noformat}
> if $v1 = 1 and $v2 = 1, ($v1 / ($v2 * 10) * 10) is 1. So the rule should not fire.
> However, executable-model generates Java code:
> {code:java}
> public class Rules4A265EF484FEEE0E4E84E77B3DEB48F9RuleMethods0 {
> /**
> * Rule name: R
> */
> public static org.drools.model.Rule rule_R() {
> final org.drools.model.Variable<org.drools.modelcompiler.domain.CalcFact> var_$p = D.declarationOf(org.drools.modelcompiler.domain.CalcFact.class,
> "$p");
> final org.drools.model.Variable<Double> var_$v1 = D.declarationOf(Double.class,
> "$v1");
> final org.drools.model.Variable<Double> var_$v2 = D.declarationOf(Double.class,
> "$v2");
> org.drools.model.Rule rule = D.rule("R").build(D.bind(var_$v1).as(var_$p,
> (_this) -> _this.getValue1()).reactOn("value1"),
> D.bind(var_$v2).as(var_$p,
> (_this) -> _this.getValue2()).reactOn("value2"),
> D.expr("454A1C822808AC7491268E4F381F0EDA",
> var_$v1,
> var_$v2,
> ($v1, $v2) -> org.drools.modelcompiler.util.EvaluationUtil.greaterThanNumbers($v1 / $v2 * 10 * 10,
> 25d)),
> D.execute(() -> {
> }));
> return rule;
> }
> }
> {code}
> See that parentheses are removed so ($v1 / $v2 * 10 * 10) becomes 100.
--
This message was sent by Atlassian Jira
(v7.13.8#713008)
More information about the jboss-jira
mailing list