use of org.drools.testcoverage.common.model.Cheese in project drools by kiegroup.
the class AccumulateTest method testAccumulateReturningNull.
@Test(timeout = 10000)
public void testAccumulateReturningNull() {
final String drl = "package org.drools.compiler\n" + "\n" + "import " + Cheese.class.getCanonicalName() + ";\n" + "\n" + "global java.util.List results;\n" + "\n" + "rule \"Accumulate Returning Null\" salience 100\n" + " when\n" + " // emulating a null return value for accumulate\n" + " $totalAmount : Number() from accumulate( Cheese( $price : price ),\n" + " init( ),\n" + " action( ),\n" + " result( null ) );\n" + " then\n" + " //System.out.println(\"Total amount = US$ \"+$totalAmount );\n" + " results.add($totalAmount);\n" + "end ";
final KieBase kbase = KieBaseUtil.getKieBaseFromKieModuleFromDrl("accumulate-test", kieBaseTestConfiguration, drl);
final KieSession wm = kbase.newKieSession();
try {
final List<?> results = new ArrayList<>();
wm.setGlobal("results", results);
wm.insert(new Cheese("stilton", 10));
} finally {
wm.dispose();
}
}
use of org.drools.testcoverage.common.model.Cheese in project drools by kiegroup.
the class AccumulateTest method execTestAccumulateCount.
private void execTestAccumulateCount(final String fileName) {
final KieBase kbase = KieBaseUtil.getKieBaseFromClasspathResources("accumulate-test", kieBaseTestConfiguration, fileName);
final KieSession wm = kbase.newKieSession();
try {
final List<?> results = new ArrayList<>();
wm.setGlobal("results", results);
final Cheese[] cheese = new Cheese[] { new Cheese("stilton", 8), new Cheese("stilton", 10), new Cheese("stilton", 9), new Cheese("brie", 4), new Cheese("brie", 1), new Cheese("provolone", 8) };
final Person bob = new Person("Bob", "stilton");
final FactHandle[] cheeseHandles = new FactHandle[cheese.length];
for (int i = 0; i < cheese.length; i++) {
cheeseHandles[i] = wm.insert(cheese[i]);
}
final FactHandle bobHandle = wm.insert(bob);
// ---------------- 1st scenario
wm.fireAllRules();
// no fire, as per rule constraints
assertEquals(1, results.size());
assertEquals(3, ((Number) results.get(results.size() - 1)).intValue());
// ---------------- 2nd scenario
final int index = 1;
cheese[index].setPrice(3);
wm.update(cheeseHandles[index], cheese[index]);
wm.fireAllRules();
// 1 fire
assertEquals(2, results.size());
assertEquals(3, ((Number) results.get(results.size() - 1)).intValue());
// ---------------- 3rd scenario
bob.setLikes("brie");
wm.update(bobHandle, bob);
wm.fireAllRules();
// 2 fires
assertEquals(3, results.size());
assertEquals(2, ((Number) results.get(results.size() - 1)).intValue());
// ---------------- 4th scenario
wm.delete(cheeseHandles[3]);
wm.fireAllRules();
// should not have fired as per constraint
assertEquals(3, results.size());
} finally {
wm.dispose();
}
}
use of org.drools.testcoverage.common.model.Cheese in project drools by kiegroup.
the class AccumulateTest method testAccumulateMinMax.
@Test(timeout = 10000)
public void testAccumulateMinMax() {
final String drl = "package org.drools.compiler.test \n" + "import " + Cheese.class.getCanonicalName() + ";\n" + "global java.util.List results \n " + "rule minMax \n" + "when \n" + " accumulate( Cheese( $p: price ), $min: min($p), $max: max($p) ) \n" + "then \n" + " results.add($min); results.add($max); \n" + "end \n";
final KieBase kbase = KieBaseUtil.getKieBaseFromKieModuleFromDrl("accumulate-test", kieBaseTestConfiguration, drl);
final KieSession ksession = kbase.newKieSession();
try {
final List<Number> results = new ArrayList<>();
ksession.setGlobal("results", results);
final Cheese[] cheese = new Cheese[] { new Cheese("Emmentaler", 4), new Cheese("Appenzeller", 6), new Cheese("Greyerzer", 2), new Cheese("Raclette", 3), new Cheese("Olmützer Quargel", 15), new Cheese("Brie", 17), new Cheese("Dolcelatte", 8) };
for (final Cheese aCheese : cheese) {
ksession.insert(aCheese);
}
ksession.fireAllRules();
assertEquals(2, results.size());
assertEquals(results.get(0).intValue(), 2);
assertEquals(results.get(1).intValue(), 17);
} finally {
ksession.dispose();
}
}
use of org.drools.testcoverage.common.model.Cheese in project drools by kiegroup.
the class AccumulateTest method testAccumulate.
@Test(timeout = 10000)
public void testAccumulate() {
final KieBase kbase = KieBaseUtil.getKieBaseFromClasspathResources("accumulate-test", kieBaseTestConfiguration, "org/drools/compiler/integrationtests/test_Accumulate.drl");
final KieSession wm = kbase.newKieSession();
try {
final List<?> results = new ArrayList<>();
wm.setGlobal("results", results);
wm.insert(new Person("Bob", "stilton", 20));
wm.insert(new Person("Mark", "provolone"));
wm.insert(new Cheese("stilton", 10));
wm.insert(new Cheese("brie", 5));
wm.insert(new Cheese("provolone", 150));
wm.fireAllRules();
System.out.println(results);
assertEquals(5, results.size());
assertEquals(165, results.get(0));
assertEquals(10, results.get(1));
assertEquals(150, results.get(2));
assertEquals(10, results.get(3));
assertEquals(210, results.get(4));
} finally {
wm.dispose();
}
}
use of org.drools.testcoverage.common.model.Cheese in project drools by kiegroup.
the class AccumulateTest method testAccumulateModifyMVEL.
@Test(timeout = 10000)
public void testAccumulateModifyMVEL() {
final String drl = "package org.drools.compiler.test;\n" + "\n" + "import " + Cheese.class.getCanonicalName() + ";\n" + "import " + Person.class.getCanonicalName() + ";\n" + "import " + Cheesery.class.getCanonicalName() + ";\n" + "\n" + "global java.util.List results;\n" + "\n" + "rule \"Constraints everywhere\" salience 80\n" + " dialect \"mvel\"\n" + " when\n" + " $person : Person( $likes : likes )\n" + " $cheesery : Cheesery( totalAmount > 20 )\n" + " from accumulate( $cheese : Cheese( type == $likes ),\n" + " init( cheesery = new Cheesery(); ),\n" + " action( cheesery.addCheese( $cheese ); ),\n" + " result( cheesery ) );\n" + " then\n" + " results.add( $cheesery );\n" + "end";
final KieBase kbase = KieBaseUtil.getKieBaseFromKieModuleFromDrl("accumulate-test", kieBaseTestConfiguration, drl);
final KieSession wm = kbase.newKieSession();
try {
final List<?> results = new ArrayList<>();
wm.setGlobal("results", results);
final Cheese[] cheese = new Cheese[] { new Cheese("stilton", 10), new Cheese("stilton", 2), new Cheese("stilton", 5), new Cheese("brie", 15), new Cheese("brie", 16), new Cheese("provolone", 8) };
final Person bob = new Person("Bob", "stilton");
final FactHandle[] cheeseHandles = new FactHandle[cheese.length];
for (int i = 0; i < cheese.length; i++) {
cheeseHandles[i] = wm.insert(cheese[i]);
}
final org.kie.api.runtime.rule.FactHandle bobHandle = wm.insert(bob);
// ---------------- 1st scenario
wm.fireAllRules();
// no fire, as per rule constraints
assertEquals(0, results.size());
// ---------------- 2nd scenario
final int index = 1;
cheese[index].setPrice(9);
wm.update(cheeseHandles[index], cheese[index]);
wm.fireAllRules();
// 1 fire
assertEquals(1, results.size());
assertEquals(24, ((Cheesery) results.get(results.size() - 1)).getTotalAmount());
// ---------------- 3rd scenario
bob.setLikes("brie");
wm.update(bobHandle, bob);
wm.fireAllRules();
// 2 fires
assertEquals(2, results.size());
assertEquals(31, ((Cheesery) results.get(results.size() - 1)).getTotalAmount());
// ---------------- 4th scenario
wm.delete(cheeseHandles[3]);
wm.fireAllRules();
// should not have fired as per constraint
assertEquals(2, results.size());
} finally {
wm.dispose();
}
}
Aggregations