[jboss-svn-commits] JBL Code SVN: r10185 - in labs/jbossrules/trunk: drools-compiler/src/test/java/org/drools/integrationtests and 3 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Wed Mar 14 14:49:07 EDT 2007


Author: tirelli
Date: 2007-03-14 14:49:07 -0400 (Wed, 14 Mar 2007)
New Revision: 10185

Added:
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/Guess.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/RandomNumber.java
   labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_NumberComparisons.drl
Modified:
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/IntegrationCases.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ValueType.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/VariableRestriction.java
Log:
JBRULES-736: improving type resolution to allow number comparisons between different number classes and also comparisons to primitives

Added: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/Guess.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/Guess.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/Guess.java	2007-03-14 18:49:07 UTC (rev 10185)
@@ -0,0 +1,18 @@
+package org.drools;
+
+public class Guess
+{
+
+   private Integer value;
+
+   public void setValue(Integer guess)
+   {
+      this.value = guess;
+   }
+   
+   public Integer getValue()
+   {
+      return value;
+   }
+
+}


Property changes on: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/Guess.java
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:keywords
   + id author date revision
Name: svn:eol-style
   + native

Added: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/RandomNumber.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/RandomNumber.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/RandomNumber.java	2007-03-14 18:49:07 UTC (rev 10185)
@@ -0,0 +1,23 @@
+package org.drools;
+
+import java.util.Random;
+
+public class RandomNumber
+{
+   private int randomNumber;
+   
+   public void begin()
+   {
+      randomNumber = new Random().nextInt(100);
+   }
+   
+   public void setValue( int value ) {
+       this.randomNumber = value;
+   }
+   
+   public int getValue() 
+   {
+      return randomNumber;
+   }
+   
+}


Property changes on: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/RandomNumber.java
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:keywords
   + id author date revision
Name: svn:eol-style
   + native

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/IntegrationCases.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/IntegrationCases.java	2007-03-14 17:45:52 UTC (rev 10184)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/IntegrationCases.java	2007-03-14 18:49:07 UTC (rev 10185)
@@ -49,6 +49,7 @@
 import org.drools.FactB;
 import org.drools.FactHandle;
 import org.drools.FromTestClass;
+import org.drools.Guess;
 import org.drools.IndexedNumber;
 import org.drools.Order;
 import org.drools.OrderItem;
@@ -58,6 +59,7 @@
 import org.drools.Primitives;
 import org.drools.QueryResult;
 import org.drools.QueryResults;
+import org.drools.RandomNumber;
 import org.drools.RuleBase;
 import org.drools.RuleBaseConfiguration;
 import org.drools.Sensor;
@@ -4135,5 +4137,60 @@
         }
     }
 
+    public void testNumberComparisons() throws Exception {
+        final PackageBuilder builder = new PackageBuilder();
+        builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_NumberComparisons.drl" ) ) );
+        final Package pkg = builder.getPackage();
 
+        final RuleBase ruleBase = getRuleBase();
+        ruleBase.addPackage( pkg );
+        final WorkingMemory workingMemory = ruleBase.newWorkingMemory();
+
+        final List list = new ArrayList();
+        workingMemory.setGlobal( "results",
+                                 list );
+
+        // asserting the sensor object
+        RandomNumber rn = new RandomNumber();
+        rn.setValue( 10 );
+        workingMemory.assertObject( rn );
+        
+        Guess guess = new Guess();
+        guess.setValue( new Integer(5) );
+        
+        FactHandle handle = workingMemory.assertObject( guess );
+        
+        workingMemory.fireAllRules();
+
+        // HIGHER
+        assertEquals( 1,
+                      list.size() );
+        assertEquals( "HIGHER",
+                      list.get( 0 ) );
+        
+        guess.setValue( new Integer(15) );
+        workingMemory.modifyObject( handle, guess );
+
+        workingMemory.fireAllRules();
+
+        // LOWER
+        assertEquals( 2,
+                      list.size() );
+        assertEquals( "LOWER",
+                      list.get( 1 ) );
+        
+        guess.setValue( new Integer(10) );
+        workingMemory.modifyObject( handle, guess );
+
+        workingMemory.fireAllRules();
+
+        // CORRECT
+        assertEquals( 3,
+                      list.size() );
+        assertEquals( "CORRECT",
+                      list.get( 2 ) );
+        
+
+    }
+    
 }

Added: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_NumberComparisons.drl
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_NumberComparisons.drl	                        (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_NumberComparisons.drl	2007-03-14 18:49:07 UTC (rev 10185)
@@ -0,0 +1,31 @@
+package org.drools;
+
+global java.util.List results;
+
+rule High
+   when 
+      RandomNumber(randomValue:value)
+      // literal constraint
+      Guess(guess: value > 10)
+   then 
+      results.add("LOWER");
+end
+
+rule Low
+   when 
+      RandomNumber(randomValue:value)
+      // return value constraint
+      Guess(guess: value < ( 10 ) )
+   then 
+      results.add("HIGHER");
+end
+
+rule Win
+   when 
+      RandomNumber(randomValue:value)
+      // variable constraint
+      Guess(value==randomValue)
+   then 
+      results.add("CORRECT");
+end
+


Property changes on: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_NumberComparisons.drl
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:eol-style
   + native

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ValueType.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ValueType.java	2007-03-14 17:45:52 UTC (rev 10184)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ValueType.java	2007-03-14 18:49:07 UTC (rev 10185)
@@ -37,28 +37,28 @@
     // wrapper types
     public static final ValueType  CHAR_TYPE         = new ValueType( "Character",
                                                                       Character.class,
-                                                                      ObjectFactory.getInstance() );
+                                                                      CharacterFactory.getInstance() );
     public static final ValueType  BYTE_TYPE         = new ValueType( "Byte",
                                                                       Byte.class,
-                                                                      ObjectFactory.getInstance() );
+                                                                      ByteFactory.getInstance() );
     public static final ValueType  SHORT_TYPE        = new ValueType( "Short",
                                                                       Short.class,
-                                                                      ObjectFactory.getInstance() );
+                                                                      ShortFactory.getInstance() );
     public static final ValueType  INTEGER_TYPE      = new ValueType( "Integer",
                                                                       Integer.class,
-                                                                      ObjectFactory.getInstance() );
+                                                                      IntegerFactory.getInstance() );
     public static final ValueType  LONG_TYPE         = new ValueType( "Long",
                                                                       Long.class,
-                                                                      ObjectFactory.getInstance() );
+                                                                      LongFactory.getInstance() );
     public static final ValueType  FLOAT_TYPE        = new ValueType( "Float",
                                                                       Float.class,
-                                                                      ObjectFactory.getInstance() );
+                                                                      FloatFactory.getInstance() );
     public static final ValueType  DOUBLE_TYPE       = new ValueType( "Double",
                                                                       Double.class,
-                                                                      ObjectFactory.getInstance() );
+                                                                      DoubleFactory.getInstance() );
     public static final ValueType  BOOLEAN_TYPE      = new ValueType( "Boolean",
                                                                       Boolean.class,
-                                                                      ObjectFactory.getInstance() );
+                                                                      BooleanFactory.getInstance() );
     // primitive types
     public static final ValueType  PCHAR_TYPE        = new ValueType( "char",
                                                                       Character.TYPE,

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/VariableRestriction.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/VariableRestriction.java	2007-03-14 17:45:52 UTC (rev 10184)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/VariableRestriction.java	2007-03-14 18:49:07 UTC (rev 10185)
@@ -107,18 +107,15 @@
     }
     
     private final VariableContextEntry createContextEntry(FieldExtractor fieldExtractor) {
-        final Class classType = fieldExtractor.getValueType().getClassType();
-        if ( classType.isPrimitive() ) {
-            if ( classType == Boolean.TYPE ) {
-                return new BooleanVariableContextEntry( fieldExtractor,
-                                                        this.declaration );
-            } else if ( (classType == Double.TYPE) || (classType == Float.TYPE) ) {
-                return new DoubleVariableContextEntry( fieldExtractor,
-                                                       this.declaration );
-            } else {
-                return new LongVariableContextEntry( fieldExtractor,
-                                                     this.declaration );
-            }
+        if ( fieldExtractor.getValueType().isBoolean() ) {
+            return new BooleanVariableContextEntry( fieldExtractor,
+                                                    this.declaration );
+        } else if ( fieldExtractor.getValueType().isFloatNumber() ) {
+            return new DoubleVariableContextEntry( fieldExtractor,
+                                                   this.declaration );
+        } else if ( fieldExtractor.getValueType().isIntegerNumber() ) {
+            return new LongVariableContextEntry( fieldExtractor,
+                                                 this.declaration );
         } else {
             return new ObjectVariableContextEntry( fieldExtractor,
                                                    this.declaration );




More information about the jboss-svn-commits mailing list