Exemple #1
0
 private void evaluate_click(object sender, System.EventArgs e)
 {
     try
     {
         Bindings bindings = new Bindings().bind("E", textBox1.Text + '.');
         session.connect();  /* This will connect if neccessary. */
         QueryAnswer answer = session.executeQuery("evaluate(E,R)", bindings);
         PBTerm      result = answer.getValue("R");
         if (result != null)
         {
             textBox2.AppendText(textBox1.Text + " = " + result + Environment.NewLine);
             textBox1.Clear();
         }
         else
         {
             textBox2.AppendText("Error: " + answer.getError() + Environment.NewLine);
         }
     }
     catch (System.Exception ex)
     {
         textBox2.AppendText("Error when querying Prolog Server: " + ex.Message + Environment.NewLine);
         Console.Error.WriteLine(ex);
         Console.Error.Write(ex.StackTrace);
         Console.Error.Flush();
     }
 }
    public static void Main(System.String[] args)
    {
        // Startup the prolog and show its err output!
          int test = 1;
          PrologSession session = null;
          PBTest evalTest = new PBTest();
          evalTest.prolog = args[0];

          try
        {
        //	  SupportClass.ThreadClass t = new SupportClass.ThreadClass(new ThreadStart(evalTest.Run));
          Thread t = new Thread(new ThreadStart(evalTest.Run));
          t.IsBackground = true;
          t.Start();

          // Get the port from the SICStus process (and fail if port is an error value)
          int port = evalTest.Port;
          if (port <= 0)
        {
          evalTest.fail("could not start sicstus", test);
        }

          session = new PrologSession();
        System.Console.Error.WriteLine("DBG: setting port; port==" + port);
        //	  session.Port = port;		// PrologBeans.NET.c# -version
          session.setPort(port);	// PrologBeans.NET.j# -version

          {
        System.Console.Error.WriteLine("DBG: setting timeout=0");
        //	    session.Timeout = 0; 	// PrologBeans.NET.c# -version
        session.setTimeout(0); 	// PrologBeans.NET.j# -version
          }

          // Test 1. - evaluation!
          Bindings bindings = new Bindings().bind("E", "10+20.");
          session.connect();	/* This will connect if neccessary. */
          QueryAnswer answer = session.executeQuery("evaluate(E,R)", bindings);
          PBTerm result = answer.getValue("R");
          if (result != null)
        {
          if (result.intValue() == 30)
        {
          success("10+20=" + result, test++);
        }
          else
        {
          evalTest.fail("Execution failed: " + result, test);
        }
        }
          else
        {
          evalTest.fail("Error " + answer.getError(), test);
        }

          // Test 2 - list reverse!
          bindings = new Bindings().bind("E", "reverse");
          answer = session.executeQuery("reverse(E,R)", bindings);
          result = answer.getValue("R");
          if (result != null)
        {
        //	      if ("esrever".Equals(result.ToString()))
        if (listcompare(result,"esrever"))
        {
          success("rev(reverse) -> " + result, test++);
        }
          else
        {
          evalTest.fail("Execution failed: " + result, test);
        }
        }
          else
        {
          evalTest.fail("Error " + answer.getError(), test);
        }

          // Test 2b - SPRM 13863 transfer lists of small integers
          PBTerm NIL = PBTerm.makeAtom("[]");
          PBTerm eTerm = PBTerm.makeTerm(PBTerm.makeTerm((int)127), PBTerm.makeTerm(PBTerm.makeTerm((int)128), PBTerm.makeTerm(PBTerm.makeTerm((int)129), NIL)));
          PBTerm rTerm = PBTerm.makeTerm(PBTerm.makeTerm((int)129), PBTerm.makeTerm(PBTerm.makeTerm((int)128), PBTerm.makeTerm(PBTerm.makeTerm((int)127), NIL)));
          bindings = new Bindings().bind("E", eTerm);
          answer = session.executeQuery("reverse(E,R)", bindings);
          result = answer.getValue("R");
          if (result != null) {
        if (listcompare(result,rTerm)) {
          success("rev(" + eTerm + ") -> " + result, test++);
        } else {
          evalTest.fail("Execution failed: " + "rev(" + eTerm + ") -> " + result, test);
        }
          } else {
        evalTest.fail("Error " + answer.getError(), test);
          }

          // Test 3 - show developers
          // [PD] 3.12.3 Test non-ascii character in query name
          answer = session.executeQuery("devel\x00f6pers(Dev)");
          result = answer.getValue("Dev");
          if (result != null)
        {
        //		if (result.ProperList)     // PrologBeans.NET.c# -version
        if (result.isProperList()) // PrologBeans.NET.j# -version
        {
          PBTerm list = result;
          if (list.length() == 4 &&
              "Joakim".Equals(list.head().ToString()) &&
              "Niclas".Equals(list.tail().head().ToString()) &&
              "Per".Equals(list.tail().tail().head().ToString()) &&
        // [PD] 3.12.2 Do not use non-ASCII literals
        //		      "едц≈ƒ÷".Equals(list.getTermAt(4).ToString()))
          "\u00e5\u00e4\u00f6\u00c5\u00c4\u00d6".Equals(list.tail().tail().tail().head().ToString())) {
          // [PD] 3.12.3 Test non-ascii character in query name
              success("devel\x00f6pers -> " + result, test++);
            }
          else
            {
              evalTest.fail("Execution failed: " + result, test);
            }
        }
          else
        {
          evalTest.fail("Execution failed: " + result, test);
        }
        }
          else
        {
          evalTest.fail("Error " + answer.getError(), test);
        }

          // Test 4 - send and receive a complex string-list
          String str = "foo\u1267bar";
          bindings = new Bindings().bind("L1", str);
          answer = session.executeQuery("send_receive(L1,L2)", bindings);
          result = answer.getValue("L2");
          if( result != null) {
        //	    if (((PBString)result).equals(str)) {
        if (listcompare(result, str)) {
          success("send_receive(" + str + ") -> " + result, test++);
        } else {
          evalTest.fail("Execution failed: " + result, test);
        }
          } else {
        evalTest.fail("Error " + answer.getError(), test);
          }

          // Test 5 - send and receive a very large atom
          int stringLength = 100000;
          String longStr = new String('x', stringLength);
          bindings = new Bindings().bind("L1", longStr);
          answer = session.executeQuery("send_receive(L1,L2)", bindings);
          result = answer.getValue("L2");
          if( result != null) {
        if (result.getString().Equals(longStr)) {
          success("OK (" + stringLength + " characters)", test++);
        } else {
          evalTest.fail("Execution failed: " + stringLength + " characters",
                test);
        }
          } else {
        evalTest.fail("Error " + answer.getError() + ", " + stringLength
              + " characters", test);
          }

          // Test 6. Attributed variables
          bindings = new Bindings();
          bindings.bind("N",1);
          bindings.bind("M",5);
          answer = session.executeQuery("newVar(X,N,M)",bindings);
          result = answer.getValue("X");
          if( result != null) {
          if (result.isVariable()) {
              success("OK", test++);
          } else {
              evalTest.fail("Execution failed: " + stringLength + " characters", test);
          }
          } else {
          evalTest.fail("Error " + answer.getError() + ", " + stringLength
               + " characters", test);
          }

          // Test 7. shutdown server...
          session.executeQuery("shutdown");
          if (!evalTest.waitForShutdown())
        {
          evalTest.fail("shutdown", test++);
        }
          else
        {
          success("shutdown", test++);
        }
        }
          catch (System.Exception e)
        {
          if (error == 0)
        {
          Console.Error.WriteLine("PBTest.Main caught an exception.");
          System.Console.Error.WriteLine(e);
        //	      SupportClass.WriteStackTrace(e, Console.Error);
              Console.Error.WriteLine(e.ToString());
          Console.Error.Flush();
          evalTest.fail("Exception " + e.Message, test);
        }
        }
          finally
        {
          if (session != null)
        {
          session.disconnect();
        }
          evalTest.shutdown();
          System.Environment.Exit(error);
        }
    }
Exemple #3
0
    public static void  Main(System.String[] args)
    {
        // Startup the prolog and show its err output!
        int           test     = 1;
        PrologSession session  = null;
        PBTest        evalTest = new PBTest();

        evalTest.prolog = args[0];

        try
        {
//	  SupportClass.ThreadClass t = new SupportClass.ThreadClass(new ThreadStart(evalTest.Run));
            Thread t = new Thread(new ThreadStart(evalTest.Run));
            t.IsBackground = true;
            t.Start();

            // Get the port from the SICStus process (and fail if port is an error value)
            int port = evalTest.Port;
            if (port <= 0)
            {
                evalTest.fail("could not start sicstus", test);
            }

            session = new PrologSession();
            System.Console.Error.WriteLine("DBG: setting port; port==" + port);
//	  session.Port = port;		// PrologBeans.NET.c# -version
            session.setPort(port);      // PrologBeans.NET.j# -version

            {
                System.Console.Error.WriteLine("DBG: setting timeout=0");
//	    session.Timeout = 0;    // PrologBeans.NET.c# -version
                session.setTimeout(0);  // PrologBeans.NET.j# -version
            }

            // Test 1. - evaluation!
            Bindings bindings = new Bindings().bind("E", "10+20.");
            session.connect();  /* This will connect if neccessary. */
            QueryAnswer answer = session.executeQuery("evaluate(E,R)", bindings);
            PBTerm      result = answer.getValue("R");
            if (result != null)
            {
                if (result.intValue() == 30)
                {
                    success("10+20=" + result, test++);
                }
                else
                {
                    evalTest.fail("Execution failed: " + result, test);
                }
            }
            else
            {
                evalTest.fail("Error " + answer.getError(), test);
            }

            // Test 2 - list reverse!
            bindings = new Bindings().bind("E", "reverse");
            answer   = session.executeQuery("reverse(E,R)", bindings);
            result   = answer.getValue("R");
            if (result != null)
            {
//	      if ("esrever".Equals(result.ToString()))
                if (listcompare(result, "esrever"))
                {
                    success("rev(reverse) -> " + result, test++);
                }
                else
                {
                    evalTest.fail("Execution failed: " + result, test);
                }
            }
            else
            {
                evalTest.fail("Error " + answer.getError(), test);
            }

            // Test 2b - SPRM 13863 transfer lists of small integers
            PBTerm NIL   = PBTerm.makeAtom("[]");
            PBTerm eTerm = PBTerm.makeTerm(PBTerm.makeTerm((int)127), PBTerm.makeTerm(PBTerm.makeTerm((int)128), PBTerm.makeTerm(PBTerm.makeTerm((int)129), NIL)));
            PBTerm rTerm = PBTerm.makeTerm(PBTerm.makeTerm((int)129), PBTerm.makeTerm(PBTerm.makeTerm((int)128), PBTerm.makeTerm(PBTerm.makeTerm((int)127), NIL)));
            bindings = new Bindings().bind("E", eTerm);
            answer   = session.executeQuery("reverse(E,R)", bindings);
            result   = answer.getValue("R");
            if (result != null)
            {
                if (listcompare(result, rTerm))
                {
                    success("rev(" + eTerm + ") -> " + result, test++);
                }
                else
                {
                    evalTest.fail("Execution failed: " + "rev(" + eTerm + ") -> " + result, test);
                }
            }
            else
            {
                evalTest.fail("Error " + answer.getError(), test);
            }



            // Test 3 - show developers
            // [PD] 3.12.3 Test non-ascii character in query name
            answer = session.executeQuery("devel\x00f6pers(Dev)");
            result = answer.getValue("Dev");
            if (result != null)
            {
//		if (result.ProperList)     // PrologBeans.NET.c# -version
                if (result.isProperList()) // PrologBeans.NET.j# -version
                {
                    PBTerm list = result;
                    if (list.length() == 4 &&
                        "Joakim".Equals(list.head().ToString()) &&
                        "Niclas".Equals(list.tail().head().ToString()) &&
                        "Per".Equals(list.tail().tail().head().ToString()) &&
// [PD] 3.12.2 Do not use non-ASCII literals
//		      "едц≈ƒ÷".Equals(list.getTermAt(4).ToString()))
                        "\u00e5\u00e4\u00f6\u00c5\u00c4\u00d6".Equals(list.tail().tail().tail().head().ToString()))
                    {
                        // [PD] 3.12.3 Test non-ascii character in query name
                        success("devel\x00f6pers -> " + result, test++);
                    }
                    else
                    {
                        evalTest.fail("Execution failed: " + result, test);
                    }
                }
                else
                {
                    evalTest.fail("Execution failed: " + result, test);
                }
            }
            else
            {
                evalTest.fail("Error " + answer.getError(), test);
            }

            // Test 4 - send and receive a complex string-list
            String str = "foo\u1267bar";
            bindings = new Bindings().bind("L1", str);
            answer   = session.executeQuery("send_receive(L1,L2)", bindings);
            result   = answer.getValue("L2");
            if (result != null)
            {
//	    if (((PBString)result).equals(str)) {
                if (listcompare(result, str))
                {
                    success("send_receive(" + str + ") -> " + result, test++);
                }
                else
                {
                    evalTest.fail("Execution failed: " + result, test);
                }
            }
            else
            {
                evalTest.fail("Error " + answer.getError(), test);
            }

            // Test 5 - send and receive a very large atom
            int    stringLength = 100000;
            String longStr      = new String('x', stringLength);
            bindings = new Bindings().bind("L1", longStr);
            answer   = session.executeQuery("send_receive(L1,L2)", bindings);
            result   = answer.getValue("L2");
            if (result != null)
            {
                if (result.getString().Equals(longStr))
                {
                    success("OK (" + stringLength + " characters)", test++);
                }
                else
                {
                    evalTest.fail("Execution failed: " + stringLength + " characters",
                                  test);
                }
            }
            else
            {
                evalTest.fail("Error " + answer.getError() + ", " + stringLength
                              + " characters", test);
            }

            // Test 6. Attributed variables
            bindings = new Bindings();
            bindings.bind("N", 1);
            bindings.bind("M", 5);
            answer = session.executeQuery("newVar(X,N,M)", bindings);
            result = answer.getValue("X");
            if (result != null)
            {
                if (result.isVariable())
                {
                    success("OK", test++);
                }
                else
                {
                    evalTest.fail("Execution failed: " + stringLength + " characters", test);
                }
            }
            else
            {
                evalTest.fail("Error " + answer.getError() + ", " + stringLength
                              + " characters", test);
            }

            // Test 7. shutdown server...
            session.executeQuery("shutdown");
            if (!evalTest.waitForShutdown())
            {
                evalTest.fail("shutdown", test++);
            }
            else
            {
                success("shutdown", test++);
            }
        }
        catch (System.Exception e)
        {
            if (error == 0)
            {
                Console.Error.WriteLine("PBTest.Main caught an exception.");
                System.Console.Error.WriteLine(e);
//	      SupportClass.WriteStackTrace(e, Console.Error);
                Console.Error.WriteLine(e.ToString());
                Console.Error.Flush();
                evalTest.fail("Exception " + e.Message, test);
            }
        }
        finally
        {
            if (session != null)
            {
                session.disconnect();
            }
            evalTest.shutdown();
            System.Environment.Exit(error);
        }
    }