[jboss-svn-commits] JBL Code SVN: r17411 - in labs/jbossrules/trunk/drools-analytics/src: main/resources/org/drools/analytics and 7 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Thu Dec 27 07:14:06 EST 2007
Author: Rikkola
Date: 2007-12-27 07:14:05 -0500 (Thu, 27 Dec 2007)
New Revision: 17411
Added:
labs/jbossrules/trunk/drools-analytics/src/main/resources/org/drools/analytics/equivalence/
labs/jbossrules/trunk/drools-analytics/src/main/resources/org/drools/analytics/equivalence/Rules.drl
labs/jbossrules/trunk/drools-analytics/src/test/java/org/drools/analytics/equivalence/
labs/jbossrules/trunk/drools-analytics/src/test/java/org/drools/analytics/equivalence/EquivalentRulesTest.java
Modified:
labs/jbossrules/trunk/drools-analytics/src/main/java/org/drools/analytics/RuleLoader.java
labs/jbossrules/trunk/drools-analytics/src/main/resources/org/drools/analytics/rangeChecks/Clean.drl
labs/jbossrules/trunk/drools-analytics/src/main/resources/org/drools/analytics/redundancy/Possibilities.drl
labs/jbossrules/trunk/drools-analytics/src/main/resources/org/drools/analytics/redundancy/Rules.drl
labs/jbossrules/trunk/drools-analytics/src/main/resources/org/drools/analytics/redundancy/Warnings.drl
labs/jbossrules/trunk/drools-analytics/src/test/java/org/drools/analytics/AnalyticsTestStandalone.java
labs/jbossrules/trunk/drools-analytics/src/test/java/org/drools/analytics/AnalyzerTest.java
labs/jbossrules/trunk/drools-analytics/src/test/java/org/drools/analytics/TestBase.java
labs/jbossrules/trunk/drools-analytics/src/test/java/org/drools/analytics/redundancy/RedundancyTestBase.java
labs/jbossrules/trunk/drools-analytics/src/test/java/org/drools/analytics/redundancy/RedundantPossibilitiesTest.java
labs/jbossrules/trunk/drools-analytics/src/test/java/org/drools/analytics/redundancy/RedundantRulesAndPatternsTest.java
labs/jbossrules/trunk/drools-analytics/src/test/resources/org/drools/analytics/Misc3.drl
Log:
Added equivalent rules test and fixed bugs from redundant rules tests.
Modified: labs/jbossrules/trunk/drools-analytics/src/main/java/org/drools/analytics/RuleLoader.java
===================================================================
--- labs/jbossrules/trunk/drools-analytics/src/main/java/org/drools/analytics/RuleLoader.java 2007-12-26 21:22:26 UTC (rev 17410)
+++ labs/jbossrules/trunk/drools-analytics/src/main/java/org/drools/analytics/RuleLoader.java 2007-12-27 12:14:05 UTC (rev 17411)
@@ -14,6 +14,8 @@
public static Collection<Package> loadPackages() {
String[] fileNames = new String[] {
+ // Equivalence
+ "equivalence/Rules.drl",
// Incoherence
"incoherence/Patterns.drl",
"incoherence/Restrictions.drl",
Added: labs/jbossrules/trunk/drools-analytics/src/main/resources/org/drools/analytics/equivalence/Rules.drl
===================================================================
--- labs/jbossrules/trunk/drools-analytics/src/main/resources/org/drools/analytics/equivalence/Rules.drl (rev 0)
+++ labs/jbossrules/trunk/drools-analytics/src/main/resources/org/drools/analytics/equivalence/Rules.drl 2007-12-27 12:14:05 UTC (rev 17411)
@@ -0,0 +1,37 @@
+#created on: 7.9.2007
+package org.drools.analytics.redundancy.rules
+
+import org.drools.analytics.components.AnalyticsRule;
+import org.drools.analytics.report.components.Redundancy;
+
+#
+# Only checks for redundant rule specifications where consequences are not redundant,
+# does not include actual pattern and restriction checks.
+#
+rule "Find equivalent Rules"
+ when
+ # Check that AnalyticsRule $left and $right have redundant fields.
+ $left :AnalyticsRule()
+ $right :AnalyticsRule(
+ id != $left.id,
+ ruleAgendaGroup == $left.ruleAgendaGroup
+ )
+
+ not Redundancy(
+ left == $left.consequence,
+ right == $right.consequence
+ )
+
+ # Check that there is not already a pair with these values.
+ not Redundancy(
+ left == $left,
+ right == $right
+ )
+ #not Redundancy(
+ # left == $right,
+ # right == $left
+ #)
+ then
+ insert( new Redundancy( Redundancy.RedundancyType.WEAK, $left, $right ) );
+end
+
Modified: labs/jbossrules/trunk/drools-analytics/src/main/resources/org/drools/analytics/rangeChecks/Clean.drl
===================================================================
--- labs/jbossrules/trunk/drools-analytics/src/main/resources/org/drools/analytics/rangeChecks/Clean.drl 2007-12-26 21:22:26 UTC (rev 17410)
+++ labs/jbossrules/trunk/drools-analytics/src/main/resources/org/drools/analytics/rangeChecks/Clean.drl 2007-12-27 12:14:05 UTC (rev 17411)
@@ -79,7 +79,6 @@
restriction.intValue < $higher.intValue
)
then
- #System.out.println( $lower + " | " + $higher );
retract( $gap );
result.remove( $gap );
end
@@ -121,7 +120,6 @@
restriction.intValue < $higher.intValue
)
then
- #System.out.println( $lower + " | " + $higher );
retract( $gap );
result.remove( $gap );
end
@@ -163,7 +161,6 @@
restriction.doubleValue < $higher.doubleValue
)
then
- #System.out.println( $lower + " | " + $higher );
retract( $gap );
result.remove( $gap );
end
@@ -205,7 +202,6 @@
restriction.doubleValue < $higher.doubleValue
)
then
- #System.out.println( $lower + " | " + $higher );
retract( $gap );
result.remove( $gap );
end
@@ -288,7 +284,6 @@
eval( restriction.getDateValue().before( $higher.getDateValue() ) )
)
then
- #System.out.println( $lower + " | " + $higher );
retract( $gap );
result.remove( $gap );
end
Modified: labs/jbossrules/trunk/drools-analytics/src/main/resources/org/drools/analytics/redundancy/Possibilities.drl
===================================================================
--- labs/jbossrules/trunk/drools-analytics/src/main/resources/org/drools/analytics/redundancy/Possibilities.drl 2007-12-26 21:22:26 UTC (rev 17410)
+++ labs/jbossrules/trunk/drools-analytics/src/main/resources/org/drools/analytics/redundancy/Possibilities.drl 2007-12-27 12:14:05 UTC (rev 17411)
@@ -15,33 +15,31 @@
# Fires when two PatternPossibilities are redundant.
# Marks these possibilities as redundant.
#
-# Example 1: Pattern1( a == b) and Pattern1( a == b)
-# Example 2: Pattern1( a == b || a == c) and Pattern1( a == b)
+# Example 1: Pattern1( a == b ) and Pattern1( a == b )
+# Example 2: Pattern1( a == b || a == c ) and Pattern1( a == b )
rule "Find pattern possibility redundancy"
when
- $ppr :Redundancy(
- type == Redundancy.RedundancyType.WEAK,
+ $redundancy :Redundancy(
left.causeType == Cause.CauseType.PATTERN
)
# Find two PatternPossibilities.
(
$pp1 :PatternPossibility(
- eval( patternId == $ppr.getLeft().getId() )
+ eval( patternId == $redundancy.getLeft().getId() )
)
and
$pp2 :PatternPossibility(
- eval( patternId == $ppr.getRight().getId() )
+ eval( patternId == $redundancy.getRight().getId() )
)
) or (
$pp1 :PatternPossibility(
- eval( patternId == $ppr.getRight().getId() )
+ eval( patternId == $redundancy.getRight().getId() )
)
and
$pp2 :PatternPossibility(
- eval( patternId == $ppr.getLeft().getId() )
+ eval( patternId == $redundancy.getLeft().getId() )
)
-
)
# For every restriction in $pp1 there is a redundancy to $pp2.
@@ -61,6 +59,7 @@
&&
right == $r
)
+
)
)
@@ -71,7 +70,7 @@
this memberOf $pp2.items
)
- Redundancy(
+ Redundancy(
(
left == $r
&&
@@ -96,68 +95,43 @@
rule "Find rule possibility redundancy"
when
$redundancy :Redundancy(
- type == Redundancy.RedundancyType.WEAK,
left.causeType == Cause.CauseType.RULE
)
# Find two RulePossibilities.
- (
- $rp1 :RulePossibility(
- eval( ruleId == $redundancy.getLeft().getId() )
- )
- and
- $rp2 :RulePossibility(
- eval( ruleId == $redundancy.getRight().getId() )
- )
- ) or (
- $rp1 :RulePossibility(
- eval( ruleId == $redundancy.getRight().getId() )
- )
- and
- $rp2 :RulePossibility(
- eval( ruleId == $redundancy.getLeft().getId() )
- )
+ $rp1 :RulePossibility(
+ eval( ruleId == $redundancy.getLeft().getId() )
)
+ $rp2 :RulePossibility(
+ eval( ruleId == $redundancy.getRight().getId() )
+ )
- # For every pattern possibility in $pp1 there is a pattern possibility in $pp2.
+ # For every pattern possibility in $rp1 there is a redundant pattern possibility in $rp2.
forall(
$pp :PatternPossibility(
- patternId == $rp1.ruleId,
+ ruleId == $rp1.ruleId,
this memberOf $rp1.items
)
-
+
Redundancy(
type == Redundancy.RedundancyType.STRONG,
- (
- left == $pp
- &&
- right memberOf $rp2.items
- ) || (
- left memberOf $rp2.items
- &&
- right == $pp
- )
+ left == $pp,
+ right memberOf $rp2.items
)
+
)
- # For every restriction in $pp2 there is a redundancy to $pp1.
+ # For every pattern possibility in $rp2 there is a redundant pattern possibility in $rp1.
forall(
$pp :PatternPossibility(
- patternId == $rp2.ruleId,
+ ruleId == $rp2.ruleId,
this memberOf $rp2.items
)
Redundancy(
type == Redundancy.RedundancyType.STRONG,
- (
- left == $pp
- &&
- right memberOf $rp1.items
- ) || (
- left memberOf $rp1.items
- &&
- right == $pp
- )
+ left == $pp,
+ right memberOf $rp1.items
)
)
then
Modified: labs/jbossrules/trunk/drools-analytics/src/main/resources/org/drools/analytics/redundancy/Rules.drl
===================================================================
--- labs/jbossrules/trunk/drools-analytics/src/main/resources/org/drools/analytics/redundancy/Rules.drl 2007-12-26 21:22:26 UTC (rev 17410)
+++ labs/jbossrules/trunk/drools-analytics/src/main/resources/org/drools/analytics/redundancy/Rules.drl 2007-12-27 12:14:05 UTC (rev 17411)
@@ -8,7 +8,7 @@
# Only checks for redundant rule specifications,
# does not include actual pattern and restriction checks.
#
-rule "Find redundant Rules, weak redundancy"
+rule "Find redundant Rules, strong redundancy"
when
# Check that AnalyticsRule $left and $right have redundant fields.
$left :AnalyticsRule()
@@ -27,11 +27,11 @@
left == $left,
right == $right
)
- not Redundancy(
- left == $right,
- right == $left
- )
+ #not Redundancy(
+ # left == $right,
+ # right == $left
+ #)
then
- insert( new Redundancy( Redundancy.RedundancyType.WEAK, $left, $right ) );
+ insert( new Redundancy( Redundancy.RedundancyType.STRONG, $left, $right ) );
end
Modified: labs/jbossrules/trunk/drools-analytics/src/main/resources/org/drools/analytics/redundancy/Warnings.drl
===================================================================
--- labs/jbossrules/trunk/drools-analytics/src/main/resources/org/drools/analytics/redundancy/Warnings.drl 2007-12-26 21:22:26 UTC (rev 17410)
+++ labs/jbossrules/trunk/drools-analytics/src/main/resources/org/drools/analytics/redundancy/Warnings.drl 2007-12-27 12:14:05 UTC (rev 17411)
@@ -52,9 +52,16 @@
causes.add( $rulePossibilityRedundancy.getLeft() );
causes.add( $rulePossibilityRedundancy.getRight() );
+ String message;
+ if( $ruleRedundancy.getType() == Redundancy.RedundancyType.WEAK ) {
+ message = "Rules are equivalent.";
+ } else {
+ message = "Rules are redundant.";
+ }
+
result.add(new AnalyticsMessage(
AnalyticsMessage.Severity.WARNING, AnalyticsMessage.MessageType.REDUNDANCY,
- $rulePossibilityRedundancy, "Rules are redundant.", causes ) );
+ $rulePossibilityRedundancy, message, causes ) );
end
rule "Find subsumptant rule possibilities from different rules"
Modified: labs/jbossrules/trunk/drools-analytics/src/test/java/org/drools/analytics/AnalyticsTestStandalone.java
===================================================================
--- labs/jbossrules/trunk/drools-analytics/src/test/java/org/drools/analytics/AnalyticsTestStandalone.java 2007-12-26 21:22:26 UTC (rev 17410)
+++ labs/jbossrules/trunk/drools-analytics/src/test/java/org/drools/analytics/AnalyticsTestStandalone.java 2007-12-27 12:14:05 UTC (rev 17411)
@@ -31,16 +31,16 @@
Collection<String> fileNames = new ArrayList<String>();
// Test data
-// fileNames.add("MissingRangesForDates.drl");
-// fileNames.add("MissingRangesForDoubles.drl");
-// fileNames.add("MissingRangesForInts.drl");
-// fileNames.add("MissingRangesForVariables.drl");
-// fileNames.add("Misc.drl");
-// fileNames.add("Misc2.drl");
+ // fileNames.add("MissingRangesForDates.drl");
+ // fileNames.add("MissingRangesForDoubles.drl");
+ // fileNames.add("MissingRangesForInts.drl");
+ // fileNames.add("MissingRangesForVariables.drl");
+ // fileNames.add("Misc.drl");
+ // fileNames.add("Misc2.drl");
fileNames.add("Misc3.drl");
-// fileNames.add("ConsequenceTest.drl");
-// fileNames.add("optimisation/OptimisationRestrictionOrderTest.drl");
-// fileNames.add("optimisation/OptimisationPatternOrderTest.drl");
+ // fileNames.add("ConsequenceTest.drl");
+ // fileNames.add("optimisation/OptimisationRestrictionOrderTest.drl");
+ // fileNames.add("optimisation/OptimisationPatternOrderTest.drl");
DrlParser parser = new DrlParser();
Analyzer a = new Analyzer();
@@ -55,33 +55,40 @@
// System.out.print(a.getResultAsPlainText());
// System.out.print(a.getResultAsXML());
// a.writeComponentsHTML("/stash/");
- a.writeComponentsHTML("/Users/michaelneale/foo.html");
+ // a.writeComponentsHTML("/Users/michaelneale/foo.html");
+ a.writeComponentsHTML("c:/");
-
AnalyticsResult result = a.getResult();
- Collection<AnalyticsMessageBase> msgs = result.getBySeverity(AnalyticsMessageBase.Severity.ERROR);
+ Collection<AnalyticsMessageBase> msgs = result
+ .getBySeverity(AnalyticsMessageBase.Severity.ERROR);
for (Iterator iterator = msgs.iterator(); iterator.hasNext();) {
- AnalyticsMessageBase msg = (AnalyticsMessageBase) iterator.next();
+ AnalyticsMessageBase msg = (AnalyticsMessageBase) iterator
+ .next();
System.out.println("ERR: " + msg.getMessage());
}
msgs = result.getBySeverity(AnalyticsMessageBase.Severity.WARNING);
for (Iterator iterator = msgs.iterator(); iterator.hasNext();) {
- AnalyticsMessageBase msg = (AnalyticsMessageBase) iterator.next();
- System.out.println("WARN (" + msg.getClass().getSimpleName() +"): " + msg.getMessage());
- System.out.println("\t FAULT: [" + msg.getClass().getSimpleName() + "] " + msg.getFaulty());
+ AnalyticsMessageBase msg = (AnalyticsMessageBase) iterator
+ .next();
+ System.out.println("WARN (" + msg.getClass().getSimpleName()
+ + "): " + msg.getMessage());
+ System.out.println("\t FAULT: ["
+ + msg.getClass().getSimpleName() + "] "
+ + msg.getFaulty());
if (msg instanceof AnalyticsMessage) {
System.out.println("\t CAUSES (message):");
- AnalyticsMessage amsg = (AnalyticsMessage) msg;
- for (Iterator iterator2 = amsg.getCauses().iterator(); iterator2
- .hasNext();) {
- Cause c = (Cause) iterator2.next();
- System.out.println("\t\t [" + c.getClass().getSimpleName() + "]" + c);
+ AnalyticsMessage amsg = (AnalyticsMessage) msg;
+ for (Iterator iterator2 = amsg.getCauses().iterator(); iterator2
+ .hasNext();) {
+ Cause c = (Cause) iterator2.next();
+ System.out.println("\t\t ["
+ + c.getClass().getSimpleName() + "]" + c);
- }
+ }
- } else if (msg instanceof AnalyticsRangeCheckMessage) {
+ } else if (msg instanceof AnalyticsRangeCheckMessage) {
System.out.println("\t CAUSES (range):");
AnalyticsRangeCheckMessage amsg = (AnalyticsRangeCheckMessage) msg;
for (Iterator iterator2 = amsg.getCauses().iterator(); iterator2
@@ -96,18 +103,19 @@
msgs = result.getBySeverity(AnalyticsMessageBase.Severity.NOTE);
for (Iterator iterator = msgs.iterator(); iterator.hasNext();) {
- AnalyticsMessageBase msg = (AnalyticsMessageBase) iterator.next();
+ AnalyticsMessageBase msg = (AnalyticsMessageBase) iterator
+ .next();
System.out.println("NOTE: " + msg.getMessage());
System.out.println("\t" + msg.getFaulty());
}
-
-
- Collection<AnalyticsClass> classes = result.getAnalyticsData().getAllClasses();
+ Collection<AnalyticsClass> classes = result.getAnalyticsData()
+ .getAllClasses();
for (Iterator iterator = classes.iterator(); iterator.hasNext();) {
AnalyticsClass c = (AnalyticsClass) iterator.next();
- Collection<AnalyticsRule> cr = result.getAnalyticsData().getRulesByClassId(c.getId());
+ Collection<AnalyticsRule> cr = result.getAnalyticsData()
+ .getRulesByClassId(c.getId());
System.err.println("Class rules:" + cr);
Set<Field> flds = c.getFields();
for (Iterator iterator2 = flds.iterator(); iterator2.hasNext();) {
@@ -115,13 +123,12 @@
cr = result.getAnalyticsData().getRulesByFieldId(f.getId());
System.err.println("Field rules: " + cr);
-
}
}
- //System.err.println(a.getResultAsPlainText());
- //System.out.println(result.toString());
- } catch (Throwable t) {
+ // System.err.println(a.getResultAsPlainText());
+ // System.out.println(result.toString());
+ } catch (Throwable t) {
t.printStackTrace();
}
}
Modified: labs/jbossrules/trunk/drools-analytics/src/test/java/org/drools/analytics/AnalyzerTest.java
===================================================================
--- labs/jbossrules/trunk/drools-analytics/src/test/java/org/drools/analytics/AnalyzerTest.java 2007-12-26 21:22:26 UTC (rev 17410)
+++ labs/jbossrules/trunk/drools-analytics/src/test/java/org/drools/analytics/AnalyzerTest.java 2007-12-27 12:14:05 UTC (rev 17411)
@@ -26,7 +26,7 @@
AnalyticsResult result = anal.getResult();
assertNotNull(result);
assertEquals(0, result.getBySeverity(AnalyticsMessageBase.Severity.ERROR).size());
- assertEquals(10, result.getBySeverity(AnalyticsMessageBase.Severity.WARNING).size());
+ assertEquals(17, result.getBySeverity(AnalyticsMessageBase.Severity.WARNING).size());
assertEquals(1, result.getBySeverity(AnalyticsMessageBase.Severity.NOTE).size());
@@ -44,7 +44,7 @@
result = anal.getResult();
assertNotNull(result);
assertEquals(0, result.getBySeverity(AnalyticsMessageBase.Severity.ERROR).size());
- assertEquals(10, result.getBySeverity(AnalyticsMessageBase.Severity.WARNING).size());
+ assertEquals(17, result.getBySeverity(AnalyticsMessageBase.Severity.WARNING).size());
assertEquals(1, result.getBySeverity(AnalyticsMessageBase.Severity.NOTE).size());
Modified: labs/jbossrules/trunk/drools-analytics/src/test/java/org/drools/analytics/TestBase.java
===================================================================
--- labs/jbossrules/trunk/drools-analytics/src/test/java/org/drools/analytics/TestBase.java 2007-12-26 21:22:26 UTC (rev 17410)
+++ labs/jbossrules/trunk/drools-analytics/src/test/java/org/drools/analytics/TestBase.java 2007-12-27 12:14:05 UTC (rev 17411)
@@ -13,6 +13,7 @@
import org.drools.RuleBaseFactory;
import org.drools.StatelessSession;
import org.drools.analytics.dao.AnalyticsData;
+import org.drools.analytics.report.components.Cause;
import org.drools.compiler.DrlParser;
import org.drools.compiler.PackageBuilder;
import org.drools.lang.descr.PackageDescr;
@@ -73,6 +74,30 @@
return false;
}
+ /**
+ * Returns true if map contains redundancy where cause1 is redundant to
+ * cause2.
+ *
+ * @param map
+ * @param cause1
+ * @param cause2
+ * @return True if redundancy exists.
+ */
+ protected static boolean causeMapContains(Map<Cause, Set<Cause>> map,
+ Cause cause1, Cause cause2) {
+ if (map.containsKey(cause1)) {
+ Set<Cause> set = map.get(cause1);
+ boolean exists = set.remove(cause2);
+
+ // If set is empty remove key from map.
+ if (set.isEmpty()) {
+ map.remove(cause1);
+ }
+ return exists;
+ }
+ return false;
+ }
+
public Collection<? extends Object> getTestData(InputStream stream,
AnalyticsData data) throws Exception {
Reader drlReader = new InputStreamReader(stream);
Added: labs/jbossrules/trunk/drools-analytics/src/test/java/org/drools/analytics/equivalence/EquivalentRulesTest.java
===================================================================
--- labs/jbossrules/trunk/drools-analytics/src/test/java/org/drools/analytics/equivalence/EquivalentRulesTest.java (rev 0)
+++ labs/jbossrules/trunk/drools-analytics/src/test/java/org/drools/analytics/equivalence/EquivalentRulesTest.java 2007-12-27 12:14:05 UTC (rev 17411)
@@ -0,0 +1,58 @@
+package org.drools.analytics.equivalence;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Map;
+import java.util.Set;
+
+import org.drools.StatelessSession;
+import org.drools.StatelessSessionResult;
+import org.drools.analytics.TestBase;
+import org.drools.analytics.components.AnalyticsRule;
+import org.drools.analytics.dao.AnalyticsResult;
+import org.drools.analytics.dao.AnalyticsResultFactory;
+import org.drools.analytics.redundancy.RedundancyTestBase;
+import org.drools.analytics.report.components.Redundancy;
+import org.drools.base.RuleNameMatchesAgendaFilter;
+
+public class EquivalentRulesTest extends RedundancyTestBase {
+
+ public void testRuleRedundancy() throws Exception {
+ StatelessSession session = getStatelessSession(this.getClass()
+ .getResourceAsStream("Rules.drl"));
+
+ session.setAgendaFilter(new RuleNameMatchesAgendaFilter(
+ "Find equivalent Rules"));
+
+ Collection<Object> data = new ArrayList<Object>();
+
+ String ruleName1 = "Rule 1";
+ String ruleName2 = "Rule 2";
+
+ AnalyticsRule rule1 = new AnalyticsRule();
+ rule1.setRuleName(ruleName1);
+ AnalyticsRule rule2 = new AnalyticsRule();
+ rule2.setRuleName(ruleName2);
+
+ Redundancy r1 = new Redundancy(rule1, rule2);
+
+ data.add(rule1);
+ data.add(rule2);
+ data.add(r1);
+
+ AnalyticsResult result = AnalyticsResultFactory.createAnalyticsResult();
+ session.setGlobal("result", result);
+
+ StatelessSessionResult sessionResult = session.executeWithResults(data);
+
+ Map<String, Set<String>> map = createRedundancyMap(sessionResult
+ .iterateObjects());
+
+ assertTrue(TestBase.mapContains(map, ruleName1, ruleName2));
+ assertTrue(TestBase.mapContains(map, ruleName2, ruleName1));
+
+ if (!map.isEmpty()) {
+ fail("More equivalences than was expected.");
+ }
+ }
+}
Modified: labs/jbossrules/trunk/drools-analytics/src/test/java/org/drools/analytics/redundancy/RedundancyTestBase.java
===================================================================
--- labs/jbossrules/trunk/drools-analytics/src/test/java/org/drools/analytics/redundancy/RedundancyTestBase.java 2007-12-26 21:22:26 UTC (rev 17410)
+++ labs/jbossrules/trunk/drools-analytics/src/test/java/org/drools/analytics/redundancy/RedundancyTestBase.java 2007-12-27 12:14:05 UTC (rev 17411)
@@ -8,19 +8,20 @@
import org.drools.analytics.TestBase;
import org.drools.analytics.components.AnalyticsComponent;
+import org.drools.analytics.report.components.Cause;
import org.drools.analytics.report.components.Redundancy;
/**
- *
+ *
* @author Toni Rikkola
- *
+ *
*/
public class RedundancyTestBase extends TestBase {
/**
* Creates redundancy map from Redundancy objects, one rule may have several
* redundancy dependencies.
- *
+ *
* @param iter
* @return
*/
@@ -48,13 +49,49 @@
return map;
}
+ /**
+ * Creates redundancy map from Redundancy objects, one rule may have several
+ * redundancy dependencies.
+ *
+ * @param iter
+ * @return
+ */
+ protected Map<Cause, Set<Cause>> createRedundancyCauseMap(
+ Cause.CauseType type, Iterator<Object> iter) {
+
+ Map<Cause, Set<Cause>> map = new HashMap<Cause, Set<Cause>>();
+ while (iter.hasNext()) {
+ Object o = (Object) iter.next();
+ if (o instanceof Redundancy) {
+ Redundancy r = (Redundancy) o;
+
+ if (r.getLeft().getCauseType() == type) {
+ Cause left = r.getLeft();
+ Cause right = r.getRight();
+
+ if (map.containsKey(left)) {
+ Set<Cause> set = map.get(left);
+ set.add(right);
+ } else {
+ Set<Cause> set = new HashSet<Cause>();
+ set.add(right);
+ map.put(left, set);
+ }
+ }
+ }
+ }
+
+ return map;
+ }
+
public void testDummy() {
- //this is needed as eclipse will try to run this and produce a failure if its not here.
+ // this is needed as eclipse will try to run this and produce a failure
+ // if its not here.
}
/**
* Returns true if map contains redundancy where key is redundant to value.
- *
+ *
* @param map
* @param key
* @param value
Modified: labs/jbossrules/trunk/drools-analytics/src/test/java/org/drools/analytics/redundancy/RedundantPossibilitiesTest.java
===================================================================
--- labs/jbossrules/trunk/drools-analytics/src/test/java/org/drools/analytics/redundancy/RedundantPossibilitiesTest.java 2007-12-26 21:22:26 UTC (rev 17410)
+++ labs/jbossrules/trunk/drools-analytics/src/test/java/org/drools/analytics/redundancy/RedundantPossibilitiesTest.java 2007-12-27 12:14:05 UTC (rev 17411)
@@ -15,6 +15,7 @@
import org.drools.analytics.components.RulePossibility;
import org.drools.analytics.dao.AnalyticsResultFactory;
import org.drools.analytics.dao.AnalyticsResult;
+import org.drools.analytics.report.components.Cause;
import org.drools.analytics.report.components.Redundancy;
import org.drools.base.RuleNameMatchesAgendaFilter;
@@ -92,6 +93,9 @@
AnalyticsResult result = AnalyticsResultFactory.createAnalyticsResult();
session.setGlobal("result", result);
+ /*
+ * First rules. These are redundant,
+ */
String ruleName1 = "Rule 1";
String ruleName2 = "Rule 2";
@@ -128,13 +132,61 @@
data.add(rp1);
data.add(rp2);
+ /*
+ * These two rules are not redundant
+ */
+ String ruleName3 = "Rule 3";
+ String ruleName4 = "Rule 4";
+
+ AnalyticsRule r3 = new AnalyticsRule();
+ r3.setRuleName(ruleName3);
+ AnalyticsRule r4 = new AnalyticsRule();
+ r4.setRuleName(ruleName4);
+
+ PatternPossibility pp3 = new PatternPossibility();
+ pp3.setRuleId(r3.getId());
+ pp3.setRuleName(ruleName3);
+ PatternPossibility pp4 = new PatternPossibility();
+ pp4.setRuleId(r4.getId());
+ pp4.setRuleName(ruleName4);
+ // This possibility makes them different
+ PatternPossibility pp5 = new PatternPossibility();
+ pp5.setRuleId(r4.getId());
+ pp5.setRuleName(ruleName4);
+
+ RulePossibility rp3 = new RulePossibility();
+ rp3.setRuleId(r3.getId());
+ rp3.setRuleName(ruleName3);
+ rp3.add(pp3);
+
+ RulePossibility rp4 = new RulePossibility();
+ rp4.setRuleId(r4.getId());
+ rp4.setRuleName(ruleName4);
+ rp4.add(pp4);
+ rp4.add(pp5);
+
+ Redundancy possibilityredundancy2 = new Redundancy(
+ Redundancy.RedundancyType.STRONG, pp3, pp4);
+ Redundancy ruleRedundancy2 = new Redundancy(r3, r4);
+
+ data.add(r3);
+ data.add(r4);
+ data.add(pp3);
+ data.add(pp4);
+ data.add(pp5);
+ data.add(possibilityredundancy2);
+ data.add(ruleRedundancy2);
+ data.add(rp3);
+ data.add(rp4);
+
StatelessSessionResult sessionResult = session.executeWithResults(data);
- Map<String, Set<String>> map = createRedundancyMap(sessionResult
- .iterateObjects());
+ Map<Cause, Set<Cause>> map = createRedundancyCauseMap(
+ Cause.CauseType.RULE_POSSIBILITY, sessionResult
+ .iterateObjects());
- assertTrue(TestBase.mapContains(map, ruleName1, ruleName2));
- assertTrue(TestBase.mapContains(map, ruleName2, ruleName1));
+ assertTrue(TestBase.causeMapContains(map, rp1, rp2));
+ assertFalse(TestBase.causeMapContains(map, rp3, rp4));
if (!map.isEmpty()) {
fail("More redundancies than was expected.");
Modified: labs/jbossrules/trunk/drools-analytics/src/test/java/org/drools/analytics/redundancy/RedundantRulesAndPatternsTest.java
===================================================================
--- labs/jbossrules/trunk/drools-analytics/src/test/java/org/drools/analytics/redundancy/RedundantRulesAndPatternsTest.java 2007-12-26 21:22:26 UTC (rev 17410)
+++ labs/jbossrules/trunk/drools-analytics/src/test/java/org/drools/analytics/redundancy/RedundantRulesAndPatternsTest.java 2007-12-27 12:14:05 UTC (rev 17411)
@@ -22,7 +22,7 @@
.getResourceAsStream("Rules.drl"));
session.setAgendaFilter(new RuleNameMatchesAgendaFilter(
- "Find redundant Rules, weak redundancy"));
+ "Find redundant Rules, strong redundancy"));
Collection<Object> data = new ArrayList<Object>();
Modified: labs/jbossrules/trunk/drools-analytics/src/test/resources/org/drools/analytics/Misc3.drl
===================================================================
--- labs/jbossrules/trunk/drools-analytics/src/test/resources/org/drools/analytics/Misc3.drl 2007-12-26 21:22:26 UTC (rev 17410)
+++ labs/jbossrules/trunk/drools-analytics/src/test/resources/org/drools/analytics/Misc3.drl 2007-12-27 12:14:05 UTC (rev 17411)
@@ -15,7 +15,7 @@
RedundancyPattern( a == 1 )
RedundancyPattern2( a == 1 )
then
- System.println("TEST");
+ System.out.println("TEST");
end
rule "Redundant rule 2, rules"
@@ -23,5 +23,13 @@
RedundancyPattern( a == 1 )
RedundancyPattern2( a == 1 )
then
- System.println("TEST");
+ System.out.println("TEST");
end
+
+rule "Equivalent rule"
+ when
+ RedundancyPattern( a == 1 )
+ RedundancyPattern2( a == 1 )
+ then
+ System.out.println("NOT A TEST");
+end
More information about the jboss-svn-commits
mailing list