I just fixed this bug on the master and backported it on the 5.5.x branch.
Wolfgang, thanks again for your help.
Mario
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
insert( "AAA" );
rule init
salience 9999
when
then
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.laun@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.laun@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.llastt@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-users@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