[jboss-svn-commits] JBL Code SVN: r18267 - in labs/jbossrules/trunk/drools-analytics/src: test/java/org/drools/analytics/subsumption and 1 other directory.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Sat Feb 2 04:10:10 EST 2008
Author: Rikkola
Date: 2008-02-02 04:10:10 -0500 (Sat, 02 Feb 2008)
New Revision: 18267
Added:
labs/jbossrules/trunk/drools-analytics/src/main/resources/org/drools/analytics/subsumption/Restrictions.drl
labs/jbossrules/trunk/drools-analytics/src/test/java/org/drools/analytics/subsumption/SubsumptantRestrictionsTest.java
Log:
JBRULES-1449: Check subsumption between restrictions
Added: labs/jbossrules/trunk/drools-analytics/src/main/resources/org/drools/analytics/subsumption/Restrictions.drl
===================================================================
--- labs/jbossrules/trunk/drools-analytics/src/main/resources/org/drools/analytics/subsumption/Restrictions.drl (rev 0)
+++ labs/jbossrules/trunk/drools-analytics/src/main/resources/org/drools/analytics/subsumption/Restrictions.drl 2008-02-02 09:10:10 UTC (rev 18267)
@@ -0,0 +1,53 @@
+#created on: 28.1.2008
+package org.drools.analytics.subsumption.patterns
+
+import org.drools.base.evaluators.Operator;
+
+import org.drools.analytics.components.LiteralRestriction;
+import org.drools.analytics.components.Field.FieldType;
+import org.drools.analytics.report.components.Subsumption;
+
+
+#
+# TODO:
+#
+rule "Find subsumptant restrictions, greater than"
+ when
+ # Covered x > 10
+ $lower :LiteralRestriction(
+ ( valueType == Field.FieldType.INT || == Field.FieldType.DOUBLE || == Field.FieldType.DATE ),
+ ( operator == Operator.GREATER || == Operator.GREATER_OR_EQUAL )
+ )
+
+ # Covered x > 100
+ $higher :LiteralRestriction(
+ fieldId == $lower.fieldId,
+ ( operator == Operator.GREATER || == Operator.GREATER_OR_EQUAL || == Operator.EQUAL)
+ )
+
+ eval( $lower.compareValues( $higher ) == -1 )
+ then
+ insert( new Subsumption( $lower, $higher ) );
+end
+
+#
+# TODO:
+#
+rule "Find subsumptant restrictions, less than"
+ when
+ # Covered x < 10
+ $higher :LiteralRestriction(
+ ( valueType == Field.FieldType.INT || == Field.FieldType.DOUBLE || == Field.FieldType.DATE ),
+ ( operator == Operator.LESS || == Operator.LESS_OR_EQUAL )
+ )
+
+ # Covered x < 100
+ $lower :LiteralRestriction(
+ fieldId == $higher.fieldId,
+ ( operator == Operator.LESS || == Operator.LESS_OR_EQUAL || == Operator.EQUAL)
+ )
+
+ eval( $lower.compareValues( $higher ) == - 1 )
+ then
+ insert( new Subsumption( $higher, $lower ) );
+end
Added: labs/jbossrules/trunk/drools-analytics/src/test/java/org/drools/analytics/subsumption/SubsumptantRestrictionsTest.java
===================================================================
--- labs/jbossrules/trunk/drools-analytics/src/test/java/org/drools/analytics/subsumption/SubsumptantRestrictionsTest.java (rev 0)
+++ labs/jbossrules/trunk/drools-analytics/src/test/java/org/drools/analytics/subsumption/SubsumptantRestrictionsTest.java 2008-02-02 09:10:10 UTC (rev 18267)
@@ -0,0 +1,182 @@
+package org.drools.analytics.subsumption;
+
+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.Field;
+import org.drools.analytics.components.LiteralRestriction;
+import org.drools.analytics.dao.AnalyticsResult;
+import org.drools.analytics.dao.AnalyticsResultFactory;
+import org.drools.analytics.report.components.Cause;
+import org.drools.base.RuleNameMatchesAgendaFilter;
+import org.drools.base.evaluators.Operator;
+
+public class SubsumptantRestrictionsTest extends SubsumptionTestBase {
+
+ public void testRestrictionRedundancyGreater() throws Exception {
+ StatelessSession session = getStatelessSession(this.getClass()
+ .getResourceAsStream("Restrictions.drl"));
+
+ session.setAgendaFilter(new RuleNameMatchesAgendaFilter(
+ "Find subsumptant restrictions, greater than"));
+
+ Collection<Object> data = new ArrayList<Object>();
+
+ AnalyticsResult result = AnalyticsResultFactory.createAnalyticsResult();
+ session.setGlobal("result", result);
+
+ /*
+ * Redundant restrictions
+ */
+ // Doubles
+ Field field1 = new Field();
+
+ LiteralRestriction lr1 = new LiteralRestriction();
+ lr1.setOrderNumber(0);
+ lr1.setFieldId(field1.getId());
+ lr1.setValue("1.0");
+ lr1.setOperator(Operator.GREATER);
+
+ LiteralRestriction lr2 = new LiteralRestriction();
+ lr2.setOrderNumber(1);
+ lr2.setFieldId(field1.getId());
+ lr2.setValue("2.0");
+ lr2.setOperator(Operator.GREATER);
+
+ // Integers
+ Field field2 = new Field();
+
+ LiteralRestriction lr3 = new LiteralRestriction();
+ lr3.setOrderNumber(0);
+ lr3.setFieldId(field2.getId());
+ lr3.setValue("1");
+ lr3.setOperator(Operator.GREATER);
+
+ LiteralRestriction lr4 = new LiteralRestriction();
+ lr4.setOrderNumber(1);
+ lr4.setFieldId(field2.getId());
+ lr4.setValue("2");
+ lr4.setOperator(Operator.GREATER_OR_EQUAL);
+
+ // Dates
+ Field field3 = new Field();
+
+ LiteralRestriction lr5 = new LiteralRestriction();
+ lr5.setOrderNumber(0);
+ lr5.setFieldId(field3.getId());
+ lr5.setValue("10-dec-2005");
+ lr5.setOperator(Operator.GREATER);
+
+ LiteralRestriction lr6 = new LiteralRestriction();
+ lr6.setOrderNumber(1);
+ lr6.setFieldId(field3.getId());
+ lr6.setValue("10-dec-2008");
+ lr6.setOperator(Operator.EQUAL);
+
+ data.add(lr1);
+ data.add(lr2);
+ data.add(lr3);
+ data.add(lr4);
+ data.add(lr5);
+ data.add(lr6);
+
+ StatelessSessionResult sessionResult = session.executeWithResults(data);
+
+ Map<Cause, Set<Cause>> map = createSubsumptionMap(sessionResult
+ .iterateObjects());
+
+ assertTrue(TestBase.causeMapContains(map, lr1, lr2));
+ assertTrue(TestBase.causeMapContains(map, lr3, lr4));
+ assertTrue(TestBase.causeMapContains(map, lr5, lr6));
+
+ if (!map.isEmpty()) {
+ fail("More redundancies than was expected.");
+ }
+ }
+
+ public void testRestrictionRedundancyLess() throws Exception {
+ StatelessSession session = getStatelessSession(this.getClass()
+ .getResourceAsStream("Restrictions.drl"));
+
+ session.setAgendaFilter(new RuleNameMatchesAgendaFilter(
+ "Find subsumptant restrictions, less than"));
+
+ Collection<Object> data = new ArrayList<Object>();
+
+ AnalyticsResult result = AnalyticsResultFactory.createAnalyticsResult();
+ session.setGlobal("result", result);
+
+ /*
+ * Redundant restrictions
+ */
+ // Doubles
+ Field field1 = new Field();
+
+ LiteralRestriction lr1 = new LiteralRestriction();
+ lr1.setOrderNumber(0);
+ lr1.setFieldId(field1.getId());
+ lr1.setValue("2.0");
+ lr1.setOperator(Operator.LESS);
+
+ LiteralRestriction lr2 = new LiteralRestriction();
+ lr2.setOrderNumber(1);
+ lr2.setFieldId(field1.getId());
+ lr2.setValue("1.0");
+ lr2.setOperator(Operator.LESS);
+
+ // Integers
+ Field field2 = new Field();
+
+ LiteralRestriction lr3 = new LiteralRestriction();
+ lr3.setOrderNumber(0);
+ lr3.setFieldId(field2.getId());
+ lr3.setValue("2");
+ lr3.setOperator(Operator.LESS);
+
+ LiteralRestriction lr4 = new LiteralRestriction();
+ lr4.setOrderNumber(1);
+ lr4.setFieldId(field2.getId());
+ lr4.setValue("1");
+ lr4.setOperator(Operator.LESS_OR_EQUAL);
+
+ // Dates
+ Field field3 = new Field();
+
+ LiteralRestriction lr5 = new LiteralRestriction();
+ lr5.setOrderNumber(0);
+ lr5.setFieldId(field3.getId());
+ lr5.setValue("10-dec-2008");
+ lr5.setOperator(Operator.LESS);
+
+ LiteralRestriction lr6 = new LiteralRestriction();
+ lr6.setOrderNumber(1);
+ lr6.setFieldId(field3.getId());
+ lr6.setValue("10-dec-2005");
+ lr6.setOperator(Operator.EQUAL);
+
+ data.add(lr1);
+ data.add(lr2);
+ data.add(lr3);
+ data.add(lr4);
+ data.add(lr5);
+ data.add(lr6);
+
+ StatelessSessionResult sessionResult = session.executeWithResults(data);
+
+ Map<Cause, Set<Cause>> map = createSubsumptionMap(sessionResult
+ .iterateObjects());
+
+ assertTrue(TestBase.causeMapContains(map, lr1, lr2));
+ assertTrue(TestBase.causeMapContains(map, lr3, lr4));
+ assertTrue(TestBase.causeMapContains(map, lr5, lr6));
+
+ if (!map.isEmpty()) {
+ fail("More redundancies than was expected.");
+ }
+ }
+}
More information about the jboss-svn-commits
mailing list