Main Page | Packages | Class Hierarchy | Class List | Directories | File List | Class Members

UnitTest.java

Go to the documentation of this file.
00001 package org.opencyc.api;
00002 
00003 import junit.framework.*;
00004 import java.util.*;
00005 import java.net.*;
00006 import java.io.*;
00007 import java.text.*;
00008 import org.opencyc.cycobject.*;
00009 import org.opencyc.cycagent.*;
00010 import org.opencyc.util.*;
00011 
00012 /**
00013  * Provides a unit test suite for the <tt>org.opencyc.api</tt> package<p>
00014  *
00015  * @version $Id: UnitTest.java,v 1.84 2002/10/25 23:23:56 stephenreed Exp $
00016  * @author Stephen L. Reed
00017  *
00018  * <p>Copyright 2001 Cycorp, Inc., license is open source GNU LGPL.
00019  * <p><a href="http://www.opencyc.org/license.txt">the license</a>
00020  * <p><a href="http://www.opencyc.org">www.opencyc.org</a>
00021  * <p><a href="http://www.sourceforge.net/projects/opencyc">OpenCyc at SourceForge</a>
00022  * <p>
00023  * THIS SOFTWARE AND KNOWLEDGE BASE CONTENT ARE PROVIDED ``AS IS'' AND
00024  * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
00025  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
00026  * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OPENCYC
00027  * ORGANIZATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
00028  * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
00029  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
00030  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
00031  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
00032  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
00033  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE AND KNOWLEDGE
00034  * BASE CONTENT, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
00035  */
00036 public class UnitTest extends TestCase {
00037 
00038     public static final String myAgentName = "ApiTestAgent";
00039     public static final String cycProxyAgentName = "CycProxyAgent";
00040     //public static final int agentCommunity = AgentCommunityAdapter.COABS_AGENT_COMMUNITY;
00041     public static final int agentCommunity = AgentCommunityAdapter.FIPA_OS_AGENT_COMMUNITY;
00042 
00043     /**
00044      * Indicates the use of a local CycConnection object to connect with
00045      * a Cyc server.
00046      */
00047     public static final int LOCAL_CYC_CONNECTION = 1;
00048 
00049     /**
00050      * Indicates the use of a local RemoteCycConnection object to connect with
00051      * a remote CycConnection object via a CoABS grid or FIPA-OS agent community.
00052      * The remote CycConnection has a connection with a Cyc server.
00053      */
00054     public static final int REMOTE_CYC_CONNECTION = 2;
00055 
00056     //public static int connectionMode = REMOTE_CYC_CONNECTION;
00057     public static int connectionMode = LOCAL_CYC_CONNECTION;
00058 
00059     /**
00060      * Indicates whether unit tests should be performed only in binary api mode.
00061      */
00062     //public static boolean performOnlyBinaryApiModeTests = false;
00063     public static boolean performOnlyBinaryApiModeTests = true;
00064 
00065     /**
00066      * Creates a <tt>UnitTest</tt> object with the given name.
00067      */
00068     public UnitTest(String name) {
00069         super(name);
00070     }
00071 
00072     /**
00073      * Returns the test suite.
00074      *
00075      * @return the test suite
00076      */
00077     public static Test suite() {
00078         TestSuite testSuite = new TestSuite();
00079 
00080         testSuite.addTest(new UnitTest("testAsciiCycConnection"));
00081         testSuite.addTest(new UnitTest("testBinaryCycConnection1"));
00082         testSuite.addTest(new UnitTest("testBinaryCycConnection2"));
00083         testSuite.addTest(new UnitTest("testAsciiCycAccess1"));
00084         testSuite.addTest(new UnitTest("testBinaryCycAccess1"));
00085         testSuite.addTest(new UnitTest("testAsciiCycAccess2"));
00086         testSuite.addTest(new UnitTest("testBinaryCycAccess2"));
00087         testSuite.addTest(new UnitTest("testAsciiCycAccess3"));
00088         testSuite.addTest(new UnitTest("testBinaryCycAccess3"));
00089         testSuite.addTest(new UnitTest("testAsciiCycAccess4"));
00090         testSuite.addTest(new UnitTest("testBinaryCycAccess4"));
00091         testSuite.addTest(new UnitTest("testAsciiCycAccess5"));
00092         testSuite.addTest(new UnitTest("testBinaryCycAccess5"));
00093         testSuite.addTest(new UnitTest("testAsciiCycAccess6"));
00094         testSuite.addTest(new UnitTest("testBinaryCycAccess6"));
00095         testSuite.addTest(new UnitTest("testAsciiCycAccess7"));
00096         testSuite.addTest(new UnitTest("testBinaryCycAccess7"));
00097         testSuite.addTest(new UnitTest("testAsciiCycAccess8"));
00098         testSuite.addTest(new UnitTest("testBinaryCycAccess8"));
00099         testSuite.addTest(new UnitTest("testAsciiCycAccess9"));
00100         testSuite.addTest(new UnitTest("testBinaryCycAccess9"));
00101         testSuite.addTest(new UnitTest("testAsciiCycAccess10"));
00102         testSuite.addTest(new UnitTest("testBinaryCycAccess10"));
00103         testSuite.addTest(new UnitTest("testBinaryCycAccess11"));
00104         testSuite.addTest(new UnitTest("testBinaryCycAccess12"));
00105         testSuite.addTest(new UnitTest("testBinaryCycAccess13"));
00106         testSuite.addTest(new UnitTest("testMakeValidConstantName"));
00107 
00108         return testSuite;
00109     }
00110 
00111     /**
00112      * Main method in case tracing is prefered over running JUnit.
00113      */
00114     public static void main(String[] args) {
00115         junit.textui.TestRunner.run(suite());
00116         if (connectionMode == REMOTE_CYC_CONNECTION &&
00117             agentCommunity == AgentCommunityAdapter.COABS_AGENT_COMMUNITY)
00118             System.exit(0);
00119     }
00120 
00121     /**
00122      * Compares expected object to the test object without causing a unit test failure, reporting if
00123      * the parameters are not equal.
00124      *
00125      * @param expectedObject the expected object
00126      * @param testObject the test object
00127      */
00128     public static void nofailAssertEquals (Object expectedObject, Object testObject) {
00129         if (! expectedObject.equals(testObject))
00130             System.out.println("Expected <" + expectedObject + "> \nfound <" + testObject);
00131     }
00132 
00133     /**
00134      * Reports if the given boolen expression is false, without causing a unit test failure.
00135      *
00136      * @param expression the boolean expression expected to be true
00137      */
00138     public static void nofailAssertTrue (boolean testExpression, String message) {
00139         if (! testExpression)
00140             System.out.println("Test expression not true\n" + message);
00141     }
00142 
00143     /**
00144      * Tests the makeValidConstantName method.
00145      */
00146     public void testMakeValidConstantName () {
00147         System.out.println("\n**** testMakeValidConstantName ****");
00148         String candidateName = "abc";
00149         Assert.assertEquals(candidateName, CycConstant.makeValidConstantName(candidateName));
00150         candidateName = "()[]//abc";
00151         String expectedValidName = "______abc";
00152         Assert.assertEquals(expectedValidName, CycConstant.makeValidConstantName(candidateName));
00153         System.out.println("**** testMakeValidConstantName OK ****");
00154     }
00155 
00156     /**
00157      * Tests the fundamental aspects of the ascii api connection to the OpenCyc server.
00158      */
00159     public void testAsciiCycConnection () {
00160         if (connectionMode == REMOTE_CYC_CONNECTION) {
00161             System.out.println("\n**** bypassing testAsciiCycConnection in remote usage ****");
00162             return;
00163         }
00164         System.out.println("\n**** testAsciiCycConnection ****");
00165         CycConnectionInterface cycConnection = null;
00166         try {
00167             CycAccess cycAccess = null;
00168             cycAccess = new CycAccess(CycConnection.DEFAULT_HOSTNAME,
00169                                       CycConnection.DEFAULT_BASE_PORT,
00170                                       CycConnection.ASCII_MODE,
00171                                       CycAccess.PERSISTENT_CONNECTION);
00172             cycConnection = cycAccess.cycConnection;
00173             //cycConnection.trace = true;
00174         }
00175         catch (ConnectException e) {
00176             System.out.println("Could not connect to host " + CycConnection.DEFAULT_HOSTNAME +
00177                                " port " + CycConnection.DEFAULT_BASE_PORT);
00178             Assert.fail(e.toString());
00179         }
00180         catch (Exception e) {
00181             e.printStackTrace();
00182             Assert.fail(e.toString());
00183         }
00184 
00185         // Test return of atom.
00186         String command = "(+ 2 3)";
00187         Object [] response = {new Integer(0), ""};
00188         try {
00189             response = cycConnection.converse(command);
00190         }
00191         catch (Exception e) {
00192             CycAccess.current().close();
00193             Assert.fail(e.toString());
00194         }
00195         Assert.assertEquals(Boolean.TRUE, response[0]);
00196         Assert.assertEquals(new Integer(5), response[1]);
00197 
00198         // Test return of string.
00199         command = "(quote " + '\"' + "abc" + '\"' + ")";
00200         try {
00201             //cycConnection.trace = 1;
00202             response = cycConnection.converse(command);
00203         }
00204         catch (Exception e) {
00205             CycAccess.current().close();
00206             Assert.fail(e.toString());
00207         }
00208         Assert.assertEquals(Boolean.TRUE, response[0]);
00209         Assert.assertEquals("abc", response[1]);
00210 
00211         // Test return of symbolic expression.
00212         command = "(quote (a b (c d (e) f)))";
00213         try {
00214             response = cycConnection.converse(command);
00215         }
00216         catch (Exception e) {
00217             CycAccess.current().close();
00218             Assert.fail(e.toString());
00219         }
00220         Assert.assertEquals(Boolean.TRUE, response[0]);
00221         Assert.assertEquals("(A B (C D (E) F))", response[1].toString());
00222 
00223         // Test return of improper list.
00224         command = "(quote (a . b))";
00225         try {
00226             response = cycConnection.converse(command);
00227         }
00228         catch (Exception e) {
00229             CycAccess.current().close();
00230             Assert.fail(e.toString());
00231         }
00232         Assert.assertEquals(Boolean.TRUE, response[0]);
00233         Assert.assertEquals("(A . B)", response[1].toString());
00234 
00235         // Test function evaluation.
00236         command = "(member? #$Dog '(#$DomesticPet #$Dog))";
00237         try {
00238             response = cycConnection.converse(command);
00239         }
00240         catch (Exception e) {
00241             CycAccess.current().close();
00242             Assert.fail(e.toString());
00243         }
00244         Assert.assertEquals(Boolean.TRUE, response[0]);
00245         Assert.assertEquals(CycObjectFactory.t, response[1]);
00246 
00247         // Test KB Ask.
00248         command = "(removal-ask '(#$genls #$DomesticPet #$DomesticatedAnimal) #$HumanActivitiesMt)";
00249         try {
00250             response = cycConnection.converse(command);
00251         }
00252         catch (Exception e) {
00253             CycAccess.current().close();
00254             Assert.fail(e.toString());
00255         }
00256         Assert.assertEquals(Boolean.TRUE, response[0]);
00257         Assert.assertTrue(response[1] instanceof CycList);
00258         Assert.assertEquals("((((T . T)) ((:GENLS (#$genls #$DomesticPet #$DomesticatedAnimal) #$HumanActivitiesMt :TRUE-DEF))))",
00259                             ((CycList) response[1]).cyclify());
00260 
00261         cycConnection.close();
00262         System.out.println("**** testAsciiCycConnection OK ****");
00263     }
00264 
00265     /**
00266      * Tests the fundamental aspects of the binary (cfasl) api connection to the
00267      * OpenCyc server.
00268      */
00269     public void testBinaryCycConnection1 () {
00270         System.out.println("\n**** testBinaryCycConnection1 ****");
00271         CycAccess cycAccess = null;
00272         CycConnectionInterface cycConnection = null;
00273         try {
00274             if (connectionMode == LOCAL_CYC_CONNECTION) {
00275                 cycAccess = new CycAccess(CycConnection.DEFAULT_HOSTNAME,
00276                                           CycConnection.DEFAULT_BASE_PORT,
00277                                           CycConnection.BINARY_MODE,
00278                                           CycAccess.PERSISTENT_CONNECTION,
00279                                           CycConnection.SERIAL_MESSAGING_MODE);
00280             }
00281             else if (connectionMode == REMOTE_CYC_CONNECTION) {
00282                 cycAccess = new CycAccess(myAgentName, cycProxyAgentName, agentCommunity);
00283                 //System.out.println("RemoteCycConnection created");
00284             }
00285             else
00286                 Assert.fail("Invalid connection mode " + connectionMode);
00287             cycConnection = cycAccess.cycConnection;
00288             //cycConnection.trace = true;
00289         }
00290         catch (ConnectException e) {
00291             System.out.println("Could not connect to host " + CycConnection.DEFAULT_HOSTNAME +
00292                                " port " + CycConnection.DEFAULT_BASE_PORT);
00293             Assert.fail(e.toString());
00294         }
00295         catch (Exception e) {
00296             e.printStackTrace();
00297             Assert.fail(e.toString());
00298         }
00299         //cycAccess.traceOn();
00300         // turn on api if not on.
00301         String script = "(pwhen (cand (boundp '*eval-in-api?*) \n" +
00302                         "             (cnot *eval-in-api?*)) \n" +
00303                         "       (csetq *eval-in-api?* t))";
00304         try {
00305             cycAccess.converseVoid(script);
00306         }
00307         catch (Exception e) {
00308             CycAccess.current().close();
00309             Assert.fail(e.toString());
00310         }
00311 
00312         // Test return of atom.
00313         CycList command = new CycList();
00314         command.add(CycObjectFactory.makeCycSymbol("+"));
00315         command.add(new Integer(2));
00316         command.add(new Integer(3));
00317         Object [] response = {new Integer(0), ""};
00318         try {
00319             response = cycConnection.converse(command);
00320         }
00321         catch (Exception e) {
00322             CycAccess.current().close();
00323             Assert.fail(e.toString());
00324         }
00325         Assert.assertEquals(Boolean.TRUE, response[0]);
00326         Assert.assertEquals(new Integer(5), response[1]);
00327 
00328         // Test return of string.
00329         command = new CycList();
00330         command.add(CycObjectFactory.quote);
00331         command.add("abc");
00332         try {
00333             response = cycConnection.converse(command);
00334         }
00335         catch (Exception e) {
00336             CycAccess.current().close();
00337             Assert.fail(e.toString());
00338         }
00339         Assert.assertEquals(Boolean.TRUE, response[0]);
00340         Assert.assertEquals("abc", response[1]);
00341 
00342         // Test return of symbolic expression.
00343         command = new CycList();
00344         command.add(CycObjectFactory.quote);
00345         CycList cycList2 = new CycList();
00346         command.add(cycList2);
00347         cycList2.add(CycObjectFactory.makeCycSymbol("a"));
00348         cycList2.add(CycObjectFactory.makeCycSymbol("b"));
00349         CycList cycList3 = new CycList();
00350         cycList2.add(cycList3);
00351         cycList3.add(CycObjectFactory.makeCycSymbol("c"));
00352         cycList3.add(CycObjectFactory.makeCycSymbol("d"));
00353         CycList cycList4 = new CycList();
00354         cycList3.add(cycList4);
00355         cycList4.add(CycObjectFactory.makeCycSymbol("e"));
00356         cycList3.add(CycObjectFactory.makeCycSymbol("f"));
00357         try {
00358             response = cycConnection.converse(command);
00359         }
00360         catch (Exception e) {
00361             CycAccess.current().close();
00362             Assert.fail(e.toString());
00363         }
00364         Assert.assertEquals(Boolean.TRUE, response[0]);
00365         Assert.assertEquals("(A B (C D (E) F))", response[1].toString());
00366 
00367         // Test return of improper list.
00368         command = new CycList();
00369         command.add(CycObjectFactory.quote);
00370         cycList2 = new CycList();
00371         command.add(cycList2);
00372         cycList2.add(CycObjectFactory.makeCycSymbol("A"));
00373         cycList2.setDottedElement(CycObjectFactory.makeCycSymbol("B"));
00374         try {
00375             //cycConnection.trace = true;
00376             response = cycConnection.converse(command);
00377             //cycConnection.trace = false;
00378         }
00379         catch (Exception e) {
00380             CycAccess.current().close();
00381             Assert.fail(e.toString());
00382         }
00383         Assert.assertEquals(Boolean.TRUE, response[0]);
00384         Assert.assertEquals("(A . B)", response[1].toString());
00385 
00386         // Test error return
00387         command = new CycList();
00388         command.add(CycObjectFactory.nil);
00389         try {
00390             response = cycConnection.converse(command);
00391         }
00392         catch (Exception e) {
00393             CycAccess.current().close();
00394             Assert.fail(e.toString());
00395         }
00396         Assert.assertTrue(response[1].toString().indexOf("Operator NIL is not defined in the API") > -1);
00397 
00398         cycConnection.close();
00399         System.out.println("**** testBinaryCycConnection1 OK ****");
00400     }
00401 
00402     /**
00403      * Tests the fundamental aspects of the binary (cfasl) api connection to the OpenCyc server.
00404      * CycAccess is set to null;
00405      */
00406     public void testBinaryCycConnection2 () {
00407         if (connectionMode == REMOTE_CYC_CONNECTION)
00408             return;
00409         System.out.println("\n**** testBinaryCycConnection2 ****");
00410         CycConnection cycConnection = null;
00411         try {
00412             cycConnection = new CycConnection((CycAccess) null);
00413             //cycConnection.trace = true;
00414         }
00415         catch (Exception e) {
00416             e.printStackTrace();
00417             Assert.fail(e.toString());
00418         }
00419 
00420         // Test return of atom.
00421         CycList command = new CycList();
00422         command.add(CycObjectFactory.makeCycSymbol("+"));
00423         command.add(new Integer(2));
00424         command.add(new Integer(3));
00425         Object [] response = {new Integer(0), ""};
00426         try {
00427             response = cycConnection.converse(command);
00428         }
00429         catch (Exception e) {
00430             cycConnection.close();
00431             Assert.fail(e.toString());
00432         }
00433         Assert.assertEquals(Boolean.TRUE, response[0]);
00434         Assert.assertEquals(new Integer(5), response[1]);
00435 
00436         // Test return of string.
00437         command = new CycList();
00438         command.add(CycObjectFactory.quote);
00439         command.add("abc");
00440         try {
00441             response = cycConnection.converse(command);
00442         }
00443         catch (Exception e) {
00444             cycConnection.close();
00445             Assert.fail(e.toString());
00446         }
00447         Assert.assertEquals(Boolean.TRUE, response[0]);
00448         Assert.assertEquals("abc", response[1]);
00449 
00450         // Test return of symbolic expression.
00451         command = new CycList();
00452         command.add(CycObjectFactory.quote);
00453         CycList cycList2 = new CycList();
00454         command.add(cycList2);
00455         cycList2.add(CycObjectFactory.makeCycSymbol("a"));
00456         cycList2.add(CycObjectFactory.makeCycSymbol("b"));
00457         CycList cycList3 = new CycList();
00458         cycList2.add(cycList3);
00459         cycList3.add(CycObjectFactory.makeCycSymbol("c"));
00460         cycList3.add(CycObjectFactory.makeCycSymbol("d"));
00461         CycList cycList4 = new CycList();
00462         cycList3.add(cycList4);
00463         cycList4.add(CycObjectFactory.makeCycSymbol("e"));
00464         cycList3.add(CycObjectFactory.makeCycSymbol("f"));
00465         try {
00466             response = cycConnection.converse(command);
00467         }
00468         catch (Exception e) {
00469             cycConnection.close();
00470             Assert.fail(e.toString());
00471         }
00472         Assert.assertEquals(Boolean.TRUE, response[0]);
00473         Assert.assertEquals("(A B (C D (E) F))", response[1].toString());
00474 
00475         // Test return of improper list.
00476         command = new CycList();
00477         command.add(CycObjectFactory.quote);
00478         cycList2 = new CycList();
00479         command.add(cycList2);
00480         cycList2.add(CycObjectFactory.makeCycSymbol("A"));
00481         cycList2.setDottedElement(CycObjectFactory.makeCycSymbol("B"));
00482         try {
00483             //cycConnection.trace = true;
00484             response = cycConnection.converse(command);
00485             //cycConnection.trace = false;
00486         }
00487         catch (Exception e) {
00488             cycConnection.close();
00489             Assert.fail(e.toString());
00490         }
00491         Assert.assertEquals(Boolean.TRUE, response[0]);
00492         Assert.assertEquals("(A . B)", response[1].toString());
00493 
00494         // Test error return
00495         command = new CycList();
00496         command.add(CycObjectFactory.nil);
00497         try {
00498             response = cycConnection.converse(command);
00499         }
00500         catch (Exception e) {
00501             cycConnection.close();
00502             Assert.fail(e.toString());
00503         }
00504         // various error messages to effect that NIL is not defined in the API.
00505         Assert.assertTrue(response[1].toString().indexOf("API") > -1);
00506 
00507         cycConnection.close();
00508         System.out.println("**** testBinaryCycConnection2 OK ****");
00509     }
00510 
00511     /**
00512      * Tests a portion of the CycAccess methods using the ascii api connection.
00513      */
00514     public void testAsciiCycAccess1 () {
00515         if (performOnlyBinaryApiModeTests ||
00516             (connectionMode == REMOTE_CYC_CONNECTION))
00517             return;
00518         System.out.println("\n**** testAsciiCycAccess 1 ****");
00519         CycAccess cycAccess = null;
00520         try {
00521             cycAccess = new CycAccess(CycConnection.DEFAULT_HOSTNAME,
00522                                       CycConnection.DEFAULT_BASE_PORT,
00523                                       CycConnection.ASCII_MODE,
00524                                       CycAccess.TRANSIENT_CONNECTION);
00525         }
00526         catch (Exception e) {
00527             Assert.fail(e.toString());
00528         }
00529 
00530         doTestCycAccess1(cycAccess);
00531 
00532         cycAccess.close();
00533         System.out.println("**** testAsciiCycAccess 1 OK ****");
00534     }
00535 
00536     /**
00537      * Tests a portion of the CycAccess methods using the binary api connection.
00538      */
00539     public void testBinaryCycAccess1 () {
00540         System.out.println("\n**** testBinaryCycAccess 1 ****");
00541         CycAccess cycAccess = null;
00542         try {
00543             if (connectionMode == LOCAL_CYC_CONNECTION)
00544                 cycAccess = new CycAccess(CycConnection.DEFAULT_HOSTNAME,
00545                                           CycConnection.DEFAULT_BASE_PORT,
00546                                           CycConnection.BINARY_MODE,
00547                                           CycAccess.TRANSIENT_CONNECTION,
00548                                           CycConnection.SERIAL_MESSAGING_MODE);
00549             else if (connectionMode == REMOTE_CYC_CONNECTION)
00550                 cycAccess = new CycAccess(myAgentName, cycProxyAgentName, agentCommunity);
00551             else
00552                 Assert.fail("Invalid connection mode " + connectionMode);
00553         }
00554         catch (Exception e) {
00555             e.printStackTrace();
00556             System.out.println("\nException: " + e.getMessage());
00557             Assert.fail(e.toString());
00558         }
00559 
00560         //cycAccess.traceOnDetailed();
00561         doTestCycAccess1(cycAccess);
00562 
00563         cycAccess.close();
00564         System.out.println("**** testBinaryCycAccess 1 OK ****");
00565     }
00566 
00567     /**
00568      * Tests a portion of the CycAccess methods using the given api connection.
00569      */
00570     protected void doTestCycAccess1(CycAccess cycAccess) {
00571         long startMilliseconds = System.currentTimeMillis();
00572         try {
00573             // turn on api if not on.
00574             String script = "(pwhen (cand (boundp '*eval-in-api?*) \n" +
00575                             "             (cnot *eval-in-api?*)) \n" +
00576                             "       (csetq *eval-in-api?* t))";
00577             cycAccess.converseVoid(script);
00578         }
00579         catch (Exception e) {
00580             CycAccess.current().close();
00581             Assert.fail(e.toString());
00582         }
00583 
00584         CycObjectFactory.resetCycConstantCaches();
00585         // getConstantByName.
00586         CycConstant cycConstant = null;
00587         try {
00588             cycConstant = cycAccess.getConstantByName("#$Dog");
00589         }
00590         catch (Exception e) {
00591             CycAccess.current().close();
00592             Assert.fail(e.toString());
00593         }
00594         Assert.assertNotNull(cycConstant);
00595         Assert.assertEquals("bd58daa0-9c29-11b1-9dad-c379636f7270", cycConstant.getGuid().toString());
00596 
00597         // getConstantByGuid.
00598         try {
00599             cycConstant = cycAccess.getConstantByGuid(CycObjectFactory.makeGuid("bd58daa0-9c29-11b1-9dad-c379636f7270"));
00600         }
00601         catch (Exception e) {
00602             CycAccess.current().close();
00603             Assert.fail(e.toString());
00604         }
00605         Assert.assertNotNull(cycConstant);
00606         Assert.assertEquals("#$Dog", cycConstant.cyclify());
00607         Assert.assertEquals("Dog", cycConstant.getName());
00608 
00609         // getConstantById
00610         cycConstant = null;
00611         try {
00612             cycConstant = cycAccess.getConstantByGuid(CycObjectFactory.makeGuid("bd58daa0-9c29-11b1-9dad-c379636f7270"));
00613             cycConstant = cycAccess.getConstantById(cycConstant.getId());
00614         }
00615         catch (Exception e) {
00616             CycAccess.current().close();
00617             Assert.fail(e.toString());
00618         }
00619         Assert.assertNotNull(cycConstant);
00620         Assert.assertEquals("#$Dog", cycConstant.cyclify());
00621         Assert.assertEquals("Dog", cycConstant.getName());
00622         Assert.assertEquals(CycObjectFactory.makeGuid("bd58daa0-9c29-11b1-9dad-c379636f7270"),
00623                             cycConstant.getGuid());
00624 
00625         // getComment.
00626         String comment = null;
00627         try {
00628             CycConstant raindrop = cycAccess.getKnownConstantByGuid("bd58bec6-9c29-11b1-9dad-c379636f7270");
00629             comment = cycAccess.getComment(raindrop);
00630         }
00631         catch (Exception e) {
00632             CycAccess.current().close();
00633             Assert.fail(e.toString());
00634         }
00635         Assert.assertNotNull(comment);
00636         Assert.assertEquals("The collection of drops of liquid water emitted by clouds in instances of #$RainProcess.",
00637                             comment);
00638 
00639         // getIsas.
00640         List isas = null;
00641         try {
00642             CycConstant dog = cycAccess.getKnownConstantByGuid("bd58daa0-9c29-11b1-9dad-c379636f7270");
00643             isas = cycAccess.getIsas(dog);
00644         }
00645         catch (Exception e) {
00646             e.printStackTrace();
00647             CycAccess.current().close();
00648             Assert.fail(e.toString());
00649         }
00650         Assert.assertNotNull(isas);
00651         Assert.assertTrue(isas instanceof CycList);
00652         isas = ((CycList) isas).sort();
00653         try {
00654             CycConstant organismClassificationType =
00655                 cycAccess.getKnownConstantByGuid("bd58dfe4-9c29-11b1-9dad-c379636f7270");
00656             Assert.assertTrue(isas.contains(organismClassificationType));
00657         }
00658         catch (Exception e) {
00659             CycAccess.current().close();
00660             Assert.fail(e.toString());
00661         }
00662         long endMilliseconds = System.currentTimeMillis();
00663         System.out.println("  " + (endMilliseconds - startMilliseconds) + " milliseconds");
00664     }
00665 
00666     /**
00667      * Tests a portion of the CycAccess methods using the ascii api connection.
00668      */
00669     public void testAsciiCycAccess2 () {
00670         if (performOnlyBinaryApiModeTests ||
00671             (connectionMode == REMOTE_CYC_CONNECTION))
00672             return;
00673         System.out.println("\n**** testAsciiCycAccess 2 ****");
00674         CycAccess cycAccess = null;
00675         try {
00676             cycAccess = new CycAccess(CycConnection.DEFAULT_HOSTNAME,
00677                                       CycConnection.DEFAULT_BASE_PORT,
00678                                       CycConnection.ASCII_MODE,
00679                                       CycAccess.PERSISTENT_CONNECTION);
00680         }
00681         catch (Exception e) {
00682             CycAccess.current().close();
00683             Assert.fail(e.toString());
00684         }
00685 
00686         doTestCycAccess2 (cycAccess);
00687 
00688         cycAccess.close();
00689         System.out.println("**** testAsciiCycAccess 2 OK ****");
00690     }
00691 
00692 
00693     /**
00694      * Tests a portion of the CycAccess methods using the binary api connection.
00695      */
00696     public void testBinaryCycAccess2 () {
00697         System.out.println("\n**** testBinaryCycAccess 2 ****");
00698         CycAccess cycAccess = null;
00699         try {
00700             if (connectionMode == LOCAL_CYC_CONNECTION)
00701                 cycAccess = new CycAccess(CycConnection.DEFAULT_HOSTNAME,
00702                                           CycConnection.DEFAULT_BASE_PORT,
00703                                           CycConnection.BINARY_MODE,
00704                                           CycAccess.PERSISTENT_CONNECTION,
00705                                           CycConnection.CONCURRENT_MESSAGING_MODE);
00706             else if (connectionMode == REMOTE_CYC_CONNECTION)
00707                 cycAccess = new CycAccess(myAgentName, cycProxyAgentName, agentCommunity);
00708             else
00709                 Assert.fail("Invalid connection mode " + connectionMode);
00710         }
00711         catch (Exception e) {
00712             CycAccess.current().close();
00713             Assert.fail(e.toString());
00714         }
00715         //cycAccess.traceOnDetailed();
00716         doTestCycAccess2(cycAccess);
00717 
00718         cycAccess.close();
00719         System.out.println("**** testBinaryCycAccess 2 OK ****");
00720     }
00721 
00722     /**
00723      * Tests a portion of the CycAccess methods using the given api connection.
00724      */
00725     protected void doTestCycAccess2 (CycAccess cycAccess) {
00726         long startMilliseconds = System.currentTimeMillis();
00727         CycObjectFactory.resetCycConstantCaches();
00728 
00729         // getGenls.
00730         List genls = null;
00731         try {
00732             CycConstant dog = cycAccess.getKnownConstantByGuid("bd58daa0-9c29-11b1-9dad-c379636f7270");
00733             genls = cycAccess.getGenls(dog);
00734         }
00735         catch (Exception e) {
00736             CycAccess.current().close();
00737             Assert.fail(e.toString());
00738         }
00739         Assert.assertNotNull(genls);
00740         Assert.assertTrue(genls instanceof CycList);
00741         genls = ((CycList) genls).sort();
00742         Assert.assertTrue(genls.toString().indexOf("CanineAnimal") > -1);
00743         Assert.assertTrue(genls.toString().indexOf("DomesticatedAnimal") > -1);
00744 
00745         // getGenlPreds.
00746         List genlPreds = null;
00747         try {
00748             CycConstant target = cycAccess.getKnownConstantByGuid("c10afaed-9c29-11b1-9dad-c379636f7270");
00749             genlPreds = cycAccess.getGenlPreds(target);
00750         }
00751         catch (Exception e) {
00752             CycAccess.current().close();
00753             Assert.fail(e.toString());
00754         }
00755         Assert.assertNotNull(genlPreds);
00756         Assert.assertTrue((genlPreds.toString().equals("(preActors)")) ||
00757                           (genlPreds.toString().equals("(actors)")));
00758 
00759         // getAllGenlPreds.
00760         List allGenlPreds = null;
00761         try {
00762             CycConstant target = cycAccess.getKnownConstantByGuid("c10afaed-9c29-11b1-9dad-c379636f7270");
00763             allGenlPreds = cycAccess.getAllGenlPreds(target);
00764         }
00765         catch (Exception e) {
00766             CycAccess.current().close();
00767             Assert.fail(e.toString());
00768         }
00769         Assert.assertNotNull(allGenlPreds);
00770         Assert.assertTrue(allGenlPreds.size() > 2);
00771 
00772         // getArg1Formats.
00773         List arg1Formats = null;
00774         try {
00775             CycConstant target = cycAccess.getKnownConstantByGuid("c10afaed-9c29-11b1-9dad-c379636f7270");
00776             arg1Formats = cycAccess.getArg1Formats(target);
00777         }
00778         catch (Exception e) {
00779             CycAccess.current().close();
00780             Assert.fail(e.toString());
00781         }
00782         Assert.assertNotNull(arg1Formats);
00783         Assert.assertEquals("(SetTheFormat)", arg1Formats.toString());
00784 
00785         // getArg1Formats.
00786         arg1Formats = null;
00787         try {
00788             CycConstant constantName = cycAccess.getKnownConstantByGuid("bd7183b0-9c29-11b1-9dad-c379636f7270");
00789             arg1Formats = cycAccess.getArg1Formats(constantName);
00790         }
00791         catch (Exception e) {
00792             CycAccess.current().close();
00793             Assert.fail(e.toString());
00794         }
00795         Assert.assertNotNull(arg1Formats);
00796         Assert.assertEquals("(SingleEntry)", arg1Formats.toString());
00797 
00798 
00799         // getArg2Formats.
00800         List arg2Formats = null;
00801         try {
00802             CycConstant internalParts = cycAccess.getKnownConstantByGuid("bd58cf63-9c29-11b1-9dad-c379636f7270");
00803             arg2Formats = cycAccess.getArg2Formats(internalParts);
00804         }
00805         catch (Exception e) {
00806             CycAccess.current().close();
00807             Assert.fail(e.toString());
00808         }
00809         Assert.assertNotNull(arg2Formats);
00810         Assert.assertEquals("(SetTheFormat)", arg2Formats.toString());
00811 
00812         // getDisjointWiths.
00813         List disjointWiths = null;
00814         try {
00815             CycConstant vegetableMatter =
00816                 cycAccess.getKnownConstantByGuid("bd58c455-9c29-11b1-9dad-c379636f7270");
00817             disjointWiths = cycAccess.getDisjointWiths(vegetableMatter);
00818         }
00819         catch (Exception e) {
00820             CycAccess.current().close();
00821             Assert.fail(e.toString());
00822         }
00823         Assert.assertNotNull(disjointWiths);
00824         Assert.assertTrue(disjointWiths.toString().indexOf("AnimalBLO") > 0);
00825 
00826         // getCoExtensionals.
00827         List coExtensionals = null;
00828         try {
00829             //cycAccess.traceOn();
00830             CycConstant cycLTerm = cycAccess.getKnownConstantByGuid("c107fffb-9c29-11b1-9dad-c379636f7270");
00831             coExtensionals = cycAccess.getCoExtensionals(cycLTerm);
00832             //cycAccess.traceOff();
00833         }
00834         catch (Exception e) {
00835             e.printStackTrace();
00836             CycAccess.current().close();
00837             Assert.fail(e.toString());
00838         }
00839         Assert.assertNotNull(coExtensionals);
00840         Assert.assertEquals("(CycLExpression)", coExtensionals.toString());
00841 
00842         // getCoExtensionals.
00843         coExtensionals = null;
00844         try {
00845             CycConstant dog = cycAccess.getKnownConstantByGuid("bd58daa0-9c29-11b1-9dad-c379636f7270");
00846             coExtensionals = cycAccess.getCoExtensionals(dog);
00847         }
00848         catch (Exception e) {
00849             CycAccess.current().close();
00850             Assert.fail(e.toString());
00851         }
00852         Assert.assertNotNull(coExtensionals);
00853         Assert.assertEquals("()", coExtensionals.toString());
00854 
00855         // getArg1Isas.
00856         List arg1Isas = null;
00857         try {
00858             CycConstant doneBy = cycAccess.getKnownConstantByGuid("c0fd4798-9c29-11b1-9dad-c379636f7270");
00859             arg1Isas = cycAccess.getArg1Isas(doneBy);
00860         }
00861         catch (Exception e) {
00862             CycAccess.current().close();
00863             Assert.fail(e.toString());
00864         }
00865         Assert.assertNotNull(arg1Isas);
00866         Assert.assertEquals("(Event)", arg1Isas.toString());
00867 
00868         // getArg2Isas.
00869         List arg2Isas = null;
00870         try {
00871             CycConstant doneBy = cycAccess.getKnownConstantByGuid("c0fd4798-9c29-11b1-9dad-c379636f7270");
00872             arg2Isas = cycAccess.getArg2Isas(doneBy);
00873         }
00874         catch (Exception e) {
00875             CycAccess.current().close();
00876             Assert.fail(e.toString());
00877         }
00878         Assert.assertNotNull(arg2Isas);
00879         Assert.assertEquals("(SomethingExisting)", arg2Isas.toString());
00880 
00881         // getArgNIsas.
00882         List argNIsas = null;
00883         try {
00884             CycConstant doneBy = cycAccess.getKnownConstantByGuid("c0fd4798-9c29-11b1-9dad-c379636f7270");
00885             argNIsas = cycAccess.getArgNIsas(doneBy, 1);
00886         }
00887         catch (Exception e) {
00888             CycAccess.current().close();
00889             Assert.fail(e.toString());
00890         }
00891         Assert.assertNotNull(argNIsas);
00892         Assert.assertEquals("(Event)", argNIsas.toString());
00893 
00894         // getArgNGenls.
00895         List argGenls = null;
00896         try {
00897             CycConstant superTaxons = cycAccess.getKnownConstantByGuid("bd58e36e-9c29-11b1-9dad-c379636f7270");
00898             argGenls = cycAccess.getArgNGenls(superTaxons, 2);
00899         }
00900         catch (Exception e) {
00901             CycAccess.current().close();
00902             Assert.fail(e.toString());
00903         }
00904         Assert.assertNotNull(argGenls);
00905         Assert.assertEquals("(Organism-Whole)", argGenls.toString());
00906 
00907         // isCollection.
00908         boolean answer = false;
00909         try {
00910             CycConstant dog = cycAccess.getKnownConstantByGuid("bd58daa0-9c29-11b1-9dad-c379636f7270");
00911             answer = cycAccess.isCollection(dog);
00912         }
00913         catch (Exception e) {
00914             CycAccess.current().close();
00915             Assert.fail(e.toString());
00916         }
00917         Assert.assertTrue(answer);
00918 
00919         // isCollection.
00920         answer = true;
00921         try {
00922             CycConstant doneBy = cycAccess.getKnownConstantByGuid("c0fd4798-9c29-11b1-9dad-c379636f7270");
00923             answer = cycAccess.isCollection(doneBy);
00924         }
00925         catch (Exception e) {
00926             CycAccess.current().close();
00927             Assert.fail(e.toString());
00928         }
00929         Assert.assertTrue(! answer);
00930 
00931         // isBinaryPredicate.
00932         answer = false;
00933         try {
00934             CycConstant doneBy = cycAccess.getKnownConstantByGuid("c0fd4798-9c29-11b1-9dad-c379636f7270");
00935             answer = cycAccess.isBinaryPredicate(doneBy);
00936         }
00937         catch (Exception e) {
00938             CycAccess.current().close();
00939             Assert.fail(e.toString());
00940         }
00941         Assert.assertTrue(answer);
00942 
00943         // isBinaryPredicate.
00944         answer = true;
00945         try {
00946             CycConstant dog = cycAccess.getKnownConstantByGuid("bd58daa0-9c29-11b1-9dad-c379636f7270");
00947             answer = cycAccess.isBinaryPredicate(dog);
00948         }
00949         catch (Exception e) {
00950             CycAccess.current().close();
00951             Assert.fail(e.toString());
00952         }
00953         Assert.assertTrue(! answer);
00954 
00955         // getPluralGeneratedPhrase.
00956         String phrase = null;
00957         try {
00958             CycConstant dog = cycAccess.getKnownConstantByGuid("bd58daa0-9c29-11b1-9dad-c379636f7270");
00959             phrase = cycAccess.getPluralGeneratedPhrase(dog);
00960         }
00961         catch (Exception e) {
00962             CycAccess.current().close();
00963             Assert.fail(e.toString());
00964         }
00965         Assert.assertNotNull(phrase);
00966         Assert.assertTrue(phrase.indexOf("dogs (") > -1);
00967 
00968         // getSingularGeneratedPhrase.
00969         phrase = null;
00970         try {
00971             CycConstant brazil = cycAccess.getKnownConstantByGuid("bd588f01-9c29-11b1-9dad-c379636f7270");
00972             phrase = cycAccess.getSingularGeneratedPhrase(brazil);
00973         }
00974         catch (Exception e) {
00975             CycAccess.current().close();
00976             Assert.fail(e.toString());
00977         }
00978         Assert.assertNotNull(phrase);
00979         Assert.assertTrue(phrase.indexOf("Brazil (") > -1);
00980 
00981         // getGeneratedPhrase.
00982         phrase = null;
00983         try {
00984             CycConstant doneBy = cycAccess.getKnownConstantByGuid("c0fd4798-9c29-11b1-9dad-c379636f7270");
00985             phrase = cycAccess.getGeneratedPhrase(doneBy);
00986         }
00987         catch (Exception e) {
00988             CycAccess.current().close();
00989             Assert.fail(e.toString());
00990         }
00991        Assert.assertNotNull(phrase);
00992         Assert.assertTrue(phrase.indexOf("doer (") > -1);
00993         long endMilliseconds = System.currentTimeMillis();
00994         System.out.println("  " + (endMilliseconds - startMilliseconds) + " milliseconds");
00995     }
00996 
00997     /**
00998      * Tests a portion of the CycAccess methods using the ascii api connection.
00999      */
01000     public void testAsciiCycAccess3 () {
01001         if (performOnlyBinaryApiModeTests ||
01002             (connectionMode == REMOTE_CYC_CONNECTION))
01003             return;
01004         System.out.println("\n**** testAsciiCycAccess 3 ****");
01005         CycAccess cycAccess = null;
01006         try {
01007             cycAccess = new CycAccess(CycConnection.DEFAULT_HOSTNAME,
01008                                       CycConnection.DEFAULT_BASE_PORT,
01009                                       CycConnection.ASCII_MODE,
01010                                       CycAccess.PERSISTENT_CONNECTION);
01011         }
01012         catch (Exception e) {
01013             Assert.fail(e.toString());
01014         }
01015 
01016         doTestCycAccess3 (cycAccess);
01017 
01018         cycAccess.close();
01019         System.out.println("**** testAsciiCycAccess 3 OK ****");
01020     }
01021 
01022 
01023     /**
01024      * Tests a portion of the CycAccess methods using the binary api connection.
01025      */
01026     public void testBinaryCycAccess3 () {
01027         System.out.println("\n**** testBinaryCycAccess 3 ****");
01028         CycAccess cycAccess = null;
01029         try {
01030             if (connectionMode == LOCAL_CYC_CONNECTION)
01031                 cycAccess = new CycAccess(CycConnection.DEFAULT_HOSTNAME,
01032                                           CycConnection.DEFAULT_BASE_PORT,
01033                                           CycConnection.BINARY_MODE,
01034                                           CycAccess.PERSISTENT_CONNECTION,
01035                                           CycConnection.SERIAL_MESSAGING_MODE);
01036             else if (connectionMode == REMOTE_CYC_CONNECTION)
01037                 cycAccess = new CycAccess(myAgentName, cycProxyAgentName, agentCommunity);
01038             else
01039                 Assert.fail("Invalid connection mode " + connectionMode);
01040         }
01041         catch (Exception e) {
01042             Assert.fail(e.toString());
01043         }
01044         doTestCycAccess3(cycAccess);
01045 
01046         cycAccess.close();
01047         System.out.println("**** testBinaryCycAccess 3 OK ****");
01048     }
01049 
01050     /**
01051      * Tests a portion of the CycAccess methods using the given api connection.
01052      */
01053     protected void doTestCycAccess3 (CycAccess cycAccess) {
01054         long startMilliseconds = System.currentTimeMillis();
01055         CycObjectFactory.resetCycConstantCaches();
01056         // getComment.
01057         String comment = null;
01058         try {
01059             CycConstant brazil = cycAccess.getKnownConstantByGuid("bd588f01-9c29-11b1-9dad-c379636f7270");
01060             comment = cycAccess.getComment(brazil);
01061         }
01062         catch (Exception e) {
01063             CycAccess.current().close();
01064             Assert.fail(e.toString());
01065         }
01066         Assert.assertNotNull(comment);
01067         Assert.assertEquals("An instance of #$IndependentCountry.  #$Brazil is the " +
01068                             "largest country in South America, and is bounded on the " +
01069                             "northwest by #$Colombia; on the north by #$Venezuela, " +
01070                             "#$Guyana, #$Suriname, and #$FrenchGuiana; on the east by " +
01071                             "the #$AtlanticOcean; on the south by #$Uruguay; on the " +
01072                             "southwest by #$Argentina and #$Paraguay; and on the west " +
01073                             "by #$Bolivia and #$Peru.", comment);
01074 
01075         // getIsas.
01076         List isas = null;
01077         try {
01078             CycConstant brazil = cycAccess.getKnownConstantByGuid("bd588f01-9c29-11b1-9dad-c379636f7270");
01079             isas = cycAccess.getIsas(brazil);
01080         }
01081         catch (Exception e) {
01082             CycAccess.current().close();
01083             Assert.fail(e.toString());
01084         }
01085         Assert.assertNotNull(isas);
01086         Assert.assertTrue(isas instanceof CycList);
01087         isas = ((CycList) isas).sort();
01088         Assert.assertTrue(isas.toString().indexOf("Entity") > 0);
01089         Assert.assertTrue(isas.toString().indexOf("IndependentCountry") > 0);
01090 
01091         // getGenls.
01092         List genls = null;
01093         try {
01094             CycConstant dog = cycAccess.getKnownConstantByGuid("bd58daa0-9c29-11b1-9dad-c379636f7270");
01095             genls = cycAccess.getGenls(dog);
01096         }
01097         catch (Exception e) {
01098             CycAccess.current().close();
01099             Assert.fail(e.toString());
01100         }
01101         Assert.assertNotNull(genls);
01102         Assert.assertTrue(genls instanceof CycList);
01103         genls = ((CycList) genls).sort();
01104         Assert.assertTrue(genls.toString().indexOf("CanineAnimal") > -1);
01105         Assert.assertTrue(genls.toString().indexOf("DomesticatedAnimal") > -1);
01106 
01107         // getMinGenls.
01108         List minGenls = null;
01109         try {
01110             CycConstant lion = cycAccess.getKnownConstantByGuid("bd58c467-9c29-11b1-9dad-c379636f7270");
01111             minGenls = cycAccess.getMinGenls(lion);
01112         }
01113         catch (Exception e) {
01114             CycAccess.current().close();
01115             Assert.fail(e.toString());
01116         }
01117         Assert.assertNotNull(minGenls);
01118         Assert.assertTrue(minGenls instanceof CycList);
01119         minGenls = ((CycList) minGenls).sort();
01120         Assert.assertEquals("(FelidaeFamily)", minGenls.toString());
01121 
01122         // getMinGenls mt.
01123         minGenls = null;
01124         try {
01125             CycConstant lion = cycAccess.getKnownConstantByGuid("bd58c467-9c29-11b1-9dad-c379636f7270");
01126             // #$BiologyVocabularyMt
01127             minGenls = cycAccess.getMinGenls(lion, cycAccess.getKnownConstantByGuid("bdd51776-9c29-11b1-9dad-c379636f7270"));
01128         }
01129         catch (Exception e) {
01130             CycAccess.current().close();
01131             Assert.fail(e.toString());
01132         }
01133         Assert.assertNotNull(minGenls);
01134         Assert.assertTrue(minGenls instanceof CycList);
01135         minGenls = ((CycList) minGenls).sort();
01136         Assert.assertEquals("(FelidaeFamily)", minGenls.toString());
01137 
01138         // getSpecs.
01139         List specs = null;
01140         try {
01141             CycConstant canineAnimal = cycAccess.getKnownConstantByGuid("bd58d044-9c29-11b1-9dad-c379636f7270");
01142             specs = cycAccess.getSpecs(canineAnimal);
01143         }
01144         catch (Exception e) {
01145             CycAccess.current().close();
01146             Assert.fail(e.toString());
01147         }
01148         Assert.assertNotNull(specs);
01149         Assert.assertTrue(specs instanceof CycList);
01150         specs = ((CycList) specs).sort();
01151         Assert.assertEquals("(Coyote-Animal Dog Fox Jackal Wolf)", specs.toString());
01152 
01153         // getMaxSpecs.
01154         List maxSpecs = null;
01155         try {
01156             CycConstant canineAnimal = cycAccess.getKnownConstantByGuid("bd58d044-9c29-11b1-9dad-c379636f7270");
01157             maxSpecs = cycAccess.getMaxSpecs(canineAnimal);
01158         }
01159         catch (Exception e) {
01160             CycAccess.current().close();
01161             Assert.fail(e.toString());
01162         }
01163         Assert.assertNotNull(maxSpecs);
01164         Assert.assertTrue(maxSpecs instanceof CycList);
01165         maxSpecs = ((CycList) maxSpecs).sort();
01166         Assert.assertTrue(maxSpecs.toString().indexOf("Coyote-Animal") > 0);
01167         Assert.assertTrue(maxSpecs.toString().indexOf("Dog") > 0);
01168         Assert.assertTrue(maxSpecs.toString().indexOf("Fox") > 0);
01169         Assert.assertTrue(maxSpecs.toString().indexOf("Jackal") > 0);
01170         Assert.assertTrue(maxSpecs.toString().indexOf("Wolf") > 0);
01171 
01172         // getGenlSiblings.
01173         List genlSiblings = null;
01174         try {
01175             CycConstant dog = cycAccess.getKnownConstantByGuid("bd58daa0-9c29-11b1-9dad-c379636f7270");
01176             genlSiblings = cycAccess.getGenlSiblings(dog);
01177         }
01178         catch (Exception e) {
01179             CycAccess.current().close();
01180             Assert.fail(e.toString());
01181         }
01182         Assert.assertNotNull(genlSiblings);
01183         Assert.assertTrue(genlSiblings instanceof CycList);
01184         genlSiblings = ((CycList) genlSiblings).sort();
01185         Assert.assertTrue(genlSiblings.toString().indexOf("Individual") > -1);
01186         Assert.assertTrue(genlSiblings.toString().indexOf("JuvenileAnimal") > -1);
01187 
01188         /* long running.
01189         // getSiblings.
01190         List siblings = null;
01191         try {
01192             CycConstant dog = cycAccess.getKnownConstantByGuid("bd58daa0-9c29-11b1-9dad-c379636f7270");
01193             siblings = cycAccess.getSiblings(dog);
01194             Assert.assertNotNull(siblings);
01195             Assert.assertTrue(siblings instanceof CycList);
01196             CycConstant gooseDomestic = cycAccess.getKnownConstantByGuid("bd5ca864-9c29-11b1-9dad-c379636f7270");
01197             Assert.assertTrue(siblings.contains(gooseDomestic));
01198             CycConstant goatDomestic = cycAccess.getKnownConstantByGuid("bd58e278-9c29-11b1-9dad-c379636f7270");
01199             Assert.assertTrue(siblings.contains(goatDomestic));
01200         }
01201         catch (Exception e) {
01202             e.printStackTrace();
01203             CycAccess.current().close();
01204             Assert.fail(e.toString());
01205         }
01206         // getSpecSiblings.
01207         List specSiblings = null;
01208         try {
01209             CycConstant dog = cycAccess.getKnownConstantByGuid("bd58daa0-9c29-11b1-9dad-c379636f7270");
01210             specSiblings = cycAccess.getSpecSiblings(dog);
01211             Assert.assertNotNull(specSiblings);
01212             Assert.assertTrue(specSiblings instanceof CycList);
01213             CycConstant gooseDomestic = cycAccess.getKnownConstantByGuid("bd5ca864-9c29-11b1-9dad-c379636f7270");
01214             Assert.assertTrue(specSiblings.contains(gooseDomestic));
01215             CycConstant goatDomestic = cycAccess.getKnownConstantByGuid("bd58e278-9c29-11b1-9dad-c379636f7270");
01216             Assert.assertTrue(specSiblings.contains(goatDomestic));
01217         }
01218         catch (Exception e) {
01219             CycAccess.current().close();
01220             Assert.fail(e.toString());
01221         }
01222         */
01223 
01224         // getAllGenls.
01225         List allGenls = null;
01226         try {
01227             CycConstant existingObjectType = cycAccess.getKnownConstantByGuid("bd65d880-9c29-11b1-9dad-c379636f7270");
01228             allGenls = cycAccess.getAllGenls(existingObjectType);
01229             Assert.assertNotNull(allGenls);
01230             Assert.assertTrue(allGenls instanceof CycList);
01231             CycConstant objectType = cycAccess.getKnownConstantByGuid("bd58ab9d-9c29-11b1-9dad-c379636f7270");
01232             Assert.assertTrue(allGenls.contains(objectType));
01233             Assert.assertTrue(allGenls.contains(CycAccess.thing));
01234             }
01235         catch (Exception e) {
01236             CycAccess.current().close();
01237             Assert.fail(e.toString());
01238         }
01239 
01240         // getAllSpecs.
01241         List allSpecs = null;
01242         try {
01243             CycConstant canineAnimal = cycAccess.getKnownConstantByGuid("bd58d044-9c29-11b1-9dad-c379636f7270");
01244             allSpecs = cycAccess.getAllSpecs(canineAnimal);
01245             Assert.assertNotNull(allSpecs);
01246             Assert.assertTrue(allSpecs instanceof CycList);
01247             CycConstant jackal = cycAccess.getKnownConstantByGuid("bd58c2de-9c29-11b1-9dad-c379636f7270");
01248             Assert.assertTrue(allSpecs.contains(jackal));
01249             CycConstant retrieverDog = cycAccess.getKnownConstantByGuid("bd58e24b-9c29-11b1-9dad-c379636f7270");
01250             Assert.assertTrue(allSpecs.contains(retrieverDog));
01251         }
01252         catch (Exception e) {
01253             CycAccess.current().close();
01254             Assert.fail(e.toString());
01255         }
01256 
01257         // getAllGenlsWrt.
01258         List allGenlsWrt = null;
01259         try {
01260             CycConstant dog = cycAccess.getKnownConstantByGuid("bd58daa0-9c29-11b1-9dad-c379636f7270");
01261             CycConstant animal = cycAccess.getKnownConstantByGuid("bd58b031-9c29-11b1-9dad-c379636f7270");
01262             allGenlsWrt = cycAccess.getAllGenlsWrt(dog, animal);
01263             Assert.assertNotNull(allGenlsWrt);
01264             Assert.assertTrue(allGenlsWrt instanceof CycList);
01265             CycConstant tameAnimal = cycAccess.getKnownConstantByGuid("c0fcd4a1-9c29-11b1-9dad-c379636f7270");
01266             Assert.assertTrue(allGenlsWrt.contains(tameAnimal));
01267             CycConstant airBreathingVertebrate = cycAccess.getKnownConstantByGuid("bef7c9c1-9c29-11b1-9dad-c379636f7270");
01268             Assert.assertTrue(allGenlsWrt.contains(airBreathingVertebrate));
01269         }
01270         catch (Exception e) {
01271             CycAccess.current().close();
01272             Assert.fail(e.toString());
01273         }
01274 
01275         // getAllDependentSpecs.
01276         List allDependentSpecs = null;
01277         try {
01278             CycConstant canineAnimal = cycAccess.getKnownConstantByGuid("bd58d044-9c29-11b1-9dad-c379636f7270");
01279             allDependentSpecs = cycAccess.getAllDependentSpecs(canineAnimal);
01280             Assert.assertNotNull(allDependentSpecs);
01281             CycConstant wolfGray = cycAccess.getKnownConstantByGuid("becf2f96-9c29-11b1-9dad-c379636f7270");
01282             Assert.assertTrue(allDependentSpecs instanceof CycList);
01283             Assert.assertTrue(allDependentSpecs.contains(wolfGray));
01284             CycConstant wolf = cycAccess.getKnownConstantByGuid("bd58c31f-9c29-11b1-9dad-c379636f7270");
01285             Assert.assertTrue(allDependentSpecs.contains(wolf));
01286         }
01287         catch (Exception e) {
01288             CycAccess.current().close();
01289             Assert.fail(e.toString());
01290         }
01291         // getSampleLeafSpecs.
01292         List sampleLeafSpecs = null;
01293         try {
01294             CycConstant canineAnimal = cycAccess.getKnownConstantByGuid("bd58d044-9c29-11b1-9dad-c379636f7270");
01295             sampleLeafSpecs = cycAccess.getSampleLeafSpecs(canineAnimal, 3);
01296         }
01297         catch (Exception e) {
01298             CycAccess.current().close();
01299             Assert.fail(e.toString());
01300         }
01301         Assert.assertNotNull(sampleLeafSpecs);
01302         Assert.assertTrue(sampleLeafSpecs instanceof CycList);
01303         //System.out.println("sampleLeafSpecs: " + sampleLeafSpecsArrayList);
01304         Assert.assertTrue(sampleLeafSpecs.size() > 0);
01305 
01306         // isSpecOf.
01307         boolean answer = true;
01308         try {
01309             CycConstant dog = cycAccess.getKnownConstantByGuid("bd58daa0-9c29-11b1-9dad-c379636f7270");
01310             CycConstant animal = cycAccess.getKnownConstantByGuid("bd58b031-9c29-11b1-9dad-c379636f7270");
01311             answer = cycAccess.isSpecOf(dog, animal);
01312         }
01313         catch (Exception e) {
01314             CycAccess.current().close();
01315             Assert.fail(e.toString());
01316         }
01317         Assert.assertTrue(answer);
01318 
01319         // isGenlOf.
01320         answer = true;
01321         try {
01322             CycConstant wolf = cycAccess.getKnownConstantByGuid("bd58c31f-9c29-11b1-9dad-c379636f7270");
01323             CycConstant canineAnimal = cycAccess.getKnownConstantByGuid("bd58d044-9c29-11b1-9dad-c379636f7270");
01324             answer = cycAccess.isGenlOf(canineAnimal, wolf);
01325         }
01326         catch (Exception e) {
01327             CycAccess.current().close();
01328             Assert.fail(e.toString());
01329         }
01330         Assert.assertTrue(answer);
01331 
01332         // areTacitCoextensional.
01333         answer = true;
01334         try {
01335             CycConstant singlePurposeDevice = cycAccess.getKnownConstantByGuid("bd5897aa-9c29-11b1-9dad-c379636f7270");
01336             CycConstant physicalDevice = cycAccess.getKnownConstantByGuid("bd58c72f-9c29-11b1-9dad-c379636f7270");
01337             //cycAccess.traceOn();
01338             answer = cycAccess.areTacitCoextensional(singlePurposeDevice, physicalDevice);
01339         }
01340         catch (Exception e) {
01341             CycAccess.current().close();
01342             Assert.fail(e.toString());
01343         }
01344         Assert.assertTrue(answer);
01345 
01346         // areAssertedCoextensional.
01347         answer = true;
01348         try {
01349             CycConstant singlePurposeDevice = cycAccess.getKnownConstantByGuid("bd5897aa-9c29-11b1-9dad-c379636f7270");
01350             CycConstant physicalDevice = cycAccess.getKnownConstantByGuid("bd58c72f-9c29-11b1-9dad-c379636f7270");
01351             answer = cycAccess.areAssertedCoextensional(singlePurposeDevice, physicalDevice);
01352         }
01353         catch (Exception e) {
01354             CycAccess.current().close();
01355             Assert.fail(e.toString());
01356         }
01357         Assert.assertTrue(answer);
01358 
01359         // areIntersecting.
01360         answer = true;
01361         //cycAccess.traceOn();
01362         try {
01363             CycConstant domesticatedAnimal = cycAccess.getKnownConstantByGuid("c10c22cd-9c29-11b1-9dad-c379636f7270");
01364             CycConstant tameAnimal = cycAccess.getKnownConstantByGuid("c0fcd4a1-9c29-11b1-9dad-c379636f7270");
01365             answer = cycAccess.areIntersecting(domesticatedAnimal, tameAnimal);
01366         }
01367         catch (Exception e) {
01368             CycAccess.current().close();
01369             Assert.fail(e.toString());
01370         }
01371         Assert.assertTrue(answer);
01372         //cycAccess.traceOff();
01373 
01374         // areHierarchical.
01375         answer = true;
01376         try {
01377             CycConstant wolf = cycAccess.getKnownConstantByGuid("bd58c31f-9c29-11b1-9dad-c379636f7270");
01378             CycConstant canineAnimal = cycAccess.getKnownConstantByGuid("bd58d044-9c29-11b1-9dad-c379636f7270");
01379             answer = cycAccess.areHierarchical(canineAnimal, wolf);
01380         }
01381         catch (Exception e) {
01382             CycAccess.current().close();
01383             Assert.fail(e.toString());
01384         }
01385         Assert.assertTrue(answer);
01386 
01387         // getParaphrase.
01388         String phrase = null;
01389         try {
01390             //cycAccess.traceOn();
01391             phrase = cycAccess.getParaphrase(cycAccess.makeCycList("(#$isa #$Brazil #$Country)"));
01392         }
01393         catch (Exception e) {
01394             CycAccess.current().close();
01395             Assert.fail(e.toString());
01396         }
01397         Assert.assertNotNull(phrase);
01398         Assert.assertTrue(phrase.indexOf("Brazil (") > -1);
01399 
01400         long endMilliseconds = System.currentTimeMillis();
01401         System.out.println("  " + (endMilliseconds - startMilliseconds) + " milliseconds");
01402     }
01403 
01404     /**
01405      * Tests a portion of the CycAccess methods using the ascii api connection.
01406      */
01407     public void testAsciiCycAccess4 () {
01408         if (performOnlyBinaryApiModeTests ||
01409             (connectionMode == REMOTE_CYC_CONNECTION))
01410             return;
01411         System.out.println("\n**** testAsciiCycAccess 4 ****");
01412         CycAccess cycAccess = null;
01413         try {
01414             cycAccess = new CycAccess(CycConnection.DEFAULT_HOSTNAME,
01415                                       CycConnection.DEFAULT_BASE_PORT,
01416                                       CycConnection.ASCII_MODE,
01417                                       CycAccess.PERSISTENT_CONNECTION);
01418         }
01419         catch (Exception e) {
01420             Assert.fail(e.toString());
01421         }
01422 
01423         doTestCycAccess4(cycAccess);
01424 
01425         cycAccess.close();
01426         System.out.println("**** testAsciiCycAccess 4 OK ****");
01427     }
01428 
01429 
01430     /**
01431      * Tests a portion of the CycAccess methods using the binary api connection.
01432      */
01433     public void testBinaryCycAccess4 () {
01434         System.out.println("\n**** testBinaryCycAccess 4 ****");
01435         CycAccess cycAccess = null;
01436         try {
01437             if (connectionMode == LOCAL_CYC_CONNECTION)
01438                 cycAccess = new CycAccess(CycConnection.DEFAULT_HOSTNAME,
01439                                           CycConnection.DEFAULT_BASE_PORT,
01440                                           CycConnection.BINARY_MODE,
01441                                           CycAccess.PERSISTENT_CONNECTION,
01442                                           CycConnection.SERIAL_MESSAGING_MODE);
01443             else if (connectionMode == REMOTE_CYC_CONNECTION)
01444                 cycAccess = new CycAccess(myAgentName, cycProxyAgentName, agentCommunity);
01445             else
01446                 Assert.fail("Invalid connection mode " + connectionMode);
01447         }
01448         catch (Exception e) {
01449             Assert.fail(e.toString());
01450         }
01451 
01452         //cycAccess.traceOnDetailed();
01453         doTestCycAccess4(cycAccess);
01454 
01455         cycAccess.close();
01456         System.out.println("**** testBinaryCycAccess 4 OK ****");
01457     }
01458 
01459     /**
01460      * Tests a portion of the CycAccess methods using the given api connection.
01461      */
01462     protected void doTestCycAccess4 (CycAccess cycAccess) {
01463         long startMilliseconds = System.currentTimeMillis();
01464         CycObjectFactory.resetCycConstantCaches();
01465         // getWhyGenl.
01466         CycList whyGenl = null;
01467         try {
01468             CycConstant dog = cycAccess.getKnownConstantByGuid("bd58daa0-9c29-11b1-9dad-c379636f7270");
01469             CycConstant animal = cycAccess.getKnownConstantByGuid("bd58b031-9c29-11b1-9dad-c379636f7270");
01470             whyGenl = cycAccess.getWhyGenl(dog, animal);
01471         }
01472         catch (Exception e) {
01473             CycAccess.current().close();
01474             Assert.fail(e.toString());
01475         }
01476         Assert.assertNotNull(whyGenl);
01477         System.out.println("whyGenl "+ whyGenl);
01478         /*
01479         CycSymbol whyGenlFirst = (CycSymbol) ((CycList) ((CycList) whyGenl.first()).first()).second();
01480         CycSymbol whyGenlLast = (CycSymbol) ((CycList) ((CycList) whyGenl.last()).first()).third();
01481         try {
01482             CycConstant dog = cycAccess.getKnownConstantByGuid("bd58daa0-9c29-11b1-9dad-c379636f7270");
01483             Assert.assertEquals(dog, whyGenlFirst);
01484             CycConstant animal = cycAccess.getKnownConstantByGuid("bd58b031-9c29-11b1-9dad-c379636f7270");
01485             Assert.assertEquals(animal, whyGenlLast);
01486         }
01487         catch (Exception e) {
01488             CycAccess.current().close();
01489             Assert.fail(e.toString());
01490         }
01491         */
01492         // getWhyCollectionsIntersect.
01493         List whyCollectionsIntersect = null;
01494         try {
01495             CycConstant domesticatedAnimal = cycAccess.getKnownConstantByGuid("c10c22cd-9c29-11b1-9dad-c379636f7270");
01496             CycConstant nonPersonAnimal = cycAccess.getKnownConstantByGuid("bd58e066-9c29-11b1-9dad-c379636f7270");
01497             whyCollectionsIntersect =
01498                 cycAccess.getWhyCollectionsIntersect(domesticatedAnimal, nonPersonAnimal);
01499             Assert.assertNotNull(whyCollectionsIntersect);
01500             Assert.assertTrue(whyCollectionsIntersect instanceof CycList);
01501             System.out.println("whyCollectionsIntersect " + whyCollectionsIntersect);
01502             CycList expectedWhyCollectionsIntersect =
01503                 cycAccess.makeCycList("(((#$genls #$DomesticatedAnimal #$TameAnimal) :TRUE) " +
01504                                       "((#$genls #$TameAnimal #$NonPersonAnimal) :TRUE))");
01505             /**
01506             Assert.assertEquals(expectedWhyCollectionsIntersect.toString(), whyCollectionsIntersect.toString());
01507             Assert.assertEquals(expectedWhyCollectionsIntersect, whyCollectionsIntersect);
01508             */
01509         }
01510         catch (Exception e) {
01511             CycAccess.current().close();
01512             Assert.fail(e.toString());
01513         }
01514 
01515         // getCollectionLeaves.
01516         List collectionLeaves = null;
01517         try {
01518             CycConstant animal = cycAccess.getKnownConstantByGuid("bd58b031-9c29-11b1-9dad-c379636f7270");
01519             collectionLeaves = cycAccess.getCollectionLeaves(animal);
01520             Assert.assertNotNull(collectionLeaves);
01521             Assert.assertTrue(collectionLeaves instanceof CycList);
01522         }
01523         catch (Exception e) {
01524             CycAccess.current().close();
01525             Assert.fail(e.toString());
01526         }
01527 
01528         // getLocalDisjointWith.
01529         List localDisjointWiths = null;
01530         try {
01531             CycConstant vegetableMatter =
01532                 cycAccess.getKnownConstantByGuid("bd58c455-9c29-11b1-9dad-c379636f7270");
01533             localDisjointWiths = cycAccess.getDisjointWiths(vegetableMatter);
01534             Assert.assertNotNull(localDisjointWiths);
01535             Assert.assertTrue(localDisjointWiths.toString().indexOf("AnimalBLO") > 0);
01536         }
01537         catch (Exception e) {
01538             CycAccess.current().close();
01539             Assert.fail(e.toString());
01540         }
01541 
01542         // areDisjoint.
01543         boolean answer = true;
01544         try {
01545             CycConstant animal = cycAccess.getKnownConstantByGuid("bd58b031-9c29-11b1-9dad-c379636f7270");
01546             CycConstant plant = cycAccess.getKnownConstantByGuid("bd58c6e1-9c29-11b1-9dad-c379636f7270");
01547             answer = cycAccess.areDisjoint(animal, plant);
01548         }
01549         catch (Exception e) {
01550             CycAccess.current().close();
01551             Assert.fail(e.toString());
01552         }
01553         Assert.assertTrue(answer);
01554 
01555         // getMinIsas.
01556         List minIsas = null;
01557         try {
01558             CycConstant wolf = cycAccess.getKnownConstantByGuid("bd58c31f-9c29-11b1-9dad-c379636f7270");
01559             minIsas = cycAccess.getMinIsas(wolf);
01560             CycConstant organismClassificationType = cycAccess.getKnownConstantByGuid("bd58dfe4-9c29-11b1-9dad-c379636f7270");
01561             Assert.assertTrue(minIsas.contains(organismClassificationType));
01562         }
01563         catch (Exception e) {
01564             CycAccess.current().close();
01565             Assert.fail(e.toString());
01566         }
01567 
01568         // getInstances.
01569         List instances = null;
01570         try {
01571             CycConstant animal = cycAccess.getKnownConstantByGuid("bd58b031-9c29-11b1-9dad-c379636f7270");
01572             instances = cycAccess.getInstances(animal);
01573             Assert.assertTrue(instances instanceof CycList);
01574             CycConstant bigfoot = cycAccess.getKnownConstantByGuid("bdc6bd06-9c29-11b1-9dad-c379636f7270");
01575             Assert.assertTrue(((CycList) instances).contains(bigfoot));
01576         }
01577         catch (Exception e) {
01578             CycAccess.current().close();
01579             Assert.fail(e.toString());
01580         }
01581 
01582         // getAllIsa.
01583         List allIsas = null;
01584         try {
01585             //cycAccess.traceOn();
01586             CycConstant animal = cycAccess.getKnownConstantByGuid("bd58b031-9c29-11b1-9dad-c379636f7270");
01587             allIsas = cycAccess.getAllIsa(animal);
01588             //System.out.println(allIsas);
01589             CycConstant organismClassificationType = cycAccess.getKnownConstantByGuid("bd58dfe4-9c29-11b1-9dad-c379636f7270");
01590             Assert.assertTrue(allIsas.contains(organismClassificationType));
01591         }
01592         catch (Exception e) {
01593             CycAccess.current().close();
01594             Assert.fail(e.toString());
01595         }
01596 
01597         // getAllInstances.
01598         List allInstances = null;
01599         try {
01600             CycConstant plant = cycAccess.getKnownConstantByGuid("bd58c6e1-9c29-11b1-9dad-c379636f7270");
01601             allInstances = cycAccess.getAllInstances(plant);
01602             CycConstant treatyOak = cycAccess.getKnownConstantByGuid("bfc0aa80-9c29-11b1-9dad-c379636f7270");
01603             Assert.assertTrue(allInstances.contains(treatyOak));
01604             CycConstant burningBushOldTestament = cycAccess.getKnownConstantByGuid("be846866-9c29-11b1-9dad-c379636f7270");
01605             Assert.assertTrue(allInstances.contains(burningBushOldTestament));
01606         }
01607         catch (Exception e) {
01608             CycAccess.current().close();
01609             Assert.fail(e.toString());
01610         }
01611 
01612         // isa.
01613         answer = true;
01614         try {
01615             CycConstant plant = cycAccess.getKnownConstantByGuid("bd58c6e1-9c29-11b1-9dad-c379636f7270");
01616             CycConstant treatyOak = cycAccess.getKnownConstantByGuid("bfc0aa80-9c29-11b1-9dad-c379636f7270");
01617             answer = cycAccess.isa(treatyOak, plant);
01618         }
01619         catch (Exception e) {
01620             CycAccess.current().close();
01621             Assert.fail(e.toString());
01622         }
01623         Assert.assertTrue(answer);
01624 
01625         // getWhyCollectionsIntersectParaphrase.
01626         ArrayList whyCollectionsIntersectParaphrase = null;
01627         try {
01628             //cycAccess.traceOn();
01629             CycConstant domesticatedAnimal = cycAccess.getKnownConstantByGuid("c10c22cd-9c29-11b1-9dad-c379636f7270");
01630             CycConstant nonPersonAnimal = cycAccess.getKnownConstantByGuid("bd58e066-9c29-11b1-9dad-c379636f7270");
01631             System.out.println("bypassing getWhyCollectionsIntersectParaphrase");
01632             /*
01633             whyCollectionsIntersectParaphrase =
01634                 cycAccess.getWhyCollectionsIntersectParaphrase(domesticatedAnimal, nonPersonAnimal);
01635                 */
01636         }
01637         catch (Exception e) {
01638             CycAccess.current().close();
01639             Assert.fail(e.toString());
01640         }
01641         /*
01642         Assert.assertNotNull(whyCollectionsIntersectParaphrase);
01643         String oneExpectedCollectionsIntersectParaphrase =
01644             "every domesticated animal (tame animal) is a tame animal";
01645         //System.out.println(whyCollectionsIntersectParaphrase);
01646         Assert.assertTrue(whyCollectionsIntersectParaphrase.contains(oneExpectedCollectionsIntersectParaphrase));
01647 */
01648         // getWhyGenlParaphrase.
01649         ArrayList whyGenlParaphrase = null;
01650         try {
01651             //cycAccess.traceOn();
01652             CycConstant dog = cycAccess.getKnownConstantByGuid("bd58daa0-9c29-11b1-9dad-c379636f7270");
01653             CycConstant animal = cycAccess.getKnownConstantByGuid("bd58b031-9c29-11b1-9dad-c379636f7270");
01654             System.out.println("bypassing getWhyGenlParaphrase");
01655             /*
01656             whyGenlParaphrase = cycAccess.getWhyGenlParaphrase(dog, animal);
01657             */
01658         }
01659         catch (Exception e) {
01660             CycAccess.current().close();
01661             Assert.fail(e.toString());
01662         }
01663         /*
01664         Assert.assertNotNull(whyGenlParaphrase);
01665         String oneExpectedGenlParaphrase =
01666             "every tame animal is a non-human animal";
01667 
01668         //for (int i = 0; i < whyGenlParaphrase.size(); i++) {
01669         //    System.out.println(whyGenlParaphrase.get(i));
01670         //}
01671 
01672         Assert.assertTrue(whyGenlParaphrase.contains(oneExpectedGenlParaphrase));
01673 */
01674 
01675 
01676 
01677         long endMilliseconds = System.currentTimeMillis();
01678         System.out.println("  " + (endMilliseconds - startMilliseconds) + " milliseconds");
01679     }
01680 
01681     /**
01682      * Tests a portion of the CycAccess methods using the ascii api connection.
01683      */
01684     public void testAsciiCycAccess5 () {
01685         if (performOnlyBinaryApiModeTests ||
01686             (connectionMode == REMOTE_CYC_CONNECTION))
01687             return;
01688         System.out.println("\n**** testAsciiCycAccess 5 ****");
01689         CycAccess cycAccess = null;
01690         try {
01691             cycAccess = new CycAccess(CycConnection.DEFAULT_HOSTNAME,
01692                                       CycConnection.DEFAULT_BASE_PORT,
01693                                       CycConnection.ASCII_MODE,
01694                                       CycAccess.PERSISTENT_CONNECTION);
01695         }
01696         catch (Exception e) {
01697             Assert.fail(e.toString());
01698         }
01699 
01700         doTestCycAccess5(cycAccess);
01701 
01702         cycAccess.close();
01703         System.out.println("**** testAsciiCycAccess 5 OK ****");
01704     }
01705 
01706 
01707     /**
01708      * Tests a portion of the CycAccess methods using the binary api connection.
01709      */
01710     public void testBinaryCycAccess5 () {
01711         System.out.println("\n**** testBinaryCycAccess 5 ****");
01712         CycAccess cycAccess = null;
01713         try {
01714             if (connectionMode == LOCAL_CYC_CONNECTION)
01715                 cycAccess = new CycAccess(CycConnection.DEFAULT_HOSTNAME,
01716                                           CycConnection.DEFAULT_BASE_PORT,
01717                                           CycConnection.BINARY_MODE,
01718                                           CycAccess.PERSISTENT_CONNECTION,
01719                                           CycConnection.SERIAL_MESSAGING_MODE);
01720             else if (connectionMode == REMOTE_CYC_CONNECTION)
01721                 cycAccess = new CycAccess(myAgentName, cycProxyAgentName, agentCommunity);
01722             else
01723                 Assert.fail("Invalid connection mode " + connectionMode);
01724         }
01725         catch (Exception e) {
01726             Assert.fail(e.toString());
01727         }
01728 
01729         //cycAccess.traceOnDetailed();
01730         doTestCycAccess5(cycAccess);
01731 
01732         cycAccess.close();
01733         System.out.println("**** testBinaryCycAccess 5 OK ****");
01734     }
01735 
01736     /**
01737      * Tests a portion of the CycAccess methods using the given api connection.
01738      */
01739     protected void doTestCycAccess5 (CycAccess cycAccess) {
01740         long startMilliseconds = System.currentTimeMillis();
01741         CycObjectFactory.resetCycConstantCaches();
01742         //cycAccess.traceOn();
01743         // createNewPermanent.
01744         CycConstant cycConstant = null;
01745         try {
01746             cycConstant = cycAccess.createNewPermanent("CycAccessTestConstant");
01747         }
01748         catch (Exception e) {
01749             CycAccess.current().close();
01750             Assert.fail(e.toString());
01751         }
01752         Assert.assertNotNull(cycConstant);
01753         Assert.assertEquals("CycAccessTestConstant", cycConstant.getName());
01754 
01755         // kill.
01756         try {
01757             cycAccess.kill(cycConstant);
01758         }
01759         catch (Exception e) {
01760             CycAccess.current().close();
01761             e.printStackTrace();
01762             Assert.fail(e.toString());
01763         }
01764         // assertComment.
01765         cycConstant = null;
01766         try {
01767             cycConstant = cycAccess.createNewPermanent("CycAccessTestConstant");
01768         }
01769         catch (Exception e) {
01770             CycAccess.current().close();
01771             e.printStackTrace();
01772             Assert.fail(e.toString());
01773         }
01774         Assert.assertNotNull(cycConstant);
01775         Assert.assertEquals("CycAccessTestConstant", cycConstant.getName());
01776 
01777         CycConstant baseKb = null;
01778         try {
01779             baseKb = cycAccess.getConstantByName("BaseKB");
01780         }
01781         catch (Exception e) {
01782             CycAccess.current().close();
01783             Assert.fail(e.toString());
01784         }
01785         Assert.assertNotNull(cycConstant);
01786         Assert.assertEquals("BaseKB", baseKb.getName());
01787         String assertedComment = "A test comment";
01788         try {
01789             //cycAccess.traceOn();
01790             cycAccess.assertComment(cycConstant, assertedComment, baseKb);
01791         }
01792         catch (Exception e) {
01793             CycAccess.current().close();
01794             Assert.fail(e.toString());
01795         }
01796         String comment = null;
01797         try {
01798             comment = cycAccess.getComment(cycConstant);
01799         }
01800         catch (Exception e) {
01801             CycAccess.current().close();
01802             Assert.fail(e.toString());
01803         }
01804         Assert.assertEquals(assertedComment, comment);
01805 
01806         try {
01807             cycAccess.kill(cycConstant);
01808         }
01809         catch (Exception e) {
01810             CycAccess.current().close();
01811             Assert.fail(e.toString());
01812         }
01813         try {
01814             Assert.assertNull(cycAccess.getConstantByName("CycAccessTestConstant"));
01815         }
01816         catch (Exception e) {
01817             CycAccess.current().close();
01818             Assert.fail(e.toString());
01819         }
01820 
01821         // isValidConstantName.
01822         boolean answer = true;
01823         try {
01824             answer = cycAccess.isValidConstantName("abc");
01825         }
01826         catch (Exception e) {
01827             CycAccess.current().close();
01828             Assert.fail(e.toString());
01829         }
01830         Assert.assertTrue(answer);
01831 
01832         answer = true;
01833         try {
01834             answer = cycAccess.isValidConstantName(" abc");
01835         }
01836         catch (Exception e) {
01837             CycAccess.current().close();
01838             Assert.fail(e.toString());
01839         }
01840         Assert.assertTrue(! answer);
01841 
01842         answer = true;
01843         try {
01844             answer = cycAccess.isValidConstantName("[abc]");
01845         }
01846         catch (Exception e) {
01847             CycAccess.current().close();
01848             Assert.fail(e.toString());
01849         }
01850         Assert.assertTrue(! answer);
01851 
01852         // isConstantNameAvailable
01853 
01854         answer = true;
01855         try {
01856             answer = cycAccess.isConstantNameAvailable("agent");
01857         }
01858         catch (Exception e) {
01859             CycAccess.current().close();
01860             Assert.fail(e.toString());
01861         }
01862         Assert.assertTrue(! answer);
01863 
01864         answer = false;
01865         try {
01866             answer = cycAccess.isConstantNameAvailable("myAgent");
01867         }
01868         catch (Exception e) {
01869             CycAccess.current().close();
01870             Assert.fail(e.toString());
01871         }
01872         Assert.assertTrue(answer);
01873 
01874         // createMicrotheory.
01875         CycConstant mt = null;
01876         ArrayList genlMts = new ArrayList();
01877         try {
01878             CycConstant modernMilitaryMt = cycAccess.getKnownConstantByGuid("c040a2f0-9c29-11b1-9dad-c379636f7270");
01879             CycConstant microtheory = cycAccess.getKnownConstantByGuid("bd5880d5-9c29-11b1-9dad-c379636f7270");
01880             genlMts.add(modernMilitaryMt);
01881             mt = cycAccess.createMicrotheory("CycAccessTestMt",
01882                                              "a unit test comment for the CycAccessTestMt microtheory.",
01883                                              microtheory,
01884                                              genlMts);
01885         }
01886         catch (Exception e) {
01887             CycAccess.current().close();
01888             Assert.fail(e.toString());
01889         }
01890         Assert.assertNotNull(mt);
01891         try {
01892             cycAccess.kill(mt);
01893         }
01894         catch (Exception e) {
01895             CycAccess.current().close();
01896             Assert.fail(e.toString());
01897         }
01898         try {
01899             Assert.assertNull(cycAccess.getConstantByName("CycAccessTestMt"));
01900         }
01901         catch (Exception e) {
01902             CycAccess.current().close();
01903             Assert.fail(e.toString());
01904         }
01905 
01906         // createMicrotheorySystem.
01907         CycConstant[] mts = {null, null, null};
01908         genlMts = new ArrayList();
01909         try {
01910             genlMts.add(cycAccess.baseKB);
01911             mts = cycAccess.createMicrotheorySystem("CycAccessTest",
01912                                                     "a unit test comment for the CycAccessTestMt microtheory.",
01913                                                     genlMts);
01914         }
01915         catch (Exception e) {
01916             CycAccess.current().close();
01917             Assert.fail(e.toString());
01918         }
01919         Assert.assertTrue(mts.length == 3);
01920         Assert.assertNotNull(mts[0]);
01921         Assert.assertEquals("#$CycAccessTestMt", mts[0].cyclify());
01922         Assert.assertNotNull(mts[1]);
01923         Assert.assertEquals("#$CycAccessTestVocabMt", mts[1].cyclify());
01924         Assert.assertNotNull(mts[2]);
01925         Assert.assertEquals("#$CycAccessTestDataMt", mts[2].cyclify());
01926         try {
01927             cycAccess.kill(mts);
01928         }
01929         catch (Exception e) {
01930             CycAccess.current().close();
01931             Assert.fail(e.toString());
01932         }
01933         try {
01934             Assert.assertNull(cycAccess.getConstantByName("CycAccessTestMt"));
01935         }
01936         catch (Exception e) {
01937             CycAccess.current().close();
01938             Assert.fail(e.toString());
01939         }
01940 
01941         // askWithVariable
01942         try {
01943             CycList query = CycAccess.current().makeCycList("(#$objectFoundInLocation ?WHAT #$CityOfAustinTX)");
01944             CycVariable variable = CycObjectFactory.makeCycVariable("?WHAT");
01945             CycConstant everythingPSC = CycAccess.current().getKnownConstantByGuid("be7f041b-9c29-11b1-9dad-c379636f7270");
01946             mt = everythingPSC;
01947             CycList response = CycAccess.current().askWithVariable(query, variable, mt);
01948             Assert.assertNotNull(response);
01949             Assert.assertTrue(response.contains(CycAccess.current().getConstantByName("#$UniversityOfTexasAtAustin")));
01950         }
01951         catch (Exception e) {
01952             CycAccess.current().close();
01953             Assert.fail(e.toString());
01954         }
01955 
01956         // askWithVariables
01957         try {
01958             CycList query = CycAccess.current().makeCycList("(#$objectFoundInLocation ?WHAT ?WHERE)");
01959             ArrayList variables = new ArrayList();
01960             variables.add(CycObjectFactory.makeCycVariable("?WHAT"));
01961             variables.add(CycObjectFactory.makeCycVariable("?WHERE"));
01962             CycConstant universeDataMt = CycAccess.current().getKnownConstantByGuid("bd58d0f3-9c29-11b1-9dad-c379636f7270");
01963             CycList response = CycAccess.current().askWithVariables(query, variables, universeDataMt);
01964             Assert.assertNotNull(response);
01965         }
01966         catch (Exception e) {
01967             CycAccess.current().close();
01968             Assert.fail(e.toString());
01969         }
01970 
01971         // isQueryTrue
01972         try {
01973             //cycAccess.traceOn();
01974             CycList query = CycAccess.current().makeCycList("(#$objectFoundInLocation #$UniversityOfTexasAtAustin #$CityOfAustinTX)");
01975             CycConstant everythingPSC = CycAccess.current().getKnownConstantByGuid("be7f041b-9c29-11b1-9dad-c379636f7270");
01976             mt = everythingPSC;
01977             Assert.assertTrue(CycAccess.current().isQueryTrue(query, mt));
01978             query = CycAccess.current().makeCycList("(#$objectFoundInLocation #$UniversityOfTexasAtAustin #$CityOfHoustonTX)");
01979             Assert.assertTrue(! CycAccess.current().isQueryTrue(query, mt));
01980         }
01981         catch (Exception e) {
01982             e.printStackTrace();
01983             CycAccess.current().close();
01984             Assert.fail(e.toString());
01985         }
01986 
01987         // countAllInstances
01988         try {
01989             cycAccess = CycAccess.current();
01990             CycConstant country = cycAccess.getKnownConstantByGuid("bd588879-9c29-11b1-9dad-c379636f7270");
01991             CycConstant worldGeographyMt = cycAccess.getKnownConstantByGuid("bfaac020-9c29-11b1-9dad-c379636f7270");
01992             Assert.assertTrue(cycAccess.countAllInstances(country, worldGeographyMt) > 0);
01993         }
01994         catch (Exception e) {
01995             CycAccess.current().close();
01996             Assert.fail(e.toString());
01997         }
01998         long endMilliseconds = System.currentTimeMillis();
01999         System.out.println("  " + (endMilliseconds - startMilliseconds) + " milliseconds");
02000     }
02001 
02002     /**
02003      * Tests a portion of the CycAccess methods using the ascii api connection.
02004      */
02005     public void testAsciiCycAccess6 () {
02006         if (performOnlyBinaryApiModeTests ||
02007             (connectionMode == REMOTE_CYC_CONNECTION))
02008             return;
02009         System.out.println("\n**** testAsciiCycAccess 6 ****");
02010         CycAccess cycAccess = null;
02011         try {
02012             cycAccess = new CycAccess(CycConnection.DEFAULT_HOSTNAME,
02013                                       CycConnection.DEFAULT_BASE_PORT,
02014                                       CycConnection.ASCII_MODE,
02015                                       CycAccess.PERSISTENT_CONNECTION);
02016         }
02017         catch (Exception e) {
02018             Assert.fail(e.toString());
02019         }
02020 
02021         doTestCycAccess6(cycAccess);
02022 
02023         cycAccess.close();
02024         System.out.println("**** testAsciiCycAccess 6 OK ****");
02025     }
02026 
02027 
02028     /**
02029      * Tests a portion of the CycAccess methods using the binary api connection.
02030      */
02031     public void testBinaryCycAccess6 () {
02032         System.out.println("\n**** testBinaryCycAccess 6 ****");
02033         CycAccess cycAccess = null;
02034         try {
02035             if (connectionMode == LOCAL_CYC_CONNECTION)
02036                 cycAccess = new CycAccess(CycConnection.DEFAULT_HOSTNAME,
02037                                           CycConnection.DEFAULT_BASE_PORT,
02038                                           CycConnection.BINARY_MODE,
02039                                           CycAccess.PERSISTENT_CONNECTION,
02040                                           CycConnection.SERIAL_MESSAGING_MODE);
02041             else if (connectionMode == REMOTE_CYC_CONNECTION)
02042                 cycAccess = new CycAccess(myAgentName, cycProxyAgentName, agentCommunity);
02043             else
02044                 Assert.fail("Invalid connection mode " + connectionMode);
02045        }
02046         catch (Exception e) {
02047             Assert.fail(e.toString());
02048         }
02049 
02050         //cycAccess.traceOnDetailed();
02051         doTestCycAccess6(cycAccess);
02052 
02053         cycAccess.close();
02054         System.out.println("**** testBinaryCycAccess 6 OK ****");
02055     }
02056 
02057     /**
02058      * Tests a portion of the CycAccess methods using the given api connection.
02059      */
02060     protected void doTestCycAccess6 (CycAccess cycAccess) {
02061         long startMilliseconds = System.currentTimeMillis();
02062         CycObjectFactory.resetCycConstantCaches();
02063         // Test common constants.
02064         try {
02065             Assert.assertEquals(cycAccess.getConstantByName("and"), CycAccess.and);
02066             Assert.assertEquals(cycAccess.getConstantByName("BaseKB"), CycAccess.baseKB);
02067             Assert.assertEquals(cycAccess.getConstantByName("BinaryPredicate"), CycAccess.binaryPredicate);
02068             Assert.assertEquals(cycAccess.getConstantByName("comment"), CycAccess.comment);
02069             Assert.assertEquals(cycAccess.getConstantByName("different"), CycAccess.different);
02070             Assert.assertEquals(cycAccess.getConstantByName("elementOf"), CycAccess.elementOf);
02071             Assert.assertEquals(cycAccess.getConstantByName("genlMt"), CycAccess.genlMt);
02072             Assert.assertEquals(cycAccess.getConstantByName("genls"), CycAccess.genls);
02073             Assert.assertEquals(cycAccess.getConstantByName("isa"), CycAccess.isa);
02074             Assert.assertEquals(cycAccess.getConstantByName("numericallyEquals"), CycAccess.numericallyEqual);
02075             Assert.assertEquals(cycAccess.getConstantByName("or"), CycAccess.or);
02076             Assert.assertEquals(cycAccess.getConstantByName("PlusFn"), CycAccess.plusFn);
02077         }
02078         catch (Exception e) {
02079             CycAccess.current().close();
02080             Assert.fail(e.toString());
02081         }
02082 
02083         // Test isBackchainRequired, isBackchainEncouraged, isBackchainDiscouraged, isBackchainForbidden
02084         try {
02085             CycConstant keRequirement = cycAccess.getKnownConstantByGuid("c1141606-9c29-11b1-9dad-c379636f7270");
02086             Assert.assertTrue(cycAccess.isBackchainRequired(keRequirement, cycAccess.baseKB));
02087             Assert.assertTrue(! cycAccess.isBackchainEncouraged(keRequirement, cycAccess.baseKB));
02088             Assert.assertTrue(! cycAccess.isBackchainDiscouraged(keRequirement, cycAccess.baseKB));
02089             Assert.assertTrue(! cycAccess.isBackchainForbidden(keRequirement, cycAccess.baseKB));
02090 
02091             CycConstant nearestIsa = cycAccess.getKnownConstantByGuid("bf411eed-9c29-11b1-9dad-c379636f7270");
02092             Assert.assertTrue(! cycAccess.isBackchainRequired(nearestIsa, cycAccess.baseKB));
02093             Assert.assertTrue(! cycAccess.isBackchainEncouraged(nearestIsa, cycAccess.baseKB));
02094             Assert.assertTrue(! cycAccess.isBackchainDiscouraged(nearestIsa, cycAccess.baseKB));
02095             Assert.assertTrue(cycAccess.isBackchainForbidden(nearestIsa, cycAccess.baseKB));
02096         }
02097         catch (Exception e) {
02098             e.printStackTrace();
02099             CycAccess.current().close();
02100             Assert.fail(e.toString());
02101         }
02102 
02103 /*
02104         // Test getBackchainRules.
02105         try {
02106 
02107             CycConstant doneBy = cycAccess.getKnownConstantByGuid("c0fd4798-9c29-11b1-9dad-c379636f7270");
02108             CycConstant humanActivitiesMt = cycAccess.getKnownConstantByGuid("bd58fe73-9c29-11b1-9dad-c379636f7270");
02109             CycList backchainRules =
02110                 cycAccess.getBackchainRules(doneBy, humanActivitiesMt);
02111             Assert.assertNotNull(backchainRules);
02112             //for (int i = 0; i < backchainRules.size(); i++)
02113             //    System.out.println(((CycList) backchainRules.get(i)).cyclify());
02114         }
02115         catch (Exception e) {
02116             e.printStackTrace();
02117             CycAccess.current().close();
02118             Assert.fail(e.toString());
02119         }
02120 
02121         // Test getForwardChainRules.
02122         try {
02123             //cycAccess.traceOn();
02124             CycConstant doneBy = cycAccess.getKnownConstantByGuid("c0fd4798-9c29-11b1-9dad-c379636f7270");
02125             CycConstant humanActivitiesMt = cycAccess.getKnownConstantByGuid("bd58fe73-9c29-11b1-9dad-c379636f7270");
02126             CycList forwardChainRules =
02127                 cycAccess.getForwardChainRules(doneBy,humanActivitiesMt);
02128             Assert.assertNotNull(forwardChainRules);
02129         }
02130         catch (Exception e) {
02131             CycAccess.current().close();
02132             Assert.fail(e.toString());
02133         }
02134 */
02135         // setSymbolValue, getSymbolValue
02136         try {
02137             CycSymbol a = CycObjectFactory.makeCycSymbol("a");
02138             cycAccess.setSymbolValue(a, new Integer(1));
02139             Assert.assertEquals(new Integer(1), cycAccess.getSymbolValue(a));
02140             cycAccess.setSymbolValue(a, "abc");
02141             Assert.assertEquals("abc", cycAccess.getSymbolValue(a));
02142             cycAccess.setSymbolValue(a, CycObjectFactory.t);
02143             Assert.assertEquals(CycObjectFactory.t, cycAccess.getSymbolValue(a));
02144             cycAccess.setSymbolValue(a, CycObjectFactory.nil);
02145             Assert.assertEquals(CycObjectFactory.nil, cycAccess.getSymbolValue(a));
02146             //cycAccess.traceOnDetailed();
02147             CycConstant brazil = cycAccess.getConstantByName("#$Brazil");
02148             cycAccess.setSymbolValue(a, brazil);
02149             Assert.assertEquals(brazil, cycAccess.getSymbolValue(a));
02150             CycList valueList1 = cycAccess.makeCycList("(QUOTE (#$France #$Brazil))");
02151             CycList valueList2 = cycAccess.makeCycList("(#$France #$Brazil)");
02152             cycAccess.setSymbolValue(a, valueList1);
02153             Assert.assertEquals(valueList2, cycAccess.getSymbolValue(a));
02154         }
02155         catch (Exception e) {
02156             e.printStackTrace();
02157             CycAccess.current().close();
02158             Assert.fail(e.toString());
02159         }
02160 
02161         // Test getCycNartById
02162         Integer nartId = new Integer(1);
02163         try {
02164             CycNart nart1 = cycAccess.getCycNartById(nartId);
02165             Assert.assertNotNull(nart1);
02166             Assert.assertNotNull(nart1.getFunctor());
02167             Assert.assertTrue(nart1.getFunctor() instanceof CycFort);
02168             Assert.assertNotNull(nart1.getArguments());
02169             Assert.assertTrue(nart1.getArguments() instanceof CycList);
02170             //System.out.println(nart1.cyclify());
02171         }
02172         catch (Exception e) {
02173             CycAccess.current().close();
02174             Assert.fail(e.toString());
02175         }
02176 
02177         // Narts in a list.
02178         try {
02179             //cycAccess.traceOn();
02180             CycNart nart1 = cycAccess.getCycNartById(nartId);
02181             CycNart nart2 = cycAccess.getCycNartById(nartId);
02182             Assert.assertEquals(nart1, nart2);
02183             CycList valueList = new CycList();
02184             valueList.add(CycObjectFactory.quote);
02185             CycList nartList = new CycList();
02186             valueList.add(nartList);
02187             nartList.add(nart1);
02188             nartList.add(nart2);
02189             CycSymbol a = CycObjectFactory.makeCycSymbol("a");
02190             cycAccess.setSymbolValue(a, valueList);
02191             Object object = cycAccess.getSymbolValue(a);
02192             Assert.assertNotNull(object);
02193             Assert.assertTrue(object instanceof CycList);
02194             CycList nartList1 = (CycList) object;
02195             Object element1 = nartList1.first();
02196             Assert.assertTrue((element1 instanceof CycNart) || (element1 instanceof CycList));
02197             if (element1 instanceof CycList)
02198                 element1 = CycNart.coerceToCycNart(element1);
02199             CycNart nart3 = (CycNart) element1;
02200             Assert.assertNotNull(nart3.getFunctor());
02201             Assert.assertTrue(nart3.getFunctor() instanceof CycFort);
02202             Assert.assertNotNull(nart3.getArguments());
02203             Assert.assertTrue(nart3.getArguments() instanceof CycList);
02204             Object element2 = nartList1.second();
02205             Assert.assertTrue((element2 instanceof CycNart) || (element2 instanceof CycList));
02206             if (element2 instanceof CycList)
02207                 element2 = CycNart.coerceToCycNart(element2);
02208             CycNart nart4 = (CycNart) element2;
02209             Assert.assertNotNull(nart4.getFunctor());
02210             Assert.assertTrue(nart4.getFunctor() instanceof CycFort);
02211             Assert.assertNotNull(nart4.getArguments());
02212             Assert.assertTrue(nart4.getArguments() instanceof CycList);
02213             if (cycAccess.getCommunicationMode() == CycConnection.BINARY_MODE) {
02214                 Assert.assertEquals(nart1.cyclify(), nart3.cyclify());
02215                 Assert.assertEquals(nart1.cyclify(), nart4.cyclify());
02216             }
02217             else {
02218                 Assert.assertEquals(nart1.toString().toUpperCase(), nart3.toString().toUpperCase());
02219                 Assert.assertEquals(nart1.toString().toUpperCase(), nart4.toString().toUpperCase());
02220             }
02221         }
02222         catch (Exception e) {
02223             e.printStackTrace();
02224             CycAccess.current().close();
02225             Assert.fail(e.toString());
02226         }
02227 
02228         // isWellFormedFormula
02229         try {
02230             Assert.assertTrue(cycAccess.isWellFormedFormula(cycAccess.makeCycList("(#$genls #$Dog #$Animal)")));
02231             // Not true, but still well formed.
02232             Assert.assertTrue(cycAccess.isWellFormedFormula(cycAccess.makeCycList("(#$genls #$Dog #$Plant)")));
02233             Assert.assertTrue(cycAccess.isWellFormedFormula(cycAccess.makeCycList("(#$genls ?X #$Animal)")));
02234             Assert.assertTrue(! cycAccess.isWellFormedFormula(cycAccess.makeCycList("(#$genls #$Dog #$Brazil)")));
02235             Assert.assertTrue(! cycAccess.isWellFormedFormula(cycAccess.makeCycList("(#$genls ?X #$Brazil)")));
02236         }
02237         catch (Exception e) {
02238             e.printStackTrace();
02239             CycAccess.current().close();
02240             Assert.fail(e.toString());
02241         }
02242 
02243         // isEvaluatablePredicate
02244         try {
02245             Assert.assertTrue(cycAccess.isEvaluatablePredicate(CycAccess.different));
02246             CycConstant doneBy = cycAccess.getKnownConstantByGuid("c0fd4798-9c29-11b1-9dad-c379636f7270");
02247             Assert.assertTrue(! cycAccess.isEvaluatablePredicate(doneBy));
02248         }
02249         catch (Exception e) {
02250             e.printStackTrace();
02251             CycAccess.current().close();
02252             Assert.fail(e.toString());
02253         }
02254 
02255         // hasSomePredicateUsingTerm
02256         try {
02257             CycConstant algeria = cycAccess.getKnownConstantByGuid("bd588c92-9c29-11b1-9dad-c379636f7270");
02258             CycConstant percentOfRegionIs = cycAccess.getKnownConstantByGuid("bfb0c6e5-9c29-11b1-9dad-c379636f7270");
02259             CycConstant ciaWorldFactbook1995Mt = cycAccess.getKnownConstantByGuid("c0a41a91-9c29-11b1-9dad-c379636f7270");
02260             CycConstant InferencePSC = cycAccess.getKnownConstantByGuid("bd58915a-9c29-11b1-9dad-c379636f7270");
02261 
02262 
02263             Assert.assertTrue(cycAccess.hasSomePredicateUsingTerm(percentOfRegionIs,
02264                                                                   algeria,
02265                                                                   new Integer(1),
02266                                                                   ciaWorldFactbook1995Mt));
02267 
02268             Assert.assertTrue(cycAccess.hasSomePredicateUsingTerm(percentOfRegionIs,
02269                                                                   algeria,
02270                                                                   new Integer(1),
02271                                                                   InferencePSC));
02272             Assert.assertTrue(! cycAccess.hasSomePredicateUsingTerm(percentOfRegionIs,
02273                                                                     algeria,
02274                                                                     new Integer(2),
02275                                                                     ciaWorldFactbook1995Mt));
02276         }
02277         catch (Exception e) {
02278             e.printStackTrace();
02279             CycAccess.current().close();
02280             Assert.fail(e.toString());
02281         }
02282 
02283         long endMilliseconds = System.currentTimeMillis();
02284         System.out.println("  " + (endMilliseconds - startMilliseconds) + " milliseconds");
02285     }
02286 
02287     /**
02288      * Tests a portion of the CycAccess methods using the ascii api connection.
02289      */
02290     public void testAsciiCycAccess7 () {
02291         if (performOnlyBinaryApiModeTests ||
02292             (connectionMode == REMOTE_CYC_CONNECTION))
02293             return;
02294         System.out.println("\n**** testAsciiCycAccess 7 ****");
02295         CycAccess cycAccess = null;
02296         try {
02297 
02298             cycAccess = new CycAccess(CycConnection.DEFAULT_HOSTNAME,
02299                                       CycConnection.DEFAULT_BASE_PORT,
02300                                       CycConnection.ASCII_MODE,
02301                                       CycAccess.PERSISTENT_CONNECTION);
02302         }
02303         catch (Exception e) {
02304             Assert.fail(e.toString());
02305         }
02306 
02307         doTestCycAccess7(cycAccess);
02308 
02309         cycAccess.close();
02310         System.out.println("**** testAsciiCycAccess 7 OK ****");
02311     }
02312 
02313 
02314     /**
02315      * Tests a portion of the CycAccess methods using the binary api connection.
02316      */
02317     public void testBinaryCycAccess7 () {
02318         System.out.println("\n**** testBinaryCycAccess 7 ****");
02319         CycAccess cycAccess = null;
02320         try {
02321             if (connectionMode == LOCAL_CYC_CONNECTION)
02322                 cycAccess = new CycAccess(CycConnection.DEFAULT_HOSTNAME,
02323                                           CycConnection.DEFAULT_BASE_PORT,
02324                                           CycConnection.BINARY_MODE,
02325                                           CycAccess.PERSISTENT_CONNECTION,
02326                                           CycConnection.SERIAL_MESSAGING_MODE);
02327             else if (connectionMode == REMOTE_CYC_CONNECTION)
02328                 cycAccess = new CycAccess(myAgentName, cycProxyAgentName, agentCommunity);
02329             else
02330                 Assert.fail("Invalid connection mode " + connectionMode);
02331 
02332             //cycAccess.traceOnDetailed();
02333 
02334             // turn on api if not on.
02335             String script = "(pwhen (cand (boundp '*eval-in-api?*) \n" +
02336                             "             (cnot *eval-in-api?*)) \n" +
02337                             "       (csetq *eval-in-api?* t))";
02338             cycAccess.converseVoid(script);
02339             script = "(clear-environment)";
02340             cycAccess.converseVoid(script);
02341 
02342             // Java ByteArray  and SubL byte-vector are used only in the binary api.
02343             script = "(csetq my-byte-vector (vector 0 1 2 3 4 255))";
02344             Object responseObject = cycAccess.converseObject(script);
02345             Assert.assertNotNull(responseObject);
02346             Assert.assertTrue(responseObject instanceof ByteArray);
02347             byte[] myBytes = {0, 1, 2, 3, 4, -1};
02348             ByteArray myByteArray = new ByteArray(myBytes);
02349             Assert.assertEquals(myByteArray, responseObject);
02350             CycList command = new CycList();
02351             command.add(CycObjectFactory.makeCycSymbol("equalp"));
02352             command.add(CycObjectFactory.makeCycSymbol("my-byte-vector"));
02353             CycList command1 = new CycList();
02354             command.add(command1);
02355             command1.add(CycObjectFactory.quote);
02356             command1.add(myByteArray);
02357             Assert.assertTrue(cycAccess.converseBoolean(command));
02358             script = "(clear-environment)";
02359             cycAccess.converseVoid(script);
02360         }
02361         catch (Exception e) {
02362             e.printStackTrace();
02363             Assert.fail(e.toString());
02364         }
02365 
02366 
02367         doTestCycAccess7(cycAccess);
02368 
02369         cycAccess.close();
02370         System.out.println("**** testBinaryCycAccess 7 OK ****");
02371     }
02372 
02373     /**
02374      * Tests a portion of the CycAccess methods using the given api connection.
02375      */
02376     protected void doTestCycAccess7 (CycAccess cycAccess) {
02377         long startMilliseconds = System.currentTimeMillis();
02378         CycObjectFactory.resetCycConstantCaches();
02379 
02380         //cycAccess.traceOn();
02381         // SubL scripts
02382         try {
02383             String script;
02384             Object responseObject;
02385             CycList responseList;
02386             String responseString;
02387             boolean responseBoolean;
02388 
02389             // turn on api if not on.
02390             script = "(pwhen (cand (boundp '*eval-in-api?*) \n" +
02391                      "             (cnot *eval-in-api?*)) \n" +
02392                      "       (csetq *eval-in-api?* t))";
02393             cycAccess.converseVoid(script);
02394 
02395             // environment
02396             script = "(get-environment)";
02397             responseString = cycAccess.converseString(script);
02398             Assert.assertNotNull(responseString);
02399 
02400             // definition
02401             script =
02402                 "(define my-copy-tree (tree) \n" +
02403                 "  (ret \n" +
02404                 "    (fif (atom tree) \n" +
02405                 "         tree \n" +
02406                 "         ;; else \n" +
02407                 "         (cons (my-copy-tree (first tree)) \n" +
02408                 "               (my-copy-tree (rest tree))))))";
02409             responseObject = cycAccess.converseObject(script);
02410             Assert.assertEquals(CycObjectFactory.makeCycSymbol("my-copy-tree"), responseObject);
02411             script = "(csetq a '(((#$Brazil #$Dog) #$Plant)))";
02412             responseList = cycAccess.converseList(script);
02413             Assert.assertEquals(cycAccess.makeCycList("(((#$Brazil #$Dog) #$Plant))"),
02414                                 responseList);
02415             script = "(csetq b (my-copy-tree a))";
02416             responseList = cycAccess.converseList(script);
02417             Assert.assertEquals(cycAccess.makeCycList("(((#$Brazil #$Dog) #$Plant))"),
02418                                 responseList);
02419             script = "(cand (equal a b) (cnot (eq a b)))";
02420             responseBoolean = cycAccess.converseBoolean(script);
02421             Assert.assertTrue(responseBoolean);
02422 
02423             script =
02424                 "(define my-floor (x y) \n" +
02425                 "  (clet (results) \n" +
02426                 "    (csetq results (multiple-value-list (floor x y))) \n" +
02427                 "    (ret results)))";
02428             responseObject = cycAccess.converseObject(script);
02429             Assert.assertEquals(CycObjectFactory.makeCycSymbol("my-floor"), responseObject);
02430             script = "(my-floor 5 3)";
02431             responseList = cycAccess.converseList(script);
02432             Assert.assertEquals(cycAccess.makeCycList("(1 2)"), responseList);
02433 
02434             script =
02435                 "(defmacro my-macro (a b c) \n" +
02436                 "  (ret `(list ,a ,b ,c)))";
02437             responseObject = cycAccess.converseObject(script);
02438             Assert.assertEquals(CycObjectFactory.makeCycSymbol("my-macro"), responseObject);
02439             script = "(my-macro #$Dog #$Plant #$Brazil)";
02440             responseList = cycAccess.converseList(script);
02441             Assert.assertEquals(cycAccess.makeCycList("(#$Dog #$Plant #$Brazil)"), responseList);
02442 
02443             script =
02444                 "(defmacro my-floor-macro (x y) \n" +
02445                 "  (ret `(floor ,x ,y)))";
02446             responseObject = cycAccess.converseObject(script);
02447             Assert.assertEquals(CycObjectFactory.makeCycSymbol("my-floor-macro"), responseObject);
02448             script =
02449                 "(define my-floor-macro-test (x y) \n" +
02450                 "    (ret (multiple-value-list (my-floor-macro x y))))";
02451             responseObject = cycAccess.converseObject(script);
02452             Assert.assertEquals(CycObjectFactory.makeCycSymbol("my-floor-macro-test"), responseObject);
02453             script = "(my-floor-macro-test 5 3)";
02454             responseList = cycAccess.converseList(script);
02455             Assert.assertEquals(cycAccess.makeCycList("(1 2)"), responseList);
02456 
02457             script =
02458                 "(defmacro my-floor-macro (a b) \n" +
02459                 "  (ret `(floor ,x ,y)))";
02460             responseObject = cycAccess.converseObject(script);
02461             Assert.assertEquals(CycObjectFactory.makeCycSymbol("my-floor-macro"), responseObject);
02462             script = "(my-floor-macro-test 5 3)";
02463             responseList = cycAccess.converseList(script);
02464             Assert.assertEquals(cycAccess.makeCycList("(1 2)"), responseList);
02465 
02466             // assignment
02467             script = "(csetq a '(1 #$Dog #$Plant))";
02468             cycAccess.converseVoid(script);
02469             script = "(symbol-value 'a)";
02470             responseList = cycAccess.converseList(script);
02471             Assert.assertEquals(cycAccess.makeCycList("(1 #$Dog #$Plant)"), responseList);
02472 
02473             script = "(csetq a -1)";
02474             cycAccess.converseVoid(script);
02475             script = "(symbol-value 'a)";
02476             responseObject = cycAccess.converseObject(script);
02477             Assert.assertEquals(new Integer(-1), responseObject);
02478 
02479             script =
02480                 "(csetq a '(1 #$Dog #$Plant) \n" +
02481                 "       b '(2 #$Dog #$Plant) \n" +
02482                 "       c 3)";
02483             cycAccess.converseVoid(script);
02484             script = "(symbol-value 'a)";
02485             responseList = cycAccess.converseList(script);
02486             Assert.assertEquals(cycAccess.makeCycList("(1 #$Dog #$Plant)"), responseList);
02487             script = "(symbol-value 'b)";
02488             responseList = cycAccess.converseList(script);
02489             Assert.assertEquals(cycAccess.makeCycList("(2 #$Dog #$Plant)"), responseList);
02490             script = "(symbol-value 'c)";
02491             responseObject = cycAccess.converseObject(script);
02492             Assert.assertEquals(new Integer(3), responseObject);
02493 
02494             script = "(clet ((a 0)) (cinc a) a)";
02495             Assert.assertEquals(new Integer(1), cycAccess.converseObject(script));
02496 
02497             script = "(clet ((a 0)) (cinc a 10) a)";
02498             Assert.assertEquals(new Integer(10), cycAccess.converseObject(script));
02499 
02500             script = "(clet ((a 0)) (cdec a) a)";
02501             Assert.assertEquals(new Integer(-1), cycAccess.converseObject(script));
02502 
02503             script = "(clet ((a 0)) (cdec a 10) a)";
02504             Assert.assertEquals(new Integer(-10), cycAccess.converseObject(script));
02505 
02506             script = "(cpush 4 a)";
02507             cycAccess.converseVoid(script);
02508             script = "(symbol-value 'a)";
02509             responseList = cycAccess.converseList(script);
02510             Assert.assertEquals(cycAccess.makeCycList("(4 1 #$Dog #$Plant)"), responseList);
02511 
02512             script = "(cpop a)";
02513             cycAccess.converseVoid(script);
02514             script = "(symbol-value 'a)";
02515             responseList = cycAccess.converseList(script);
02516             Assert.assertEquals(cycAccess.makeCycList("(1 #$Dog #$Plant)"), responseList);
02517 
02518             script = "(fi-set-parameter 'my-parm '(1 #$Dog #$Plant))";
02519             cycAccess.converseVoid(script);
02520             script = "(symbol-value 'my-parm)";
02521             responseList = cycAccess.converseList(script);
02522             Assert.assertEquals(cycAccess.makeCycList("(1 #$Dog #$Plant)"), responseList);
02523 
02524             script =
02525                 "(clet (a b) \n" +
02526                 "  (csetq a '(1 2 3)) \n" +
02527                 "  (csetq b (cpop a)) \n" +
02528                 "  (list a b))";
02529             responseList = cycAccess.converseList(script);
02530             Assert.assertEquals(cycAccess.makeCycList("((2 3) (2 3))"), responseList);
02531 
02532             // boundp
02533             script = "(clear-environment)";
02534             cycAccess.converseVoid(script);
02535             script = "(get-environment)";
02536             responseString = cycAccess.converseString(script);
02537             Assert.assertEquals("\n", responseString);
02538             Assert.assertTrue(! cycAccess.converseBoolean("(boundp 'a)"));
02539             cycAccess.converseVoid("(csetq a nil)");
02540             Assert.assertTrue(cycAccess.converseBoolean("(boundp 'a)"));
02541 
02542             // fi-get-parameter
02543             script = "(csetq my-parm '(2 #$Dog #$Plant))";
02544             cycAccess.converseVoid(script);
02545             script = "(fi-get-parameter 'my-parm)";
02546             responseList = cycAccess.converseList(script);
02547             Assert.assertEquals(cycAccess.makeCycList("(2 #$Dog #$Plant)"), responseList);
02548 
02549             // eval
02550             script = "(eval '(csetq a 4))";
02551             responseObject = cycAccess.converseObject(script);
02552             Assert.assertEquals(new Integer(4), responseObject);
02553             script = "(eval 'a)";
02554             responseObject = cycAccess.converseObject(script);
02555             Assert.assertEquals(new Integer(4), responseObject);
02556 
02557             script = "(eval (list 'csetq 'a 5))";
02558             responseObject = cycAccess.converseObject(script);
02559             Assert.assertEquals(new Integer(5), responseObject);
02560             script = "(eval 'a)";
02561             responseObject = cycAccess.converseObject(script);
02562             Assert.assertEquals(new Integer(5), responseObject);
02563 
02564             script = "(fi-eval '(csetq a 4))";
02565             responseObject = cycAccess.converseObject(script);
02566             Assert.assertEquals(new Integer(4), responseObject);
02567             script = "(fi-eval 'a)";
02568             responseObject = cycAccess.converseObject(script);
02569             Assert.assertEquals(new Integer(4), responseObject);
02570 
02571             script = "(fi-eval (list 'csetq 'a 5))";
02572             responseObject = cycAccess.converseObject(script);
02573             Assert.assertEquals(new Integer(5), responseObject);
02574             script = "(fi-eval 'a)";
02575             responseObject = cycAccess.converseObject(script);
02576             Assert.assertEquals(new Integer(5), responseObject);
02577 
02578             script = "(fi-local-eval '(csetq a 4))";
02579             responseObject = cycAccess.converseObject(script);
02580             Assert.assertEquals(new Integer(4), responseObject);
02581             script = "(fi-local-eval 'a)";
02582             responseObject = cycAccess.converseObject(script);
02583             Assert.assertEquals(new Integer(4), responseObject);
02584 
02585             script = "(fi-local-eval (list 'csetq 'a 5))";
02586             responseObject = cycAccess.converseObject(script);
02587             Assert.assertEquals(new Integer(5), responseObject);
02588             script = "(fi-local-eval 'a)";
02589             responseObject = cycAccess.converseObject(script);
02590             Assert.assertEquals(new Integer(5), responseObject);
02591 
02592 
02593             // apply
02594             script = "(apply #'+ '(1 2 3))";
02595             responseObject = cycAccess.converseObject(script);
02596             Assert.assertEquals(new Integer(6), responseObject);
02597 
02598             script = "(apply #'+ 1 2 '(3 4 5))";
02599             responseObject = cycAccess.converseObject(script);
02600             Assert.assertEquals(new Integer(15), responseObject);
02601 
02602             script = "(apply (function +) '(1 2 3))";
02603             responseObject = cycAccess.converseObject(script);
02604             Assert.assertEquals(new Integer(6), responseObject);
02605 
02606             script = "(apply (function +) 1 2 '(3 4 5))";
02607             responseObject = cycAccess.converseObject(script);
02608             Assert.assertEquals(new Integer(15), responseObject);
02609 
02610             script = "(apply #'my-copy-tree '((1 (2 (3)))))";
02611             responseList = cycAccess.converseList(script);
02612             Assert.assertEquals(cycAccess.makeCycList("(1 (2 (3)))"),
02613                                 responseList);
02614 
02615             // funcall
02616             script = "(funcall #'+ 1 2 3)";
02617             responseObject = cycAccess.converseObject(script);
02618             Assert.assertEquals(new Integer(6), responseObject);
02619 
02620             script = "(funcall (function +) 1 2 3)";
02621             responseObject = cycAccess.converseObject(script);
02622             Assert.assertEquals(new Integer(6), responseObject);
02623 
02624             script = "(funcall #'my-copy-tree (1 (2 (3))))";
02625             responseList = cycAccess.converseList(script);
02626             Assert.assertEquals(cycAccess.makeCycList("(1 (2 (3)))"),
02627                                 responseList);
02628 
02629             // multiple values
02630             script = "(multiple-value-list (floor 5 3))";
02631             responseList = cycAccess.converseList(script);
02632             Assert.assertEquals(cycAccess.makeCycList("(1 2)"), responseList);
02633 
02634             script = "(clear-environment)";
02635             cycAccess.converseVoid(script);
02636             script = "(get-environment)";
02637             responseString = cycAccess.converseString(script);
02638             Assert.assertEquals("\n", responseString);
02639             script = "(csetq answer nil)";
02640             responseObject = cycAccess.converseObject(script);
02641             Assert.assertEquals(CycObjectFactory.nil, responseObject);
02642 
02643             script = "(cmultiple-value-bind (a b) \n" +
02644                      "    (floor 5 3) \n" +
02645                      "  (csetq answer (list a b)))";
02646             responseList = cycAccess.converseList(script);
02647             Assert.assertEquals(cycAccess.makeCycList("(1 2)"), responseList);
02648             script = "(symbol-value 'answer)";
02649             responseList = cycAccess.converseList(script);
02650             Assert.assertEquals(cycAccess.makeCycList("(1 2)"), responseList);
02651 
02652             script =
02653                 "(define my-multiple-value-fn (arg1 arg2) \n" +
02654                 "  (ret (values arg1 arg2 (list arg1 arg2) 0)))";
02655             responseObject = cycAccess.converseObject(script);
02656             Assert.assertEquals(CycObjectFactory.makeCycSymbol("my-multiple-value-fn"), responseObject);
02657 
02658             script = "(my-multiple-value-fn #$Brazil #$Dog)";
02659             responseObject = cycAccess.converseObject(script);
02660             Assert.assertEquals(cycAccess.getKnownConstantByGuid("bd588f01-9c29-11b1-9dad-c379636f7270"),
02661                                 responseObject);
02662 
02663             script = "(cmultiple-value-bind (a b c d) \n" +
02664                      "    (my-multiple-value-fn #$Brazil #$Dog) \n" +
02665                      "  (csetq answer (list a b c d)))";
02666             responseList = cycAccess.converseList(script);
02667             Assert.assertEquals(cycAccess.makeCycList("(#$Brazil #$Dog (#$Brazil #$Dog) 0)"), responseList);
02668             script = "(symbol-value 'answer)";
02669             responseList = cycAccess.converseList(script);
02670             Assert.assertEquals(cycAccess.makeCycList("(#$Brazil #$Dog (#$Brazil #$Dog) 0)"), responseList);
02671 
02672             // trace and untrace
02673             script = "(untrace)";
02674             responseObject = cycAccess.converseObject(script);
02675             Assert.assertEquals(CycObjectFactory.nil, responseObject);
02676 
02677             script = "(clear-trace-log)";
02678             responseObject = cycAccess.converseObject(script);
02679             Assert.assertEquals(CycObjectFactory.nil, responseObject);
02680 
02681             script = "(get-trace-log)";
02682             responseString = cycAccess.converseString(script);
02683             Assert.assertEquals("\n", responseString);
02684 
02685             script = "(trace my-copy-tree)";
02686             responseObject = cycAccess.converseObject(script);
02687             Assert.assertEquals(cycAccess.makeCycList("(my-copy-tree)"), responseObject);
02688 
02689             script = "(trace)";
02690             responseObject = cycAccess.converseObject(script);
02691             Assert.assertEquals(cycAccess.makeCycList("(my-copy-tree)"), responseObject);
02692 
02693             script = "(my-copy-tree '(1 (2 (3))))";
02694             responseList = cycAccess.converseList(script);
02695             Assert.assertEquals(cycAccess.makeCycList("(1 (2 (3)))"),
02696                                 responseList);
02697 
02698             script = "(get-trace-log)";
02699             responseString = cycAccess.converseString(script);
02700             String expectedTraceLog =
02701                 "\n" +
02702                 "  0: (MY-COPY-TREE (1 (2 (3))))\n" +
02703                 "    1: (MY-COPY-TREE 1)\n" +
02704                 "    1: returned 1 \n" +
02705                 "    1: (MY-COPY-TREE ((2 (3))))\n" +
02706                 "      2: (MY-COPY-TREE (2 (3)))\n" +
02707                 "        3: (MY-COPY-TREE 2)\n" +
02708                 "        3: returned 2 \n" +
02709                 "        3: (MY-COPY-TREE ((3)))\n" +
02710                 "          4: (MY-COPY-TREE (3))\n" +
02711                 "            5: (MY-COPY-TREE 3)\n" +
02712                 "            5: returned 3 \n" +
02713                 "            5: (MY-COPY-TREE NIL)\n" +
02714                 "            5: returned NIL \n" +
02715                 "          4: returned (3) \n" +
02716                 "          4: (MY-COPY-TREE NIL)\n" +
02717                 "          4: returned NIL \n" +
02718                 "        3: returned ((3)) \n" +
02719                 "      2: returned (2 (3)) \n" +
02720                 "      2: (MY-COPY-TREE NIL)\n" +
02721                 "      2: returned NIL \n" +
02722                 "    1: returned ((2 (3))) \n" +
02723                 "  0: returned (1 (2 (3))) \n";
02724             Assert.assertEquals(expectedTraceLog,
02725                                 responseString);
02726 
02727             script = "(trace floor)";
02728             responseObject = cycAccess.converseObject(script);
02729             Assert.assertEquals(cycAccess.makeCycList("(FLOOR)"), responseObject);
02730 
02731             script = "(floor 5 3)";
02732             responseObject = cycAccess.converseObject(script);
02733             Assert.assertEquals(new Integer(1), responseObject);
02734 
02735             script = "(get-trace-log)";
02736             responseString = cycAccess.converseString(script);
02737             expectedTraceLog =
02738                 "\n" +
02739                 "  0: (FLOOR 5 3)\n" +
02740                 "  0: returned 1 2 \n";
02741             Assert.assertEquals(expectedTraceLog,
02742                                 responseString);
02743 
02744             script = "(floor 5 3)";
02745             responseObject = cycAccess.converseObject(script);
02746             Assert.assertEquals(new Integer(1), responseObject);
02747             script = "(floor 5 3)";
02748             responseObject = cycAccess.converseObject(script);
02749             Assert.assertEquals(new Integer(1), responseObject);
02750 
02751             script = "(clear-trace-log)";
02752             responseObject = cycAccess.converseObject(script);
02753             Assert.assertEquals(CycObjectFactory.nil, responseObject);
02754 
02755             script = "(get-trace-log)";
02756             responseString = cycAccess.converseString(script);
02757             expectedTraceLog = "\n";
02758             Assert.assertEquals(expectedTraceLog,
02759                                 responseString);
02760 
02761             script = "(trace)";
02762             responseObject = cycAccess.converseObject(script);
02763             Assert.assertEquals(cycAccess.makeCycList("(FLOOR MY-COPY-TREE)"), responseObject);
02764 
02765             script = "(untrace floor)";
02766             responseObject = cycAccess.converseObject(script);
02767             Assert.assertEquals(cycAccess.makeCycList("(FLOOR)"), responseObject);
02768 
02769             script = "(floor 5 3)";
02770             responseObject = cycAccess.converseObject(script);
02771             Assert.assertEquals(new Integer(1), responseObject);
02772 
02773             script = "(get-trace-log)";
02774             responseString = cycAccess.converseString(script);
02775             expectedTraceLog = "\n";
02776             Assert.assertEquals(expectedTraceLog,
02777                                 responseString);
02778 
02779             script = "(untrace)";
02780             responseObject = cycAccess.converseObject(script);
02781             Assert.assertEquals(CycObjectFactory.nil, responseObject);
02782 
02783             // arithmetic
02784             script = "(add1 2)";
02785             responseObject = cycAccess.converseObject(script);
02786             Assert.assertEquals(new Integer(3), responseObject);
02787 
02788             script = "(eq (add1 2) 3)";
02789             Assert.assertTrue(cycAccess.converseBoolean(script));
02790 
02791             script = "(sub1 10)";
02792             responseObject = cycAccess.converseObject(script);
02793             Assert.assertEquals(new Integer(9), responseObject);
02794 
02795             script = "(eq (sub1 10) 9)";
02796             Assert.assertTrue(cycAccess.converseBoolean(script));
02797 
02798             // sequence
02799             script = "(clear-environment)";
02800             cycAccess.converseVoid(script);
02801             script = "(get-environment)";
02802             responseString = cycAccess.converseString(script);
02803             Assert.assertEquals("\n", responseString);
02804             script = "(csetq a nil)";
02805             responseObject = cycAccess.converseObject(script);
02806             Assert.assertEquals(CycObjectFactory.nil, responseObject);
02807 
02808             script = "(progn (csetq a nil) (csetq a (list a)) (csetq a (list a)))";
02809             cycAccess.converseVoid(script);
02810             script = "(symbol-value 'a)";
02811             responseList = cycAccess.converseList(script);
02812             Assert.assertEquals(cycAccess.makeCycList("((nil))"), responseList);
02813 
02814             // sequence with variable bindings
02815             script = "(clet (a b) " +
02816                      "  (csetq a 1) " +
02817                      "  (csetq b (+ a 3)) " +
02818                      "  b)";
02819             responseObject = cycAccess.converseObject(script);
02820             Assert.assertEquals(new Integer(4), responseObject);
02821 
02822             script = "(clet ((a nil)) " +
02823                      "  (cpush 1 a) " +
02824                      "  a)";
02825             responseList = cycAccess.converseList(script);
02826             Assert.assertEquals(cycAccess.makeCycList("(1)"), responseList);
02827 
02828             script = "(clet (a b) " +
02829                      "  (csetq a '(1 2 3)) " +
02830                      "  (csetq b (cpop a)) " +
02831                      "  (list a b))";
02832             responseList = cycAccess.converseList(script);
02833             Assert.assertEquals(cycAccess.makeCycList("((2 3) (2 3))"), responseList);
02834 
02835             script = "(clet ((a 1) " +
02836                      "       (b (add1 a)) " +
02837                      "       (c (sub1 b))) " +
02838                      "  c)";
02839             responseObject = cycAccess.converseObject(script);
02840             Assert.assertEquals(new Integer(1), responseObject);
02841 
02842             script = "(clet ((*my-parm* 1)) " +
02843                      "  (csetq a (fi-get-parameter '*my-parm*)) " +
02844                      "  a)";
02845             responseObject = cycAccess.converseObject(script);
02846             Assert.assertEquals(new Integer(1), responseObject);
02847 
02848             // boolean expressions
02849             script = "(cand t nil t)";
02850             responseBoolean = cycAccess.converseBoolean(script);
02851             Assert.assertTrue(! responseBoolean);
02852 
02853             script = "(cand t t t)";
02854             responseBoolean = cycAccess.converseBoolean(script);
02855             Assert.assertTrue(responseBoolean);
02856 
02857             script = "(cand t)";
02858             responseBoolean = cycAccess.converseBoolean(script);
02859             Assert.assertTrue(responseBoolean);
02860 
02861             script = "(cand nil)";
02862             responseBoolean = cycAccess.converseBoolean(script);
02863             Assert.assertTrue(! responseBoolean);
02864 
02865             script = "(cand t #$Dog)";
02866             responseObject = cycAccess.converseObject(script);
02867             Assert.assertEquals(CycObjectFactory.t, responseObject);
02868 
02869             script = "(cor t nil t)";
02870             responseBoolean = cycAccess.converseBoolean(script);
02871             Assert.assertTrue(responseBoolean);
02872 
02873             script = "(cor nil nil nil)";
02874             responseBoolean = cycAccess.converseBoolean(script);
02875             Assert.assertTrue(! responseBoolean);
02876 
02877             script = "(cor t)";
02878             responseBoolean = cycAccess.converseBoolean(script);
02879             Assert.assertTrue(responseBoolean);
02880 
02881             script = "(cor nil)";
02882             responseBoolean = cycAccess.converseBoolean(script);
02883             Assert.assertTrue(! responseBoolean);
02884 
02885             script = "(cor nil #$Plant)";
02886             responseObject = cycAccess.converseObject(script);
02887             Assert.assertEquals(CycObjectFactory.t, responseObject);
02888 
02889             script = "(cnot nil)";
02890             responseBoolean = cycAccess.converseBoolean(script);
02891             Assert.assertTrue(responseBoolean);
02892 
02893             script = "(cnot t)";
02894             responseBoolean = cycAccess.converseBoolean(script);
02895             Assert.assertTrue(! responseBoolean);
02896 
02897             script = "(cnot (cand t nil))";
02898             responseBoolean = cycAccess.converseBoolean(script);
02899             Assert.assertTrue(responseBoolean);
02900 
02901             script = "(cand (cnot nil) (cor t nil))";
02902             responseBoolean = cycAccess.converseBoolean(script);
02903             Assert.assertTrue(responseBoolean);
02904 
02905             // conditional sequencing
02906             script = "(clear-environment)";
02907             cycAccess.converseVoid(script);
02908             script = "(get-environment)";
02909             responseString = cycAccess.converseString(script);
02910             Assert.assertEquals("\n", responseString);
02911             script = "(csetq answer nil)";
02912             responseObject = cycAccess.converseObject(script);
02913             Assert.assertEquals(CycObjectFactory.nil, responseObject);
02914 
02915             script = "(pcond ((eq 0 0) \n" +
02916                      "        (csetq answer \"clause 1 true\")) \n" +
02917                      "       ((> 1 4) \n" +
02918                      "        (csetq answer \"clause 2 true\")) \n" +
02919                      "       (t \n" +
02920                      "        (csetq answer \"clause 3 true\")))";
02921             responseString = cycAccess.converseString(script);
02922             Assert.assertEquals("clause 1 true", responseString);
02923             script = "(symbol-value 'answer)";
02924             responseString = cycAccess.converseString(script);
02925             Assert.assertEquals("clause 1 true", responseString);
02926 
02927             script = "(pcond ((eq 1 0) \n" +
02928                      "        (csetq answer \"clause 1 true\")) \n" +
02929                      "       ((> 5 4) \n" +
02930                      "        (csetq answer \"clause 2 true\")) \n" +
02931                      "       (t \n" +
02932                      "        (csetq answer \"clause 3 true\")))";
02933             responseString = cycAccess.converseString(script);
02934             Assert.assertEquals("clause 2 true", responseString);
02935             script = "(symbol-value 'answer)";
02936             responseString = cycAccess.converseString(script);
02937             Assert.assertEquals("clause 2 true", responseString);
02938 
02939             script = "(pcond ((eq 1 0) \n" +
02940                      "        (csetq answer \"clause 1 true\")) \n" +
02941                      "       ((> 1 4) \n" +
02942                      "        (csetq answer \"clause 2 true\")) \n" +
02943                      "       (t \n" +
02944                      "        (csetq answer \"clause 3 true\")))";
02945             responseString = cycAccess.converseString(script);
02946             Assert.assertEquals("clause 3 true", responseString);
02947             script = "(symbol-value 'answer)";
02948             responseString = cycAccess.converseString(script);
02949             Assert.assertEquals("clause 3 true", responseString);
02950 
02951             script = "(pif (string= \"abc\" \"abc\") \n" +
02952                      "     (csetq answer \"clause 1 true\") \n" +
02953                      "     ;; else \n" +
02954                      "     (csetq answer \"clause 2 true\"))";
02955             responseString = cycAccess.converseString(script);
02956             Assert.assertEquals("clause 1 true", responseString);
02957             script = "(symbol-value 'answer)";
02958             responseString = cycAccess.converseString(script);
02959             Assert.assertEquals("clause 1 true", responseString);
02960 
02961             script = "(pif (string> \"abc\" \"abc\") \n" +
02962                      "     (csetq answer \"clause 1 true\") \n" +
02963                      "     ;; else \n" +
02964                      "     (csetq answer \"clause 2 true\"))";
02965             responseString = cycAccess.converseString(script);
02966             Assert.assertEquals("clause 2 true", responseString);
02967             script = "(symbol-value 'answer)";
02968             responseString = cycAccess.converseString(script);
02969             Assert.assertEquals("clause 2 true", responseString);
02970 
02971             script = "(csetq answer \n" +
02972                      "       (fif (string= \"abc\" \"abc\") \n" +
02973                      "            \"clause 1 true\" \n" +
02974                      "            ;; else \n" +
02975                      "            \"clause 2 true\"))";
02976             responseString = cycAccess.converseString(script);
02977             Assert.assertEquals("clause 1 true", responseString);
02978             script = "(symbol-value 'answer)";
02979             responseString = cycAccess.converseString(script);
02980             Assert.assertEquals("clause 1 true", responseString);
02981 
02982             script = "(csetq answer \n" +
02983                      "       (fif (string> \"abc\" \"abc\") \n" +
02984                      "            \"clause 1 true\" \n" +
02985                      "            ;; else \n" +
02986                      "            \"clause 2 true\"))";
02987             responseString = cycAccess.converseString(script);
02988             Assert.assertEquals("clause 2 true", responseString);
02989             script = "(symbol-value 'answer)";
02990             responseString = cycAccess.converseString(script);
02991             Assert.assertEquals("clause 2 true", responseString);
02992 
02993             script = "(progn \n" +
02994                      "  (csetq answer \"clause 1 true\") \n" +
02995                      "  (pwhen (string= \"abc\" \"abc\") \n" +
02996                      "         (csetq answer \"clause 2 true\")))";
02997             responseString = cycAccess.converseString(script);
02998             Assert.assertEquals("clause 2 true", responseString);
02999             script = "(symbol-value 'answer)";
03000             responseString = cycAccess.converseString(script);
03001             Assert.assertEquals("clause 2 true", responseString);
03002 
03003             script = "(progn \n" +
03004                      "  (csetq answer \"clause 1 true\") \n" +
03005                      "  (pwhen (string> \"abc\" \"abc\") \n" +
03006                      "         (csetq answer \"clause 2 true\")))";
03007             responseObject = cycAccess.converseObject(script);
03008             Assert.assertEquals(CycObjectFactory.nil, responseObject);
03009             script = "(symbol-value 'answer)";
03010             responseString = cycAccess.converseString(script);
03011             Assert.assertEquals("clause 1 true", responseString);
03012 
03013             script = "(progn \n" +
03014                      "  (csetq answer \"clause 1 true\") \n" +
03015                      "  (punless (string> \"abc\" \"abc\") \n" +
03016                      "           (csetq answer \"clause 2 true\")))";
03017             responseString = cycAccess.converseString(script);
03018             Assert.assertEquals("clause 2 true", responseString);
03019             script = "(symbol-value 'answer)";
03020             responseString = cycAccess.converseString(script);
03021             Assert.assertEquals("clause 2 true", responseString);
03022 
03023             script = "(progn \n" +
03024                      "  (csetq answer \"clause 1 true\") \n" +
03025                      "  (punless (string= \"abc\" \"abc\") \n" +
03026                      "           (csetq answer \"clause 2 true\")))";
03027             responseObject = cycAccess.converseObject(script);
03028             Assert.assertEquals(CycObjectFactory.nil, responseObject);
03029             script = "(symbol-value 'answer)";
03030             responseString = cycAccess.converseString(script);
03031             Assert.assertEquals("clause 1 true", responseString);
03032 
03033             // iteration
03034             script = "(clear-environment)";
03035             cycAccess.converseVoid(script);
03036             script = "(get-environment)";
03037             responseString = cycAccess.converseString(script);
03038             Assert.assertEquals("\n", responseString);
03039             script = "(csetq answer nil)";
03040             responseObject = cycAccess.converseObject(script);
03041             Assert.assertEquals(CycObjectFactory.nil, responseObject);
03042 
03043             script = "(clet ((i 11)) \n" +
03044                      "  (csetq answer -10) \n" +
03045                      "  ;;(break \"environment\") \n" +
03046                      "  (while (> i 0) \n" +
03047                      "    (cdec i) \n" +
03048                      "    (cinc answer)))";
03049             cycAccess.converseVoid(script);
03050             script = "(symbol-value 'answer)";
03051             responseObject = cycAccess.converseObject(script);
03052             Assert.assertEquals(new Integer(1), responseObject);
03053 
03054             script = "(csetq answer nil)";
03055             responseObject = cycAccess.converseObject(script);
03056             Assert.assertEquals(CycObjectFactory.nil, responseObject);
03057             script = "(progn \n" +
03058                      "  (cdo ((x 0 (add1 x)) \n" +
03059                      "        (y (+ 0 1) (+ y 2)) \n" +
03060                      "        (z -10 (- z 1))) \n" +
03061                      "       ((> x 3)) \n" +
03062                      "    (cpush (list 'x x 'y y 'z z) answer)) \n" +
03063                      "  (csetq answer (nreverse answer)))";
03064             responseList = cycAccess.converseList(script);
03065             Assert.assertEquals(cycAccess.makeCycList("((x 0 y 1 z -10) " +
03066                                                       " (x 1 y 3 z -11) " +
03067                                                       " (x 2 y 5 z -12) " +
03068                                                       " (x 3 y 7 z -13))"),
03069                                 responseList);
03070 
03071             script = "(csetq answer nil)";
03072             responseObject = cycAccess.converseObject(script);
03073             Assert.assertEquals(CycObjectFactory.nil, responseObject);
03074             script = "(progn \n" +
03075                      "  (clet ((x '(1 2 3))) \n" +
03076                      "    (cdo nil ((null x) (csetq x 'y)) \n" +
03077                      "      (cpush x answer) \n" +
03078                      "      (cpop x)) \n" +
03079                      "    x) \n" +
03080                      "  (csetq answer (reverse answer)))";
03081             responseList = cycAccess.converseList(script);
03082             Assert.assertEquals(cycAccess.makeCycList("((1 2 3) " +
03083                                                       " (2 3) " +
03084                                                       " (3))"),
03085                                 responseList);
03086 
03087             script = "(csetq answer nil)";
03088             responseObject = cycAccess.converseObject(script);
03089             Assert.assertEquals(CycObjectFactory.nil, responseObject);
03090             script = "(cdolist (x '(1 2 3 4)) \n" +
03091                      "  (cpush x answer))";
03092             Assert.assertEquals(CycObjectFactory.nil, cycAccess.converseObject(script));
03093             script = "(symbol-value 'answer)";
03094             responseList = cycAccess.converseList(script);
03095             Assert.assertEquals(cycAccess.makeCycList("(4 3 2 1)"), responseList);
03096 
03097             // mapping
03098             script = "(mapcar #'list '(a b c))";
03099             responseList = cycAccess.converseList(script);
03100             Assert.assertEquals(cycAccess.makeCycList("((a) (b) (c))"), responseList);
03101 
03102             script = "(mapcar #'list '(a b c) '(d e f))";
03103             responseList = cycAccess.converseList(script);
03104             Assert.assertEquals(cycAccess.makeCycList("((a d) (b e) (c f))"), responseList);
03105 
03106             script = "(mapcar #'eq '(a b c) '(d b f))";
03107             responseList = cycAccess.converseList(script);
03108             Assert.assertEquals(cycAccess.makeCycList("(nil t nil)"), responseList);
03109 
03110             script = "(clear-environment)";
03111             cycAccess.converseVoid(script);
03112             script = "(csetq answer nil)";
03113             responseObject = cycAccess.converseObject(script);
03114             Assert.assertEquals(CycObjectFactory.nil, responseObject);
03115 
03116             script = "(csetq my-small-dictionary nil)";
03117             responseObject = cycAccess.converseObject(script);
03118             Assert.assertEquals(CycObjectFactory.nil, responseObject);
03119             // Wrap the dictionary assignment in a progn that returns nil, to avoid sending the
03120             // dictionary itself back to the client, where it is not supported.
03121             script = "(progn (csetq my-small-dictionary (new-dictionary #'eq 3)) nil)";
03122             responseObject = cycAccess.converseObject(script);
03123             script = "(progn \n" +
03124                      "  (dictionary-enter my-small-dictionary 'a 1) \n" +
03125                      "  (dictionary-enter my-small-dictionary 'b 2) \n" +
03126                      "  (dictionary-enter my-small-dictionary 'c 3))";
03127             responseObject = cycAccess.converseObject(script);
03128             Assert.assertEquals(CycObjectFactory.makeCycSymbol("c"), responseObject);
03129             script =
03130                 "(define my-mapdictionary-fn (key value) \n" +
03131                 "  (cpush (list key value) answer) \n" +
03132                 "  (ret nil))";
03133             responseObject = cycAccess.converseObject(script);
03134             Assert.assertEquals(CycObjectFactory.makeCycSymbol("my-mapdictionary-fn"), responseObject);
03135 
03136             script = "(mapdictionary my-small-dictionary #'my-mapdictionary-fn)";
03137             responseObject = cycAccess.converseObject(script);
03138             Assert.assertEquals(CycObjectFactory.nil, responseObject);
03139             script = "(symbol-value 'answer)";
03140             responseList = cycAccess.converseList(script);
03141             Assert.assertTrue(responseList.contains(cycAccess.makeCycList("(a 1)")));
03142             Assert.assertTrue(responseList.contains(cycAccess.makeCycList("(b 2)")));
03143             Assert.assertTrue(responseList.contains(cycAccess.makeCycList("(c 3)")));
03144 
03145             script = "(csetq my-large-dictionary nil)";
03146             responseObject = cycAccess.converseObject(script);
03147             Assert.assertEquals(CycObjectFactory.nil, responseObject);
03148             script = "(progn (csetq my-large-dictionary (new-dictionary #'eq 200)) nil)";
03149             responseObject = cycAccess.converseObject(script);
03150             script = "(clet ((cities (remove-duplicates \n" +
03151                      "                 (with-all-mts \n" +
03152                      "                   (instances #$IndependentCountry)))) \n" +
03153                      "        capital-city) \n" +
03154                      "  (cdolist (city cities) \n" +
03155                      "    (csetq capital-city (pred-values-in-any-mt city #$capitalCity)) \n" +
03156                      "    (dictionary-enter my-large-dictionary \n" +
03157                      "                      city \n" +
03158                      "                      (fif (consp capital-city) \n" +
03159                      "                           (first capital-city) \n" +
03160                      "                           ;; else \n" +
03161                      "                           nil))))";
03162             responseObject = cycAccess.converseObject(script);
03163 
03164             script = "(mapdictionary my-large-dictionary #'my-mapdictionary-fn)";
03165             responseObject = cycAccess.converseObject(script);
03166             Assert.assertEquals(CycObjectFactory.nil, responseObject);
03167             script = "(symbol-value 'answer)";
03168             responseList = cycAccess.converseList(script);
03169             Assert.assertTrue(responseList.contains(
03170                 cycAccess.makeCycList("(#$Brazil #$CityOfBrasiliaBrazil)")));
03171 
03172             script =
03173                 "(define my-parameterized-mapdictionary-fn (key value args) \n" +
03174                 "  (cpush (list key value args) answer) \n" +
03175                 "  (ret nil))";
03176             responseObject = cycAccess.converseObject(script);
03177             Assert.assertEquals(CycObjectFactory.makeCycSymbol("my-parameterized-mapdictionary-fn"),
03178                                 responseObject);
03179 
03180             script = "(mapdictionary-parameterized my-small-dictionary #'my-parameterized-mapdictionary-fn '(\"x\"))";
03181             responseObject = cycAccess.converseObject(script);
03182             Assert.assertEquals(CycObjectFactory.nil, responseObject);
03183             script = "(symbol-value 'answer)";
03184             responseList = cycAccess.converseList(script);
03185             Assert.assertTrue(responseList.contains(cycAccess.makeCycList("(a 1 (\"x\"))")));
03186             Assert.assertTrue(responseList.contains(cycAccess.makeCycList("(b 2 (\"x\"))")));
03187             Assert.assertTrue(responseList.contains(cycAccess.makeCycList("(c 3 (\"x\"))")));
03188 
03189             script = "(mapdictionary-parameterized my-large-dictionary #'my-parameterized-mapdictionary-fn '(1 2))";
03190             responseObject = cycAccess.converseObject(script);
03191             Assert.assertEquals(CycObjectFactory.nil, responseObject);
03192             script = "(symbol-value 'answer)";
03193             responseList = cycAccess.converseList(script);
03194             Assert.assertTrue(responseList.contains(
03195                 cycAccess.makeCycList("(#$Brazil #$CityOfBrasiliaBrazil (1 2))")));
03196 
03197             // ccatch and throw
03198             script =
03199                 "(define my-super () \n" +
03200                 "  (clet (result) \n" +
03201                 "    (ccatch :abort \n" +
03202                 "      result \n" +
03203                 "      (my-sub) \n" +
03204                 "      (csetq result 0)) \n" +
03205                 "  (ret result)))";
03206             responseObject = cycAccess.converseObject(script);
03207             Assert.assertEquals(CycObjectFactory.makeCycSymbol("my-super"),
03208                                 responseObject);
03209 
03210             script =
03211                 "(define my-sub () \n" +
03212                 "  (clet ((a 1) (b 2)) \n" +
03213                 "  (ignore a b) \n" +
03214                 "  (ret (throw :abort 99))))";
03215             responseObject = cycAccess.converseObject(script);
03216             Assert.assertEquals(CycObjectFactory.makeCycSymbol("my-sub"),
03217                                 responseObject);
03218             script = "(my-super)";
03219             responseObject = cycAccess.converseObject(script);
03220             Assert.assertEquals(new Integer(99), responseObject);
03221 
03222             // ignore-errors, cunwind-protect
03223             //cycAccess.traceOn();
03224             script =
03225                 "(clet (result) \n" +
03226                 "  (ignore-errors \n" +
03227                 "    (cunwind-protect \n" +
03228                 "       (/ 1 0) \n" +
03229                 "      (csetq result \"protected\"))) \n" +
03230                 "  result)";
03231             responseObject = cycAccess.converseObject(script);
03232             Assert.assertEquals("protected", responseObject);
03233 
03234             // get-environment
03235             script = "(clear-environment)";
03236             cycAccess.converseVoid(script);
03237             script = "(get-environment)";
03238             responseString = cycAccess.converseString(script);
03239             Assert.assertEquals("\n", responseString);
03240             script = "(csetq a nil)";
03241             responseObject = cycAccess.converseObject(script);
03242             Assert.assertEquals(CycObjectFactory.nil, responseObject);
03243             script = "(csetq b -1)";
03244             responseObject = cycAccess.converseObject(script);
03245             Assert.assertEquals(new Integer(-1), responseObject);
03246             script = "(get-environment)";
03247             responseString = cycAccess.converseString(script);
03248             Assert.assertEquals("\n\n(B . -1)\n(A)", responseString);
03249 
03250             // cdestructuring-bind
03251             script = "(cdestructuring-bind () '() (print 'foo))";
03252             responseObject = cycAccess.converseObject(script);
03253             Assert.assertEquals(CycObjectFactory.makeCycSymbol("foo"),
03254                                 responseObject);
03255 
03256             script = "(cdestructuring-bind (&whole a) () (print 'foo))";
03257             responseObject = cycAccess.converseObject(script);
03258             Assert.assertEquals(CycObjectFactory.makeCycSymbol("foo"),
03259                                 responseObject);
03260 
03261             script = "(cdestructuring-bind (&whole a b c) '(1 2) (print (list a b c)))";
03262             responseList = cycAccess.converseList(script);
03263             Assert.assertEquals(responseList, cycAccess.makeCycList("((1 2) 1 2)"));
03264 
03265             script = "(cdestructuring-bind (a b . c) '(1 2 3 4) (print (list a b c)))";
03266             responseList = cycAccess.converseList(script);
03267             Assert.assertEquals(responseList, cycAccess.makeCycList("(1 2 (3 4))"));
03268 
03269             script = "(cdestructuring-bind (&optional a) '(1) (print (list a)))";
03270             responseList = cycAccess.converseList(script);
03271             Assert.assertEquals(responseList, cycAccess.makeCycList("(1)"));
03272 
03273             script = "(cdestructuring-bind (a &optional b) '(1 2) (print (list a b)))";
03274             responseList = cycAccess.converseList(script);
03275             Assert.assertEquals(responseList, cycAccess.makeCycList("(1 2)"));
03276 
03277             script = "(cdestructuring-bind (&whole a &optional b) '(1) (print (list a b)))";
03278             responseList = cycAccess.converseList(script);
03279             Assert.assertEquals(responseList, cycAccess.makeCycList("((1) 1)"));
03280 
03281             script = "(cdestructuring-bind (&rest a) '(1 2) (print (list a)))";
03282             responseList = cycAccess.converseList(script);
03283             Assert.assertEquals(responseList, cycAccess.makeCycList("((1 2))"));
03284 
03285             script = "(cdestructuring-bind (&whole a b &rest c) '(1 2 3) (print (list a b c)))";
03286             responseList = cycAccess.converseList(script);
03287             Assert.assertEquals(responseList, cycAccess.makeCycList("((1 2 3) 1 (2 3))"));
03288 
03289             script = "(cdestructuring-bind (&key a b) '(:b 2 :a 1) (print (list a b)))";
03290             responseList = cycAccess.converseList(script);
03291             Assert.assertEquals(responseList, cycAccess.makeCycList("(1 2)"));
03292 
03293             script = "(cdestructuring-bind (&key a b) '(:b 2 :allow-other-keys t :a 1 :c 3) (print (list a b)))";
03294             responseList = cycAccess.converseList(script);
03295             Assert.assertEquals(responseList, cycAccess.makeCycList("(1 2)"));
03296 
03297             script = "(cdestructuring-bind (&key ((key a) 23 b)) '(key 1) (print (list a b)))";
03298             responseList = cycAccess.converseList(script);
03299             Assert.assertEquals(responseList, cycAccess.makeCycList("(1 T)"));
03300 
03301             script = "(cdestructuring-bind (a &optional b &key c) '(1 2 :c 3) (print (list a b c)))";
03302             responseList = cycAccess.converseList(script);
03303             Assert.assertEquals(responseList, cycAccess.makeCycList("(1 2 3)"));
03304 
03305             script = "(cdestructuring-bind (&whole a b &optional c &rest d &key e &allow-other-keys &aux f) '(1 2 :d 4 :e 3) (print (list a b c d e f)))";
03306             responseList = cycAccess.converseList(script);
03307             Assert.assertEquals(responseList, cycAccess.makeCycList("((1 2 :D 4 :E 3) 1 2 (:D 4 :E 3) 3 NIL)"));
03308 
03309             // type testing
03310             script = "(clear-environment)";
03311             cycAccess.converseVoid(script);
03312 
03313             script = "(csetq a 1)";
03314             responseObject = cycAccess.converseObject(script);
03315             Assert.assertEquals(new Integer(1), responseObject);
03316             script = "(numberp a)";
03317             Assert.assertTrue(cycAccess.converseBoolean(script));
03318             script = "(integerp a)";
03319             Assert.assertTrue(cycAccess.converseBoolean(script));
03320             script = "(stringp a)";
03321             Assert.assertTrue(! cycAccess.converseBoolean(script));
03322             script = "(atom a)";
03323             Assert.assertTrue(cycAccess.converseBoolean(script));
03324             script = "(floatp a)";
03325             Assert.assertTrue(! cycAccess.converseBoolean(script));
03326             script = "(symbolp a)";
03327             Assert.assertTrue(! cycAccess.converseBoolean(script));
03328             script = "(consp a)";
03329             Assert.assertTrue(! cycAccess.converseBoolean(script));
03330             script = "(listp a)";
03331             Assert.assertTrue(! cycAccess.converseBoolean(script));
03332             script = "(null a)";
03333             Assert.assertTrue(! cycAccess.converseBoolean(script));
03334 
03335             script = "(csetq a \"abc\")";
03336             responseObject = cycAccess.converseObject(script);
03337             Assert.assertEquals("abc", responseObject);
03338             script = "(numberp a)";
03339             Assert.assertTrue(! cycAccess.converseBoolean(script));
03340             script = "(integerp a)";
03341             Assert.assertTrue(! cycAccess.converseBoolean(script));
03342             script = "(stringp a)";
03343             Assert.assertTrue(cycAccess.converseBoolean(script));
03344             script = "(atom a)";
03345             Assert.assertTrue(cycAccess.converseBoolean(script));
03346             script = "(floatp a)";
03347             Assert.assertTrue(! cycAccess.converseBoolean(script));
03348             script = "(symbolp a)";
03349             Assert.assertTrue(! cycAccess.converseBoolean(script));
03350             script = "(consp a)";
03351             Assert.assertTrue(! cycAccess.converseBoolean(script));
03352             script = "(listp a)";
03353             Assert.assertTrue(! cycAccess.converseBoolean(script));
03354             script = "(null a)";
03355             Assert.assertTrue(! cycAccess.converseBoolean(script));
03356 
03357             script = "(csetq a 2.14)";
03358             responseObject = cycAccess.converseObject(script);
03359             Assert.assertTrue(responseObject instanceof Double);
03360             Assert.assertTrue(((Double) responseObject).doubleValue() > 2.13999);
03361             Assert.assertTrue(((Double) responseObject).doubleValue() < 2.14001);
03362             script = "(numberp a)";
03363             Assert.assertTrue(cycAccess.converseBoolean(script));
03364             script = "(integerp a)";
03365             Assert.assertTrue(! cycAccess.converseBoolean(script));
03366             script = "(stringp a)";
03367             Assert.assertTrue(! cycAccess.converseBoolean(script));
03368             script = "(atom a)";
03369             Assert.assertTrue(cycAccess.converseBoolean(script));
03370             script = "(floatp a)";
03371             Assert.assertTrue(cycAccess.converseBoolean(script));
03372             script = "(symbolp a)";
03373             Assert.assertTrue(! cycAccess.converseBoolean(script));
03374             script = "(consp a)";
03375             Assert.assertTrue(! cycAccess.converseBoolean(script));
03376             script = "(listp a)";
03377             Assert.assertTrue(! cycAccess.converseBoolean(script));
03378             script = "(null a)";
03379             Assert.assertTrue(! cycAccess.converseBoolean(script));
03380 
03381             script = "(csetq a 'my-symbol)";
03382             responseObject = cycAccess.converseObject(script);
03383             Assert.assertEquals(CycObjectFactory.makeCycSymbol("my-symbol"), responseObject);
03384             script = "(numberp a)";
03385             Assert.assertTrue(! cycAccess.converseBoolean(script));
03386             script = "(integerp a)";
03387             Assert.assertTrue(! cycAccess.converseBoolean(script));
03388             script = "(stringp a)";
03389             Assert.assertTrue(! cycAccess.converseBoolean(script));
03390             script = "(atom a)";
03391             Assert.assertTrue(cycAccess.converseBoolean(script));
03392             script = "(floatp a)";
03393             Assert.assertTrue(! cycAccess.converseBoolean(script));
03394             script = "(symbolp a)";
03395             Assert.assertTrue(cycAccess.converseBoolean(script));
03396             script = "(consp a)";
03397             Assert.assertTrue(! cycAccess.converseBoolean(script));
03398             script = "(listp a)";
03399             Assert.assertTrue(! cycAccess.converseBoolean(script));
03400             script = "(null a)";
03401             Assert.assertTrue(! cycAccess.converseBoolean(script));
03402 
03403             script = "(csetq a '(1 . 2))";
03404             responseObject = cycAccess.converseObject(script);
03405             Assert.assertEquals(cycAccess.makeCycList("(1 . 2)"), responseObject);
03406             script = "(numberp a)";
03407             Assert.assertTrue(! cycAccess.converseBoolean(script));
03408             script = "(integerp a)";
03409             Assert.assertTrue(! cycAccess.converseBoolean(script));
03410             script = "(stringp a)";
03411             Assert.assertTrue(! cycAccess.converseBoolean(script));
03412             script = "(atom a)";
03413             Assert.assertTrue(! cycAccess.converseBoolean(script));
03414             script = "(floatp a)";
03415             Assert.assertTrue(! cycAccess.converseBoolean(script));
03416             script = "(symbolp a)";
03417             Assert.assertTrue(! cycAccess.converseBoolean(script));
03418             script = "(consp a)";
03419             Assert.assertTrue(cycAccess.converseBoolean(script));
03420             script = "(listp a)";
03421             Assert.assertTrue(cycAccess.converseBoolean(script));
03422             script = "(null a)";
03423             Assert.assertTrue(! cycAccess.converseBoolean(script));
03424 
03425             script = "(csetq a '(1 2))";
03426             responseObject = cycAccess.converseObject(script);
03427             Assert.assertEquals(cycAccess.makeCycList("(1 2)"), responseObject);
03428             script = "(numberp a)";
03429             Assert.assertTrue(! cycAccess.converseBoolean(script));
03430             script = "(integerp a)";
03431             Assert.assertTrue(! cycAccess.converseBoolean(script));
03432             script = "(stringp a)";
03433             Assert.assertTrue(! cycAccess.converseBoolean(script));
03434             script = "(atom a)";
03435             Assert.assertTrue(! cycAccess.converseBoolean(script));
03436             script = "(floatp a)";
03437             Assert.assertTrue(! cycAccess.converseBoolean(script));
03438             script = "(symbolp a)";
03439             Assert.assertTrue(! cycAccess.converseBoolean(script));
03440             script = "(consp a)";
03441             Assert.assertTrue(cycAccess.converseBoolean(script));
03442             script = "(listp a)";
03443             Assert.assertTrue(cycAccess.converseBoolean(script));
03444             script = "(null a)";
03445             Assert.assertTrue(! cycAccess.converseBoolean(script));
03446 
03447             script = "(csetq a nil)";
03448             responseObject = cycAccess.converseObject(script);
03449             Assert.assertEquals(CycObjectFactory.nil, responseObject);
03450             script = "(numberp a)";
03451             Assert.assertTrue(! cycAccess.converseBoolean(script));
03452             script = "(integerp a)";
03453             Assert.assertTrue(! cycAccess.converseBoolean(script));
03454             script = "(stringp a)";
03455             Assert.assertTrue(! cycAccess.converseBoolean(script));
03456             script = "(atom a)";
03457             Assert.assertTrue(cycAccess.converseBoolean(script));
03458             script = "(floatp a)";
03459             Assert.assertTrue(! cycAccess.converseBoolean(script));
03460             script = "(symbolp a)";
03461             Assert.assertTrue(cycAccess.converseBoolean(script));
03462             script = "(consp a)";
03463             Assert.assertTrue(! cycAccess.converseBoolean(script));
03464             script = "(listp a)";
03465             Assert.assertTrue(cycAccess.converseBoolean(script));
03466             script = "(null a)";
03467             Assert.assertTrue(cycAccess.converseBoolean(script));
03468 
03469             // empty list is treated the same as nil.
03470             CycList command = new CycList();
03471             command.add(CycObjectFactory.makeCycSymbol("csetq"));
03472             command.add(CycObjectFactory.makeCycSymbol("a"));
03473             command.add(new CycList());
03474             responseObject = cycAccess.converseObject(command);
03475             Assert.assertEquals(CycObjectFactory.nil, responseObject);
03476             script = "(numberp a)";
03477             Assert.assertTrue(! cycAccess.converseBoolean(script));
03478             script = "(integerp a)";
03479             Assert.assertTrue(! cycAccess.converseBoolean(script));
03480             script = "(stringp a)";
03481             Assert.assertTrue(! cycAccess.converseBoolean(script));
03482             script = "(atom a)";
03483             Assert.assertTrue(cycAccess.converseBoolean(script));
03484             script = "(floatp a)";
03485             Assert.assertTrue(! cycAccess.converseBoolean(script));
03486             script = "(symbolp a)";
03487             Assert.assertTrue(cycAccess.converseBoolean(script));
03488             script = "(consp a)";
03489             Assert.assertTrue(! cycAccess.converseBoolean(script));
03490             script = "(listp a)";
03491             Assert.assertTrue(cycAccess.converseBoolean(script));
03492             script = "(null a)";
03493             Assert.assertTrue(cycAccess.converseBoolean(script));
03494 
03495             /*
03496             // constant name with embedded slash
03497             //cycAccess.traceOn();
03498             script =
03499               "(rtp-parse-exp-w/vpp \"Symptoms of EEE begin 4-10 days after infection\" \n" +
03500                 "(fort-for-string \"STemplate\") \n" +
03501                 "(fort-for-string \"AllEnglishTemplateMt\") \n" +
03502                 "(fort-for-string \"RKFParsingMt\"))";
03503             responseList = cycAccess.converseList(script);
03504             */
03505 
03506             // check-type
03507             script = "(clear-environment)";
03508             cycAccess.converseVoid(script);
03509             script =
03510                 "(clet (result) \n" +
03511                 "  (ignore-errors \n" +
03512                 "    (check-type 1 numberp) \n" +
03513                 "    (csetq result t)) \n" +
03514                 "  result)";
03515             Assert.assertEquals((Object) CycObjectFactory.t, cycAccess.converseObject(script));
03516             script =
03517                 "(clet (result) \n" +
03518                 "  (ignore-errors \n" +
03519                 "    (check-type 1 stringp) \n" +
03520                 "    (csetq result t)) \n" +
03521                 "  result)";
03522             Assert.assertEquals((Object) CycObjectFactory.nil, cycAccess.converseObject(script));
03523 
03524 
03525             //cycAccess.traceOn();
03526         }
03527         catch (Exception e) {
03528             e.printStackTrace();
03529             CycAccess.current().close();
03530             Assert.fail(e.toString());
03531         }
03532         long endMilliseconds = System.currentTimeMillis();
03533         System.out.println("  " + (endMilliseconds - startMilliseconds) + " milliseconds");
03534     }
03535 
03536     /**
03537      * Tests a portion of the CycAccess methods using the ascii api connection.
03538      */
03539     public void testAsciiCycAccess8 () {
03540         if (performOnlyBinaryApiModeTests ||
03541             (connectionMode == REMOTE_CYC_CONNECTION))
03542             return;
03543         System.out.println("\n**** testAsciiCycAccess 8 ****");
03544         CycAccess cycAccess = null;
03545         try {
03546 
03547             cycAccess = new CycAccess(CycConnection.DEFAULT_HOSTNAME,
03548                                       CycConnection.DEFAULT_BASE_PORT,
03549                                       CycConnection.ASCII_MODE,
03550                                       CycAccess.PERSISTENT_CONNECTION);
03551         }
03552         catch (Exception e) {
03553             Assert.fail(e.toString());
03554         }
03555 
03556         doTestCycAccess8(cycAccess);
03557 
03558         cycAccess.close();
03559         System.out.println("**** testAsciiCycAccess 8 OK ****");
03560     }
03561 
03562 
03563     /**
03564      * Tests a portion of the CycAccess methods using the binary api connection.
03565      */
03566     public void testBinaryCycAccess8 () {
03567         System.out.println("\n**** testBinaryCycAccess 8 ****");
03568         CycAccess cycAccess = null;
03569         try {
03570             if (connectionMode == LOCAL_CYC_CONNECTION)
03571                 cycAccess = new CycAccess(CycConnection.DEFAULT_HOSTNAME,
03572                                           CycConnection.DEFAULT_BASE_PORT,
03573                                           CycConnection.BINARY_MODE,
03574                                           CycAccess.PERSISTENT_CONNECTION,
03575                                           CycConnection.SERIAL_MESSAGING_MODE);
03576             else if (connectionMode == REMOTE_CYC_CONNECTION)
03577                 cycAccess = new CycAccess(myAgentName, cycProxyAgentName, agentCommunity);
03578             else
03579                 Assert.fail("Invalid connection mode " + connectionMode);
03580         }
03581         catch (Exception e) {
03582             Assert.fail(e.toString());
03583         }
03584 
03585         //cycAccess.traceOnDetailed();
03586         doTestCycAccess8(cycAccess);
03587 
03588         cycAccess.close();
03589         System.out.println("**** testBinaryCycAccess 8 OK ****");
03590     }
03591 
03592     /**
03593      * Tests a portion of the CycAccess methods using the given api connection.
03594      */
03595     protected void doTestCycAccess8 (CycAccess cycAccess) {
03596         long startMilliseconds = System.currentTimeMillis();
03597         try {
03598 
03599             // isQuotedCollection
03600             CycConstant coreConstant =
03601                 cycAccess.getKnownConstantByGuid("c0dd1b7c-9c29-11b1-9dad-c379636f7270");
03602             Assert.assertTrue(cycAccess.isQuotedCollection(coreConstant, cycAccess.baseKB));
03603             Assert.assertTrue(cycAccess.isQuotedCollection(coreConstant));
03604             CycConstant animal =
03605                 cycAccess.getKnownConstantByGuid("bd58b031-9c29-11b1-9dad-c379636f7270");
03606             Assert.assertTrue(! cycAccess.isQuotedCollection(animal));
03607 
03608             // List containing null is coerced to list containing NIL.
03609             if (cycAccess.communicationMode == CycConnection.BINARY_MODE) {
03610                 String script =
03611                     "(put-api-user-variable 'a '(nil 1))";
03612                 Object responseObject = cycAccess.converseObject(script);
03613                 Assert.assertEquals(CycObjectFactory.nil, responseObject);
03614 
03615                 script =
03616                     "(get-api-user-variable 'a)";
03617                 CycList responseList = cycAccess.converseList(script);
03618                 Assert.assertEquals(cycAccess.makeCycList("(nil 1)"),
03619                                     responseList);
03620             }
03621 
03622             // rkfPhraseReader
03623             CycFort inferencePsc =
03624                 cycAccess.getKnownConstantByGuid("bd58915a-9c29-11b1-9dad-c379636f7270");
03625             CycFort rkfEnglishLexicalMicrotheoryPsc =
03626                 cycAccess.getKnownConstantByGuid("bf6df6e3-9c29-11b1-9dad-c379636f7270");
03627             String text = "penguins";
03628             CycList parseExpressions = cycAccess.rkfPhraseReader(text,
03629                                                                 rkfEnglishLexicalMicrotheoryPsc,
03630                                                                 inferencePsc);
03631             CycList parseExpression = (CycList) parseExpressions.first();
03632             CycList spanExpression = (CycList) parseExpression.first();
03633             CycList terms = (CycList) parseExpression.second();
03634             // #$Penguin
03635             CycFort penguin = cycAccess.getKnownConstantByGuid("bd58a986-9c29-11b1-9dad-c379636f7270");
03636             Assert.assertTrue(terms.contains(penguin));
03637             // #$PittsburghPenguins
03638             CycFort pittsburghPenguins = cycAccess.getKnownConstantByGuid("c08dec11-9c29-11b1-9dad-c379636f7270");
03639             Assert.assertTrue(terms.contains(pittsburghPenguins));
03640 
03641             // generateDisambiguationPhraseAndTypes
03642             CycList objects = new CycList();
03643             objects.add(penguin);
03644             objects.add(pittsburghPenguins);
03645             CycList disambiguationExpression = cycAccess.generateDisambiguationPhraseAndTypes(objects);
03646             System.out.println("disambiguationExpression\n" + disambiguationExpression);
03647             Assert.assertEquals(2, disambiguationExpression.size());
03648             CycList penguinDisambiguationExpression = (CycList) disambiguationExpression.first();
03649             System.out.println("penguinDisambiguationExpression\n" + penguinDisambiguationExpression);
03650             Assert.assertTrue(penguinDisambiguationExpression.contains("penguin"));
03651             Assert.assertTrue(penguinDisambiguationExpression.contains("bird"));
03652             CycList pittsburghPenguinDisambiguationExpression = (CycList) disambiguationExpression.second();
03653             System.out.println("pittsburghPenguinDisambiguationExpression\n" +
03654                                pittsburghPenguinDisambiguationExpression);
03655             Assert.assertTrue(pittsburghPenguinDisambiguationExpression.contains("the Pittsburgh Penguins"));
03656             Assert.assertTrue(pittsburghPenguinDisambiguationExpression.contains("ice hockey team"));
03657 
03658         }
03659         catch (Exception e) {
03660             e.printStackTrace();
03661             CycAccess.current().close();
03662             Assert.fail(e.toString());
03663         }
03664 
03665 
03666         long endMilliseconds = System.currentTimeMillis();
03667         System.out.println("  " + (endMilliseconds - startMilliseconds) + " milliseconds");
03668     }
03669 
03670     /**
03671      * Tests a portion of the CycAccess methods using the ascii api connection.
03672      */
03673     public void testAsciiCycAccess9 () {
03674         if (performOnlyBinaryApiModeTests ||
03675             (connectionMode == REMOTE_CYC_CONNECTION))
03676             return;
03677         System.out.println("\n**** testAsciiCycAccess 9 ****");
03678         CycAccess cycAccess = null;
03679         try {
03680 
03681             cycAccess = new CycAccess(CycConnection.DEFAULT_HOSTNAME,
03682                                       CycConnection.DEFAULT_BASE_PORT,
03683                                       CycConnection.ASCII_MODE,
03684                                       CycAccess.PERSISTENT_CONNECTION);
03685         }
03686         catch (Exception e) {
03687             Assert.fail(e.toString());
03688         }
03689 
03690         System.out.println(cycAccess.getCycConnection().connectionInfo());
03691         //cycAccess.traceOn();
03692         doTestCycAccess9(cycAccess);
03693 
03694         cycAccess.close();
03695         System.out.println("**** testAsciiCycAccess 9 OK ****");
03696     }
03697 
03698 
03699     /**
03700      * Tests a portion of the CycAccess methods using the binary api connection.
03701      */
03702     public void testBinaryCycAccess9 () {
03703         System.out.println("\n**** testBinaryCycAccess 9 ****");
03704         CycAccess cycAccess = null;
03705         try {
03706             if (connectionMode == LOCAL_CYC_CONNECTION)
03707                 cycAccess = new CycAccess(CycConnection.DEFAULT_HOSTNAME,
03708                                           CycConnection.DEFAULT_BASE_PORT,
03709                                           CycConnection.BINARY_MODE,
03710                                           CycAccess.PERSISTENT_CONNECTION,
03711                                           CycConnection.SERIAL_MESSAGING_MODE);
03712             else if (connectionMode == REMOTE_CYC_CONNECTION)
03713                 cycAccess = new CycAccess(myAgentName, cycProxyAgentName, agentCommunity);
03714             else
03715                 Assert.fail("Invalid connection mode " + connectionMode);
03716         }
03717         catch (Exception e) {
03718             Assert.fail(e.toString());
03719         }
03720         System.out.println(cycAccess.getCycConnection().connectionInfo());
03721         //cycAccess.traceOn();
03722         doTestCycAccess9(cycAccess);
03723 
03724         cycAccess.close();
03725         System.out.println("**** testBinaryCycAccess 9 OK ****");
03726     }
03727 
03728     /**
03729      * Tests a portion of the CycAccess methods using the given api connection.
03730      */
03731     protected void doTestCycAccess9 (CycAccess cycAccess) {
03732         long startMilliseconds = System.currentTimeMillis();
03733         try {
03734 
03735             CycConstant brazil = cycAccess.getKnownConstantByGuid("bd588f01-9c29-11b1-9dad-c379636f7270");
03736             CycConstant country = cycAccess.getKnownConstantByGuid("bd588879-9c29-11b1-9dad-c379636f7270");
03737             CycConstant worldGeographyMt = cycAccess.getKnownConstantByGuid("bfaac020-9c29-11b1-9dad-c379636f7270");
03738             CycConstant dog =
03739                 cycAccess.getKnownConstantByGuid("bd58daa0-9c29-11b1-9dad-c379636f7270");
03740             CycConstant animal =
03741                 cycAccess.getKnownConstantByGuid("bd58b031-9c29-11b1-9dad-c379636f7270");
03742             CycConstant biologyVocabularyMt =
03743                 cycAccess.getKnownConstantByGuid("bdd51776-9c29-11b1-9dad-c379636f7270");
03744             CycConstant performedBy =
03745                 cycAccess.getKnownConstantByGuid("bd58a962-9c29-11b1-9dad-c379636f7270");
03746             CycConstant doneBy =
03747                 cycAccess.getKnownConstantByGuid("c0fd4798-9c29-11b1-9dad-c379636f7270");
03748             CycConstant siblings =
03749                 cycAccess.getKnownConstantByGuid("bd58e3e9-9c29-11b1-9dad-c379636f7270");
03750             CycConstant generalLexiconMt =
03751                 cycAccess.getKnownConstantByGuid("c109b867-9c29-11b1-9dad-c379636f7270");
03752             CycConstant paraphraseMt =
03753                 cycAccess.getKnownConstantByGuid("bf3ab672-9c29-11b1-9dad-c379636f7270");
03754 
03755             // isa
03756             Assert.assertTrue(cycAccess.isa(brazil, country, worldGeographyMt));
03757             Assert.assertTrue(cycAccess.isa(brazil, country));
03758 
03759             // isGenlOf
03760             Assert.assertTrue(cycAccess.isGenlOf(animal, dog, biologyVocabularyMt));
03761             Assert.assertTrue(cycAccess.isGenlOf(animal, dog));
03762 
03763             // isGenlPredOf
03764             Assert.assertTrue(cycAccess.isGenlPredOf(doneBy, performedBy, cycAccess.baseKB));
03765             Assert.assertTrue(cycAccess.isGenlPredOf(doneBy, performedBy));
03766 
03767             // isGenlInverseOf
03768             Assert.assertTrue(cycAccess.isGenlInverseOf(siblings, siblings, biologyVocabularyMt));
03769             Assert.assertTrue(cycAccess.isGenlInverseOf(siblings, siblings));
03770 
03771             // isGenlMtOf
03772             Assert.assertTrue(cycAccess.isGenlMtOf(cycAccess.baseKB, biologyVocabularyMt));
03773 
03774             // getAllInstancesHashSet
03775             HashSet allCountries = cycAccess.getAllInstancesHashSet(country, worldGeographyMt);
03776             Assert.assertTrue(allCountries instanceof HashSet);
03777             Assert.assertTrue(allCountries.contains(brazil));
03778             allCountries = cycAccess.getAllInstancesHashSet(country);
03779             Assert.assertTrue(allCountries instanceof HashSet);
03780             Assert.assertTrue(allCountries.contains(brazil));
03781 
03782             // getAllSpecsHashSet
03783             HashSet allAnimals = cycAccess.getAllSpecsHashSet(animal, biologyVocabularyMt);
03784             Assert.assertTrue(allAnimals instanceof HashSet);
03785             Assert.assertTrue(allAnimals.contains(dog));
03786             allAnimals = cycAccess.getAllSpecsHashSet(animal);
03787             Assert.assertTrue(allAnimals instanceof HashSet);
03788             Assert.assertTrue(allAnimals.contains(dog));
03789 
03790             // getAllSpecPredsHashSet
03791             HashSet allDoers = cycAccess.getAllSpecPredsHashSet(doneBy, cycAccess.baseKB);
03792             Assert.assertTrue(allDoers instanceof HashSet);
03793             Assert.assertTrue(allDoers.contains(performedBy));
03794             allDoers = cycAccess.getAllSpecPredsHashSet(doneBy);
03795             Assert.assertTrue(allDoers instanceof HashSet);
03796             Assert.assertTrue(allDoers.contains(performedBy));
03797 
03798             // getAllSpecInversesHashSet
03799             HashSet allSpecInverses = cycAccess.getAllSpecInversesHashSet(siblings, biologyVocabularyMt);
03800             Assert.assertTrue(allSpecInverses instanceof HashSet);
03801             Assert.assertTrue(allSpecInverses.contains(siblings));
03802             allSpecInverses = cycAccess.getAllSpecInversesHashSet(siblings);
03803             Assert.assertTrue(allSpecInverses instanceof HashSet);
03804             Assert.assertTrue(allSpecInverses.contains(siblings));
03805 
03806             // getAllSpecMtsHashSet
03807             HashSet allSpecMts = cycAccess.getAllSpecMtsHashSet(generalLexiconMt);
03808             Assert.assertTrue(allSpecMts instanceof HashSet);
03809             Assert.assertTrue(allSpecMts.contains(paraphraseMt));
03810 
03811             /*
03812             // tests proper receipt of narts from the server.
03813             String script = "(csetq all-narts nil)";
03814             cycAccess.converseVoid(script);
03815             script = "(progn \n" +
03816                      "  (do-narts (nart) \n" +
03817                      "    (cpush nart all-narts)) \n" +
03818                      "  nil)";
03819             cycAccess.converseVoid(script);
03820             script = "(clet (nart) \n" +
03821                      "  (csetq nart (first all-narts)) \n" +
03822                      "  (csetq all-narts (rest all-narts)) \n" +
03823                      "  nart)";
03824             long numberGood = 0;
03825             long numberNil = 0;
03826             while (true) {
03827                 Object obj = cycAccess.converseObject(script);
03828                 if (obj.equals(CycObjectFactory.nil))
03829                     break;
03830                 Assert.assertTrue(obj instanceof CycNart);
03831                 CycNart cycNart = (CycNart) obj;
03832                 Assert.assertTrue(cycNart.cyclify() instanceof String);
03833                 String script2 = "(find-nart " + cycNart.stringApiValue() + ")";
03834                 Object obj2 = cycAccess.converseObject(script2);
03835                 if (cycNart.equals(obj))
03836                     numberGood++;
03837                 else
03838                     numberNil++;
03839             }
03840             Assert.assertTrue(numberGood > 20 * numberNil);
03841             script = "(csetq all-narts nil)";
03842             cycAccess.converseVoid(script);
03843             */
03844         }
03845         catch (Exception e) {
03846             CycAccess.current().close();
03847             e.printStackTrace();
03848             Assert.fail(e.toString());
03849         }
03850 
03851 
03852         long endMilliseconds = System.currentTimeMillis();
03853         System.out.println("  " + (endMilliseconds - startMilliseconds) + " milliseconds");
03854     }
03855 
03856     /**
03857      * Tests a portion of the CycAccess methods using the ascii api connection.
03858      */
03859     public void testAsciiCycAccess10 () {
03860         if (performOnlyBinaryApiModeTests ||
03861             (connectionMode == REMOTE_CYC_CONNECTION))
03862             return;
03863         System.out.println("\n**** testAsciiCycAccess 10 ****");
03864         CycAccess cycAccess = null;
03865         try {
03866 
03867             cycAccess = new CycAccess(CycConnection.DEFAULT_HOSTNAME,
03868                                       CycConnection.DEFAULT_BASE_PORT,
03869                                       CycConnection.ASCII_MODE,
03870                                       CycAccess.PERSISTENT_CONNECTION);
03871         }
03872         catch (Exception e) {
03873             Assert.fail(e.toString());
03874         }
03875 
03876         System.out.println(cycAccess.getCycConnection().connectionInfo());
03877         //cycAccess.traceOn();
03878         doTestCycAccess10(cycAccess);
03879 
03880         cycAccess.close();
03881         System.out.println("**** testAsciiCycAccess 10 OK ****");
03882     }
03883 
03884 
03885     /**
03886      * Tests a portion of the CycAccess methods using the binary api connection.
03887      */
03888     public void testBinaryCycAccess10 () {
03889         System.out.println("\n**** testBinaryCycAccess 10 ****");
03890         CycAccess cycAccess = null;
03891         try {
03892             if (connectionMode == LOCAL_CYC_CONNECTION)
03893                 cycAccess = new CycAccess(CycConnection.DEFAULT_HOSTNAME,
03894                                           CycConnection.DEFAULT_BASE_PORT,
03895                                           CycConnection.BINARY_MODE,
03896                                           CycAccess.PERSISTENT_CONNECTION,
03897                                           CycConnection.CONCURRENT_MESSAGING_MODE);
03898             else if (connectionMode == REMOTE_CYC_CONNECTION)
03899                 cycAccess = new CycAccess(myAgentName, cycProxyAgentName, agentCommunity);
03900             else
03901                 Assert.fail("Invalid connection mode " + connectionMode);
03902         }
03903         catch (Exception e) {
03904             Assert.fail(e.toString());
03905         }
03906         System.out.println(cycAccess.getCycConnection().connectionInfo());
03907         //cycAccess.traceOn();
03908         doTestCycAccess10(cycAccess);
03909 
03910         cycAccess.close();
03911         System.out.println("**** testBinaryCycAccess 10 OK ****");
03912     }
03913 
03914     /**
03915      * Tests a portion of the CycAccess methods using the given api connection.
03916      */
03917     protected void doTestCycAccess10 (CycAccess cycAccess) {
03918         long startMilliseconds = System.currentTimeMillis();
03919         try {
03920             // demonstrate quoted strings
03921             CycList cycList53 = cycAccess.makeCycList("(\"abc\")");
03922             Assert.assertEquals(1, cycAccess.converseInt("(length '" + cycList53.cycListApiValue() + ")"));
03923             Assert.assertEquals(3, cycAccess.converseInt("(length (first '" + cycList53.cycListApiValue() + "))"));
03924             String string = "abc";
03925             CycList cycList54 = new CycList();
03926             cycList54.add(CycObjectFactory.makeCycSymbol("length"));
03927             cycList54.add(string);
03928             Assert.assertEquals(3, cycAccess.converseInt(cycList54));
03929             String quotedString = "\"abc\" def";
03930             CycList cycList55 = new CycList();
03931             cycList55.add(CycObjectFactory.makeCycSymbol("length"));
03932             cycList55.add(quotedString);
03933             // Note that in binary mode, that Cyc's cfasl input will insert the required escape
03934             // chars for embedded quotes.
03935             // And in ascii mode note that CycConnection will insert the required escape
03936             // chars for embedded quotes.
03937             Assert.assertEquals(9, cycAccess.converseInt(cycList55));
03938 
03939             // demonstrate quoted strings with the CycListParser
03940             CycList cycList56 = cycAccess.makeCycList("(\"" + string + "\")");
03941             Assert.assertEquals(1, cycAccess.converseInt("(length '" + cycList56.stringApiValue() + ")"));
03942             Assert.assertEquals(3, cycAccess.converseInt("(length (first '" + cycList56.stringApiValue() + "))"));
03943             String embeddedQuotesString = "(" + "\"\\\"abc\\\" def\"" + ")";
03944             CycList cycList57 = cycAccess.makeCycList(embeddedQuotesString);
03945             String script = "(length '" + cycList57.stringApiValue() + ")";
03946             int actualLen = cycAccess.converseInt(script);
03947             Assert.assertEquals(1, actualLen);
03948             Assert.assertEquals(9, cycAccess.converseInt("(length (first '" + cycList57.stringApiValue() + "))"));
03949 
03950             script = "(identity '(#$givenNames #$Guest \"\\\"The\\\" Guest\"))";
03951             CycList answer = cycAccess.converseList(script);
03952             Object third = answer.third();
03953             Assert.assertTrue(third instanceof String);
03954             Assert.assertEquals(11, ((String) third).length());
03955 
03956             // isFormulaWellFormed
03957             CycList formula1 =
03958                 cycAccess.makeCycList("(#$isa #$Brazil #$IndependentCountry)");
03959             CycConstant mt = cycAccess.getKnownConstantByName("WorldPoliticalGeographyDataVocabularyMt");
03960             Assert.assertTrue(cycAccess.isFormulaWellFormed(formula1, mt));
03961             CycList formula2 =
03962                 cycAccess.makeCycList("(#$genls #$Brazil #$Collection)");
03963             Assert.assertTrue(! cycAccess.isFormulaWellFormed(formula2, mt));
03964 
03965             // isCycLNonAtomicReifableTerm
03966             CycList formula3 =
03967                 cycAccess.makeCycList("(#$TheCovering #$Watercraft-Surface #$Watercraft-Subsurface)");
03968             Assert.assertTrue(cycAccess.isCycLNonAtomicReifableTerm(formula3));
03969             CycList formula4 = cycAccess.makeCycList("(#$isa #$Plant #$Animal)");
03970             Assert.assertTrue(! cycAccess.isCycLNonAtomicReifableTerm(formula4));
03971             CycList formula5 = cycAccess.makeCycList("(#$PlusFn 1)");
03972             Assert.assertTrue(! cycAccess.isCycLNonAtomicReifableTerm(formula5));
03973 
03974             // isCycLNonAtomicUnreifableTerm
03975             CycList formula6 =
03976                 cycAccess.makeCycList("(#$TheCovering #$Watercraft-Surface #$Watercraft-Subsurface)");
03977             Assert.assertTrue(! cycAccess.isCycLNonAtomicUnreifableTerm(formula6));
03978             CycList formula7 = cycAccess.makeCycList("(#$isa #$Plant #$Animal)");
03979             Assert.assertTrue(! cycAccess.isCycLNonAtomicUnreifableTerm(formula7));
03980             CycList formula8 = cycAccess.makeCycList("(#$PlusFn 1)");
03981             Assert.assertTrue(cycAccess.isCycLNonAtomicUnreifableTerm(formula8));
03982         }
03983         catch (Exception e) {
03984             CycAccess.current().close();
03985             e.printStackTrace();
03986             Assert.fail(e.toString());
03987         }
03988 
03989 
03990         long endMilliseconds = System.currentTimeMillis();
03991         System.out.println("  " + (endMilliseconds - startMilliseconds) + " milliseconds");
03992     }
03993 
03994     /**
03995      * Tests a portion of the CycAccess methods using the binary api connection.
03996      */
03997     public void testBinaryCycAccess11 () {
03998         System.out.println("\n**** testBinaryCycAccess 11 ****");
03999         CycObjectFactory.resetCaches();
04000         CycAccess cycAccess = null;
04001         try {
04002             if (connectionMode == LOCAL_CYC_CONNECTION)
04003                 cycAccess = new CycAccess(CycConnection.DEFAULT_HOSTNAME,
04004                                           CycConnection.DEFAULT_BASE_PORT,
04005                                           CycConnection.BINARY_MODE,
04006                                           CycAccess.PERSISTENT_CONNECTION,
04007                                           CycConnection.CONCURRENT_MESSAGING_MODE);
04008             else if (connectionMode == REMOTE_CYC_CONNECTION)
04009                 cycAccess = new CycAccess(myAgentName, cycProxyAgentName, agentCommunity);
04010             else
04011                 Assert.fail("Invalid connection mode " + connectionMode);
04012         }
04013         catch (Exception e) {
04014             e.printStackTrace();
04015             Assert.fail(e.toString());
04016         }
04017         //cycAccess.traceOnDetailed();
04018         doTestCycAccess11(cycAccess);
04019 
04020         cycAccess.close();
04021         System.out.println("**** testBinaryCycAccess 11 OK ****");
04022     }
04023 
04024     /**
04025      * Tests a portion of the CycAccess methods using the given api connection.
04026      */
04027     protected void doTestCycAccess11 (CycAccess cycAccess) {
04028         long startMilliseconds = System.currentTimeMillis();
04029         try {
04030             String script = "(+ 1 2)";
04031             int answer = cycAccess.converseInt(script);
04032             Assert.assertEquals(3, answer);
04033         }
04034         catch (Exception e) {
04035             CycAccess.current().close();
04036             e.printStackTrace();
04037             Assert.fail(e.toString());
04038         }
04039         System.out.println("Concurrent API requests.");
04040         ArrayList apiRequestors = new ArrayList();
04041 
04042         ApiRequestor apiRequestor = new ApiRequestor("Long",
04043                                                      1,
04044                                                      "60000000",
04045                                                      cycAccess);
04046         apiRequestor.start();
04047         apiRequestors.add(apiRequestor);
04048 
04049         apiRequestor = new ApiRequestor("Short1",
04050                                         4,
04051                                         "700000",
04052                                         cycAccess);
04053         apiRequestor.start();
04054         apiRequestors.add(apiRequestor);
04055 
04056         apiRequestor = new ApiRequestor("Short2",
04057                                         4,
04058                                         "700000",
04059                                         cycAccess);
04060         apiRequestor.start();
04061         apiRequestors.add(apiRequestor);
04062 
04063         apiRequestor = new ApiRequestor("Short3",
04064                                         4,
04065                                         "700000",
04066                                         cycAccess);
04067         apiRequestor.start();
04068         apiRequestors.add(apiRequestor);
04069 
04070         apiRequestor = new ApiRequestor("Short4",
04071                                         4,
04072                                         "700000",
04073                                         cycAccess);
04074         apiRequestor.start();
04075         apiRequestors.add(apiRequestor);
04076 
04077         apiRequestor = new ApiRequestor("Short5",
04078                                         4,
04079                                         "700000",
04080                                         cycAccess);
04081         apiRequestor.start();
04082         apiRequestors.add(apiRequestor);
04083 
04084         apiRequestor = new ApiRequestor("Short6",
04085                                         4,
04086                                         "700000",
04087                                         cycAccess);
04088         apiRequestor.start();
04089         apiRequestors.add(apiRequestor);
04090 
04091         apiRequestor = new ApiRequestor("Short7",
04092                                         4,
04093                                         "700000",
04094                                         cycAccess);
04095         apiRequestor.start();
04096         apiRequestors.add(apiRequestor);
04097 
04098         apiRequestor = new ApiRequestor("Short8",
04099                                         4,
04100                                         "700000",
04101                                         cycAccess);
04102         apiRequestor.start();
04103         apiRequestors.add(apiRequestor);
04104 
04105         while (true) {
04106             boolean apiRequestorTheadRunning = false;
04107             try {
04108                 Thread.sleep(3000);
04109             }
04110             catch (InterruptedException e) {
04111                 break;
04112             }
04113             for (int i = 0; i < apiRequestors.size(); i++) {
04114                 apiRequestor = (ApiRequestor) apiRequestors.get(i);
04115                 if (! apiRequestor.done) {
04116                     apiRequestorTheadRunning = true;
04117                     System.out.println("  " + apiRequestor.name + " is still running");
04118                     break;
04119                     }
04120             }
04121             if (! apiRequestorTheadRunning)
04122                 break;
04123         }
04124         long endMilliseconds = System.currentTimeMillis();
04125         System.out.println("  " + (endMilliseconds - startMilliseconds) + " milliseconds");
04126     }
04127 
04128     /**
04129      * Class ApiRequestor.
04130      */
04131     protected class ApiRequestor extends Thread {
04132 
04133 
04134         private CycAccess cycAccess;
04135         public String name;
04136         private int repeatCount;
04137         private String durationFactor;
04138         public boolean done = false;
04139 
04140         /**
04141          * Constructs a ApiRequestor object.
04142          */
04143         public ApiRequestor(String name,
04144                             int repeatCount,
04145                             String durationFactor,
04146                             CycAccess cycAccess) {
04147             this.name = name;
04148             this.repeatCount = repeatCount;
04149             this.durationFactor = durationFactor;
04150             this.cycAccess = cycAccess;
04151         }
04152 
04153         /**
04154          * Makes some API requests.
04155          */
04156         public void run() {
04157             System.out.println("ApiRequestor " + name + " starting.");
04158             try {
04159                 for (int i = 0; i < repeatCount; i++) {
04160                     String testPhrase = name + "-" +Integer.toString(i + 1);
04161                     String script = "(progn (cdotimes (x " + durationFactor + "))\n" +
04162                                     " \"" + testPhrase + "\")";
04163                     String answer = cycAccess.converseString(script);
04164                     System.out.println(name + " iteration " + answer + " done.");
04165                     if (! answer.equals(testPhrase))
04166                         throw new RuntimeException(testPhrase + " not equal to " + answer);
04167                 }
04168 
04169             }
04170             catch (Exception e) {
04171                 e.printStackTrace();
04172                 return;
04173             }
04174             System.out.println("ApiRequestor " + name + " done.");
04175             done = true;
04176         }
04177     }
04178 
04179     /**
04180      * Tests a portion of the CycAccess methods using the binary api connection.
04181      */
04182     public void testBinaryCycAccess12 () {
04183         System.out.println("\n**** testBinaryCycAccess 12 ****");
04184         CycAccess cycAccess = null;
04185         try {
04186             if (connectionMode == LOCAL_CYC_CONNECTION)
04187                 cycAccess = new CycAccess(CycConnection.DEFAULT_HOSTNAME,
04188                                           CycConnection.DEFAULT_BASE_PORT,
04189                                           CycConnection.BINARY_MODE,
04190                                           CycAccess.PERSISTENT_CONNECTION,
04191                                           CycConnection.DEFAULT_MESSAGING_MODE);
04192             else if (connectionMode == REMOTE_CYC_CONNECTION)
04193                 cycAccess = new CycAccess(myAgentName, cycProxyAgentName, agentCommunity);
04194             else
04195                 Assert.fail("Invalid connection mode " + connectionMode);
04196         }
04197         catch (Exception e) {
04198             CycAccess.current().close();
04199             Assert.fail(e.toString());
04200         }
04201         doTestCycAccess12(cycAccess);
04202 
04203         cycAccess.close();
04204         System.out.println("**** testBinaryCycAccess 12 OK ****");
04205     }
04206 
04207     /**
04208      * Tests a portion of the CycAccess methods using the given api connection.
04209      */
04210     protected void doTestCycAccess12 (CycAccess cycAccess) {
04211         long startMilliseconds = System.currentTimeMillis();
04212         try {
04213             //cycAccess.traceOn();
04214             String utf8String = "ABCdef";
04215             Assert.assertEquals(utf8String, cycAccess.converseString("(identity \"" + utf8String + "\")"));
04216 
04217             InputStreamReader inputStreamReader = null;
04218             try {
04219                 inputStreamReader =
04220                     new InputStreamReader(
04221                         new FileInputStream(
04222                             new File("utf8-sample.html")), "UTF-8");
04223             }
04224             catch (IOException e) {
04225                 return;
04226             }
04227             StringBuffer utf8StringBuffer = new StringBuffer();
04228             while (true) {
04229                 int ch = inputStreamReader.read();
04230                 if (ch == -1)
04231                     break;
04232                 if (ch == '\n' ||
04233                     ch == '\r')
04234                     utf8StringBuffer.append(' ');
04235                 else
04236                     utf8StringBuffer.append((char) ch);
04237             }
04238             utf8String = utf8StringBuffer.toString();
04239 
04240             PrintWriter utf8Output =
04241                 new PrintWriter(
04242                     new OutputStreamWriter(
04243                         new FileOutputStream("utf8-sample-without-newlines.html"), "UTF8"));
04244             utf8Output.print(utf8String);
04245             utf8Output.close();
04246 
04247             String escapedUtf8String = StringUtils.escapeDoubleQuotes(utf8String);
04248 
04249             CycList command = new CycList();
04250             command.add(CycObjectFactory.makeCycSymbol("identity"));
04251             command.add(escapedUtf8String);
04252             String echoUtf8Sting = cycAccess.converseString(command);
04253 
04254             utf8Output =
04255                 new PrintWriter(
04256                     new OutputStreamWriter(
04257                         new FileOutputStream("utf8-sample-from-cyc.html"), "UTF8"));
04258             utf8Output.print(utf8String);
04259             utf8Output.close();
04260 
04261             System.out.println("utf8String\n" + utf8String);
04262             System.out.println("escapedUtf8String\n" + escapedUtf8String);
04263             System.out.println("echoUtf8Sting\n" + echoUtf8Sting);
04264             Assert.assertEquals(escapedUtf8String, echoUtf8Sting);
04265 
04266 
04267             CycFort myTerm = cycAccess.getConstantByName("my-term");
04268             if (myTerm != null)
04269                 cycAccess.kill(myTerm);
04270             myTerm = cycAccess.findOrCreate("my-term");
04271             cycAccess.assertComment(myTerm, escapedUtf8String, cycAccess.baseKB);
04272 
04273 
04274 
04275 
04276         }
04277         catch (Exception e) {
04278             CycAccess.current().close();
04279             e.printStackTrace();
04280             Assert.fail(e.toString());
04281         }
04282     }
04283 
04284     /**
04285      * Tests a portion of the CycAccess methods using the binary api connection.
04286      */
04287     public void testBinaryCycAccess13 () {
04288         System.out.println("\n**** testBinaryCycAccess 13 ****");
04289         CycAccess cycAccess = null;
04290         try {
04291             if (connectionMode == LOCAL_CYC_CONNECTION)
04292                 cycAccess = new CycAccess(CycConnection.DEFAULT_HOSTNAME,
04293                                           CycConnection.DEFAULT_BASE_PORT,
04294                                           CycConnection.BINARY_MODE,
04295                                           CycAccess.PERSISTENT_CONNECTION,
04296                                           CycConnection.DEFAULT_MESSAGING_MODE);
04297             else if (connectionMode == REMOTE_CYC_CONNECTION)
04298                 cycAccess = new CycAccess(myAgentName, cycProxyAgentName, agentCommunity);
04299             else
04300                 Assert.fail("Invalid connection mode " + connectionMode);
04301         }
04302         catch (Exception e) {
04303             CycAccess.current().close();
04304             Assert.fail(e.toString());
04305         }
04306         try {
04307             cycAccess.traceOn();
04308             Object answer =
04309                 cycAccess.converseObject(
04310                 "(generate-phrase-for-java " +
04311                 "  (nart-substitute '(#$isa #$AtlanticOcean #$BodyOfWater)) " +
04312                 "  :any " +
04313                 "  :declarative " +
04314                 "  #$RKF-GenerationInteractionContext " +
04315                 "  #$RKF-InteractionContext)");
04316         }
04317         catch (Exception e) {
04318             e.printStackTrace();
04319             Assert.fail();
04320 
04321         }
04322         cycAccess.close();
04323         System.out.println("**** testBinaryCycAccess 13 OK ****");
04324     }
04325 
04326 
04327 
04328 
04329 
04330 }
04331 
04332 
04333 
04334 
04335 

Generated on Sat Sep 3 23:03:26 2005 for JCalculator 0.1b by  doxygen 1.4.4