Skip to content

Commit

Permalink
JBRULES-3292: adding support for BigDecimal and BigInteger literals
Browse files Browse the repository at this point in the history
(cherry picked from commit da8f24f)
(cherry picked from commit 9021aa3)
  • Loading branch information
etirelli committed Nov 22, 2011
1 parent 818da61 commit fe01918
Show file tree
Hide file tree
Showing 11 changed files with 2,612 additions and 2,544 deletions.
1,040 changes: 520 additions & 520 deletions drools-compiler/src/main/java/org/drools/lang/DRLExpressions.java

Large diffs are not rendered by default.

730 changes: 366 additions & 364 deletions drools-compiler/src/main/java/org/drools/lang/DRLLexer.java

Large diffs are not rendered by default.

110 changes: 55 additions & 55 deletions drools-compiler/src/main/java/org/drools/lang/dsl/DSLMapLexer.java

Large diffs are not rendered by default.

332 changes: 166 additions & 166 deletions drools-compiler/src/main/java/org/drools/lang/dsl/DSLMapParser.java

Large diffs are not rendered by default.

156 changes: 78 additions & 78 deletions drools-compiler/src/main/java/org/drools/lang/dsl/DSLMapWalker.java

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

4 changes: 2 additions & 2 deletions drools-compiler/src/main/resources/org/drools/lang/DRLLexer.g
Expand Up @@ -81,14 +81,14 @@ fragment
Exponent : ('e'|'E') ('+'|'-')? ('0'..'9')+ ;

fragment
FloatTypeSuffix : ('f'|'F'|'d'|'D') ;
FloatTypeSuffix : ('f'|'F'|'d'|'D'|'B') ;

HEX : '0' ('x'|'X') HexDigit+ IntegerTypeSuffix? ;

DECIMAL : ('0'..'9')+ IntegerTypeSuffix? ;

fragment
IntegerTypeSuffix : ('l'|'L') ;
IntegerTypeSuffix : ('l'|'L'|'I') ;

STRING
: ('"' ( EscapeSequence | ~('\\'|'"') )* '"')
Expand Down
17 changes: 17 additions & 0 deletions drools-compiler/src/test/java/org/drools/Primitives.java
Expand Up @@ -16,6 +16,8 @@
package org.drools;

import java.io.Serializable;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.Arrays;


Expand Down Expand Up @@ -52,6 +54,9 @@ public class Primitives

private Object object;

private BigDecimal bigDecimal;
private BigInteger bigInteger;

public boolean isBooleanPrimitive() {
return this.booleanPrimitive;
}
Expand Down Expand Up @@ -280,4 +285,16 @@ public boolean equals(Object obj) {
return true;
}

public BigDecimal getBigDecimal() {
return bigDecimal;
}
public void setBigDecimal( BigDecimal bigDecimal ) {
this.bigDecimal = bigDecimal;
}
public BigInteger getBigInteger() {
return bigInteger;
}
public void setBigInteger( BigInteger bigInteger ) {
this.bigInteger = bigInteger;
}
}
Expand Up @@ -9079,6 +9079,27 @@ public void testJBRULES2872() {

}

@Test
public void testBigLiterals() {
String str = "package org.drools\n" +
"rule X\n" +
"when\n" +
" Primitives( bigInteger == 10I, bigInteger < (50I), bigDecimal == 10B, bigDecimal < (50B) )\n" +
"then\n" +
"end\n";
KnowledgeBase kbase = loadKnowledgeBaseFromString( str );
StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();

Primitives p = new Primitives();
p.setBigDecimal( BigDecimal.valueOf( 10 ) );
p.setBigInteger( BigInteger.valueOf( 10 ) );
ksession.insert( p );

int rulesFired = ksession.fireAllRules();
assertEquals( 1,
rulesFired );
}

@Test
public void testModifyJava() {
String str = "package org.drools\n" +
Expand Down
28 changes: 28 additions & 0 deletions drools-compiler/src/test/java/org/drools/lang/RuleParserTest.java
Expand Up @@ -3834,6 +3834,34 @@ public void testUnificationBinding() throws Exception {

}

@Test
public void testBigLiterals() throws Exception {
final String text = "rule X when Primitives( bigInteger == (10I), " +
" bigDecimal == (10B), " +
" bigInteger < 50I, " +
" bigDecimal < 50B ) then end";
PatternDescr pattern = (PatternDescr) ((RuleDescr) parse( "rule",
text )).getLhs().getDescrs().get( 0 );

assertEquals( 4,
pattern.getDescrs().size() );
ExprConstraintDescr ecd = (ExprConstraintDescr) pattern.getDescrs().get( 0 );
assertEquals( "bigInteger == (10I)",
ecd.getExpression() );

ecd = (ExprConstraintDescr) pattern.getDescrs().get( 1 );
assertEquals( "bigDecimal == (10B)",
ecd.getExpression() );

ecd = (ExprConstraintDescr) pattern.getDescrs().get( 2 );
assertEquals( "bigInteger < 50I",
ecd.getExpression() );

ecd = (ExprConstraintDescr) pattern.getDescrs().get( 3 );
assertEquals( "bigDecimal < 50B",
ecd.getExpression() );
}

@Test
public void testBindingComposite() throws Exception {
final String text = "rule X when Person( $name : name == \"Bob\" || $loc : location == \"Montreal\" ) then end";
Expand Down

0 comments on commit fe01918

Please sign in to comment.