[jboss-svn-commits] JBL Code SVN: r16456 - labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Fri Nov 9 01:45:28 EST 2007


Author: michael.neale at jboss.com
Date: 2007-11-09 01:45:27 -0500 (Fri, 09 Nov 2007)
New Revision: 16456

Added:
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/LargeRuleBase.java
Log:
a test for checking serialization, compiler performance for large rulebases

Added: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/LargeRuleBase.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/LargeRuleBase.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/LargeRuleBase.java	2007-11-09 06:45:27 UTC (rev 16456)
@@ -0,0 +1,153 @@
+package org.drools.integrationtests;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.StringReader;
+
+import org.drools.RuleBase;
+import org.drools.RuleBaseFactory;
+import org.drools.compiler.DrlParser;
+import org.drools.compiler.DroolsParserException;
+import org.drools.compiler.PackageBuilder;
+import org.drools.lang.descr.PackageDescr;
+import org.drools.rule.Package;
+
+import junit.framework.Assert;
+
+/**
+ * This generates a large number of rules (complex ones) and then times compiling, serializing etc.
+ */
+public class LargeRuleBase {
+
+	public static void main(String[] args) throws Exception {
+		bigBlobCompile();
+		//smallBlobCompile();
+	}
+
+	private static void bigBlobCompile() throws DroolsParserException,
+			IOException, Exception {
+		StringBuffer buf = new StringBuffer();
+		buf.append(getHeader());
+
+		for (int i = 0; i < 5000; i++) {
+			String name = "x" + i;
+			int status = i;
+
+			String r = getTemplate1(name, status);
+			buf.append(r);
+		}
+
+		/* love you */long time = System.currentTimeMillis();
+
+		DrlParser ps = new DrlParser();
+		PackageDescr pkg = ps.parse(new StringReader(buf.toString()));
+
+		System.err.println("Time taken for parsing: "
+				+ (System.currentTimeMillis() - time));
+
+		time = System.currentTimeMillis();
+		PackageBuilder b = new PackageBuilder();
+		b.addPackage(pkg);
+		Assert.assertFalse(b.getErrors().toString(), b.hasErrors());
+
+		System.err.println("Time taken for compiling: "
+				+ (System.currentTimeMillis() - time));
+		time = System.currentTimeMillis();
+
+		Package p = b.getPackage();
+		RuleBase rb = RuleBaseFactory.newRuleBase();
+
+		rb.addPackage(p);
+
+
+
+		System.err.println("Time taken rete building: "
+				+ (System.currentTimeMillis() - time));
+
+		File f = new File("foo.rulebase");
+		if (f.exists()) f.delete();
+
+
+		time = System.currentTimeMillis();
+		ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(f));
+		out.writeObject(rb);
+		out.flush(); out.close();
+		System.err.println("Time taken serializing rulebase: "
+				+ (System.currentTimeMillis() - time));
+
+		time = System.currentTimeMillis();
+		ObjectInputStream in = new ObjectInputStream(new FileInputStream( f ) );
+		RuleBase rb_ = (RuleBase) in.readObject();
+		System.err.println("Time taken de-serializing rulebase: "
+				+ (System.currentTimeMillis() - time));
+
+
+
+	}
+
+	private static void smallBlobCompile() throws DroolsParserException,
+			IOException, Exception {
+
+
+		/* love you */long time = System.currentTimeMillis();
+		PackageBuilder b = new PackageBuilder();
+		b.addPackageFromDrl(new StringReader(getHeader()));
+		for (int i = 0; i < 5000; i++) {
+			String name = "x" + i;
+			int status = i;
+
+			String r = getTemplate1(name, status);
+			b.addPackageFromDrl(new StringReader(r));
+		}
+
+
+
+		Assert.assertFalse(b.getErrors().toString(), b.hasErrors());
+
+		System.err.println("Time taken for compiling: "
+				+ (System.currentTimeMillis() - time));
+		time = System.currentTimeMillis();
+
+		Package p = b.getPackage();
+		RuleBase rb = RuleBaseFactory.newRuleBase();
+
+		rb.addPackage(p);
+
+		System.err.println("Time taken rete building: "
+				+ (System.currentTimeMillis() - time));
+	}
+
+	private static String getHeader() {
+		return "package org.drools.test; \n " + "import org.drools.Person; \n "
+				+ "import org.drools.Cheese; \n "
+				+ "import org.drools.Cheesery; \n "
+				+ " import java.util.List \n "
+				+ " global List list \n dialect 'mvel'\n  ";
+	}
+
+	private static String getTemplate1(String name, int status) {
+		return "rule 'match Person "
+				+ name
+				+ "' \n"
+				+ " agenda-group \'xxx\' \n"
+				+ " salience ($age2 - $age1) \n "
+				+ " dialect 'mvel' \n"
+				+ "	when \n "
+				+ " 		$person : Person(name=='"
+				+ name
+				+ "', $age1 : age ) \n "
+				+ "	    cheesery : Cheesery( cheeses contains $person, status == "
+				+ status + " ) \n "
+				+ " 		cheeses : List() from cheesery.getCheeses() \n "
+				+ "		Person( age < ( $age1 ) ) \n "
+				+ "		Person( $age2 : age -> ( $age1 == $age2 ) ) \n "
+				+ "		eval( $age1 == $age2 ) \n " + "   then \n "
+				+ "		list.add( $person ); \n "
+				+ "		$person.setStatus(\"match Person ok\"); \n " + " end \n";
+	}
+
+}


Property changes on: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/LargeRuleBase.java
___________________________________________________________________
Name: svn:eol-style
   + native




More information about the jboss-svn-commits mailing list