[jboss-svn-commits] JBL Code SVN: r16912 - in labs/jbossrules/trunk/drools-analytics/src: test/java/org/drools/analytics/incoherence and 1 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Thu Nov 29 07:58:25 EST 2007


Author: Rikkola
Date: 2007-11-29 07:58:25 -0500 (Thu, 29 Nov 2007)
New Revision: 16912

Modified:
   labs/jbossrules/trunk/drools-analytics/src/main/resources/org/drools/analytics/incoherence/Restrictions.drl
   labs/jbossrules/trunk/drools-analytics/src/test/java/org/drools/analytics/incoherence/IncoherentRestrictionsTest.java
   labs/jbossrules/trunk/drools-analytics/src/test/resources/org/drools/analytics/incoherence/RestrictionsTest.drl
Log:
New incoherence tests for restrictions.

Modified: labs/jbossrules/trunk/drools-analytics/src/main/resources/org/drools/analytics/incoherence/Restrictions.drl
===================================================================
--- labs/jbossrules/trunk/drools-analytics/src/main/resources/org/drools/analytics/incoherence/Restrictions.drl	2007-11-29 11:44:48 UTC (rev 16911)
+++ labs/jbossrules/trunk/drools-analytics/src/main/resources/org/drools/analytics/incoherence/Restrictions.drl	2007-11-29 12:58:25 UTC (rev 16912)
@@ -29,7 +29,7 @@
 	when
 		$r1 :LiteralRestriction(
 			# Not >= and <=, because ( a <=, a >= ) works.
-			# And not < or > because they are handled in a separete rule. 
+			# And not < or > because they are handled in a separate rule. 
 			( operator != Operator.GREATER_OR_EQUAL || != Operator.LESS_OR_EQUAL || != Operator.LESS || != Operator.GREATER ) 
 		)
 		
@@ -43,6 +43,8 @@
 			eval( operator == MissingRange.getReversedOperator( $r1.getOperator() ))
 		)
 		
+		eval( $r1.compareValues( $r2 ) == 0 )
+		
 		# There is a problem if both of these are in the same PatternPossibility.
 		$pp :PatternPossibility(
 			 items contains $r1,
@@ -82,10 +84,55 @@
 			restrictionType == $r1.restrictionType,
 			fieldId == $r1.fieldId,
 			valueType == $r1.valueType,
-			( operator == Operator.LESS_OR_EQUAL || == Operator.LESS ),
+			( operator == Operator.LESS_OR_EQUAL || == Operator.LESS),
 			id != $r1.id
 		)
+
+		eval( $r1.compareValues( $r2 ) == 1 )
+	
+		# There is a problem if both of these are in the same PatternPossibility.
+		$pp :PatternPossibility(
+			 items contains $r1,
+			 items contains $r2
+		)
+
+		$p :Pattern( id == $pp.patternId )
+	then 
+		Collection<Cause> list = new ArrayList<Cause>();
+		list.add( $r1 );
+		list.add( $r2 );
 		
+		result.save( new AnalyticsMessage(
+								AnalyticsMessage.Severity.ERROR, 
+								AnalyticsMessage.MessageType.INCOHERENCE, 
+								$p, 
+								"Restriction " + $r1 + " and " + $r2 + 
+								"are in conflict. Because of this, pattern that contains them can never be satisfied.",
+								list
+								) );
+end
+
+#
+# If two LiteralRestrictions are in conflict.
+# 
+# Type: Error
+# Example: IncorencePattern( a < 1 && a == 10 )
+#
+rule "Incoherent LiteralRestrictions with ranges in pattern possibility, impossible equality less or equal"
+	when
+		$r1 :LiteralRestriction( 
+			operator == Operator.EQUAL 
+		)
+	
+		$r2 :LiteralRestriction( 
+			patternId == $r1.patternId,
+			restrictionType == $r1.restrictionType,
+			fieldId == $r1.fieldId,
+			valueType == $r1.valueType,
+			( operator == Operator.LESS_OR_EQUAL || == Operator.LESS || == Operator.EQUAL ),
+			id != $r1.id
+		)
+				
 		eval( $r1.compareValues( $r2 ) == 1 )
 	
 		# There is a problem if both of these are in the same PatternPossibility.
@@ -93,7 +140,52 @@
 			 items contains $r1,
 			 items contains $r2
 		)
+	
+		$p :Pattern( id == $pp.patternId )
+	then 
+		Collection<Cause> list = new ArrayList<Cause>();
+		list.add( $r1 );
+		list.add( $r2 );
+		
+		result.save( new AnalyticsMessage(
+								AnalyticsMessage.Severity.ERROR, 
+								AnalyticsMessage.MessageType.INCOHERENCE, 
+								$p, 
+								"Restriction " + $r1 + " and " + $r2 + 
+								"are in conflict. Because of this, pattern that contains them can never be satisfied.",
+								list
+								) );
+end
 
+#
+# If two LiteralRestrictions are in conflict.
+# 
+# Type: Error
+# Example: IncorencePattern( a > 10 && a == 1 )
+#
+rule "Incoherent LiteralRestrictions with ranges in pattern possibility, impossible equality greater"
+	when
+		$r1 :LiteralRestriction( 
+			( operator == Operator.GREATER || == Operator.GREATER_OR_EQUAL ) 
+		)
+	
+		$r2 :LiteralRestriction( 
+			patternId == $r1.patternId,
+			restrictionType == $r1.restrictionType,
+			fieldId == $r1.fieldId,
+			valueType == $r1.valueType,
+			operator == Operator.EQUAL,
+			id != $r1.id
+		)
+		
+		eval( $r1.compareValues( $r2 ) == 1 )
+
+		# There is a problem if both of these are in the same PatternPossibility.
+		$pp :PatternPossibility(
+			 items contains $r1,
+			 items contains $r2
+		)
+
 		$p :Pattern( id == $pp.patternId )
 	then 
 		Collection<Cause> list = new ArrayList<Cause>();

Modified: labs/jbossrules/trunk/drools-analytics/src/test/java/org/drools/analytics/incoherence/IncoherentRestrictionsTest.java
===================================================================
--- labs/jbossrules/trunk/drools-analytics/src/test/java/org/drools/analytics/incoherence/IncoherentRestrictionsTest.java	2007-11-29 11:44:48 UTC (rev 16911)
+++ labs/jbossrules/trunk/drools-analytics/src/test/java/org/drools/analytics/incoherence/IncoherentRestrictionsTest.java	2007-11-29 12:58:25 UTC (rev 16912)
@@ -29,6 +29,7 @@
 		session.setAgendaFilter(new RuleNameMatchesAgendaFilter(
 				"Incoherent LiteralRestrictions in pattern possibility"));
 
+		AnalyticsDataFactory.clearAnalyticsData();
 		Collection<? extends Object> testData = getTestData(this.getClass()
 				.getResourceAsStream("RestrictionsTest.drl"));
 
@@ -69,6 +70,7 @@
 				.setAgendaFilter(new RuleNameMatchesAgendaFilter(
 						"Incoherent LiteralRestrictions with ranges in pattern possibility, impossible ranges"));
 
+		AnalyticsDataFactory.clearAnalyticsData();
 		Collection<? extends Object> testData = getTestData(this.getClass()
 				.getResourceAsStream("RestrictionsTest.drl"));
 
@@ -99,6 +101,87 @@
 		}
 	}
 
+	public void testIncoherentLiteralRestrictionsInPatternPossibilityImpossibleEqualityLess()
+			throws Exception {
+		StatelessSession session = getStatelessSession(this.getClass()
+				.getResourceAsStream("Restrictions.drl"));
+
+		session
+				.setAgendaFilter(new RuleNameMatchesAgendaFilter(
+						"Incoherent LiteralRestrictions with ranges in pattern possibility, impossible equality less or equal"));
+
+		AnalyticsDataFactory.clearAnalyticsData();
+		Collection<? extends Object> testData = getTestData(this.getClass()
+				.getResourceAsStream("RestrictionsTest.drl"));
+
+		AnalyticsDataFactory.clearAnalyticsResult();
+		AnalyticsResult result = AnalyticsDataFactory.getAnalyticsResult();
+		session.setGlobal("result", result);
+
+		session.executeWithResults(testData);
+
+		Iterator<AnalyticsMessageBase> iter = result.getBySeverity(
+				AnalyticsMessageBase.Severity.ERROR).iterator();
+
+		Set<String> rulesThatHadErrors = new HashSet<String>();
+		while (iter.hasNext()) {
+			Object o = (Object) iter.next();
+			if (o instanceof AnalyticsMessage) {
+				Pattern pattern = (Pattern) ((AnalyticsMessage) o).getFaulty();
+				rulesThatHadErrors.add(pattern.getRuleName());
+			}
+		}
+
+		assertTrue(rulesThatHadErrors.remove("Incoherent restrictions 9"));
+		assertTrue(rulesThatHadErrors.remove("Incoherent restrictions 11"));
+
+		if (!rulesThatHadErrors.isEmpty()) {
+			for (String string : rulesThatHadErrors) {
+				fail("Rule " + string + " caused an error.");
+			}
+		}
+	}
+
+	public void testIncoherentLiteralRestrictionsInPatternPossibilityImpossibleEqualityGreater()
+			throws Exception {
+		StatelessSession session = getStatelessSession(this.getClass()
+				.getResourceAsStream("Restrictions.drl"));
+
+		session
+				.setAgendaFilter(new RuleNameMatchesAgendaFilter(
+						"Incoherent LiteralRestrictions with ranges in pattern possibility, impossible equality greater"));
+
+		AnalyticsDataFactory.clearAnalyticsData();
+		Collection<? extends Object> testData = getTestData(this.getClass()
+				.getResourceAsStream("RestrictionsTest.drl"));
+
+		AnalyticsDataFactory.clearAnalyticsResult();
+		AnalyticsResult result = AnalyticsDataFactory.getAnalyticsResult();
+		session.setGlobal("result", result);
+
+		session.executeWithResults(testData);
+
+		Iterator<AnalyticsMessageBase> iter = result.getBySeverity(
+				AnalyticsMessageBase.Severity.ERROR).iterator();
+
+		Set<String> rulesThatHadErrors = new HashSet<String>();
+		while (iter.hasNext()) {
+			Object o = (Object) iter.next();
+			if (o instanceof AnalyticsMessage) {
+				Pattern pattern = (Pattern) ((AnalyticsMessage) o).getFaulty();
+				rulesThatHadErrors.add(pattern.getRuleName());
+			}
+		}
+
+		assertTrue(rulesThatHadErrors.remove("Incoherent restrictions 10"));
+
+		if (!rulesThatHadErrors.isEmpty()) {
+			for (String string : rulesThatHadErrors) {
+				fail("Rule " + string + " caused an error.");
+			}
+		}
+	}
+
 	public void testIncoherentLiteralRestrictionsInPatternPossibilityImpossibleRange()
 			throws Exception {
 		StatelessSession session = getStatelessSession(this.getClass()
@@ -108,6 +191,7 @@
 				.setAgendaFilter(new RuleNameMatchesAgendaFilter(
 						"Incoherent LiteralRestrictions with ranges in pattern possibility, impossible range"));
 
+		AnalyticsDataFactory.clearAnalyticsData();
 		Collection<? extends Object> testData = getTestData(this.getClass()
 				.getResourceAsStream("RestrictionsTest.drl"));
 
@@ -146,6 +230,7 @@
 		session.setAgendaFilter(new RuleNameMatchesAgendaFilter(
 				"Incoherent VariableRestrictions in pattern possibility"));
 
+		AnalyticsDataFactory.clearAnalyticsData();
 		Collection<? extends Object> testData = getTestData(this.getClass()
 				.getResourceAsStream("RestrictionsTest.drl"));
 
@@ -187,6 +272,7 @@
 				.setAgendaFilter(new RuleNameMatchesAgendaFilter(
 						"Incoherent VariableRestrictions in pattern possibility, impossible range"));
 
+		AnalyticsDataFactory.clearAnalyticsData();
 		Collection<? extends Object> testData = getTestData(this.getClass()
 				.getResourceAsStream("RestrictionsTest.drl"));
 

Modified: labs/jbossrules/trunk/drools-analytics/src/test/resources/org/drools/analytics/incoherence/RestrictionsTest.drl
===================================================================
--- labs/jbossrules/trunk/drools-analytics/src/test/resources/org/drools/analytics/incoherence/RestrictionsTest.drl	2007-11-29 11:44:48 UTC (rev 16911)
+++ labs/jbossrules/trunk/drools-analytics/src/test/resources/org/drools/analytics/incoherence/RestrictionsTest.drl	2007-11-29 12:58:25 UTC (rev 16912)
@@ -8,7 +8,7 @@
 
 rule "Incoherent restrictions 1"
 	when
-		IncoherencePattern1( a == 1, a != 2 ) 
+		IncoherencePattern1( a == 1, a != 1 ) 
 	then 
 		# Test
 end
@@ -66,3 +66,25 @@
 		# Test
 end
 
+#TODO:
+rule "Incoherent restrictions 9"
+	when
+		IncoherencePattern9( a == 1, a == 2 ) 
+	then 
+		# Test
+end
+
+rule "Incoherent restrictions 10"
+	when
+		IncoherencePattern10( a == 1, a > 10 ) 
+	then 
+		# Test
+end
+
+rule "Incoherent restrictions 11"
+	when
+		IncoherencePattern11( a == 10, a < 1 ) 
+	then 
+		# Test
+end
+




More information about the jboss-svn-commits mailing list