[jboss-jira] [JBoss JIRA] (DROOLS-2814) MVEL uses random parameter type methods for BigDecimal.valueOf(100)
Mario Fusco (JIRA)
issues at jboss.org
Wed Aug 1 12:48:00 EDT 2018
[ https://issues.jboss.org/browse/DROOLS-2814?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13613405#comment-13613405 ]
Mario Fusco edited comment on DROOLS-2814 at 8/1/18 12:47 PM:
--------------------------------------------------------------
Since we use a clone of the same algorithm also in the executable model I fixed it also there with this commit https://github.com/kiegroup/drools/commit/067aa33e9d322d6c8e6874b08c226cdb1d3032a3
was (Author: mfusco):
Since we used a clone of the same algorithm also in the executable model I fixed it also there with this commit https://github.com/kiegroup/drools/commit/067aa33e9d322d6c8e6874b08c226cdb1d3032a3
> MVEL uses random parameter type methods for BigDecimal.valueOf(100)
> -------------------------------------------------------------------
>
> Key: DROOLS-2814
> URL: https://issues.jboss.org/browse/DROOLS-2814
> Project: Drools
> Issue Type: Bug
> Components: core engine
> Affects Versions: 7.9.0.Final
> Environment: - MVEL2 2.4.0.Final
> Reporter: Toshiya Kobayashi
> Assignee: Mario Fusco
> Labels: support
> Attachments: BigDecimalMvelTest.zip
>
>
> When MVEL evaluates
> {noformat}
> java.math.BigDecimal.valueOf(100)
> {noformat}
> , MVEL determines a method from valueOf(double val) or valueOf(long val).
> The result is not consistent. Sometimes uses valueOf(double val), Sometimes uses valueOf(long val).
> ParseTools.getMethodScore() gives the same score for double and long.
> https://github.com/mvel/mvel/blob/master/src/main/java/org/mvel2/util/ParseTools.java#L312-L367
> So a selected method will depend on the order of result of "cls.getMethods()".
> Reproducer:
> $ unzip BigDecimalMvelTest.zip
> $ cd BigDecimalMvelTest
> $ mvn compile
> $ ./loop.sh
> It runs the MVEL test 100 times:
> {noformat}
> $ ./loop.sh
> result = 100.0
> result = 100.0
> result = 100.0
> result = 100
> result = 100.0
> result = 100.0
> ...
> {noformat}
> In my environment, "100.0" is the majority but randomly see "100" as well. (I couldn't reproduce with single run with java for loop)
> Expectation is constantly "100" (using valueOf(long val)) because in case of usual Java "java.math.BigDecimal.valueOf(100)", Java compiler chooses valueOf(long val) if the parameter is int. (considering "direct supertype" https://docs.oracle.com/javase/specs/jls/se8/html/jls-4.html#jls-4.10)
--
This message was sent by Atlassian JIRA
(v7.5.0#75005)
More information about the jboss-jira
mailing list