Below is another couple of test cases, showing that the problem is not due a getter that isn't called get* - it's a more general problem. As far as I can tell this rule pattern, expecting to fire in ascending order of Fact.prop, is broken in 5.5.0:
rule "Rule xx" when $fact: Fact( $prop: prop ) not Fact(prop < $prop) then System.out.println("Fact.prop: " + $prop); retract($fact); end // Test case using String rule init salience 9999 when then insert( "AAA" ); insert( "DDD" ); insert( "EEE" ); insert( "CCC" ); insert( "BBB" ); end rule "Rule 05" when $s : String() not String( this < $s) then System.out.println("String found with value: " + $s ); retract($s); end // Test case using declared type declare Fact prop : long end rule init salience 999 when then insert( new Fact( 1 ) ); insert( new Fact( 5 ) ); insert( new Fact( 6 ) ); insert( new Fact( 4 ) ); insert( new Fact( 2 ) ); end rule "Rule 06" salience 100 when $fact : Fact( $prop: prop ) not Fact( prop < $prop ) then System.out.println("Fact.prop: " + $prop); retract($fact); end On 20/01/2013, Wolfgang Laun <wolfgang.l...@gmail.com> wrote: > [Sorry - the previous email "escaped" before I was complete.] > > This is a self-contained DRL demonstrating the erroneous handling of > a condition involving Integer.intValue (same: Number.intValue), not > and retract, which is meant to sort the integers. This fails with 5.5.0, > but works correctly with 5.4.0 and previous versions. > > rule init > salience 9999 > when > then > insert( Integer.valueOf( 10 ) ); > insert( Integer.valueOf( 50 ) ); > insert( Integer.valueOf( 60 ) ); > insert( Integer.valueOf( 40 ) ); > insert( Integer.valueOf( 20 ) ); > end > > rule "Rule 04" > when > $number : Integer( $i: intValue ) > not Integer(intValue < $i) > then > System.out.println("Number found with value: " + $number.intValue()); > retract($number); > end > >> >> On 17/01/2013, Wolfgang Laun <wolfgang.l...@gmail.com> wrote: >>> This BAD bug was introduced on the way from 5.4.0 to 5.5.0 (and seems >>> to have sneaked into 6.0.0 as well). >>> >>> Only 5.4.0 and predecessors work as expected. >>> >>> Damage control? How far can 5.5.0 be trusted? >>> >>> >>> On 17/01/2013, John Smith <ffirstt.lla...@gmail.com> wrote: >>>> I am new to Drools and am trying to get the sample program to work. >>>> 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 04" >>>> 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. >>>> >>>> What might I be doing wrong? I cannot imagine that the drools rule >>>> engine >>>> would be broken at this basic level. >>>> >>>> >>>> >>>> -- >>>> View this message in context: >>>> http://drools.46999.n3.nabble.com/Drools-Expert-does-not-sort-integers-correctly-tp4021606.html >>>> Sent from the Drools: User forum mailing list archive at Nabble.com. >>>> _______________________________________________ >>>> rules-users mailing list >>>> rules-us...@lists.jboss.org >>>> https://lists.jboss.org/mailman/listinfo/rules-users >>>> >>> >> > _______________________________________________ rules-dev mailing list rules-dev@lists.jboss.org https://lists.jboss.org/mailman/listinfo/rules-dev