⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ortest.java

📁 jboss规则引擎
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
package org.drools.rule;

/*
 * Copyright 2005 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.
 */

import java.beans.IntrospectionException;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;

import junit.framework.TestCase;

import org.drools.WorkingMemory;
import org.drools.base.ClassFieldExtractor;
import org.drools.base.ClassObjectType;
import org.drools.base.EvaluatorFactory;
import org.drools.examples.waltz.Edge;
import org.drools.examples.waltz.Stage;
import org.drools.spi.Consequence;
import org.drools.spi.ConsequenceException;
import org.drools.spi.Evaluator;
import org.drools.spi.FieldConstraint;
import org.drools.spi.FieldExtractor;
import org.drools.spi.FieldValue;
import org.drools.spi.KnowledgeHelper;
import org.drools.spi.MockField;
import org.drools.spi.Tuple;

/**
 * This test demonstrate the following failures:
 * 1. Or constraint to produce matches when Or constraint is specified at the beging. 
 * I suspect it has something to do with regular columns having higher indexes
 * 
 * 2. Resolve an object that has Or condition defined for it in consequence 
 * 
 * 
 * @author Alexander Bagerman
 *
 */
public class OrTest extends TestCase {

    private Evaluator       integerEqualEvaluator;
    private Evaluator       integerNotEqualEvaluator;

    private ClassObjectType stageType;

    private ClassObjectType edgeType;

    protected Package       pkg;

    private Stage           markStage;

    protected void setUp() throws Exception {
        super.setUp();
        this.stageType = new ClassObjectType( Stage.class );
        this.edgeType = new ClassObjectType( Edge.class );
        this.integerEqualEvaluator = EvaluatorFactory.getEvaluator( Evaluator.INTEGER_TYPE,
                                                                    Evaluator.EQUAL );
        this.integerNotEqualEvaluator = EvaluatorFactory.getEvaluator( Evaluator.INTEGER_TYPE,
                                                                       Evaluator.NOT_EQUAL );
        this.pkg = new Package( "or" );
    }

    /*
     */
    public void testLeapsNeverGetsToConsequenceOrder() throws Exception {

        this.pkg.addRule( this.getNeverGetsToConsequenceRule() );

        final org.drools.leaps.LeapsRuleBase ruleBase = new org.drools.leaps.LeapsRuleBase();
        ruleBase.addPackage( this.pkg );
        final WorkingMemory workingMemory = ruleBase.newWorkingMemory();
        workingMemory.assertObject( new Stage( Stage.LABELING ) );
        workingMemory.assertObject( new Edge( 1000,
                                              1,
                                              false,
                                              Edge.NIL,
                                              Edge.NIL ) );
        workingMemory.assertObject( new Edge( 1000,
                                              2,
                                              false,
                                              Edge.NIL,
                                              Edge.NIL ) );
        workingMemory.assertObject( new Edge( 5555,
                                              3,
                                              false,
                                              Edge.NIL,
                                              Edge.NIL ) );
        workingMemory.fireAllRules();
        workingMemory.assertObject( new Stage( Stage.DETECT_JUNCTIONS ) );

        workingMemory.fireAllRules();
    }

    /*
     */
    public void testReteooNeverGetsToConsequenceOrder() throws Exception {

        this.pkg.addRule( this.getNeverGetsToConsequenceRule() );

        final org.drools.reteoo.ReteooRuleBase ruleBase = new org.drools.reteoo.ReteooRuleBase();
        ruleBase.addPackage( this.pkg );
        final WorkingMemory workingMemory = ruleBase.newWorkingMemory();
        workingMemory.assertObject( new Stage( Stage.LABELING ) );
        workingMemory.assertObject( new Edge( 1000,
                                              1,
                                              false,
                                              Edge.NIL,
                                              Edge.NIL ) );
        workingMemory.assertObject( new Edge( 1000,
                                              2,
                                              false,
                                              Edge.NIL,
                                              Edge.NIL ) );
        workingMemory.assertObject( new Edge( 5555,
                                              3,
                                              false,
                                              Edge.NIL,
                                              Edge.NIL ) );
        workingMemory.fireAllRules();
        workingMemory.assertObject( new Stage( Stage.DETECT_JUNCTIONS ) );

        workingMemory.fireAllRules();
    }

    /*
     */
    public void testLeapsWorkingButCanNotResolveOrObjectInConsequenceOrder() throws Exception {

        this.pkg.addRule( this.getWorkingButCanNotResolveOrObjectInConsequenceOrder() );

        final org.drools.leaps.LeapsRuleBase ruleBase = new org.drools.leaps.LeapsRuleBase();
        ruleBase.addPackage( this.pkg );
        final WorkingMemory workingMemory = ruleBase.newWorkingMemory();
        workingMemory.assertObject( new Stage( Stage.LABELING ) );
        workingMemory.assertObject( new Edge( 1000,
                                              1,
                                              false,
                                              Edge.NIL,
                                              Edge.NIL ) );
        workingMemory.assertObject( new Edge( 1000,
                                              2,
                                              false,
                                              Edge.NIL,
                                              Edge.NIL ) );
        workingMemory.assertObject( new Edge( 5555,
                                              3,
                                              false,
                                              Edge.NIL,
                                              Edge.NIL ) );
        workingMemory.fireAllRules();
        workingMemory.assertObject( new Stage( Stage.DETECT_JUNCTIONS ) );

        workingMemory.fireAllRules();
    }

    /*
     */
    public void testReteooWorkingButCanNotResolveOrObjectInConsequenceOrder() throws Exception {

        this.pkg.addRule( this.getWorkingButCanNotResolveOrObjectInConsequenceOrder() );

        final org.drools.reteoo.ReteooRuleBase ruleBase = new org.drools.reteoo.ReteooRuleBase();
        ruleBase.addPackage( this.pkg );
        final WorkingMemory workingMemory = ruleBase.newWorkingMemory();
        workingMemory.assertObject( new Stage( Stage.LABELING ) );
        workingMemory.assertObject( new Edge( 1000,
                                              1,
                                              false,
                                              Edge.NIL,
                                              Edge.NIL ) );
        workingMemory.assertObject( new Edge( 1000,
                                              2,
                                              false,
                                              Edge.NIL,
                                              Edge.NIL ) );
        workingMemory.assertObject( new Edge( 5555,
                                              3,
                                              false,
                                              Edge.NIL,
                                              Edge.NIL ) );
        workingMemory.fireAllRules();
        workingMemory.assertObject( new Stage( Stage.DETECT_JUNCTIONS ) );

        workingMemory.fireAllRules();
    }

    /*
     * Test method for
     * 'org.drools.leaps.ColumnConstraints.evaluateAlphas(FactHandleImpl, Token,
     * WorkingMemoryImpl)'
     */
    public Rule getNeverGetsToConsequenceRule() throws Exception {
        final Rule rule = new Rule( "NeverGetsToConsequence" );

        final Column stageColumn1 = new Column( 0,
                                                this.stageType,
                                                "stage" );
        stageColumn1.addConstraint( getLiteralConstraint( stageColumn1,
                                                          "value",

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -