We tracked it down to the range indexing iterator, in not and exist nodes. Should be fixed next week.
Mark On 20 Jan 2013, at 08:23, Wolfgang Laun <[email protected]> wrote: > 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 <[email protected]> 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 <[email protected]> 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 <[email protected]> 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 >>>>> [email protected] >>>>> https://lists.jboss.org/mailman/listinfo/rules-users >>>>> >>>> >>> >> > _______________________________________________ > rules-users mailing list > [email protected] > https://lists.jboss.org/mailman/listinfo/rules-users _______________________________________________ rules-dev mailing list [email protected] https://lists.jboss.org/mailman/listinfo/rules-dev
