/* * Copyright 2011 JBoss Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.drools.chance.kbase; import org.drools.chance.Chance; import org.drools.factmodel.traits.TraitFactory; import org.drools.runtime.StatefulKnowledgeSession; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Ignore; import org.junit.Test; import java.util.*; import static junit.framework.Assert.*; import static junit.framework.Assert.assertEquals; public class ImperfectRuleTest extends AbstractChanceTest { @BeforeClass public static void setFactories() { Chance.initialize(); } @Test public void testSingleRestrictions() { StatefulKnowledgeSession kSession = initBasicChanceTest("org/drools/chance/testSingleRestrictions.drl"); Map res = (Map) kSession.getGlobal( MAP ); assertTrue( res.containsKey( "X" ) ); assertTrue( res.containsKey( "Y" ) ); assertTrue( res.containsKey( "W" ) ); assertTrue( res.containsKey( "Z" ) ); assertEquals( 1.0, (Double) res.get( "X" ), 1e-6 ); assertEquals( 0.7, (Double) res.get( "Y" ), 1e-6 ); assertEquals( 1.0, (Double) res.get( "W" ), 1e-6 ); assertEquals( 1.0, (Double) res.get( "Z" ), 1e-6 ); } @Test public void testSimpleOperatorsAlpha() { StatefulKnowledgeSession kSession = initBasicChanceTest("org/drools/chance/testSimpleOperatorsAlpha.drl"); Map res = (Map) kSession.getGlobal( MAP ); assertTrue( res.containsKey( "X" ) ); assertTrue( res.containsKey( "Y" ) ); assertTrue( res.containsKey( "Z" ) ); assertEquals( 0.7, (Double) res.get( "X" ), 1e-6 ); assertEquals( 0.8, (Double) res.get( "Y" ), 1e-6 ); assertEquals( 0.3, (Double) res.get( "Z" ), 1e-6 ); } @Test public void testCompositeRestrictions() { StatefulKnowledgeSession kSession = initBasicChanceTest("org/drools/chance/testCompositeRestrictions.drl"); Map res = (Map) kSession.getGlobal( MAP ); assertTrue( res.containsKey( "X" ) ); assertTrue( res.containsKey( "Y" ) ); assertTrue( res.containsKey( "Z" ) ); assertEquals( 1.0 , (Double) res.get( "X" ), 1e-6 ); assertEquals( 0.52, (Double) res.get( "Y" ), 1e-6 ); assertEquals( 0.052, (Double) res.get( "Z" ), 1e-6 ); } @Test public void testEvaluatorInRules() { StatefulKnowledgeSession kSession = initBasicChanceTest("org/drools/chance/evaluator/testEvaluatorsInRules.drl"); Map res = (Map) kSession.getGlobal( MAP ); assertTrue( res.containsKey( "X" ) ); assertTrue( res.containsKey( "Y" ) ); assertTrue( res.containsKey( "Z" ) ); assertTrue( res.containsKey( "W" ) ); assertEquals( 0.65, (Double) res.get("X"), 1e-6 ); assertEquals( 1.0, (Double) res.get("Y"), 1e-6 ); assertEquals( 1.0, (Double) res.get("Z"), 1e-6 ); assertEquals( 1.0, (Double) res.get("W"), 1e-6 ); } @Test public void testInlineRestrictions() { StatefulKnowledgeSession kSession = initBasicChanceTest("org/drools/chance/testInlineRestrictions.drl"); Map res = (Map) kSession.getGlobal( MAP ); assertTrue( res.containsKey( "X" ) ); assertTrue( res.containsKey( "Y" ) ); assertTrue( res.containsKey( "Z" ) ); assertEquals( 1.0 , (Double) res.get( "X" ), 1e-6 ); assertEquals( 1.0, (Double) res.get( "Y" ), 1e-6 ); assertEquals( 0.568, (Double) res.get( "Z" ), 1e-6 ); } @Test public void testSingleBindings() { StatefulKnowledgeSession kSession = initBasicChanceTest("org/drools/chance/testSingleBindings.drl"); Map res = (Map) kSession.getGlobal( MAP ); assertTrue( res.containsKey( "X" ) ); assertTrue( res.containsKey( "Y" ) ); assertEquals( 0.7 , (Double) res.get( "X" ), 1e-6 ); assertEquals( 1.0 , (Double) res.get( "Y" ), 1e-6 ); } @Test public void testMixedRestrictions() { StatefulKnowledgeSession kSession = initBasicChanceTest("org/drools/chance/testMixedRestrictions.drl"); Map res = (Map) kSession.getGlobal( MAP ); assertTrue( res.containsKey( "A" ) ); assertFalse( res.containsKey( "B" ) ); assertEquals( 1.0 , (Double) res.get( "A" ), 1e-6 ); } @Test public void testVariableRestrictions() { StatefulKnowledgeSession kSession = initBasicChanceTest("org/drools/chance/testVariableRestrictions.drl"); Map res = (Map) kSession.getGlobal( MAP ); assertTrue( res.containsKey( "X" ) ); assertEquals( 0.7 , (Double) res.get( "X" ), 1e-6 ); assertEquals( 1.0 , (Double) res.get( "Y" ), 1e-6 ); assertEquals( 0.5985 , (Double) res.get( "Z" ), 1e-6 ); } @Test public void testBetaJoins() { StatefulKnowledgeSession kSession = initBasicChanceTest("org/drools/chance/testBetaJoins.drl"); Map res = (Map) kSession.getGlobal( MAP ); assertEquals( 6, res.size() ); assertTrue( res.containsKey( "Xx1" ) ); assertTrue( res.containsKey( "Xx2" ) ); assertTrue( res.containsKey( "Yx1" ) ); assertTrue( res.containsKey( "Yx2" ) ); assertTrue( res.containsKey( "Zx1" ) ); assertTrue( res.containsKey( "Zx2" ) ); assertEquals( 0.6 , (Double) res.get( "Xx1" ), 1e-6 ); assertEquals( 0.6 , (Double) res.get( "Xx2" ), 1e-6 ); assertEquals( 1.0 , (Double) res.get( "Yx1" ), 1e-6 ); assertEquals( 1.0 , (Double) res.get( "Yx2" ), 1e-6 ); assertEquals( 1.0 , (Double) res.get( "Zx1" ), 1e-6 ); assertEquals( 1.0 , (Double) res.get( "Zx2" ), 1e-6 ); } @Test public void testComplexBetaJoins() { StatefulKnowledgeSession kSession = initBasicChanceTest("org/drools/chance/testComplexBetaJoins.drl"); Map res = (Map) kSession.getGlobal( MAP ); assertEquals( 4, res.size() ); assertTrue( res.containsKey( "Xx1" ) ); assertTrue( res.containsKey( "Xx2" ) ); assertTrue( res.containsKey( "Yx1" ) ); assertTrue( res.containsKey( "Yx2" ) ); assertEquals( 0.7 , (Double) res.get( "Xx1" ), 1e-6 ); assertEquals( 0.7 , (Double) res.get( "Xx2" ), 1e-6 ); assertEquals( 0.6 , (Double) res.get( "Yx1" ), 1e-6 ); assertEquals( 0.6 , (Double) res.get( "Yx2" ), 1e-6 ); } @Test public void testAndOrGroupElements() { StatefulKnowledgeSession kSession = initBasicChanceTest("org/drools/chance/testAndOrGroupElements.drl"); Map res = (Map) kSession.getGlobal( MAP ); assertEquals( 4, res.size() ); assertTrue( res.containsKey( "X" ) ); assertTrue( res.containsKey( "Y" ) ); assertTrue( res.containsKey( "W" ) ); assertTrue( res.containsKey( "Z" ) ); assertEquals( 0.189 , (Double) res.get( "X" ), 1e-6 ); assertEquals( 0.63 , (Double) res.get( "Y" ), 1e-6 ); assertEquals( 0.97 , (Double) res.get( "W" ), 1e-6 ); assertEquals( 0.97 , (Double) res.get( "Z" ), 1e-6 ); } @Test public void testEvaluationLabels() { StatefulKnowledgeSession kSession = initBasicChanceTest("org/drools/chance/testEvaluationLabels.drl"); Map res = (Map) kSession.getGlobal( MAP ); System.err.println( res ); assertEquals( 0.55 , (Double) res.get( "X" ), 1e-6 ); assertEquals( 0.95 , (Double) res.get( "betaJoin" ), 1e-6 ); assertEquals( 0.7 , (Double) res.get( "patternAnd" ), 1e-6 ); assertEquals( 0.55 , (Double) res.get( "outerAnd" ), 1e-6 ); assertEquals( 0.85 , (Double) res.get( "innerAnd" ), 1e-6 ); assertEquals( 1.0 , (Double) res.get( "Imperson" ), 1e-6 ); assertEquals( 0.7 , (Double) res.get( "impIs" ), 1e-6 ); assertEquals( 0.9 , (Double) res.get( "notFrank" ), 1e-6 ); assertEquals( 8, res.size() ); } @Test public void testQueries() { StatefulKnowledgeSession kSession = initBasicChanceTest("org/drools/chance/testQueries.drl"); Map res = (Map) kSession.getGlobal( MAP ); System.err.println( res ); // assertEquals( 1.0 , (Double) res.get( "Xx1" ), 1e-6 ); assertEquals( 0.7 , (Double) res.get( "Yx1" ), 1e-6 ); assertEquals( 0.4 , (Double) res.get( "Zx1" ), 1e-6 ); // assertEquals( 3, res.size() ); } @Test public void testPositional() { StatefulKnowledgeSession kSession = initBasicChanceTest("org/drools/chance/testPositional.drl"); Map res = (Map) kSession.getGlobal( MAP ); System.err.println( res ); assertEquals( 1.0 , (Double) res.get( "X" ), 1e-6 ); } @Test public void testImperfectTrait() { StatefulKnowledgeSession kSession = initBasicChanceTest("org/drools/chance/evaluator/testImperfectTrait.drl"); Map map = (Map) kSession.getGlobal( MAP ); assertEquals( 3, map.size() ); assertTrue( map.containsKey( "X" ) ); assertTrue( map.containsKey( "Y" ) ); assertTrue( map.containsKey( "Z" ) ); // assertEquals( 0.75, (Double) map.get( "X" ), 1e-6 ); assertEquals( 0.75, (Double) map.get( "Y" ), 1e-6 ); assertEquals( 0.375, (Double) map.get( "Z" ), 1e-6 ); } @Test public void testFrom() { StatefulKnowledgeSession kSession = initBasicChanceTest("org/drools/chance/testFrom.drl"); Map map = (Map) kSession.getGlobal( MAP ); kSession.fireAllRules(); System.out.println( map ); assertEquals( 1, map.size() ); assertTrue( map.containsKey( "X" ) ); assertEquals( 0.052, (Double) map.get( "X" ), 1e-6 ); } @Test @Ignore public void testMVELMatchesOperator() { StatefulKnowledgeSession kSession = initBasicChanceTest("org/drools/chance/testMVELMatchesOperator.drl"); Map res = (Map) kSession.getGlobal( MAP ); assertTrue( res.containsKey( "X" ) ); assertEquals( 1.0 , (Double) res.get( "X" ), 1e-6 ); } @Test @Ignore( "Not implemented yet" ) public void testExists() { StatefulKnowledgeSession kSession = initBasicChanceTest("org/drools/chance/testExists.drl"); Map map = (Map) kSession.getGlobal( MAP ); kSession.fireAllRules(); kSession.insert( 0.4 ); kSession.fireAllRules(); kSession.insert( 0.3 ); kSession.fireAllRules(); kSession.insert( 0.5 ); kSession.fireAllRules(); kSession.insert( 0.2 ); kSession.fireAllRules(); kSession.insert( -0.5 ); kSession.fireAllRules(); kSession.insert( 0.9 ); kSession.fireAllRules(); System.out.println( map ); // assertEquals( 1, map.size() ); // assertTrue( map.containsKey( "X" ) ); // assertEquals( 0.052, (Double) map.get( "X" ), 1e-6 ); } }