From: <jbo...@li...> - 2006-01-24 03:12:33
|
Author: mic...@jb... Date: 2006-01-23 22:12:21 -0500 (Mon, 23 Jan 2006) New Revision: 2180 Added: trunk/labs/jbossrules/drools-natural-dsl/src/test/java/org/drools/natural/template/NLGrammarTest.java Modified: trunk/labs/jbossrules/drools-natural-dsl/src/main/java/org/drools/natural/template/NLGrammar.java trunk/labs/jbossrules/drools-natural-dsl/src/main/java/org/drools/natural/template/NLMappingItem.java trunk/labs/jbossrules/drools-natural-dsl/src/test/java/org/drools/natural/template/NLExpressionCompilerTest.java trunk/labs/jbossrules/drools-natural-dsl/src/test/java/org/drools/natural/template/TemplateFactoryTest.java Log: small improvements Modified: trunk/labs/jbossrules/drools-natural-dsl/src/main/java/org/drools/natural/template/NLGrammar.java =================================================================== --- trunk/labs/jbossrules/drools-natural-dsl/src/main/java/org/drools/natural/template/NLGrammar.java 2006-01-23 22:41:41 UTC (rev 2179) +++ trunk/labs/jbossrules/drools-natural-dsl/src/main/java/org/drools/natural/template/NLGrammar.java 2006-01-24 03:12:21 UTC (rev 2180) @@ -23,18 +23,18 @@ /** * When loading from properties, the order in which they apprear in the props file - * is the priority. + * is the priority. (TODO: order means nothing to properties it seems). * * Which makes sense intuitively, the order you read them it the order in which they will be applied. */ public void loadFromProperties(Properties props) { - int i = 0; + int i = props.size(); for ( Iterator iter = props.keySet().iterator(); iter.hasNext(); ) { String key = (String) iter.next(); String property = props.getProperty(key); NLMappingItem item = new NLMappingItem(i, key, property); addNLItem(item); - i++; + i--; } } Modified: trunk/labs/jbossrules/drools-natural-dsl/src/main/java/org/drools/natural/template/NLMappingItem.java =================================================================== --- trunk/labs/jbossrules/drools-natural-dsl/src/main/java/org/drools/natural/template/NLMappingItem.java 2006-01-23 22:41:41 UTC (rev 2179) +++ trunk/labs/jbossrules/drools-natural-dsl/src/main/java/org/drools/natural/template/NLMappingItem.java 2006-01-24 03:12:21 UTC (rev 2180) @@ -40,8 +40,8 @@ if ( arg instanceof NLMappingItem ) { NLMappingItem item = (NLMappingItem) arg; if ( item.priority == this.priority ) return 0; - if ( item.priority > this.priority ) return 1; - if ( item.priority < this.priority ) return -1; + if ( item.priority > this.priority ) return -1; + if ( item.priority < this.priority ) return 1; return 0; } else { @@ -49,4 +49,8 @@ } } + int getPriority() { + return this.priority; + } + } Modified: trunk/labs/jbossrules/drools-natural-dsl/src/test/java/org/drools/natural/template/NLExpressionCompilerTest.java =================================================================== --- trunk/labs/jbossrules/drools-natural-dsl/src/test/java/org/drools/natural/template/NLExpressionCompilerTest.java 2006-01-23 22:41:41 UTC (rev 2179) +++ trunk/labs/jbossrules/drools-natural-dsl/src/test/java/org/drools/natural/template/NLExpressionCompilerTest.java 2006-01-24 03:12:21 UTC (rev 2180) @@ -14,12 +14,12 @@ String result = compiler.compile("bob likes cheese"); assertEquals("likesCheese(bob)", result); - - + //now lets use a properties Properties props = new Properties(); props.setProperty("{0} likes cheese", "likesCheese({0})"); props.setProperty("the date between {0} and {1}", "dateCompare({0}, {1})"); + props.setProperty("bind", "=>"); grammar = new NLGrammar(); grammar.loadFromProperties(props); @@ -31,6 +31,8 @@ result = compiler.compile("the date between bob and michael"); assertEquals("dateCompare(bob, michael)", result); + result = compiler.compile("bind"); + assertEquals("=>", result); } @@ -56,9 +58,48 @@ long start = System.currentTimeMillis(); String result = compiler.compile("michael likes cheese and michael is happy"); long runtime = System.currentTimeMillis() - start; - System.out.println("Runtime for compile: " + runtime + "ms"); + System.out.println("Runtime for compile with dictionary of 1000: " + runtime + "ms"); assertEquals("michael.likesCheese() and michael.isHappy()", result); } + + public void testNestingAndOrderOfExpressions() { + NLGrammar grammar = new NLGrammar(); + + grammar.addNLItem(new NLMappingItem(0, "{0} likes cheese", "{0}.likesCheese()" )); + grammar.addNLItem(new NLMappingItem(1, "print out cheese fan status {0}", "print({0})" )); + + + NLExpressionCompiler compiler = new NLExpressionCompiler(grammar); + String nl = "print out cheese fan status bob likes cheese"; + String expected = "print(bob.likesCheese())"; + + String result = compiler.compile(nl); + + assertEquals(expected, result); + + + grammar = new NLGrammar(); + + grammar.addNLItem(new NLMappingItem(1, "date of ' {0} '", "dateOf({0})")); + grammar.addNLItem(new NLMappingItem(2, "age of [ {0} ]", "{0}.getAge()")); + grammar.addNLItem(new NLMappingItem(3, "Today", "new java.util.Date()")); + grammar.addNLItem(new NLMappingItem(4, "{0} is before {1}", "({0}).compareTo({1}) > 0")); + + + nl = "date of ' 10-jul-2006 ' is before Today"; + + compiler = new NLExpressionCompiler(grammar); + expected = "(dateOf(10-jul-2006)).compareTo(new java.util.Date()) > 0"; + assertEquals(expected, compiler.compile(nl)); + + nl = "age of [ bob ] < age of [ michael ]"; + expected = "bob.getAge() < michael.getAge()"; + assertEquals(expected, compiler.compile(nl)); + + + + } + } Added: trunk/labs/jbossrules/drools-natural-dsl/src/test/java/org/drools/natural/template/NLGrammarTest.java =================================================================== --- trunk/labs/jbossrules/drools-natural-dsl/src/test/java/org/drools/natural/template/NLGrammarTest.java 2006-01-23 22:41:41 UTC (rev 2179) +++ trunk/labs/jbossrules/drools-natural-dsl/src/test/java/org/drools/natural/template/NLGrammarTest.java 2006-01-24 03:12:21 UTC (rev 2180) @@ -0,0 +1,63 @@ +package org.drools.natural.template; + +import java.io.ByteArrayInputStream; +import java.util.Collection; +import java.util.Properties; + +import junit.framework.TestCase; + +public class NLGrammarTest extends TestCase { + + /** Check that it sets up priorities correctly */ + public void testLoadFromProperties() throws Exception { + NLGrammar grammar = new NLGrammar(); + + + String data = "number\\ 1=number 1\n" + + "number\\ 2=number 2"; + + Properties props = new Properties(); + + ByteArrayInputStream stream = new ByteArrayInputStream(data.getBytes("UTF-8")); + + props.load(stream); + + grammar.loadFromProperties(props); + + Collection list = grammar.getMappings(); + Object[] items = list.toArray(); + + NLMappingItem item = (NLMappingItem) items[0]; + assertEquals("number 1", item.getNaturalTemplate()); + assertEquals(1, item.getPriority()); + + item = (NLMappingItem) items[1]; + assertEquals("number 2", item.getNaturalTemplate()); + assertEquals(2, item.getPriority()); + + props = new Properties(); + props.setProperty("znumber 1", "number 1"); + props.setProperty("bnumber 2", "number 2"); + props.setProperty("anumber 3", "number 3"); + + grammar = new NLGrammar(); + grammar.loadFromProperties(props); + + list = grammar.getMappings(); + items = list.toArray(); + + item = (NLMappingItem) items[0]; + assertEquals("znumber 1", item.getNaturalTemplate()); + assertEquals(1, item.getPriority()); + + item = (NLMappingItem) items[1]; + assertEquals("bnumber 2", item.getNaturalTemplate()); + assertEquals(2, item.getPriority()); + + item = (NLMappingItem) items[2]; + assertEquals("anumber 3", item.getNaturalTemplate()); + assertEquals(3, item.getPriority()); + + } + +} Property changes on: trunk/labs/jbossrules/drools-natural-dsl/src/test/java/org/drools/natural/template/NLGrammarTest.java ___________________________________________________________________ Name: svn:eol-style + native Modified: trunk/labs/jbossrules/drools-natural-dsl/src/test/java/org/drools/natural/template/TemplateFactoryTest.java =================================================================== --- trunk/labs/jbossrules/drools-natural-dsl/src/test/java/org/drools/natural/template/TemplateFactoryTest.java 2006-01-23 22:41:41 UTC (rev 2179) +++ trunk/labs/jbossrules/drools-natural-dsl/src/test/java/org/drools/natural/template/TemplateFactoryTest.java 2006-01-24 03:12:21 UTC (rev 2180) @@ -27,13 +27,13 @@ assertEquals("chunks", list.get(2)); - list = factory.lexChunks("{42} more {0} chunks"); + list = factory.lexChunks("{42} more '{0}' chunks"); assertEquals(4, list.size()); assertEquals("{42}", list.get(0)); - assertEquals("more", list.get(1)); + assertEquals("more '", list.get(1)); assertEquals("{0}", list.get(2)); - assertEquals("chunks", list.get(3)); + assertEquals("' chunks", list.get(3)); } |