Chris,

    Thanks for reporting this.

    I fixed a bug in 4.0.0 (released in 4.0.1) that causes you to see the correct value for "TestEval1" in 4.0.1 and later versions. Although, at that time I missed the memberOf scenario. I know why it happens (shadow fact related), but now I need to figure out a way to fix it.

    May I ask you to open a ticket for that?

    Thanks,
      Edson


2007/9/18, Chris West <crayzfishr@gmail.com>:
All,

I'm having a problem using memberOf combined with a collect statement.  My test includes 3 rules each written to output the same results (I think), but I get different results (depending on which version of Drools I use).

The rules are:


rule "TestMemberOf"
    salience 10
    when
        $messages: ArrayList() from collect (Message(status == 100))
        $wrappers: ArrayList() from collect (Wrapper(message memberOf $messages))
    then
        System.out.println("TestMemberOf: " + $wrappers.size());
end

rule "TestEval1"
    salience 9
    when
        $messages: ArrayList() from collect (Message(status == 100))
        $wrappers: ArrayList() from collect (Wrapper($message: message, eval($messages.contains($message))))
    then
        System.out.println("TestEval1: " + $wrappers.size());
end

rule "TestEval2"
    salience 8
    when
        $wrappers: ArrayList() from collect (Wrapper($message: message, eval($message.getStatus() == 100)))
    then
        System.out.println("TestEval2: " + $wrappers.size());
end



The output is (by version):

4.0.0

TestMemberOf: 0
TestEval1: 0
TestEval2: 2

4.0.1

TestMemberOf: 0
TestEval1: 2
TestEval2: 2

4.0.2.SNAPSHOT (taken 9/18/07)

TestMemberOf: 0
TestEval1: 2
TestEval2: 2


The correct output should be:

TestMemberOf: 2
TestEval1: 2
TestEval2: 2


Am I using memberOf correctly?  Is there some issue using an eval to test conditions on a list created by a collect?

Any help would be appreciated.

Attached is the full example.

Thanks,
-Chris West



_______________________________________________
rules-users mailing list
rules-users@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users





--
  Edson Tirelli
  Software Engineer - JBoss Rules Core Developer
  Office: +55 11 3529-6000
  Mobile: +55 11 9287-5646
  JBoss, a division of Red Hat @ www.jboss.com