# forall CE not fworking for simple forms

#### Details

• Type: Bug
• Status: Resolved
• Priority: Major
• Resolution: Done
• Affects Version/s: 5.1.1.FINAL
• Fix Version/s:
• Component/s: None
• Labels:
None

#### Description

Given classes
class Triangle

{ int a, b, c;... }

{ int a, b, c, d;... }

with appropriate getters (but no hashCode or equals) and these facts
Triangle( 3, 3, 3 )
Triangle( 3, 3, 3 ) // a duplicate, intentional
Quadrangle ( 3, 4, 5, 6 );
the rule
rule "all equilaterals have a 'fitting' quadrangle"
when
forall( Triangle( \$a: a, b == \$a, c == \$a )
Quadrangle( a == \$a || b == \$a || c == \$a || d == \$a ) )
then // ...
end
works as expected - it fires.

But the rule
rule "all equilaterals have a duplicate"
when
forall( \$t: Triangle( \$a: a, b == \$a, c == \$a )
Triangle( this != \$t, a == \$a, b == \$a , c == \$a ) )
then // ...
end
does not fire, not even when I omit this != \$t.

Since he following rule is just a variant of (Expert) Example 4.66, "All Buses are Red", I think that there is a bug, in 5.1.1:

// Does not fire even though all Triangle have all sides > 0
rule "All triangle sides are greater than 0"
when
forall( Triangle( a > 0, b > 0, c > 0 ) )
then
System.out.println( "All triangle sides are > 0." );
end

Also, the tortuous equivalent does not fire:

// Does not fire even though all Triangle have all sides > 0
rule "All triangle sides are greater than 0"
when
forall( \$t: Triangle()
Triangle( this == \$t, a > 0, b > 0, c > 0 ) )
then
System.out.println( "All triangle sides are > 0." );
end

#### People

• Assignee:
Edson Tirelli
Reporter:
Wolfgang Laun