001: package test.org.mandarax.reference;
002:
003: /*
004: * Copyright (C) 1999-2004 <A href="http://www-ist.massey.ac.nz/JBDietrich" target="_top">Jens Dietrich</a>
005: *
006: * This library is free software; you can redistribute it and/or
007: * modify it under the terms of the GNU Lesser General Public
008: * License as published by the Free Software Foundation; either
009: * version 2 of the License, or (at your option) any later version.
010: *
011: * This library is distributed in the hope that it will be useful,
012: * but WITHOUT ANY WARRANTY; without even the implied warranty of
013: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
014: * Lesser General Public License for more details.
015: *
016: * You should have received a copy of the GNU Lesser General Public
017: * License along with this library; if not, write to the Free Software
018: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
019: */
020: import java.util.ArrayList;
021: import java.util.List;
022:
023: import org.mandarax.kernel.InferenceEngine;
024: import org.mandarax.kernel.KnowledgeBase;
025: import org.mandarax.kernel.Query;
026:
027: /**
028: * Simple test using familiy relationships.
029: * Similar to TestInferenceEngine4MultipleResults1, but with a cardinality constraint
030: * specifying that only the first three results should be retrieved.
031: * @author <A href="http://www-ist.massey.ac.nz/JBDietrich" target="_top">Jens Dietrich</A>
032: * @version 3.4 <7 March 05>
033: * @since 1.1
034: */
035:
036: public class TestInferenceEngine4MultipleResults4 extends
037: TestInferenceEngine4MultipleResults {
038: /**
039: * Constructor.
040: * @param aKnowledgeBase a new, uninitialized knowledge base that will be used
041: * @param anInferenceEngine the inference engine that will be tested
042: */
043: public TestInferenceEngine4MultipleResults4(
044: KnowledgeBase aKnowledgeBase,
045: InferenceEngine anInferenceEngine) {
046: super (aKnowledgeBase, anInferenceEngine);
047: }
048:
049: /**
050: * Get the cardinality constraint (how many solutions
051: * should be compouted). Default is <code>InferenceEngine.ONE</code>
052: * @return the number of expected results
053: */
054: public int getCardinalityConstraint() {
055: return 3;
056: }
057:
058: /**
059: * Add facts and rules to the knowledge base.
060: * @param knowledge org.mandarax.kernel.KnowledgeBase
061: */
062: public void feedKnowledgeBase(KnowledgeBase knowledge) {
063: knowledge.removeAll();
064: knowledge.add(Person.getRule("isGrandFatherOf", "x", "z",
065: "isFatherOf", "y", "z", "isFatherOf", "x", "y"));
066: knowledge.add(Person.getFact("isOncleOf", "Ulf", "Max"));
067: knowledge.add(Person.getFact("isOncleOf", "Heinz", "Jens"));
068: knowledge.add(Person.getRule("isOncleOf", "x", "z",
069: "isFatherOf", "y", "z", "isBrotherOf", "x", "y"));
070: knowledge.add(Person.getFact("isFatherOf", "Lutz", "Frank"));
071: knowledge.add(Person.getFact("isFatherOf", "Klaus", "Jens"));
072: knowledge.add(Person.getFact("isBrotherOf", "Lutz", "Klaus"));
073: knowledge.add(Person
074: .getFact("isBrotherOf", "Guenther", "Klaus"));
075: knowledge.add(Person.getFact("isBrotherOf", "Werner", "Klaus"));
076: }
077:
078: /**
079: * Get a description of this test case.
080: * This is used by the <code>org.mandarax.demo</code>
081: * package to display the test cases.
082: * @return a brief description of the test case
083: */
084: public String getDescription() {
085: return "Simple test for multiple results.";
086: }
087:
088: /**
089: * Get the persons we are looking for.
090: * @return the name of the person
091: */
092: public List getExpectedResults() {
093: ArrayList list = new ArrayList();
094: list.add(Person.get("Heinz"));
095: list.add(Person.get("Lutz"));
096: list.add(Person.get("Guenther"));
097: return list;
098: }
099:
100: /**
101: * Get the query.
102: * @return a query
103: */
104: public Query getQuery() {
105: return Person.getQuery("isOncleOf", QUERY_VARIABLE, "Jens");
106: }
107: }
|