[jboss-svn-commits] JBL Code SVN: r17239 - labs/jbossrules/branches/temporal_rete/drools-core/src/test/java/org/drools/base.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Fri Dec 14 10:37:58 EST 2007


Author: tolbrino
Date: 2007-12-14 10:37:58 -0500 (Fri, 14 Dec 2007)
New Revision: 17239

Modified:
   labs/jbossrules/branches/temporal_rete/drools-core/src/test/java/org/drools/base/TemporalEvaluatorFactoryTest.java
Log:
JBRULES-1374
completed test coverage for 'after', 'before' and 'coincides' evaluators

Modified: labs/jbossrules/branches/temporal_rete/drools-core/src/test/java/org/drools/base/TemporalEvaluatorFactoryTest.java
===================================================================
--- labs/jbossrules/branches/temporal_rete/drools-core/src/test/java/org/drools/base/TemporalEvaluatorFactoryTest.java	2007-12-14 13:40:15 UTC (rev 17238)
+++ labs/jbossrules/branches/temporal_rete/drools-core/src/test/java/org/drools/base/TemporalEvaluatorFactoryTest.java	2007-12-14 15:37:58 UTC (rev 17239)
@@ -22,10 +22,18 @@
 import java.util.Collection;
 import java.util.List;
 
+import org.drools.RuntimeDroolsException;
 import org.drools.base.evaluators.EvaluatorDefinition;
 import org.drools.base.evaluators.EvaluatorRegistry;
 import org.drools.common.EventFactHandle;
 import org.drools.common.InternalWorkingMemory;
+import org.drools.rule.Declaration;
+import org.drools.rule.VariableRestriction.BooleanVariableContextEntry;
+import org.drools.rule.VariableRestriction.CharVariableContextEntry;
+import org.drools.rule.VariableRestriction.DoubleVariableContextEntry;
+import org.drools.rule.VariableRestriction.LongVariableContextEntry;
+import org.drools.rule.VariableRestriction.ObjectVariableContextEntry;
+import org.drools.rule.VariableRestriction.VariableContextEntry;
 import org.drools.spi.Evaluator;
 import org.drools.spi.Extractor;
 import org.drools.spi.FieldExtractor;
@@ -45,20 +53,71 @@
 	public void testAfter() {
 		registry
 				.addEvaluatorDefinition("org.drools.base.evaluators.AfterEvaluatorDefinition");
-		
+
 		EventFactHandle foo = new EventFactHandle(1, "foo", 1, 1, 2);
-		EventFactHandle bar = new EventFactHandle(2, "bar", 1, 2, 2);
-		EventFactHandle drool = new EventFactHandle(1, "drool", 1, 4, 2);
-		
+		EventFactHandle bar = new EventFactHandle(2, "bar", 1, 4, 3);
+		EventFactHandle drool = new EventFactHandle(1, "drool", 1, 5, 2);
+
 		final Object[][] data = { { drool, "after", foo, Boolean.TRUE },
+				{ drool, "after", bar, Boolean.FALSE },
+				{ bar, "after", foo, Boolean.TRUE },
+				{ bar, "after", drool, Boolean.FALSE },
 				{ foo, "after", drool, Boolean.FALSE },
-				{ bar, "after", foo, Boolean.FALSE },
-				{ drool, "after[1]", foo, Boolean.TRUE },
-				{ foo, "after[1]", drool, Boolean.FALSE },
-				{ bar, "after[2]", foo, Boolean.FALSE },
-				{ drool, "after[1,3]", foo, Boolean.TRUE },
-				{ bar, "after[0,1]", foo, Boolean.FALSE },
-				{ drool, "after[0,2]", bar, Boolean.TRUE }};
+				{ foo, "after", bar, Boolean.FALSE },
+				{ foo, "not after", bar, Boolean.TRUE },
+				{ foo, "not after", drool, Boolean.TRUE },
+				{ bar, "not after", drool, Boolean.TRUE },
+				{ bar, "not after", foo, Boolean.FALSE },
+				{ drool, "not after", foo, Boolean.FALSE },
+				{ drool, "not after", bar, Boolean.TRUE },
+				{ bar, "after[1]", foo, Boolean.TRUE },
+				{ bar, "after[0]", foo, Boolean.FALSE },
+				{ bar, "after[-3]", drool, Boolean.TRUE },
+				{ bar, "after[-4]", drool, Boolean.FALSE },
+				{ drool, "after[2]", foo, Boolean.TRUE },
+				{ drool, "after[1]", foo, Boolean.FALSE },
+				{ drool, "after[-2]", bar, Boolean.TRUE },
+				{ drool, "after[-3]", bar, Boolean.FALSE },
+				{ foo, "after[-6]", drool, Boolean.TRUE },
+				{ foo, "after[-7]", drool, Boolean.FALSE },
+				{ foo, "after[-6]", bar, Boolean.TRUE },
+				{ foo, "after[-7]", bar, Boolean.FALSE },
+				{ bar, "not after[1]", foo, Boolean.FALSE },
+				{ bar, "not after[0]", foo, Boolean.TRUE },
+				{ bar, "not after[-3]", drool, Boolean.FALSE },
+				{ bar, "not after[-4]", drool, Boolean.TRUE },
+				{ drool, "not after[2]", foo, Boolean.FALSE },
+				{ drool, "not after[1]", foo, Boolean.TRUE },
+				{ drool, "not after[-2]", bar, Boolean.FALSE },
+				{ drool, "not after[-3]", bar, Boolean.TRUE },
+				{ foo, "not after[-6]", drool, Boolean.FALSE },
+				{ foo, "not after[-7]", drool, Boolean.TRUE },
+				{ foo, "not after[-6]", bar, Boolean.FALSE },
+				{ foo, "not after[-7]", bar, Boolean.TRUE },
+				{ drool, "after[1,4]", foo, Boolean.TRUE },
+				{ drool, "after[3,6]", foo, Boolean.FALSE },
+				{ drool, "after[-3,1]", bar, Boolean.TRUE },
+				{ drool, "after[-1,3]", bar, Boolean.FALSE },
+				{ bar, "after[1,5]", foo, Boolean.TRUE },
+				{ bar, "after[2,5]", foo, Boolean.FALSE },
+				{ bar, "after[-3,0]", drool, Boolean.TRUE },
+				{ bar, "after[-2,1]", drool, Boolean.FALSE },
+				{ foo, "after[-7,-3]", bar, Boolean.TRUE },
+				{ foo, "after[-5,-1]", bar, Boolean.FALSE },
+				{ foo, "after[-6,-5]", drool, Boolean.TRUE },
+				{ foo, "after[-5,-4]", drool, Boolean.FALSE },
+				{ drool, "not after[1,4]", foo, Boolean.FALSE },
+				{ drool, "not after[3,6]", foo, Boolean.TRUE },
+				{ drool, "not after[-3,1]", bar, Boolean.FALSE },
+				{ drool, "not after[-1,3]", bar, Boolean.TRUE },
+				{ bar, "not after[1,5]", foo, Boolean.FALSE },
+				{ bar, "not after[2,5]", foo, Boolean.TRUE },
+				{ bar, "not after[-3,0]", drool, Boolean.FALSE },
+				{ bar, "not after[-2,1]", drool, Boolean.TRUE },
+				{ foo, "not after[-7,-3]", bar, Boolean.FALSE },
+				{ foo, "not after[-5,-1]", bar, Boolean.TRUE },
+				{ foo, "not after[-6,-5]", drool, Boolean.FALSE },
+				{ foo, "not after[-5,-4]", drool, Boolean.TRUE }, };
 
 		runEvaluatorTest(data, ValueType.OBJECT_TYPE);
 	}
@@ -66,25 +125,123 @@
 	public void testBefore() {
 		registry
 				.addEvaluatorDefinition("org.drools.base.evaluators.BeforeEvaluatorDefinition");
-		
+
 		EventFactHandle foo = new EventFactHandle(1, "foo", 1, 1, 2);
 		EventFactHandle bar = new EventFactHandle(2, "bar", 1, 2, 2);
-		EventFactHandle drool = new EventFactHandle(1, "drool", 1, 4, 2);
-		
-		final Object[][] data = { { foo, "before", drool, Boolean.TRUE },
+		EventFactHandle drool = new EventFactHandle(1, "drool", 1, 5, 3);
+
+		final Object[][] data = { 
+				{ foo, "before", drool, Boolean.TRUE },
+				{ foo, "before", bar, Boolean.FALSE },
 				{ drool, "before", foo, Boolean.FALSE },
-				{ foo, "before", bar, Boolean.FALSE },
-				{ bar, "before", drool, Boolean.FALSE },
-				{ foo, "before[1]", drool, Boolean.TRUE },
-				{ bar, "before[1]", drool, Boolean.FALSE },
-				{ bar, "before[1]", foo, Boolean.FALSE },
-				{ foo, "before[1,3]", drool, Boolean.TRUE },
-				{ foo, "before[0,1]", bar, Boolean.FALSE },
-				{ bar, "before[0,2]", drool, Boolean.TRUE }};
+				{ drool, "before", bar, Boolean.FALSE },
+				{ bar, "before", drool, Boolean.TRUE },
+				{ bar, "before", foo, Boolean.FALSE },
+				{ foo, "not before", drool, Boolean.FALSE },
+				{ foo, "not before", bar, Boolean.TRUE },
+				{ drool, "not before", foo, Boolean.TRUE },
+				{ drool, "not before", bar, Boolean.TRUE },
+				{ bar, "not before", drool, Boolean.FALSE },
+				{ bar, "not before", foo, Boolean.TRUE },
+				{ foo, "before[2]", drool, Boolean.TRUE },
+				{ foo, "before[3]", drool, Boolean.FALSE },
+				{ foo, "before[-1]", bar, Boolean.TRUE },
+				{ foo, "before[-2]", bar, Boolean.FALSE },
+				{ bar, "before[1]", drool, Boolean.TRUE },
+				{ bar, "before[2]", drool, Boolean.FALSE },
+				{ bar, "before[-3]", foo, Boolean.TRUE },
+				{ bar, "before[-2]", foo, Boolean.FALSE },
+				{ drool, "before[-6]", bar, Boolean.TRUE },
+				{ drool, "before[-5]", bar, Boolean.FALSE },
+				{ drool, "before[-7]", foo, Boolean.TRUE },
+				{ drool, "before[-8]", foo, Boolean.FALSE },
+				{ foo, "not before[2]", drool, Boolean.FALSE },
+				{ foo, "not before[3]", drool, Boolean.TRUE },
+				{ foo, "not before[-1]", bar, Boolean.FALSE },
+				{ foo, "not before[-2]", bar, Boolean.TRUE },
+				{ bar, "not before[1]", drool, Boolean.FALSE },
+				{ bar, "not before[2]", drool, Boolean.TRUE },
+				{ bar, "not before[-3]", foo, Boolean.FALSE },
+				{ bar, "not before[-2]", foo, Boolean.TRUE },
+				{ drool, "not before[-6]", bar, Boolean.FALSE },
+				{ drool, "not before[-5]", bar, Boolean.TRUE },
+				{ drool, "not before[-7]", foo, Boolean.FALSE },
+				{ drool, "not before[-8]", foo, Boolean.TRUE },
+				{ foo, "before[2,4]", drool, Boolean.TRUE },
+				{ foo, "before[3,4]", drool, Boolean.FALSE },
+				{ foo, "before[-1,1]", bar, Boolean.TRUE },
+				{ foo, "before[0,-2]", bar, Boolean.FALSE },
+				{ bar, "before[0,4]", drool, Boolean.TRUE },
+				{ bar, "before[2,4]", drool, Boolean.FALSE },
+				{ bar, "before[-4,0]", foo, Boolean.TRUE },
+				{ bar, "before[-2,0]", foo, Boolean.FALSE },
+				{ drool, "before[-6,-3]", bar, Boolean.TRUE },
+				{ drool, "before[-5,-3]", bar, Boolean.FALSE },
+				{ drool, "before[-7,-4]", foo, Boolean.TRUE },
+				{ drool, "before[-6,-4]", foo, Boolean.FALSE },
+				{ foo, "not before[2,4]", drool, Boolean.FALSE },
+				{ foo, "not before[3,4]", drool, Boolean.TRUE },
+				{ foo, "not before[-1,1]", bar, Boolean.FALSE },
+				{ foo, "not before[0,-2]", bar, Boolean.TRUE },
+				{ bar, "not before[0,4]", drool, Boolean.FALSE },
+				{ bar, "not before[2,4]", drool, Boolean.TRUE },
+				{ bar, "not before[-4,0]", foo, Boolean.FALSE },
+				{ bar, "not before[-2,0]", foo, Boolean.TRUE },
+				{ drool, "not before[-6,-3]", bar, Boolean.FALSE },
+				{ drool, "not before[-5,-3]", bar, Boolean.TRUE },
+				{ drool, "not before[-7,-4]", foo, Boolean.FALSE },
+				{ drool, "not before[-6,-4]", foo, Boolean.TRUE } };
 
 		runEvaluatorTest(data, ValueType.OBJECT_TYPE);
 	}
 	
+	public void testCoincides() {
+		registry
+				.addEvaluatorDefinition("org.drools.base.evaluators.CoincidesEvaluatorDefinition");
+
+		EventFactHandle foo = new EventFactHandle(1, "foo", 1, 2, 3);
+		EventFactHandle bar = new EventFactHandle(2, "bar", 1, 2, 3);
+		EventFactHandle drool = new EventFactHandle(1, "drool", 1, 2, 2);
+		EventFactHandle mole = new EventFactHandle(1, "mole", 1, 1, 2);
+
+		final Object[][] data = { 
+				{ foo, "coincides", bar, Boolean.TRUE },
+				{ foo, "coincides", drool, Boolean.FALSE },
+				{ foo, "coincides", mole, Boolean.FALSE },
+				{ drool, "coincides", mole, Boolean.FALSE },
+				{ foo, "not coincides", bar, Boolean.FALSE },
+				{ foo, "not coincides", drool, Boolean.TRUE },
+				{ foo, "not coincides", mole, Boolean.TRUE },
+				{ drool, "not coincides", mole, Boolean.TRUE },
+				{ foo, "coincides[1]", bar, Boolean.TRUE },
+				{ foo, "coincides[1]", drool, Boolean.TRUE },
+				{ foo, "coincides[2]", mole, Boolean.TRUE },
+				{ foo, "coincides[1]", mole, Boolean.FALSE },
+				{ drool, "coincides[1]", mole, Boolean.TRUE },
+				{ foo, "not coincides[1]", bar, Boolean.FALSE },
+				{ foo, "not coincides[1]", drool, Boolean.FALSE },
+				{ foo, "not coincides[2]", mole, Boolean.FALSE },
+				{ foo, "not coincides[1]", mole, Boolean.TRUE },
+				{ drool, "not coincides[1]", mole, Boolean.FALSE },
+				{ foo, "coincides[1,2]", bar, Boolean.TRUE },
+				{ foo, "coincides[0,1]", drool, Boolean.TRUE },
+				{ foo, "coincides[1,0]", drool, Boolean.FALSE },
+				{ foo, "coincides[1,2]", mole, Boolean.TRUE },
+				{ foo, "coincides[1,1]", mole, Boolean.FALSE},
+				{ drool, "coincides[1,1]", mole, Boolean.TRUE },
+				{ drool, "coincides[0,1]", mole, Boolean.FALSE },
+				{ foo, "not coincides[1,2]", bar, Boolean.FALSE },
+				{ foo, "not coincides[0,1]", drool, Boolean.FALSE },
+				{ foo, "not coincides[1,0]", drool, Boolean.TRUE},
+				{ foo, "not coincides[1,2]", mole, Boolean.FALSE },
+				{ foo, "not coincides[1,1]", mole, Boolean.TRUE },
+				{ drool, "not coincides[1,1]", mole, Boolean.FALSE },
+				{ drool, "not coincides[0,1]", mole, Boolean.TRUE }
+		};
+
+		runEvaluatorTest(data, ValueType.OBJECT_TYPE);
+	}
+
 	private void runEvaluatorTest(final Object[][] data,
 			final ValueType valueType) {
 		final Extractor extractor = new MockExtractor();
@@ -108,16 +265,15 @@
 			final Evaluator evaluator = evalDef.getEvaluator(valueType,
 					evaluatorStr, isNegated, parameters);
 			System.out.println(evaluator);
-			
+
 			checkEvaluatorMethodWith2Extractors(valueType, extractor, row,
 					evaluator);
-			/*
-			 * checkEvaluatorMethodWithFieldValue(valueType, extractor, row,
-			 * evaluator); checkEvaluatorMethodCachedRight(valueType, extractor,
-			 * row, evaluator); checkEvaluatorMethodCachedLeft(valueType,
-			 * extractor, row, evaluator);
-			 * 
-			 */
+			checkEvaluatorMethodCachedRight(valueType, extractor, row,
+					evaluator);
+			checkEvaluatorMethodCachedLeft(valueType, extractor, row, evaluator);
+			checkEvaluatorMethodWithFieldValue(valueType, extractor, row, evaluator);
+			
+
 			assertEquals(valueType, evaluator.getValueType());
 
 		}
@@ -140,6 +296,145 @@
 		}
 	}
 
+	private void checkEvaluatorMethodCachedRight(final ValueType valueType,
+			final Extractor extractor, final Object[] row,
+			final Evaluator evaluator) {
+		final VariableContextEntry context = this.getContextEntry(evaluator,
+				(FieldExtractor) extractor, valueType, row);
+		final boolean result = evaluator.evaluateCachedRight(null, context,
+				row[2]);
+		final String message = "The evaluator type: [" + valueType
+				+ "] with CachedRight incorrectly returned " + result
+				+ " for [" + row[0] + " " + row[1] + " " + row[2]
+				+ "]. It was asserted to return " + row[3];
+
+		if (row[3] == Boolean.TRUE) {
+			assertTrue(message, result);
+		} else {
+			assertFalse(message, result);
+		}
+	}
+
+	private void checkEvaluatorMethodCachedLeft(final ValueType valueType,
+			final Extractor extractor, final Object[] row,
+			final Evaluator evaluator) {
+		final VariableContextEntry context = this.getContextEntry(evaluator,
+				(FieldExtractor) extractor, valueType, row);
+		final boolean result = evaluator.evaluateCachedLeft(null, context,
+				row[0]);
+		final String message = "The evaluator type: [" + valueType
+				+ "] with CachedLeft incorrectly returned " + result + " for ["
+				+ row[0] + " " + row[1] + " " + row[2]
+				+ "]. It was asserted to return " + row[3];
+
+		if (row[3] == Boolean.TRUE) {
+			assertTrue(message, result);
+		} else {
+			assertFalse(message, result);
+		}
+	}
+
+	private void checkEvaluatorMethodWithFieldValue(final ValueType valueType,
+			final Extractor extractor, final Object[] row,
+			final Evaluator evaluator) {
+		final FieldValue value = FieldFactory.getFieldValue(row[2]);
+		RuntimeDroolsException exc = null;
+		try {
+			final boolean result = evaluator.evaluate(null, extractor, row[0],
+				value);
+		} catch (RuntimeDroolsException e) {
+			exc = e;
+		}
+		assertNotNull(exc);
+	}
+
+	private VariableContextEntry getContextEntry(final Evaluator evaluator,
+			final FieldExtractor extractor, final ValueType valueType,
+			final Object[] row) {
+		final Declaration declaration = new Declaration("test", extractor, null);
+		final ValueType coerced = evaluator.getCoercedValueType();
+
+		if (coerced.isIntegerNumber()) {
+			final LongVariableContextEntry context = new LongVariableContextEntry(
+					extractor, declaration, evaluator);
+
+			if (row[2] == null) {
+				context.leftNull = true;
+			} else {
+				context.left = ((Number) row[2]).longValue();
+			}
+
+			if (row[0] == null) {
+				context.rightNull = true;
+			} else {
+				context.right = ((Number) row[0]).longValue();
+			}
+			return context;
+		} else if (coerced.isChar()) {
+			final CharVariableContextEntry context = new CharVariableContextEntry(
+					extractor, declaration, evaluator);
+
+			if (row[2] == null) {
+				context.leftNull = true;
+			} else {
+				context.left = ((Character) row[2]).charValue();
+			}
+
+			if (row[0] == null) {
+				context.rightNull = true;
+			} else {
+				context.right = ((Character) row[0]).charValue();
+			}
+			return context;
+		} else if (coerced.isBoolean()) {
+			final BooleanVariableContextEntry context = new BooleanVariableContextEntry(
+					extractor, declaration, evaluator);
+
+			if (row[2] == null) {
+				context.leftNull = true;
+			} else {
+				context.left = ((Boolean) row[2]).booleanValue();
+			}
+
+			if (row[0] == null) {
+				context.rightNull = true;
+			} else {
+				context.right = ((Boolean) row[0]).booleanValue();
+			}
+			return context;
+		} else if (coerced.isFloatNumber()) {
+			final DoubleVariableContextEntry context = new DoubleVariableContextEntry(
+					extractor, declaration, evaluator);
+			if (row[2] == null) {
+				context.leftNull = true;
+			} else {
+				context.left = ((Number) row[2]).doubleValue();
+			}
+
+			if (row[0] == null) {
+				context.rightNull = true;
+			} else {
+				context.right = ((Number) row[0]).doubleValue();
+			}
+			return context;
+		} else {
+			final ObjectVariableContextEntry context = new ObjectVariableContextEntry(
+					extractor, declaration, evaluator);
+			if (row[2] == null) {
+				context.leftNull = true;
+			} else {
+				context.left = row[2];
+			}
+
+			if (row[0] == null) {
+				context.rightNull = true;
+			} else {
+				context.right = row[0];
+			}
+			return context;
+		}
+	}
+
 	private static class MockExtractor implements FieldExtractor {
 
 		private static final long serialVersionUID = 400L;




More information about the jboss-svn-commits mailing list