[jboss-jira] [JBoss JIRA] (DROOLS-15) Major problem in Rules evaluation. Can not sort Integers correctly

John Smith (JIRA) jira-events at lists.jboss.org
Fri Jan 18 00:19:21 EST 2013


    [ https://issues.jboss.org/browse/DROOLS-15?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12748824#comment-12748824 ] 

John Smith commented on DROOLS-15:
----------------------------------

This seems to be a bug that was introduced in 5.5.0 onwards and still exists. 
This sorting code works fine with 5.4.0.

Workaround:

Instead of: 
  "not Number(intValue < $number.intValue)" 
If you use: 
  "not Number(intValue() < $number.intValue)" 
Then it works.

A non-getter method without telling that it is a function seems to create a problem.

A debilitating problem that reduces the confidence in the product.
I personally vote that this problem be fixed.

                
> Major problem in Rules evaluation. Can not sort Integers correctly
> ------------------------------------------------------------------
>
>                 Key: DROOLS-15
>                 URL: https://issues.jboss.org/browse/DROOLS-15
>             Project: Drools
>          Issue Type: Bug
>      Security Level: Public(Everyone can see) 
>            Reporter: John Smith
>            Assignee: Mark Proctor
>            Priority: Blocker
>
> This sample is given in the drools documentation http://docs.jboss.org/drools/release/5.5.0.Final/drools-expert-docs/html_single/index.html#d0e9542. This drool rule is expected to sort integers. I just changed the numbers from what are given in the sample and they do not get sorted as expected. Tried using drools version 5.5.0, 5.5.1 and the master 6.0.0, but got the same wrong results.
> Following is the main code:
>     package com.sample;
>     public class Example2 {
>       public static void main(String[] args) throws Exception {
>         Number[] numbers = new Number[] { wrap(5), wrap(6), wrap(4), wrap(1), wrap(2) };
>         new RuleRunner().runRules(new String[] { "Example3.drl" }, numbers);
>       }
>       private static Integer wrap(int i) {
>         return new Integer(i);
>       }
>     }
> The RuleRunner class is the same as given in the example and I do not think I should give that here, since it will clutter the question. It simply creates the KnowledgeBase, stateful session, inserts the facts as given in the 'numbers' array above and then calls fireAllRules method on the session.
> The rule file (Example3.drl) is:
>  rule "Rule Sort"
>      dialect "mvel"
>    when
>      $number : Number()
>      not Number(intValue < $number.intValue)
>    then
>      System.out.println("Number found with value: " + $number.intValue());
>      retract($number);
>  end
> The output I get is as follows:
> Loading file: Example3.drl
> Inserting fact: 5
> Inserting fact: 6
> Inserting fact: 4
> Inserting fact: 1
> Inserting fact: 2
> Number found with value: 1
> Number found with value: 4
> Number found with value: 2
> Number found with value: 5
> Number found with value: 6
> Not the correct expected ascending sorted order.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira


More information about the jboss-jira mailing list