[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