[jboss-svn-commits] JBL Code SVN: r15375 - in labs/jbossrules/trunk/experimental/drools-analytics/src: main/java/org/drools/analytics/dao and 3 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Wed Sep 26 04:47:48 EDT 2007


Author: Rikkola
Date: 2007-09-26 04:47:48 -0400 (Wed, 26 Sep 2007)
New Revision: 15375

Added:
   labs/jbossrules/trunk/experimental/drools-analytics/src/test/resources/org/drools/analytics/Misc2.drl
   labs/jbossrules/trunk/experimental/drools-analytics/src/test/resources/org/drools/analytics/Misc3.drl
Modified:
   labs/jbossrules/trunk/experimental/drools-analytics/src/main/java/org/drools/analytics/PackageDescrFlattener.java
   labs/jbossrules/trunk/experimental/drools-analytics/src/main/java/org/drools/analytics/dao/AnalyticsData.java
   labs/jbossrules/trunk/experimental/drools-analytics/src/main/java/org/drools/analytics/dao/AnalyticsDataMaps.java
   labs/jbossrules/trunk/experimental/drools-analytics/src/main/resources/org/drools/analytics/rangeChecks/Clean.drl
   labs/jbossrules/trunk/experimental/drools-analytics/src/main/resources/org/drools/analytics/rangeChecks/Dates.drl
   labs/jbossrules/trunk/experimental/drools-analytics/src/main/resources/org/drools/analytics/rangeChecks/Doubles.drl
   labs/jbossrules/trunk/experimental/drools-analytics/src/main/resources/org/drools/analytics/rangeChecks/Integers.drl
   labs/jbossrules/trunk/experimental/drools-analytics/src/test/java/org/drools/analytics/AnalyticsTestStandalone.java
   labs/jbossrules/trunk/experimental/drools-analytics/src/test/java/org/drools/analytics/RangeCheckDatesTest.java
   labs/jbossrules/trunk/experimental/drools-analytics/src/test/java/org/drools/analytics/RangeCheckDoublesTest.java
   labs/jbossrules/trunk/experimental/drools-analytics/src/test/java/org/drools/analytics/RangeCheckIntegersTest.java
   labs/jbossrules/trunk/experimental/drools-analytics/src/test/resources/org/drools/analytics/Misc.drl
   labs/jbossrules/trunk/experimental/drools-analytics/src/test/resources/org/drools/analytics/MissingRangesForDates.drl
   labs/jbossrules/trunk/experimental/drools-analytics/src/test/resources/org/drools/analytics/MissingRangesForDoubles.drl
   labs/jbossrules/trunk/experimental/drools-analytics/src/test/resources/org/drools/analytics/MissingRangesForInts.drl
Log:
covered range x == y now produces missing ranges x > y and x < y, if they are missing.

Modified: labs/jbossrules/trunk/experimental/drools-analytics/src/main/java/org/drools/analytics/PackageDescrFlattener.java
===================================================================
--- labs/jbossrules/trunk/experimental/drools-analytics/src/main/java/org/drools/analytics/PackageDescrFlattener.java	2007-09-26 08:22:02 UTC (rev 15374)
+++ labs/jbossrules/trunk/experimental/drools-analytics/src/main/java/org/drools/analytics/PackageDescrFlattener.java	2007-09-26 08:47:48 UTC (rev 15375)
@@ -355,7 +355,7 @@
 	private int flatten(PatternDescr descr) {
 		AnalyticsData data = AnalyticsDataFactory.getAnalyticsData();
 
-		AnalyticsClass clazz = data.getClassByName(descr.getObjectType());
+		AnalyticsClass clazz = data.getClassByPackageAndName(descr.getObjectType());
 		if (clazz == null) {
 			clazz = new AnalyticsClass();
 			clazz.setName(descr.getObjectType());

Modified: labs/jbossrules/trunk/experimental/drools-analytics/src/main/java/org/drools/analytics/dao/AnalyticsData.java
===================================================================
--- labs/jbossrules/trunk/experimental/drools-analytics/src/main/java/org/drools/analytics/dao/AnalyticsData.java	2007-09-26 08:22:02 UTC (rev 15374)
+++ labs/jbossrules/trunk/experimental/drools-analytics/src/main/java/org/drools/analytics/dao/AnalyticsData.java	2007-09-26 08:47:48 UTC (rev 15375)
@@ -51,7 +51,7 @@
 
 	public void save(MissingNumberPattern missingNumberPattern);
 
-	public AnalyticsClass getClassByName(String name);
+	public AnalyticsClass getClassByPackageAndName(String name);
 
 	public AnalyticsClass getClassById(int id);
 

Modified: labs/jbossrules/trunk/experimental/drools-analytics/src/main/java/org/drools/analytics/dao/AnalyticsDataMaps.java
===================================================================
--- labs/jbossrules/trunk/experimental/drools-analytics/src/main/java/org/drools/analytics/dao/AnalyticsDataMaps.java	2007-09-26 08:22:02 UTC (rev 15374)
+++ labs/jbossrules/trunk/experimental/drools-analytics/src/main/java/org/drools/analytics/dao/AnalyticsDataMaps.java	2007-09-26 08:47:48 UTC (rev 15375)
@@ -140,7 +140,7 @@
 				link);
 	}
 
-	public AnalyticsClass getClassByName(String name) {
+	public AnalyticsClass getClassByPackageAndName(String name) {
 		return classesByName.get(name);
 	}
 
@@ -270,7 +270,7 @@
 
 		if (gapsByFieldId.containsKey(gap.getField().getId())) {
 			Set<Gap> set = gapsByFieldId.get(gap.getField().getId());
-			set.add(gap);
+			set.remove(gap);
 
 			if (set.isEmpty()) {
 				gapsByFieldId.remove(gap.getField().getId());

Modified: labs/jbossrules/trunk/experimental/drools-analytics/src/main/resources/org/drools/analytics/rangeChecks/Clean.drl
===================================================================
--- labs/jbossrules/trunk/experimental/drools-analytics/src/main/resources/org/drools/analytics/rangeChecks/Clean.drl	2007-09-26 08:22:02 UTC (rev 15374)
+++ labs/jbossrules/trunk/experimental/drools-analytics/src/main/resources/org/drools/analytics/rangeChecks/Clean.drl	2007-09-26 08:47:48 UTC (rev 15375)
@@ -10,10 +10,9 @@
 global AnalyticsData data;
 
 #
-# Removes useless gaps.
-# Type: None
 # Example: missing ( x >= 10 ) and ( x <= 10 ). This is the same as ( x == 10 )
-rule "Clean up gaps"
+#
+rule "Merge gaps"
 	when
 		$g1 :Gap(
 			evaluator == ">="
@@ -35,3 +34,56 @@
 		data.save( mnp );
 		insert( mnp );
 end
+/*
+#
+# Example: covered ( x > 10 ) and ( x < 100 ) ( x == 50 )
+# reports that ( x > 50 ) and ( x < 50 ) are missing.
+#
+rule "Remove useless gaps"
+	when
+		$r1 :LiteralRestriction( fieldType == Field.FieldType.INT )
+		
+		# gap ( x > 50 )
+		$g :Gap(
+			evaluator == ">",
+			restriction == $r1
+		)
+		
+		# covered ( x > 50 )
+		$r2 :LiteralRestriction( 
+			fieldId = $r1.fieldId,
+			patternIsNot == $r1.patternIsNot, 
+			( evaluator == ">" || == ">=" )
+			intValue < $r1.intValue()
+		)
+
+		not LiteralRestriction( 
+			fieldId = $r.fieldId,
+			patternIsNot == $r.patternIsNot, 
+			intValue < $r1.intValue(),
+			intValue < $r2.intValue()
+		)
+	then
+		#
+		#
+		#
+		#
+		#
+		#
+		#
+		#
+end
+*/
+
+
+
+
+
+
+
+
+
+
+
+
+

Modified: labs/jbossrules/trunk/experimental/drools-analytics/src/main/resources/org/drools/analytics/rangeChecks/Dates.drl
===================================================================
--- labs/jbossrules/trunk/experimental/drools-analytics/src/main/resources/org/drools/analytics/rangeChecks/Dates.drl	2007-09-26 08:22:02 UTC (rev 15374)
+++ labs/jbossrules/trunk/experimental/drools-analytics/src/main/resources/org/drools/analytics/rangeChecks/Dates.drl	2007-09-26 08:47:48 UTC (rev 15375)
@@ -3,161 +3,171 @@
 
 #list any import classes here.
 import org.drools.analytics.components.*;
-import org.drools.analytics.accumulateFunction.ValidatePattern;
-import org.drools.analytics.accumulateFunction.ValidatePatternResult;
 import org.drools.analytics.result.AnalysisResult;
 import org.drools.analytics.result.Gap;
 
-import java.util.ArrayList;
-import java.util.TreeSet;
-import java.text.SimpleDateFormat;
-import java.util.Locale;
 import java.util.Date;
+import java.util.Calendar;
+import java.util.GregorianCalendar;
 
 import org.drools.analytics.dao.AnalyticsData;
 
 #declare any global variables here
 global AnalyticsData data;
 
-function String dateToString(Date date) {
-		String fmt = System.getProperty("drools.dateformat");
-		if (fmt == null) {
-			fmt = "dd-MM-yyyy";
-		}
+function boolean checkDates(Date d1, Date d2, boolean up) {
+		Calendar c1 = new GregorianCalendar();
+		c1.setTime(d1);
+		Calendar c2 = new GregorianCalendar();
+		c2.setTime(d2);		
 		
-		return new SimpleDateFormat(fmt, Locale.ENGLISH).format(date);
+		c2.roll( Calendar.DATE, up );
+		
+		return ( 0 == c1.compareTo( c2 ) );
 }
 
+# If all ranges are not checked for a field.
+# 
+# Type: Warning
+# Example: in "Rule 1" Foo( bar > "27-Oct-2007" ) 
+#						and in Foo( <= "27-Oct-2007" || == "27-Oct-2007" ) is missing.
+#
+rule "Range check for dates, if smaller than or equal is missing"
+	when
+		$f :Field( fieldType == Field.FieldType.DATE )
+		
+		# Foo( bar > "27-Oct-2007" )
+		$r :LiteralRestriction( 
+			fieldId == $f.id, 
+			evaluator == ">"
+		)
+		
+		# Check if Foo( bar == "27-Oct-2007" || <= "27-Oct-2007" ) is missing.
+		not	LiteralRestriction( 
+			fieldId == $f.id, 
+			( evaluator  == "==" || == "<=" ), 
+			patternIsNot == $r.patternIsNot, 
+			eval( dateValue.equals($r.getDateValue()) ) 
+		)
+	then
+		Gap gap = new Gap( $f, "<=", $r );
+		
+		gap.setFiredRuleName( drools.getRule().getName() );
+		
+		data.save( gap );
+		insert( gap );
+end
 
-#
-# If all ranges are not checked for a date field.
+# If all ranges are not checked for a field.
 # 
 # Type: Warning
-# Example: in "Rule 1" Foo( bar < "27-Oct-2007" ) and in "Rule 2" Foo( bar > "27-Oct-2007" )
-# 					then Foo( bar == "27-Oct-2007" ) is missing.
-rule "Range check for dates, smaller and greater than"
+# Example: in "Rule 1" Foo( bar < "27-Oct-2007" ) 
+#						and in Foo( >= "27-Oct-2007" || == "27-Oct-2007" ) is missing.
+#
+rule "Range check for dates, if greater than or equal is missing"
 	when
 		$f :Field( fieldType == Field.FieldType.DATE )
-		(
-				$r :LiteralRestriction( 
-					fieldId == $f.id, 
-					evaluator == ">" 
-				)
-			and
-				not LiteralRestriction( 
-					fieldId == $f.id, 
-					( evaluator == "==" || == "<=" ), 
-					patternIsNot == $r.patternIsNot, 
-					eval( dateValue.equals($r.getDateValue()) ) 
-				)
-		) or (
-				$r :LiteralRestriction( 
-					fieldId == $f.id, 
-					evaluator == "<" 
-				)
-			and
-				not LiteralRestriction( 
-					fieldId == $f.id, 
-					( evaluator == "==" || == ">=" ), 
-					patternIsNot == $r.patternIsNot, 
-					eval( dateValue.equals($r.getDateValue()) ) 
-				)
-		) or (
-				$r :LiteralRestriction( 
-					fieldId == $f.id, 
-					evaluator == "<=" 
-				)
-			and
-				not LiteralRestriction( 
-					fieldId == $f.id, 
-					evaluator == ">", 
-					patternIsNot == $r.patternIsNot, 
-					eval( dateValue.equals($r.getDateValue()) ) 
-				)
-		) or (
-				$r :LiteralRestriction( 
-					fieldId == $f.id, 
-					evaluator == ">=" 
-				)
-			and
-				not LiteralRestriction( 
-					fieldId == $f.id, 
-					evaluator == "<", 
-					patternIsNot == $r.patternIsNot, 
-					eval( dateValue.equals($r.getDateValue()) ) 
-				)
+		
+		# Foo( bar > "27-Oct-2007" )
+		$r :LiteralRestriction( 
+			fieldId == $f.id, 
+			evaluator == "<"
 		)
+		
+		# Check if Foo( bar == "27-Oct-2007" || <= "27-Oct-2007" ) is missing.
+		not	LiteralRestriction( 
+			fieldId == $f.id, 
+			( evaluator  == "==" || == ">=" ), 
+			patternIsNot == $r.patternIsNot, 
+			eval( dateValue.equals($r.getDateValue()) ) 
+		)
 	then
-		Gap gap = new Gap( $f, Gap.getReversedEvaluator($r.getEvaluator()), $r);
+		Gap gap = new Gap( $f, ">=", $r );
+		
 		gap.setFiredRuleName( drools.getRule().getName() );
+		
 		data.save( gap );
 		insert( gap );
 end
 
 # If all ranges are not checked for a field.
-# If equality and smaller than exist check that greater than exists too.
 #
 # Type: Warning
-# Example: in "Rule 1" Foo(bar == "27-Oct-2007" ) and in "Rule 2" Foo( bar < "27-Oct-2007" )
-# 					then Foo( bar > "27-Oct-2007" ) is missing.
+# Example: in "Rule 1" Foo( bar == "27-Oct-2007" || bar <= "27-Oct-2007" ) 
+# 					and no Foo( bar > "27-Oct-2007" || >= "27-Oct-2007" || >= "28-Oct-2007" || == "28-Oct-2007" ) 
+#						then Foo( bar > "27-Oct-2007" ) is missing.
+#
 rule "Range check for dates, equal and greater than"
 	when
-		# Case Foo( bar == "27-Oct-2007" ) Foo( bar >= "27-Oct-2007" || > "27-Oct-2007" ).
 		$f :Field( fieldType == Field.FieldType.DATE )
+
+		# Foo( bar == "27-Oct-2007" ) 
 		$r :LiteralRestriction( 
 			fieldId == $f.id, 
-			evaluator == "==" 
+			( evaluator == "==" || == "<=" )
 		)
-		LiteralRestriction( 
+
+		# Check if Foo( bar > "27-Oct-2007" || >= "27-Oct-2007" ) is missing.
+		not	LiteralRestriction( 
 			fieldId == $f.id, 
 			( evaluator == ">" || == ">=" ), 
 			patternIsNot == $r.patternIsNot, 
-			eval( dateValue.equals($r.getDateValue())) 
+			eval( dateValue.equals($r.getDateValue()) ) 
 		)
-		# Check if Foo( bar < "27-Oct-2007" || <= "27-Oct-2007" ) is missing.
+		
+		# Check if Foo( bar == "28-Oct-2007" || >= "28-Oct-2007" ) is missing.
 		not	LiteralRestriction( 
 			fieldId == $f.id, 
-			( evaluator == "<" || == "<=" ), 
+			( evaluator == "==" || == ">=" ), 
 			patternIsNot == $r.patternIsNot, 
-			eval( dateValue.equals($r.getDateValue())) 
+			eval( checkDates( dateValue, $r.getDateValue(), true ) ) 
 		)
 	then
-		Gap gap = new Gap( $f, "<", $r );
+		Gap gap =  new Gap( $f, ">", $r );
+		
 		gap.setFiredRuleName( drools.getRule().getName() );
+		
 		data.save( gap );
 		insert( gap );
 end
 
 # If all ranges are not checked for a field.
-# If equality and smaller than exist check that greater than exists too.
 #
 # Type: Warning
-# Example: in "Rule 1" Foo(bar == "27-Oct-2007" ) and in "Rule 2" Foo( bar > "27-Oct-2007" )
-# 					then Foo( bar < "27-Oct-2007" ) is missing.
+# Example: in "Rule 1" Foo( bar == "27-Oct-2007" || bar >= "27-Oct-2007" ) 
+# 					and no Foo( bar < "27-Oct-2007" || <= "27-Oct-2007" || <= "26-Oct-2007" || == "26-Oct-2007" ) 
+#						then Foo( bar < "27-Oct-2007" ) is missing.
+#
 rule "Range check for dates, equal and smaller than"
 	when
-		# Case Foo( bar == "27-Oct-2007" ) Foo( bar <= "27-Oct-2007" || < "27-Oct-2007" ).
 		$f :Field( fieldType == Field.FieldType.DATE )
+
+		# Foo( bar == "27-Oct-2007" ) 
 		$r :LiteralRestriction( 
 			fieldId == $f.id, 
-			evaluator == "==" 
+			( evaluator == "==" || == ">=" )
 		)
-		LiteralRestriction( 
+
+		# Check if Foo( bar < "27-Oct-2007" || <= "27-Oct-2007" ) is missing.
+		not	LiteralRestriction( 
 			fieldId == $f.id, 
 			( evaluator == "<" || == "<=" ), 
 			patternIsNot == $r.patternIsNot, 
-			eval( dateValue.equals($r.getDateValue())) 
+			eval( dateValue.equals($r.getDateValue()) ) 
 		)
-		# Check if Foo( bar > "27-Oct-2007" || >= "27-Oct-2007" ) is missing.
+		
+		# Check if Foo( bar == "26-Oct-2007" || <= "26-Oct-2007" ) is missing.
 		not	LiteralRestriction( 
 			fieldId == $f.id, 
-			( evaluator == ">" || == ">=" ), 
+			( evaluator == "==" || == "<=" ), 
 			patternIsNot == $r.patternIsNot, 
-			eval( dateValue.equals($r.getDateValue())) 
+			eval( checkDates( dateValue, $r.getDateValue(), false ) )
 		)
 	then
-		Gap gap = new Gap( $f, ">", $r );
+		Gap gap =  new Gap( $f, "<", $r );
+		
 		gap.setFiredRuleName( drools.getRule().getName() );
+		
 		data.save( gap );
 		insert( gap );
 end

Modified: labs/jbossrules/trunk/experimental/drools-analytics/src/main/resources/org/drools/analytics/rangeChecks/Doubles.drl
===================================================================
--- labs/jbossrules/trunk/experimental/drools-analytics/src/main/resources/org/drools/analytics/rangeChecks/Doubles.drl	2007-09-26 08:22:02 UTC (rev 15374)
+++ labs/jbossrules/trunk/experimental/drools-analytics/src/main/resources/org/drools/analytics/rangeChecks/Doubles.drl	2007-09-26 08:47:48 UTC (rev 15375)
@@ -3,8 +3,6 @@
 
 #list any import classes here.
 import org.drools.analytics.components.*;
-import org.drools.analytics.accumulateFunction.ValidatePattern;
-import org.drools.analytics.accumulateFunction.ValidatePatternResult;
 import org.drools.analytics.result.AnalysisResult;
 import org.drools.analytics.result.Gap;
 
@@ -13,9 +11,142 @@
 #declare any global variables here
 global AnalyticsData data;
 
+
 # If all ranges are not checked for a field.
 # 
 # Type: Warning
+# Example: in "Rule 1" Foo( bar > 42 ) 
+#						and in Foo( <= 42 || == 42 ) is missing.
+#
+rule "Range check for doubles, if smaller than or equal is missing"
+	when
+		$f :Field( fieldType == Field.FieldType.DOUBLE )
+		
+		# Foo( bar > 42 )
+		$r :LiteralRestriction( 
+			fieldId == $f.id, 
+			evaluator == ">"
+		)
+		
+		# Check if Foo( bar == 42 || <= 42 ) is missing.
+		not	LiteralRestriction( 
+			fieldId == $f.id, 
+			( evaluator  == "==" || == "<=" ), 
+			patternIsNot == $r.patternIsNot, 
+			doubleValue == $r.doubleValue 
+		)
+	then
+		Gap gap = new Gap( $f, "<=", $r );
+		
+		gap.setFiredRuleName( drools.getRule().getName() );
+		
+		data.save( gap );
+		insert( gap );
+end
+
+# If all ranges are not checked for a field.
+# 
+# Type: Warning
+# Example: in "Rule 1" Foo( bar < 42 ) 
+#						and in Foo( >= 42 || == 42 ) is missing.
+#
+rule "Range check for doubles, if greater than or equal is missing"
+	when
+		$f :Field( fieldType == Field.FieldType.DOUBLE )
+		
+		# Foo( bar > 42 )
+		$r :LiteralRestriction( 
+			fieldId == $f.id, 
+			evaluator == "<"
+		)
+		
+		# Check if Foo( bar == 42 || <= 42 ) is missing.
+		not	LiteralRestriction( 
+			fieldId == $f.id, 
+			( evaluator  == "==" || == ">=" ), 
+			patternIsNot == $r.patternIsNot, 
+			doubleValue == $r.doubleValue 
+		)
+	then
+		Gap gap = new Gap( $f, ">=", $r );
+		
+		gap.setFiredRuleName( drools.getRule().getName() );
+		
+		data.save( gap );
+		insert( gap );
+end
+
+# If all ranges are not checked for a field.
+#
+# Type: Warning
+# Example: in "Rule 1" Foo( bar == 42 || bar <= 42 ) 
+# 					and no Foo( bar > 42 || >= 42 || >= 43 || == 43 ) 
+#						then Foo( bar > 42 ) is missing.
+#
+rule "Range check for doubles, equal and greater than"
+	when
+		$f :Field( fieldType == Field.FieldType.DOUBLE )
+
+		# Foo( bar == 42 ) 
+		$r :LiteralRestriction( 
+			fieldId == $f.id, 
+			( evaluator == "==" || == "<=" )
+		)
+
+		# Check if Foo( bar > 42 || >= 42 ) is missing.
+		not	LiteralRestriction( 
+			fieldId == $f.id, 
+			( evaluator == ">" || == ">=" ), 
+			patternIsNot == $r.patternIsNot, 
+			doubleValue == $r.doubleValue 
+		)
+	then
+		Gap gap =  new Gap( $f, ">", $r );
+		
+		gap.setFiredRuleName( drools.getRule().getName() );
+		
+		data.save( gap );
+		insert( gap );
+end
+
+# If all ranges are not checked for a field.
+#
+# Type: Warning
+# Example: in "Rule 1" Foo( bar == 42 || bar >= 42 ) 
+# 					and no Foo( bar < 42 || <= 42 || <= 41 || == 41 ) 
+#						then Foo( bar < 42 ) is missing.
+#
+rule "Range check for doubles, equal and smaller than"
+	when
+		$f :Field( fieldType == Field.FieldType.DOUBLE )
+
+		# Foo( bar == 42 ) 
+		$r :LiteralRestriction( 
+			fieldId == $f.id, 
+			( evaluator == "==" || == ">=" )
+		)
+
+		# Check if Foo( bar < 42 || <= 42 ) is missing.
+		not	LiteralRestriction( 
+			fieldId == $f.id, 
+			( evaluator == "<" || == "<=" ), 
+			patternIsNot == $r.patternIsNot, 
+			doubleValue == $r.doubleValue 
+		)
+	then
+		Gap gap =  new Gap( $f, "<", $r );
+		
+		gap.setFiredRuleName( drools.getRule().getName() );
+		
+		data.save( gap );
+		insert( gap );
+end
+
+
+/*
+# If all ranges are not checked for a field.
+# 
+# Type: Warning
 # Example: in "Rule 1" Foo(bar > 42 ) and in "Rule 2" Foo( bar < 42 )
 # 					then Foo( bar == 42 ) is missing.
 rule "Range check for doubles, smaller and greater than"
@@ -144,4 +275,4 @@
 		data.save( gap );
 		insert( gap );
 end
-
+*/

Modified: labs/jbossrules/trunk/experimental/drools-analytics/src/main/resources/org/drools/analytics/rangeChecks/Integers.drl
===================================================================
--- labs/jbossrules/trunk/experimental/drools-analytics/src/main/resources/org/drools/analytics/rangeChecks/Integers.drl	2007-09-26 08:22:02 UTC (rev 15374)
+++ labs/jbossrules/trunk/experimental/drools-analytics/src/main/resources/org/drools/analytics/rangeChecks/Integers.drl	2007-09-26 08:47:48 UTC (rev 15375)
@@ -3,16 +3,9 @@
 
 #list any import classes here.
 import org.drools.analytics.components.*;
-import org.drools.analytics.accumulateFunction.ValidatePattern;
-import org.drools.analytics.accumulateFunction.ValidatePatternResult;
 import org.drools.analytics.result.AnalysisResult;
 import org.drools.analytics.result.Gap;
 
-import java.util.ArrayList;
-import java.util.TreeSet;
-import java.text.SimpleDateFormat;
-import java.util.Locale;
-
 import org.drools.analytics.dao.AnalyticsData;
 
 global AnalyticsData data;
@@ -20,205 +13,145 @@
 # If all ranges are not checked for a field.
 # 
 # Type: Warning
-# Example: in "Rule 1" Foo(bar > 42 ) and in "Rule 2" Foo( bar < 42 )
-# 					then Foo( bar == 42 ) is missing.
-rule "Range check for integers, smaller and greater than"
+# Example: in "Rule 1" Foo( bar > 42 ) 
+#						and in Foo( <= 42 || == 42 ) is missing.
+#
+rule "Range check for integers, if smaller than or equal is missing"
 	when
-		$f :Field( fieldType == Field.FieldType.INT, $fieldId :id, $fieldName :name, $classId :classId )
-		(
-				$r :LiteralRestriction( 
-					fieldId == $fieldId, 
-					evaluator == ">", 
-					$patternIsNot :patternIsNot, 
-					$value :intValue 
-				)
-			and
-				not LiteralRestriction( 
-					fieldId == $fieldId, 
-					( evaluator == "==" || == "<=" ), 
-					patternIsNot == $patternIsNot, 
-					intValue == $value 
-				)
-		) or (
-				$r :LiteralRestriction( 
-					fieldId == $fieldId, 
-					evaluator == "<", 
-					$patternIsNot :patternIsNot, 
-					$value :intValue 
-				)
-			and
-				not LiteralRestriction( 
-					fieldId == $fieldId, 
-					( evaluator == "==" || == ">=" ), 
-					patternIsNot == $patternIsNot, 
-					intValue == $value 
-				)
-		) or (
-				$r :LiteralRestriction( 
-					fieldId == $fieldId, 
-					evaluator == "<=", 
-					$patternIsNot :patternIsNot, 
-					$value :intValue 
-				)
-			and
-				not LiteralRestriction( 
-					fieldId == $fieldId, 
-					evaluator  == ">", 
-					patternIsNot == $patternIsNot, 
-					intValue == $value 
-				)
-			and
-				not LiteralRestriction( 
-					fieldId == $fieldId, 
-					evaluator  == ">=", 
-					patternIsNot == $patternIsNot, 
-					eval( intValue == $value + 1 ) 
-				)
-		) or (
-				$r :LiteralRestriction( 
-					fieldId == $fieldId, 
-					evaluator == ">=", 
-					$patternIsNot :patternIsNot, 
-					$value :intValue 
-				)
-			and
-				not LiteralRestriction( 
-					fieldId == $fieldId, 
-					evaluator  == "<", 
-					patternIsNot == $patternIsNot, 
-					intValue == $value 
-				)
-			and
-				not LiteralRestriction( 
-					fieldId == $fieldId, 
-					evaluator  == "<=", 
-					patternIsNot == $patternIsNot, 
-					eval( intValue == $value - 1 ) 
-				)
+		$f :Field( fieldType == Field.FieldType.INT )
+		
+		# Foo( bar > 42 )
+		$r :LiteralRestriction( 
+			fieldId == $f.id, 
+			evaluator == ">"
 		)
+		
+		# Check if Foo( bar == 42 || <= 42 ) is missing.
+		not	LiteralRestriction( 
+			fieldId == $f.id, 
+			( evaluator  == "==" || == "<=" ), 
+			patternIsNot == $r.patternIsNot, 
+			intValue == $r.intValue 
+		)
 	then
-		Gap gap = new Gap( $f, Gap.getReversedEvaluator($r.getEvaluator()), $r );
+		Gap gap = new Gap( $f, "<=", $r );
+		
 		gap.setFiredRuleName( drools.getRule().getName() );
+		
 		data.save( gap );
 		insert( gap );
 end
 
 # If all ranges are not checked for a field.
-# If equality and smaller than exist check that greater than exists too.
+# 
+# Type: Warning
+# Example: in "Rule 1" Foo( bar < 42 ) 
+#						and in Foo( >= 42 || == 42 ) is missing.
 #
+rule "Range check for integers, if greater than or equal is missing"
+	when
+		$f :Field( fieldType == Field.FieldType.INT )
+		
+		# Foo( bar > 42 )
+		$r :LiteralRestriction( 
+			fieldId == $f.id, 
+			evaluator == "<"
+		)
+		
+		# Check if Foo( bar == 42 || <= 42 ) is missing.
+		not	LiteralRestriction( 
+			fieldId == $f.id, 
+			( evaluator  == "==" || == ">=" ), 
+			patternIsNot == $r.patternIsNot, 
+			intValue == $r.intValue 
+		)
+	then
+		Gap gap = new Gap( $f, ">=", $r );
+		
+		gap.setFiredRuleName( drools.getRule().getName() );
+		
+		data.save( gap );
+		insert( gap );
+end
+
+# If all ranges are not checked for a field.
+#
 # Type: Warning
-# Example: in "Rule 1" Foo(bar == 42 ) and in "Rule 2" Foo( bar < 42 )
-# 					then Foo( bar > 42 ) is missing.
+# Example: in "Rule 1" Foo( bar == 42 || bar <= 42 ) 
+# 					and no Foo( bar > 42 || >= 42 || >= 43 || == 43 ) 
+#						then Foo( bar > 42 ) is missing.
+#
 rule "Range check for integers, equal and greater than"
 	when
-		(
-		# Case Foo( bar == 42 ) Foo( bar >= 43 || == 43 ).
-				$f :Field( fieldType == Field.FieldType.INT )
-			and
-				$r :LiteralRestriction( 
-					fieldId == $f.id, 
-					evaluator == "==" 
-				)
-			and
-				LiteralRestriction( 
-					fieldId == $f.id, 
-					( evaluator == "==" || == ">=" ),
-					patternIsNot == $r.patternIsNot, 
-					eval( intValue == $r.getIntValue() + 1 ) 
-				)
-		) or (
-		# Case Foo( bar == 42 ) Foo( bar >= 42 || > 42 ).
-				$f :Field( fieldType == Field.FieldType.INT )
-			and
-				$r :LiteralRestriction( 
-					fieldId == $f.id, 
-					evaluator == "==" 
-				)
-			and
-				LiteralRestriction( 
-					fieldId == $f.id, 
-					( evaluator == ">" || == ">=" ), 
-					patternIsNot == $r.patternIsNot, 
-					intValue == $r.intValue 
-				)
+		$f :Field( fieldType == Field.FieldType.INT )
+
+		# Foo( bar == 42 ) 
+		$r :LiteralRestriction( 
+			fieldId == $f.id, 
+			( evaluator == "==" || == "<=" )
 		)
-		# Check if Foo( bar < 42 || <= 42 ) is missing.
+
+		# Check if Foo( bar > 42 || >= 42 ) is missing.
 		not	LiteralRestriction( 
 			fieldId == $f.id, 
-			( evaluator == "<" || == "<=" ), 
+			( evaluator == ">" || == ">=" ), 
 			patternIsNot == $r.patternIsNot, 
 			intValue == $r.intValue 
 		)
-		# Check if Foo( bar == 41 || <= 41 ) is missing.
+		
+		# Check if Foo( bar == 43 || >= 43 ) is missing.
 		not	LiteralRestriction( 
 			fieldId == $f.id, 
-			( evaluator == "==" || == "<=" ), 
+			( evaluator == "==" || == ">=" ), 
 			patternIsNot == $r.patternIsNot, 
-			eval( intValue == $r.getIntValue() - 1 ) 
+			eval( intValue == $r.getIntValue() + 1 ) 
 		)
 	then
-		Gap gap =  new Gap( $f, "<", $r );
+		Gap gap =  new Gap( $f, ">", $r );
+		
 		gap.setFiredRuleName( drools.getRule().getName() );
+		
 		data.save( gap );
 		insert( gap );
 end
 
 # If all ranges are not checked for a field.
-# If equality and greater than exist check that smaller than exists too.
 #
 # Type: Warning
-# Example: in "Rule 1" Foo(bar == 42 ) and in "Rule 2" Foo( bar > 42 )
-# 					then Foo( bar < 42 ) is missing.
+# Example: in "Rule 1" Foo( bar == 42 || bar >= 42 ) 
+# 					and no Foo( bar < 42 || <= 42 || <= 41 || == 41 ) 
+#						then Foo( bar < 42 ) is missing.
+#
 rule "Range check for integers, equal and smaller than"
 	when
-		(
-		# Case Foo( bar == 42 ) Foo( bar <= 43 || == 43 ).
-				$f :Field( fieldType == Field.FieldType.INT )
-			and
-				$r :LiteralRestriction( 
-					fieldId == $f.id, 
-					evaluator == "==" 
-				)
-			and
-				LiteralRestriction( 
-					fieldId == $f.id, 
-					( evaluator == "==" || == "<=" ),
-					patternIsNot == $r.patternIsNot, 
-					eval( intValue == $r.getIntValue() - 1 ) 
-				)
-		) or (
-		# Case Foo( bar == 42 ) Foo( bar <= 42 || < 42 ).
-				$f :Field( fieldType == Field.FieldType.INT )
-			and
-				$r :LiteralRestriction( 
-					fieldId == $f.id, 
-					evaluator == "==" 
-				)
-			and
-				LiteralRestriction( 
-					fieldId == $f.id, 
-					( evaluator == "<" || == "<=" ), 
-					patternIsNot == $r.patternIsNot, 
-					intValue == $r.intValue 
-				)
+		$f :Field( fieldType == Field.FieldType.INT )
+
+		# Foo( bar == 42 ) 
+		$r :LiteralRestriction( 
+			fieldId == $f.id, 
+			( evaluator == "==" || == ">=" )
 		)
-		# Check if Foo( bar > 42 || >= 42 ) is missing.
+
+		# Check if Foo( bar < 42 || <= 42 ) is missing.
 		not	LiteralRestriction( 
 			fieldId == $f.id, 
-			( evaluator == ">" || == ">=" ), 
+			( evaluator == "<" || == "<=" ), 
 			patternIsNot == $r.patternIsNot, 
 			intValue == $r.intValue 
 		)
-		# Check if Foo( bar == 41 || >= 41 ) is missing.
+		
+		# Check if Foo( bar == 41 || <= 41 ) is missing.
 		not	LiteralRestriction( 
 			fieldId == $f.id, 
-			( evaluator == "==" || == ">=" ), 
+			( evaluator == "==" || == "<=" ), 
 			patternIsNot == $r.patternIsNot, 
-			eval( intValue == $r.getIntValue() + 1 ) 
+			eval( intValue == $r.getIntValue() - 1 ) 
 		)
 	then
-		Gap gap = new Gap( $f, ">", $r );
+		Gap gap =  new Gap( $f, "<", $r );
+		
 		gap.setFiredRuleName( drools.getRule().getName() );
+		
 		data.save( gap );
 		insert( gap );
 end

Modified: labs/jbossrules/trunk/experimental/drools-analytics/src/test/java/org/drools/analytics/AnalyticsTestStandalone.java
===================================================================
--- labs/jbossrules/trunk/experimental/drools-analytics/src/test/java/org/drools/analytics/AnalyticsTestStandalone.java	2007-09-26 08:22:02 UTC (rev 15374)
+++ labs/jbossrules/trunk/experimental/drools-analytics/src/test/java/org/drools/analytics/AnalyticsTestStandalone.java	2007-09-26 08:47:48 UTC (rev 15375)
@@ -29,13 +29,19 @@
 									.getResourceAsStream("MissingRangesForVariables.drl")));
 			PackageDescr descr5 = new DrlParser().parse(new InputStreamReader(
 					Analyzer.class.getResourceAsStream("Misc.drl")));
+			PackageDescr descr6 = new DrlParser().parse(new InputStreamReader(
+					Analyzer.class.getResourceAsStream("Misc2.drl")));
+			PackageDescr descr7 = new DrlParser().parse(new InputStreamReader(
+					Analyzer.class.getResourceAsStream("Misc3.drl")));
 
 			Analyzer a = new Analyzer();
-			a.addPackageDescr(descr);
+//			a.addPackageDescr(descr);
 			// a.addPackageDescr(descr2);
-			// a.addPackageDescr(descr3);
+//			 a.addPackageDescr(descr3);
 			// a.addPackageDescr(descr4);
 			a.addPackageDescr(descr5);
+			a.addPackageDescr(descr6);
+			a.addPackageDescr(descr7);
 			a.fireAnalysis();
 			// System.out.print(a.getResultAsPlainText());
 			// System.out.print(a.getResultAsXML());

Modified: labs/jbossrules/trunk/experimental/drools-analytics/src/test/java/org/drools/analytics/RangeCheckDatesTest.java
===================================================================
--- labs/jbossrules/trunk/experimental/drools-analytics/src/test/java/org/drools/analytics/RangeCheckDatesTest.java	2007-09-26 08:22:02 UTC (rev 15374)
+++ labs/jbossrules/trunk/experimental/drools-analytics/src/test/java/org/drools/analytics/RangeCheckDatesTest.java	2007-09-26 08:47:48 UTC (rev 15375)
@@ -19,12 +19,13 @@
  */
 public class RangeCheckDatesTest extends TestBase {
 
-	public void testSmallerAndGreaterThan() throws Exception {
+	public void testSmallerOrEqual() throws Exception {
 		StatelessSession session = getStatelessSession(this.getClass()
 				.getResourceAsStream("rangeChecks/Dates.drl"));
 
-		session.setAgendaFilter(new RuleNameMatchesAgendaFilter(
-				"Range check for dates, smaller and greater than"));
+		session
+				.setAgendaFilter(new RuleNameMatchesAgendaFilter(
+						"Range check for dates, if smaller than or equal is missing"));
 
 		Collection<? extends Object> testData = getTestData(this.getClass()
 				.getResourceAsStream("MissingRangesForDates.drl"));
@@ -46,34 +47,8 @@
 			// System.out.println(o);
 		}
 
-		assertTrue(rulesThatHadErrors.remove("Date range 1a, has gap"));
-		assertTrue(rulesThatHadErrors.remove("Date range 2a, has gap"));
-		assertTrue(rulesThatHadErrors.remove("Date range 3a, has gap"));
-		assertTrue(rulesThatHadErrors.remove("Date range 4a, has gap"));
-		assertTrue(rulesThatHadErrors.remove("Date range 7a, has gap"));
-		assertTrue(rulesThatHadErrors.remove("Date range 7b, has gap"));
-		assertTrue(rulesThatHadErrors.remove("Date range 8a, has gap"));
-		assertTrue(rulesThatHadErrors.remove("Date range 8b, has gap"));
-		assertTrue(rulesThatHadErrors.remove("Date range 9a, has gap"));
-		assertTrue(rulesThatHadErrors.remove("Date range 9b, has gap"));
-		assertTrue(rulesThatHadErrors.remove("Date range 10a, has gap"));
-		assertTrue(rulesThatHadErrors.remove("Date range 10b, has gap"));
-		assertTrue(rulesThatHadErrors.remove("Date range 11a, has gap"));
-		assertTrue(rulesThatHadErrors.remove("Date range 11b, has gap"));
-		assertTrue(rulesThatHadErrors.remove("Date range 12a, has gap"));
-		assertTrue(rulesThatHadErrors.remove("Date range 13a, has gap"));
-		assertTrue(rulesThatHadErrors.remove("Date range 14a, has gap"));
-		assertTrue(rulesThatHadErrors.remove("Date range 15a, has gap"));
-		assertTrue(rulesThatHadErrors.remove("Date range 18a, has gap"));
-		assertTrue(rulesThatHadErrors.remove("Date range 18b, has gap"));
-		assertTrue(rulesThatHadErrors.remove("Date range 19a, has gap"));
-		assertTrue(rulesThatHadErrors.remove("Date range 19b, has gap"));
-		assertTrue(rulesThatHadErrors.remove("Date range 20a, has gap"));
-		assertTrue(rulesThatHadErrors.remove("Date range 20b, has gap"));
-		assertTrue(rulesThatHadErrors.remove("Date range 21a, has gap"));
-		assertTrue(rulesThatHadErrors.remove("Date range 21b, has gap"));
-		assertTrue(rulesThatHadErrors.remove("Date range 22a, has gap"));
-		assertTrue(rulesThatHadErrors.remove("Date range 22b, has gap"));
+		assertTrue(rulesThatHadErrors.remove("Date gap rule 4a"));
+		assertTrue(rulesThatHadErrors.remove("Date gap rule 5a"));
 
 		if (!rulesThatHadErrors.isEmpty()) {
 			for (String string : rulesThatHadErrors) {
@@ -82,6 +57,44 @@
 		}
 	}
 
+	public void testGreaterOrEqual() throws Exception {
+		StatelessSession session = getStatelessSession(this.getClass()
+				.getResourceAsStream("rangeChecks/Dates.drl"));
+
+		session
+				.setAgendaFilter(new RuleNameMatchesAgendaFilter(
+						"Range check for dates, if greater than or equal is missing"));
+
+		Collection<? extends Object> testData = getTestData(this.getClass()
+				.getResourceAsStream("MissingRangesForDates.drl"));
+
+		AnalyticsData data = AnalyticsDataFactory.getAnalyticsData();
+		session.setGlobal("data", data);
+
+		StatelessSessionResult sessionResult = session
+				.executeWithResults(testData);
+
+		Iterator iter = sessionResult.iterateObjects();
+
+		Set<String> rulesThatHadErrors = new HashSet<String>();
+		while (iter.hasNext()) {
+			Object o = (Object) iter.next();
+			if (o instanceof Gap) {
+				rulesThatHadErrors.add(((Gap) o).getRuleName());
+			}
+			// System.out.println(o);
+		}
+
+		assertTrue(rulesThatHadErrors.remove("Date gap rule 4b"));
+		assertTrue(rulesThatHadErrors.remove("Date gap rule 5b"));
+
+		if (!rulesThatHadErrors.isEmpty()) {
+			for (String string : rulesThatHadErrors) {
+				fail("Rule " + string + " caused an error.");
+			}
+		}
+	}
+
 	public void testEqualAndGreaterThan() throws Exception {
 		StatelessSession session = getStatelessSession(this.getClass()
 				.getResourceAsStream("rangeChecks/Dates.drl"));
@@ -109,12 +122,13 @@
 			// System.out.println(o);
 		}
 
-		assertTrue(rulesThatHadErrors.remove("Date range 5b, has gap"));
-		assertTrue(rulesThatHadErrors.remove("Date range 16b, has gap"));
+		assertTrue(rulesThatHadErrors.remove("Date gap rule 1"));
+		assertTrue(rulesThatHadErrors.remove("Date gap rule 7b"));
+		assertTrue(rulesThatHadErrors.remove("Date gap rule 3"));
 
 		if (!rulesThatHadErrors.isEmpty()) {
 			for (String string : rulesThatHadErrors) {
-				fail("Rule " + string + " fired.");
+				fail("Rule " + string + " caused an error.");
 			}
 		}
 	}
@@ -146,12 +160,13 @@
 			// System.out.println(o);
 		}
 
-		assertTrue(rulesThatHadErrors.remove("Date range 6b, has gap"));
-		assertTrue(rulesThatHadErrors.remove("Date range 17b, has gap"));
+		assertTrue(rulesThatHadErrors.remove("Date gap rule 1"));
+		assertTrue(rulesThatHadErrors.remove("Date gap rule 6b"));
+		assertTrue(rulesThatHadErrors.remove("Date gap rule 2"));
 
 		if (!rulesThatHadErrors.isEmpty()) {
 			for (String string : rulesThatHadErrors) {
-				fail("Rule " + string + " fired.");
+				fail("Rule " + string + " caused an error.");
 			}
 		}
 	}

Modified: labs/jbossrules/trunk/experimental/drools-analytics/src/test/java/org/drools/analytics/RangeCheckDoublesTest.java
===================================================================
--- labs/jbossrules/trunk/experimental/drools-analytics/src/test/java/org/drools/analytics/RangeCheckDoublesTest.java	2007-09-26 08:22:02 UTC (rev 15374)
+++ labs/jbossrules/trunk/experimental/drools-analytics/src/test/java/org/drools/analytics/RangeCheckDoublesTest.java	2007-09-26 08:47:48 UTC (rev 15375)
@@ -12,20 +12,20 @@
 import org.drools.analytics.result.Gap;
 import org.drools.base.RuleNameMatchesAgendaFilter;
 
-
 /**
  * 
  * @author Toni Rikkola
- *
+ * 
  */
 public class RangeCheckDoublesTest extends TestBase {
 
-	public void testSmallerAndGreaterThan() throws Exception {
+	public void testSmallerOrEqual() throws Exception {
 		StatelessSession session = getStatelessSession(this.getClass()
 				.getResourceAsStream("rangeChecks/Doubles.drl"));
 
-		session.setAgendaFilter(new RuleNameMatchesAgendaFilter(
-				"Range check for doubles, smaller and greater than"));
+		session
+				.setAgendaFilter(new RuleNameMatchesAgendaFilter(
+						"Range check for doubles, if smaller than or equal is missing"));
 
 		Collection<? extends Object> testData = getTestData(this.getClass()
 				.getResourceAsStream("MissingRangesForDoubles.drl"));
@@ -33,7 +33,8 @@
 		AnalyticsData data = AnalyticsDataFactory.getAnalyticsData();
 		session.setGlobal("data", data);
 
-		StatelessSessionResult sessionResult = session.executeWithResults(testData);
+		StatelessSessionResult sessionResult = session
+				.executeWithResults(testData);
 
 		Iterator iter = sessionResult.iterateObjects();
 
@@ -46,34 +47,8 @@
 			// System.out.println(o);
 		}
 
-		assertTrue(rulesThatHadErrors.remove("Double range 1a, has gap"));
-		assertTrue(rulesThatHadErrors.remove("Double range 2a, has gap"));
-		assertTrue(rulesThatHadErrors.remove("Double range 3a, has gap"));
-		assertTrue(rulesThatHadErrors.remove("Double range 4a, has gap"));
-		assertTrue(rulesThatHadErrors.remove("Double range 7a, has gap"));
-		assertTrue(rulesThatHadErrors.remove("Double range 7b, has gap"));
-		assertTrue(rulesThatHadErrors.remove("Double range 8a, has gap"));
-		assertTrue(rulesThatHadErrors.remove("Double range 8b, has gap"));
-		assertTrue(rulesThatHadErrors.remove("Double range 9a, has gap"));
-		assertTrue(rulesThatHadErrors.remove("Double range 9b, has gap"));
-		assertTrue(rulesThatHadErrors.remove("Double range 10a, has gap"));
-		assertTrue(rulesThatHadErrors.remove("Double range 10b, has gap"));
-		assertTrue(rulesThatHadErrors.remove("Double range 11a, has gap"));
-		assertTrue(rulesThatHadErrors.remove("Double range 11b, has gap"));
-		assertTrue(rulesThatHadErrors.remove("Double range 12a, has gap"));
-		assertTrue(rulesThatHadErrors.remove("Double range 13a, has gap"));
-		assertTrue(rulesThatHadErrors.remove("Double range 14a, has gap"));
-		assertTrue(rulesThatHadErrors.remove("Double range 15a, has gap"));
-		assertTrue(rulesThatHadErrors.remove("Double range 18a, has gap"));
-		assertTrue(rulesThatHadErrors.remove("Double range 18b, has gap"));
-		assertTrue(rulesThatHadErrors.remove("Double range 19a, has gap"));
-		assertTrue(rulesThatHadErrors.remove("Double range 19b, has gap"));
-		assertTrue(rulesThatHadErrors.remove("Double range 20a, has gap"));
-		assertTrue(rulesThatHadErrors.remove("Double range 20b, has gap"));
-		assertTrue(rulesThatHadErrors.remove("Double range 21a, has gap"));
-		assertTrue(rulesThatHadErrors.remove("Double range 21b, has gap"));
-		assertTrue(rulesThatHadErrors.remove("Double range 22a, has gap"));
-		assertTrue(rulesThatHadErrors.remove("Double range 22b, has gap"));
+		assertTrue(rulesThatHadErrors.remove("Double gap rule 4a"));
+		assertTrue(rulesThatHadErrors.remove("Double gap rule 5a"));
 
 		if (!rulesThatHadErrors.isEmpty()) {
 			for (String string : rulesThatHadErrors) {
@@ -82,6 +57,44 @@
 		}
 	}
 
+	public void testGreaterOrEqual() throws Exception {
+		StatelessSession session = getStatelessSession(this.getClass()
+				.getResourceAsStream("rangeChecks/Doubles.drl"));
+
+		session
+				.setAgendaFilter(new RuleNameMatchesAgendaFilter(
+						"Range check for doubles, if greater than or equal is missing"));
+
+		Collection<? extends Object> testData = getTestData(this.getClass()
+				.getResourceAsStream("MissingRangesForDoubles.drl"));
+
+		AnalyticsData data = AnalyticsDataFactory.getAnalyticsData();
+		session.setGlobal("data", data);
+
+		StatelessSessionResult sessionResult = session
+				.executeWithResults(testData);
+
+		Iterator iter = sessionResult.iterateObjects();
+
+		Set<String> rulesThatHadErrors = new HashSet<String>();
+		while (iter.hasNext()) {
+			Object o = (Object) iter.next();
+			if (o instanceof Gap) {
+				rulesThatHadErrors.add(((Gap) o).getRuleName());
+			}
+			// System.out.println(o);
+		}
+
+		assertTrue(rulesThatHadErrors.remove("Double gap rule 4b"));
+		assertTrue(rulesThatHadErrors.remove("Double gap rule 5b"));
+
+		if (!rulesThatHadErrors.isEmpty()) {
+			for (String string : rulesThatHadErrors) {
+				fail("Rule " + string + " caused an error.");
+			}
+		}
+	}
+
 	public void testEqualAndGreaterThan() throws Exception {
 		StatelessSession session = getStatelessSession(this.getClass()
 				.getResourceAsStream("rangeChecks/Doubles.drl"));
@@ -95,7 +108,8 @@
 		AnalyticsData data = AnalyticsDataFactory.getAnalyticsData();
 		session.setGlobal("data", data);
 
-		StatelessSessionResult sessionResult = session.executeWithResults(testData);
+		StatelessSessionResult sessionResult = session
+				.executeWithResults(testData);
 
 		Iterator iter = sessionResult.iterateObjects();
 
@@ -107,13 +121,15 @@
 			}
 			// System.out.println(o);
 		}
-		
-		assertTrue(rulesThatHadErrors.remove("Double range 5b, has gap"));
-		assertTrue(rulesThatHadErrors.remove("Double range 16b, has gap"));
 
+		assertTrue(rulesThatHadErrors.remove("Double gap rule 1"));
+		assertTrue(rulesThatHadErrors.remove("Double gap rule 7b"));
+		assertTrue(rulesThatHadErrors.remove("Double gap rule 3"));
+		assertTrue(rulesThatHadErrors.remove("Double gap rule 9b"));
+
 		if (!rulesThatHadErrors.isEmpty()) {
 			for (String string : rulesThatHadErrors) {
-				fail("Rule " + string + " fired.");
+				fail("Rule " + string + " caused an error.");
 			}
 		}
 	}
@@ -131,7 +147,8 @@
 		AnalyticsData data = AnalyticsDataFactory.getAnalyticsData();
 		session.setGlobal("data", data);
 
-		StatelessSessionResult sessionResult = session.executeWithResults(testData);
+		StatelessSessionResult sessionResult = session
+				.executeWithResults(testData);
 
 		Iterator iter = sessionResult.iterateObjects();
 
@@ -143,14 +160,131 @@
 			}
 			// System.out.println(o);
 		}
-		
-		assertTrue(rulesThatHadErrors.remove("Double range 6b, has gap"));
-		assertTrue(rulesThatHadErrors.remove("Double range 17b, has gap"));
 
+		assertTrue(rulesThatHadErrors.remove("Double gap rule 1"));
+		assertTrue(rulesThatHadErrors.remove("Double gap rule 6b"));
+		assertTrue(rulesThatHadErrors.remove("Double gap rule 2"));
+		assertTrue(rulesThatHadErrors.remove("Double gap rule 9a"));
+
 		if (!rulesThatHadErrors.isEmpty()) {
 			for (String string : rulesThatHadErrors) {
-				fail("Rule " + string + " fired.");
+				fail("Rule " + string + " caused an error.");
 			}
 		}
 	}
+
+	/*
+	 * public void testSmallerAndGreaterThan() throws Exception {
+	 * StatelessSession session = getStatelessSession(this.getClass()
+	 * .getResourceAsStream("rangeChecks/Doubles.drl"));
+	 * 
+	 * session.setAgendaFilter(new RuleNameMatchesAgendaFilter( "Range check for
+	 * doubles, smaller and greater than"));
+	 * 
+	 * Collection<? extends Object> testData = getTestData(this.getClass()
+	 * .getResourceAsStream("MissingRangesForDoubles.drl"));
+	 * 
+	 * AnalyticsData data = AnalyticsDataFactory.getAnalyticsData();
+	 * session.setGlobal("data", data);
+	 * 
+	 * StatelessSessionResult sessionResult =
+	 * session.executeWithResults(testData);
+	 * 
+	 * Iterator iter = sessionResult.iterateObjects();
+	 * 
+	 * Set<String> rulesThatHadErrors = new HashSet<String>(); while
+	 * (iter.hasNext()) { Object o = (Object) iter.next(); if (o instanceof Gap) {
+	 * rulesThatHadErrors.add(((Gap) o).getRuleName()); } //
+	 * System.out.println(o); }
+	 * 
+	 * assertTrue(rulesThatHadErrors.remove("Double range 1a, has gap"));
+	 * assertTrue(rulesThatHadErrors.remove("Double range 2a, has gap"));
+	 * assertTrue(rulesThatHadErrors.remove("Double range 3a, has gap"));
+	 * assertTrue(rulesThatHadErrors.remove("Double range 4a, has gap"));
+	 * assertTrue(rulesThatHadErrors.remove("Double range 7a, has gap"));
+	 * assertTrue(rulesThatHadErrors.remove("Double range 7b, has gap"));
+	 * assertTrue(rulesThatHadErrors.remove("Double range 8a, has gap"));
+	 * assertTrue(rulesThatHadErrors.remove("Double range 8b, has gap"));
+	 * assertTrue(rulesThatHadErrors.remove("Double range 9a, has gap"));
+	 * assertTrue(rulesThatHadErrors.remove("Double range 9b, has gap"));
+	 * assertTrue(rulesThatHadErrors.remove("Double range 10a, has gap"));
+	 * assertTrue(rulesThatHadErrors.remove("Double range 10b, has gap"));
+	 * assertTrue(rulesThatHadErrors.remove("Double range 11a, has gap"));
+	 * assertTrue(rulesThatHadErrors.remove("Double range 11b, has gap"));
+	 * assertTrue(rulesThatHadErrors.remove("Double range 12a, has gap"));
+	 * assertTrue(rulesThatHadErrors.remove("Double range 13a, has gap"));
+	 * assertTrue(rulesThatHadErrors.remove("Double range 14a, has gap"));
+	 * assertTrue(rulesThatHadErrors.remove("Double range 15a, has gap"));
+	 * assertTrue(rulesThatHadErrors.remove("Double range 18a, has gap"));
+	 * assertTrue(rulesThatHadErrors.remove("Double range 18b, has gap"));
+	 * assertTrue(rulesThatHadErrors.remove("Double range 19a, has gap"));
+	 * assertTrue(rulesThatHadErrors.remove("Double range 19b, has gap"));
+	 * assertTrue(rulesThatHadErrors.remove("Double range 20a, has gap"));
+	 * assertTrue(rulesThatHadErrors.remove("Double range 20b, has gap"));
+	 * assertTrue(rulesThatHadErrors.remove("Double range 21a, has gap"));
+	 * assertTrue(rulesThatHadErrors.remove("Double range 21b, has gap"));
+	 * assertTrue(rulesThatHadErrors.remove("Double range 22a, has gap"));
+	 * assertTrue(rulesThatHadErrors.remove("Double range 22b, has gap"));
+	 * 
+	 * if (!rulesThatHadErrors.isEmpty()) { for (String string :
+	 * rulesThatHadErrors) { fail("Rule " + string + " caused an error."); } } }
+	 * 
+	 * public void testEqualAndGreaterThan() throws Exception { StatelessSession
+	 * session = getStatelessSession(this.getClass()
+	 * .getResourceAsStream("rangeChecks/Doubles.drl"));
+	 * 
+	 * session.setAgendaFilter(new RuleNameMatchesAgendaFilter( "Range check for
+	 * doubles, equal and greater than"));
+	 * 
+	 * Collection<? extends Object> testData = getTestData(this.getClass()
+	 * .getResourceAsStream("MissingRangesForDoubles.drl"));
+	 * 
+	 * AnalyticsData data = AnalyticsDataFactory.getAnalyticsData();
+	 * session.setGlobal("data", data);
+	 * 
+	 * StatelessSessionResult sessionResult =
+	 * session.executeWithResults(testData);
+	 * 
+	 * Iterator iter = sessionResult.iterateObjects();
+	 * 
+	 * Set<String> rulesThatHadErrors = new HashSet<String>(); while
+	 * (iter.hasNext()) { Object o = (Object) iter.next(); if (o instanceof Gap) {
+	 * rulesThatHadErrors.add(((Gap) o).getRuleName()); } //
+	 * System.out.println(o); }
+	 * 
+	 * assertTrue(rulesThatHadErrors.remove("Double range 5b, has gap"));
+	 * assertTrue(rulesThatHadErrors.remove("Double range 16b, has gap"));
+	 * 
+	 * if (!rulesThatHadErrors.isEmpty()) { for (String string :
+	 * rulesThatHadErrors) { fail("Rule " + string + " fired."); } } }
+	 * 
+	 * public void testEqualAndSmallerThan() throws Exception { StatelessSession
+	 * session = getStatelessSession(this.getClass()
+	 * .getResourceAsStream("rangeChecks/Doubles.drl"));
+	 * 
+	 * session.setAgendaFilter(new RuleNameMatchesAgendaFilter( "Range check for
+	 * doubles, equal and smaller than"));
+	 * 
+	 * Collection<? extends Object> testData = getTestData(this.getClass()
+	 * .getResourceAsStream("MissingRangesForDoubles.drl"));
+	 * 
+	 * AnalyticsData data = AnalyticsDataFactory.getAnalyticsData();
+	 * session.setGlobal("data", data);
+	 * 
+	 * StatelessSessionResult sessionResult =
+	 * session.executeWithResults(testData);
+	 * 
+	 * Iterator iter = sessionResult.iterateObjects();
+	 * 
+	 * Set<String> rulesThatHadErrors = new HashSet<String>(); while
+	 * (iter.hasNext()) { Object o = (Object) iter.next(); if (o instanceof Gap) {
+	 * rulesThatHadErrors.add(((Gap) o).getRuleName()); } //
+	 * System.out.println(o); }
+	 * 
+	 * assertTrue(rulesThatHadErrors.remove("Double range 6b, has gap"));
+	 * assertTrue(rulesThatHadErrors.remove("Double range 17b, has gap"));
+	 * 
+	 * if (!rulesThatHadErrors.isEmpty()) { for (String string :
+	 * rulesThatHadErrors) { fail("Rule " + string + " fired."); } } }
+	 */
 }

Modified: labs/jbossrules/trunk/experimental/drools-analytics/src/test/java/org/drools/analytics/RangeCheckIntegersTest.java
===================================================================
--- labs/jbossrules/trunk/experimental/drools-analytics/src/test/java/org/drools/analytics/RangeCheckIntegersTest.java	2007-09-26 08:22:02 UTC (rev 15374)
+++ labs/jbossrules/trunk/experimental/drools-analytics/src/test/java/org/drools/analytics/RangeCheckIntegersTest.java	2007-09-26 08:47:48 UTC (rev 15375)
@@ -19,12 +19,13 @@
  */
 public class RangeCheckIntegersTest extends TestBase {
 
-	public void testSmallerAndGreaterThan() throws Exception {
+	public void testSmallerOrEqual() throws Exception {
 		StatelessSession session = getStatelessSession(this.getClass()
 				.getResourceAsStream("rangeChecks/Integers.drl"));
 
-		session.setAgendaFilter(new RuleNameMatchesAgendaFilter(
-				"Range check for integers, smaller and greater than"));
+		session
+				.setAgendaFilter(new RuleNameMatchesAgendaFilter(
+						"Range check for integers, if smaller than or equal is missing"));
 
 		Collection<? extends Object> testData = getTestData(this.getClass()
 				.getResourceAsStream("MissingRangesForInts.drl"));
@@ -32,7 +33,8 @@
 		AnalyticsData data = AnalyticsDataFactory.getAnalyticsData();
 		session.setGlobal("data", data);
 
-		StatelessSessionResult sessionResult = session.executeWithResults(testData);
+		StatelessSessionResult sessionResult = session
+				.executeWithResults(testData);
 
 		Iterator iter = sessionResult.iterateObjects();
 
@@ -42,33 +44,11 @@
 			if (o instanceof Gap) {
 				rulesThatHadErrors.add(((Gap) o).getRuleName());
 			}
-//			System.out.println(o);
+			// System.out.println(o);
 		}
 
-		assertTrue(rulesThatHadErrors.remove("Missing int range 1a, warning"));
-		assertTrue(rulesThatHadErrors.remove("Missing int range 1b, warning"));
-		assertTrue(rulesThatHadErrors.remove("Missing int range 2a, warning"));
-		assertTrue(rulesThatHadErrors.remove("Missing int range 2b, warning"));
-		assertTrue(rulesThatHadErrors.remove("Missing int range 3a, warning"));
-		assertTrue(rulesThatHadErrors.remove("Missing int range 3b, warning"));
-		assertTrue(rulesThatHadErrors.remove("Missing int range 4a, warning"));
-		assertTrue(rulesThatHadErrors.remove("Missing int range 4b, warning"));
-		assertTrue(rulesThatHadErrors
-				.remove("Missing not int range 7a, warning"));
-		assertTrue(rulesThatHadErrors
-				.remove("Missing not int range 7b, warning"));
-		assertTrue(rulesThatHadErrors
-				.remove("Missing not int range 8a, warning"));
-		assertTrue(rulesThatHadErrors
-				.remove("Missing not int range 8b, warning"));
-		assertTrue(rulesThatHadErrors
-				.remove("Missing not int range 9a, warning"));
-		assertTrue(rulesThatHadErrors
-				.remove("Missing not int range 9b, warning"));
-		assertTrue(rulesThatHadErrors
-				.remove("Missing not int range 10a, warning"));
-		assertTrue(rulesThatHadErrors
-				.remove("Missing not int range 10b, warning"));
+		assertTrue(rulesThatHadErrors.remove("Integer gap rule 4a"));
+		assertTrue(rulesThatHadErrors.remove("Integer gap rule 5a"));
 
 		if (!rulesThatHadErrors.isEmpty()) {
 			for (String string : rulesThatHadErrors) {
@@ -77,6 +57,44 @@
 		}
 	}
 
+	public void testGreaterOrEqual() throws Exception {
+		StatelessSession session = getStatelessSession(this.getClass()
+				.getResourceAsStream("rangeChecks/Integers.drl"));
+
+		session
+				.setAgendaFilter(new RuleNameMatchesAgendaFilter(
+						"Range check for integers, if greater than or equal is missing"));
+
+		Collection<? extends Object> testData = getTestData(this.getClass()
+				.getResourceAsStream("MissingRangesForInts.drl"));
+
+		AnalyticsData data = AnalyticsDataFactory.getAnalyticsData();
+		session.setGlobal("data", data);
+
+		StatelessSessionResult sessionResult = session
+				.executeWithResults(testData);
+
+		Iterator iter = sessionResult.iterateObjects();
+
+		Set<String> rulesThatHadErrors = new HashSet<String>();
+		while (iter.hasNext()) {
+			Object o = (Object) iter.next();
+			if (o instanceof Gap) {
+				rulesThatHadErrors.add(((Gap) o).getRuleName());
+			}
+			// System.out.println(o);
+		}
+
+		assertTrue(rulesThatHadErrors.remove("Integer gap rule 4b"));
+		assertTrue(rulesThatHadErrors.remove("Integer gap rule 5b"));
+
+		if (!rulesThatHadErrors.isEmpty()) {
+			for (String string : rulesThatHadErrors) {
+				fail("Rule " + string + " caused an error.");
+			}
+		}
+	}
+
 	public void testEqualAndGreaterThan() throws Exception {
 		StatelessSession session = getStatelessSession(this.getClass()
 				.getResourceAsStream("rangeChecks/Integers.drl"));
@@ -90,7 +108,8 @@
 		AnalyticsData data = AnalyticsDataFactory.getAnalyticsData();
 		session.setGlobal("data", data);
 
-		StatelessSessionResult sessionResult = session.executeWithResults(testData);
+		StatelessSessionResult sessionResult = session
+				.executeWithResults(testData);
 
 		Iterator iter = sessionResult.iterateObjects();
 
@@ -103,13 +122,13 @@
 			// System.out.println(o);
 		}
 
-		assertTrue(rulesThatHadErrors.remove("Missing int range 5b, warning"));
-		assertTrue(rulesThatHadErrors
-				.remove("Missing not int range 11b, warning"));
+		assertTrue(rulesThatHadErrors.remove("Integer gap rule 1"));
+		assertTrue(rulesThatHadErrors.remove("Integer gap rule 7b"));
+		assertTrue(rulesThatHadErrors.remove("Integer gap rule 3"));
 
 		if (!rulesThatHadErrors.isEmpty()) {
 			for (String string : rulesThatHadErrors) {
-				fail("Rule " + string + " fired.");
+				fail("Rule " + string + " caused an error.");
 			}
 		}
 	}
@@ -127,7 +146,8 @@
 		AnalyticsData data = AnalyticsDataFactory.getAnalyticsData();
 		session.setGlobal("data", data);
 
-		StatelessSessionResult sessionResult = session.executeWithResults(testData);
+		StatelessSessionResult sessionResult = session
+				.executeWithResults(testData);
 
 		Iterator iter = sessionResult.iterateObjects();
 
@@ -139,13 +159,14 @@
 			}
 			// System.out.println(o);
 		}
-		assertTrue(rulesThatHadErrors.remove("Missing int range 6b, warning"));
-		assertTrue(rulesThatHadErrors
-				.remove("Missing not int range 12b, warning"));
 
+		assertTrue(rulesThatHadErrors.remove("Integer gap rule 1"));
+		assertTrue(rulesThatHadErrors.remove("Integer gap rule 6b"));
+		assertTrue(rulesThatHadErrors.remove("Integer gap rule 2"));
+
 		if (!rulesThatHadErrors.isEmpty()) {
 			for (String string : rulesThatHadErrors) {
-				fail("Rule " + string + " fired.");
+				fail("Rule " + string + " caused an error.");
 			}
 		}
 	}

Modified: labs/jbossrules/trunk/experimental/drools-analytics/src/test/resources/org/drools/analytics/Misc.drl
===================================================================
--- labs/jbossrules/trunk/experimental/drools-analytics/src/test/resources/org/drools/analytics/Misc.drl	2007-09-26 08:22:02 UTC (rev 15374)
+++ labs/jbossrules/trunk/experimental/drools-analytics/src/test/resources/org/drools/analytics/Misc.drl	2007-09-26 08:47:48 UTC (rev 15375)
@@ -1,4 +1,4 @@
-package com.pat.the.pattern
+package com.misc.someData
 
 import com.sample.DroolsTest.Message;
 
@@ -75,4 +75,4 @@
 		NumbersInPattern( x == 60 )
 	then
 		System.out.println( "Test" );
-end
+end
\ No newline at end of file

Added: labs/jbossrules/trunk/experimental/drools-analytics/src/test/resources/org/drools/analytics/Misc2.drl
===================================================================
--- labs/jbossrules/trunk/experimental/drools-analytics/src/test/resources/org/drools/analytics/Misc2.drl	                        (rev 0)
+++ labs/jbossrules/trunk/experimental/drools-analytics/src/test/resources/org/drools/analytics/Misc2.drl	2007-09-26 08:47:48 UTC (rev 15375)
@@ -0,0 +1,130 @@
+package com.misc.missingRanges
+
+import com.sample.DroolsTest.Message;
+
+
+rule "Check time 1"
+	when
+		    Time( startDate > "1-Jan-2007" )
+	then
+		System.out.println( "Test" );
+end
+
+rule "Check time 2"
+	when
+		    Foo( startDate <= "10-Jan-2007" )
+	then
+		System.out.println( "Test" );
+end
+
+rule "Check time 3"
+	when
+		    Foo( startDate > "10-Jan-2007" )
+	then
+		System.out.println( "Test" );
+end
+
+rule "Check time 4"
+	when
+		    Foo( startDate < "20-Jan-2007" )
+	then
+		System.out.println( "Test" );
+end
+
+rule "Check time 5"
+	when
+		    Foo( startDate > "27-Jan-2007" )
+	then
+		System.out.println( "Test" );
+end
+
+rule "Check time 6"
+	when
+		    Foo( startDate <= "27-Oct-2007" )
+	then
+		System.out.println( "Test" );
+end
+
+rule "Check time 7"
+	when
+		    Foo( endDate < "10-Jan-2007" )
+	then
+		System.out.println( "Test" );
+end
+
+rule "Check time 8"
+	when
+		    Foo( endDate == "11-Jan-2007" )
+	then
+		System.out.println( "Test" );
+end
+
+rule "Check time 9"
+	when
+		    Foo( endDate >= "11-Jan-2007" )
+	then
+		System.out.println( "Test" );
+end
+
+rule "Check time 10"
+	when
+		    Foo( endDate < "20-Jan-2007" )
+	then
+		System.out.println( "Test" );
+end
+
+rule "Check time 11"
+	when
+		    Foo( endDate >= "20-Jan-2002" )
+	then
+		System.out.println( "Test" );
+end
+
+rule "Check time 12"
+	when
+		    Foo( endDate < "13-Oct-2007" )
+	then
+		System.out.println( "Test" );
+end
+
+rule "Check time 13"
+	when
+		    Foo( endDate == "13-Oct-2002" )
+	then
+		System.out.println( "Test" );
+end
+
+rule "Check time 14"
+	when
+		    Foo( endDate == "14-Oct-2007" )
+	then
+		System.out.println( "Test" );
+end
+
+rule "Check time 15"
+	when
+		    Foo( endDate == "15-Oct-2002" )
+	then
+		System.out.println( "Test" );
+end
+
+rule "Check time 16"
+	when
+		    Foo( endDate == "25-Oct-2007" )
+	then
+		System.out.println( "Test" );
+end
+
+rule "Check time 17"
+	when
+		    Foo( endDate < "26-Oct-2002" )
+	then
+		System.out.println( "Test" );
+end
+
+rule "Check time 18"
+	when
+		    Foo( endDate >= "27-Oct-2007" )
+	then
+		System.out.println( "Test" );
+end

Added: labs/jbossrules/trunk/experimental/drools-analytics/src/test/resources/org/drools/analytics/Misc3.drl
===================================================================
--- labs/jbossrules/trunk/experimental/drools-analytics/src/test/resources/org/drools/analytics/Misc3.drl	                        (rev 0)
+++ labs/jbossrules/trunk/experimental/drools-analytics/src/test/resources/org/drools/analytics/Misc3.drl	2007-09-26 08:47:48 UTC (rev 15375)
@@ -0,0 +1,36 @@
+package com.misc.missingRanges
+
+import com.sample.DroolsTest.Message;
+
+
+rule "Some rule 1"
+	when
+		    SuperPattern( temp > 1, bar <= 10.0, a == "first string", b == "second string" )
+	then
+		System.out.println( "Test" );
+end
+
+rule "Some rule 2"
+	when
+		    SuperPattern( temp == 1, a == "first string", b == "second string" )
+	then
+		System.out.println( "Test" );
+end
+
+rule "Some rule 3"
+	when
+		    sp: SuperPattern( temp < 1, bar == 10.0, a == "first string" )
+		    LesserPattern(  group contains sp )
+	then
+		System.out.println( "Test" );
+end
+
+rule "Some rule 4"
+	when
+		    SuperPattern( temp < 10, bar >= -1.0, a == "first string", b == "second string" )
+		    SuperPattern( temp < 10 a == "first string", b == "second string" )
+		    SuperPattern( temp < 10, a == "first string", b == "second string" )
+		    SuperPattern( temp < 10, a == "first string", b == "second string" )
+	then
+		System.out.println( "Test" );
+end
\ No newline at end of file

Modified: labs/jbossrules/trunk/experimental/drools-analytics/src/test/resources/org/drools/analytics/MissingRangesForDates.drl
===================================================================
--- labs/jbossrules/trunk/experimental/drools-analytics/src/test/resources/org/drools/analytics/MissingRangesForDates.drl	2007-09-26 08:22:02 UTC (rev 15374)
+++ labs/jbossrules/trunk/experimental/drools-analytics/src/test/resources/org/drools/analytics/MissingRangesForDates.drl	2007-09-26 08:47:48 UTC (rev 15375)
@@ -2,6 +2,126 @@
 
 import com.sample.DroolsTest.Message;
 
+rule "Date gap rule 1"
+	when
+		DatePattern1( value == "27-Oct-2007" )
+	then
+		# gap > 10 <.
+end
+
+rule "Date gap rule 2"
+	when
+		DatePattern2( value >= "27-Oct-2000" )
+	then
+		# gap < 15.
+end
+
+rule "Date gap rule 3"
+	when
+		DatePattern3( value <= "27-Oct-2004" )
+	then
+		# gap > 15.
+end
+
+rule "Date gap rule 4a"
+	when
+		DatePattern4( value > "27-Oct-2001" )
+	then
+		# gap == 25.
+end
+
+rule "Date gap rule 4b"
+	when
+		DatePattern4( value < "27-Oct-2001" )
+	then
+		# gap == 25.
+end
+
+rule "Date gap rule 5a"
+	when
+		DatePattern5( value > "20-Oct-2007" )
+	then
+		# gap 100 > x > 50.
+end
+
+rule "Date gap rule 5b"
+	when
+		DatePattern5( value < "10-Oct-2007" )
+	then
+		# gap 100 > x > 50.
+end
+
+rule "Date gap rule 6a"
+	when
+		DatePattern6( value > "28-Oct-2007" )
+	then
+		# gap < 350.
+end
+
+rule "Date gap rule 6b"
+	when
+		DatePattern6( value == "28-Oct-2007" )
+	then
+		# gap < 350.
+end
+
+rule "Date gap rule 7a"
+	when
+		DatePattern7( value < "27-Jan-2007" )
+	then
+		# gap > 55.
+end
+
+rule "Date gap rule 7b"
+	when
+		DatePattern7( value == "27-Jan-2007" )
+	then
+		# gap > 55.
+end
+
+rule "Date gap rule 8a"
+	when
+		DatePattern8( value < "11-Jan-2007" )
+	then
+		# No gap
+end
+
+rule "Date gap rule 8b"
+	when
+		DatePattern8( value == "11-Jan-2007" )
+	then
+		# No gap
+end
+
+rule "Date gap rule 8c"
+	when
+		DatePattern8( value > "11-Jan-2007" )
+	then
+		# No gap
+end
+
+rule "Date gap rule 9a"
+	when
+		DatePattern9( value <= "14-Jan-2007" )
+	then
+		# No gap
+end
+
+rule "Date gap rule 9b"
+	when
+		DatePattern9( value == "15-Jan-2007" )
+	then
+		# No gap
+end
+
+rule "Date gap rule 9c"
+	when
+		DatePattern9( value >= "16-Jan-2007" )
+	then
+		# No gap
+end
+
+/*
 #
 # These rules have gaps
 #
@@ -327,19 +447,4 @@
 	then
 		System.out.println( "Test" );
 end
-/* TODO: Rules to cover these kind of situations.
-rule "Date range 26a, no gap"
-	when
-		    Foo26( value > "03-Oct-2002" )
-	then
-		System.out.println( "Test" );
-end
-
-rule "Date range 26b, no gap"
-	when
-		    Foo26( value < "27-Oct-2007" )
-	then
-		System.out.println( "Test" );
-end
-*/
-
+*/
\ No newline at end of file

Modified: labs/jbossrules/trunk/experimental/drools-analytics/src/test/resources/org/drools/analytics/MissingRangesForDoubles.drl
===================================================================
--- labs/jbossrules/trunk/experimental/drools-analytics/src/test/resources/org/drools/analytics/MissingRangesForDoubles.drl	2007-09-26 08:22:02 UTC (rev 15374)
+++ labs/jbossrules/trunk/experimental/drools-analytics/src/test/resources/org/drools/analytics/MissingRangesForDoubles.drl	2007-09-26 08:47:48 UTC (rev 15375)
@@ -2,6 +2,119 @@
 
 import com.sample.DroolsTest.Message;
 
+rule "Double gap rule 1"
+	when
+		DoublePattern1( value == 10.0 )
+	then
+		# gap > 10 <.
+end
+
+rule "Double gap rule 2"
+	when
+		DoublePattern2( value >= 15.0 )
+	then
+		# gap < 15.
+end
+
+rule "Double gap rule 3"
+	when
+		DoublePattern3( value <= 15.0 )
+	then
+		# gap > 15.
+end
+
+rule "Double gap rule 4a"
+	when
+		DoublePattern4( value > 25.0 )
+	then
+		# gap == 25.
+end
+
+rule "Double gap rule 4b"
+	when
+		DoublePattern4( value < 25.0 )
+	then
+		# gap == 25.
+end
+
+rule "Double gap rule 5a"
+	when
+		DoublePattern5( value > 100.0 )
+	then
+		# gap 100 > x > 50.
+end
+
+rule "Double gap rule 5b"
+	when
+		DoublePattern5( value < 50.0 )
+	then
+		# gap 100 > x > 50.
+end
+
+rule "Double gap rule 6a"
+	when
+		DoublePattern6( value > 350.0 )
+	then
+		# gap < 350.
+end
+
+rule "Double gap rule 6b"
+	when
+		DoublePattern6( value == 350.0 )
+	then
+		# gap < 350.
+end
+
+rule "Double gap rule 7a"
+	when
+		DoublePattern7( value < 55.0 )
+	then
+		# gap > 55.
+end
+
+rule "Double gap rule 7b"
+	when
+		DoublePattern7( value == 55.0 )
+	then
+		# gap > 55.
+end
+
+rule "Double gap rule 8a"
+	when
+		DoublePattern8( value < 333.0 )
+	then
+		# No gap
+end
+
+rule "Double gap rule 8b"
+	when
+		DoublePattern8( value == 333.0 )
+	then
+		# No gap
+end
+
+rule "Double gap rule 8c"
+	when
+		DoublePattern8( value > 333.0 )
+	then
+		# No gap
+end
+
+rule "Double gap rule 9a"
+	when
+		DoublePattern9( value >= 400.0 )
+	then
+		# gap 400 > x > 399 
+end
+
+rule "Double gap rule 9b"
+	when
+		DoublePattern9( value <= 399.0 )
+	then
+		# gap 400 > x > 399 
+end
+
+/*
 #
 # These rules have gaps
 #
@@ -348,4 +461,4 @@
 	then
 		System.out.println( "Test" );
 end
-
+*/

Modified: labs/jbossrules/trunk/experimental/drools-analytics/src/test/resources/org/drools/analytics/MissingRangesForInts.drl
===================================================================
--- labs/jbossrules/trunk/experimental/drools-analytics/src/test/resources/org/drools/analytics/MissingRangesForInts.drl	2007-09-26 08:22:02 UTC (rev 15374)
+++ labs/jbossrules/trunk/experimental/drools-analytics/src/test/resources/org/drools/analytics/MissingRangesForInts.drl	2007-09-26 08:47:48 UTC (rev 15375)
@@ -2,359 +2,121 @@
 
 import com.sample.DroolsTest.Message;
 
-#
-# These rules have gaps
-#
-rule "Missing int range 1a, warning"
+rule "Integer gap rule 1"
 	when
-		    Foo1warning( value > 42 )
+		IntegerPattern1( value == 10 )
 	then
-		System.out.println( "Test" );
+		# gap > 10 <.
 end
 
-rule "Missing int range 1b, warning"
+rule "Integer gap rule 2"
 	when
-		    Foo1warning( value < 42 )
+		IntegerPattern2( value >= 15 )
 	then
-		System.out.println( "Test" );
+		# gap < 15.
 end
 
-rule "Missing int range 2a, warning"
+rule "Integer gap rule 3"
 	when
-		    Foo2warning( value > 42 )
+		IntegerPattern3( value <= 15 )
 	then
-		System.out.println( "Test" );
+		# gap > 15.
 end
 
-rule "Missing int range 2b, warning"
+rule "Integer gap rule 4a"
 	when
-		    Foo2warning( value < 40 )
+		IntegerPattern4( value > 25 )
 	then
-		System.out.println( "Test" );
+		# gap == 25.
 end
 
-rule "Missing int range 3a, warning"
+rule "Integer gap rule 4b"
 	when
-		    Foo3warning( value >= 42 )
+		IntegerPattern4( value < 25 )
 	then
-		System.out.println( "Test" );
+		# gap == 25.
 end
 
-rule "Missing int range 3b, warning"
+rule "Integer gap rule 5a"
 	when
-		    Foo3warning( value < 40 )
+		IntegerPattern5( value > 100 )
 	then
-		System.out.println( "Test" );
+		# gap 100 > x > 50.
 end
 
-rule "Missing int range 4a, warning"
+rule "Integer gap rule 5b"
 	when
-		    Foo4warning( value > 42 )
+		IntegerPattern5( value < 50 )
 	then
-		System.out.println( "Test" );
+		# gap 100 > x > 50.
 end
 
-rule "Missing int range 4b, warning"
+rule "Integer gap rule 6a"
 	when
-		    Foo4warning( value <= 40 )
+		IntegerPattern6( value > 350 )
 	then
-		System.out.println( "Test" );
+		# gap < 350.
 end
 
-rule "Missing int range 5a, warning"
+rule "Integer gap rule 6b"
 	when
-		    Foo5warning( value > 40 )
+		IntegerPattern6( value == 350 )
 	then
-		System.out.println( "Test" );
+		# gap < 350.
 end
 
-rule "Missing int range 5b, warning"
+rule "Integer gap rule 7a"
 	when
-		    Foo5warning( value == 40 )
+		IntegerPattern7( value < 55 )
 	then
-		System.out.println( "Test" );
+		# gap > 55.
 end
 
-rule "Missing int range 6a, warning"
+rule "Integer gap rule 7b"
 	when
-		    Foo6warning( value < 40 )
+		IntegerPattern7( value == 55 )
 	then
-		System.out.println( "Test" );
+		# gap > 55.
 end
 
-rule "Missing int range 6b, warning"
+rule "Integer gap rule 8a"
 	when
-		    Foo6warning( value == 40 )
+		IntegerPattern8( value < 333 )
 	then
-		System.out.println( "Test" );
+		# No gap
 end
 
-#
-# These rules have gaps
-#
-rule "Missing not int range 7a, warning"
+rule "Integer gap rule 8b"
 	when
-		    not Foo7warning( value > 42 )
+		IntegerPattern8( value == 333 )
 	then
-		System.out.println( "Test" );
+		# No gap
 end
 
-rule "Missing not int range 7b, warning"
+rule "Integer gap rule 8c"
 	when
-		    not Foo7warning( value < 42 )
+		IntegerPattern8( value > 333 )
 	then
-		System.out.println( "Test" );
+		# No gap
 end
 
-rule "Missing not int range 8a, warning"
+rule "Integer gap rule 9a"
 	when
-		    not Foo8warning( value > 42 )
+		IntegerPattern9( value <= 122 )
 	then
-		System.out.println( "Test" );
+		# No gap
 end
 
-rule "Missing not int range 8b, warning"
+rule "Integer gap rule 9b"
 	when
-		    not Foo8warning( value < 40 )
+		IntegerPattern9( value == 123 )
 	then
-		System.out.println( "Test" );
+		# No gap
 end
 
-rule "Missing not int range 9a, warning"
+rule "Integer gap rule 9c"
 	when
-		    not Foo9warning( value >= 42 )
+		IntegerPattern9( value >= 124 )
 	then
-		System.out.println( "Test" );
-end
-
-rule "Missing not int range 9b, warning"
-	when
-		    not Foo9warning( value < 40 )
-	then
-		System.out.println( "Test" );
-end
-
-rule "Missing not int range 10a, warning"
-	when
-		    not Foo10warning( value > 42 )
-	then
-		System.out.println( "Test" );
-end
-
-rule "Missing not int range 10b, warning"
-	when
-		    not Foo10warning( value <= 40 )
-	then
-		System.out.println( "Test" );
-end
-
-rule "Missing not int range 11a, warning"
-	when
-		    not Foo11warning( value > 40 )
-	then
-		System.out.println( "Test" );
-end
-
-rule "Missing not int range 11b, warning"
-	when
-		    not Foo11warning( value == 40 )
-	then
-		System.out.println( "Test" );
-end
-
-rule "Missing not int range 12a, warning"
-	when
-		    not Foo12warning( value < 40 )
-	then
-		System.out.println( "Test" );
-end
-
-rule "Missing not int range 12b, warning"
-	when
-		    not Foo12warning( value == 40 )
-	then
-		System.out.println( "Test" );
-end
-
-#
-# These rules do not have gaps
-#
-rule "Missing int range 1a, ok"
-	when
-		    Foo1ok( value >= 42 )
-	then
-		System.out.println( "Test" );
-end
-
-rule "Missing int range 1b, ok"
-	when
-		    Foo1ok( value < 42 )
-	then
-		System.out.println( "Test" );
-end
-
-rule "Missing int range 2a, ok"
-	when
-		    Foo2ok( value > 40 )
-	then
-		System.out.println( "Test" );
-end
-
-rule "Missing int range 2b, ok"
-	when
-		    Foo2ok( value <= 40 )
-	then
-		System.out.println( "Test" );
-end
-
-rule "Missing int range 3a, ok"
-	when
-		    Foo3ok( value > 40 )
-	then
-		System.out.println( "Test" );
-end
-
-rule "Missing int range 3b, ok"
-	when
-		    Foo3ok( value == 40 )
-	then
-		System.out.println( "Test" );
-end
-
-rule "Missing int range 3c, ok"
-	when
-		    Foo3ok( value < 40 )
-	then
-		System.out.println( "Test" );
-end
-
-rule "Missing int range 4a, ok"
-	when
-		    Foo4ok( value == 40 )
-	then
-		System.out.println( "Test" );
-end
-rule "Missing int range 4b, ok"
-	when
-		    Foo4ok( value == 40 )
-	then
-		System.out.println( "Test" );
-end
-
-rule "Missing int range 5a, ok"
-	when
-		    Foo5ok( value > 41 )
-	then
-		System.out.println( "Test" );
-end
-
-rule "Missing int range 5b, ok"
-	when
-		    Foo5ok( value == 41 )
-	then
-		System.out.println( "Test" );
-end
-
-rule "Missing int range 5c, ok"
-	when
-		    Foo5ok( value == 40 )
-	then
-		System.out.println( "Test" );
-end
-
-rule "Missing int range 5d, ok"
-	when
-		    Foo5ok( value < 40 )
-	then
-		System.out.println( "Test" );
-end
-
-rule "Missing not int range 6a, ok"
-	when
-		    not Foo6ok( value >= 42 )
-	then
-		System.out.println( "Test" );
-end
-
-rule "Missing not int range 6b, ok"
-	when
-		    not Foo6ok( value < 42 )
-	then
-		System.out.println( "Test" );
-end
-
-rule "Missing not int range 7a, ok"
-	when
-		    not Foo7ok( value > 40 )
-	then
-		System.out.println( "Test" );
-end
-
-rule "Missing not int range 7b, ok"
-	when
-		    not Foo7ok( value <= 40 )
-	then
-		System.out.println( "Test" );
-end
-
-rule "Missing not int range 8a, ok"
-	when
-		    not Foo8ok( value > 40 )
-	then
-		System.out.println( "Test" );
-end
-
-rule "Missing not int range 8b, ok"
-	when
-		    not Foo8ok( value == 40 )
-	then
-		System.out.println( "Test" );
-end
-
-rule "Missing not int range 8c, ok"
-	when
-		    not Foo8ok( value < 40 )
-	then
-		System.out.println( "Test" );
-end
-
-rule "Missing not int range 9a, ok"
-	when
-		    not Foo4ok( value == 40 )
-	then
-		System.out.println( "Test" );
-end
-rule "Missing not int range 9b, ok"
-	when
-		    not Foo4ok( value == 40 )
-	then
-		System.out.println( "Test" );
-end
-
-rule "Missing not int range 10a, ok"
-	when
-		    not Foo10ok( value > 41 )
-	then
-		System.out.println( "Test" );
-end
-
-rule "Missing not int range 10b, ok"
-	when
-		    not Foo10ok( value == 41 )
-	then
-		System.out.println( "Test" );
-end
-
-rule "Missing not int range 10c, ok"
-	when
-		    not Foo10ok( value == 40 )
-	then
-		System.out.println( "Test" );
-end
-
-rule "Missing not int range 10d, ok"
-	when
-		    not Foo10ok( value < 40 )
-	then
-		System.out.println( "Test" );
+		# No gap
 end
\ No newline at end of file




More information about the jboss-svn-commits mailing list