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

📄 undeclare_t.java

📁 SRI international 发布的OAA框架软件
💻 JAVA
字号:
package com.sri.oaa2.test.lib;

import com.sri.oaa2.icl.IclTerm;
import com.sri.oaa2.icl.IclList;
import com.sri.oaa2.icl.IclStruct;
import com.sri.oaa2.icl.IclInt;
import com.sri.oaa2.icl.ToInt;
import com.sri.oaa2.icl.IclStr;
import com.sri.oaa2.agentlib.Agent;
import com.sri.oaa2.agentlib.AgentImpl;
import junit.framework.TestCase;
import junit.framework.TestSuite;
import junit.framework.Test;

/**
 * Undeclare_T tests oaaUndeclare.
 */
public class Undeclare_T extends TestCase {
    String userName;

    Agent newTestAgent() {
        return new AgentImpl() {
            public String getAgentCapabilities() {
                return Undeclare_T.this.getAgentCapabilities();
            }

            public String getAgentName() {
                return Undeclare_T.this.getAgentName();
            }

            public boolean oaaDoEventCallback(IclTerm goal,
                                              IclList params,
                                              IclList answers) {
                if (Undeclare_T.this.oaaDoEventCallback(goal, params, answers)) {
                    return true;
                } else {
                    return super.oaaDoEventCallback(goal, params, answers);
                }
            }
        };
    }

    Agent newCallingTestAgent() {
        return new AgentImpl() {
            public String getAgentCapabilities() {
                return "[]";
            }

            public String getAgentName() {
                return "undeclare_calling_agent_t";
            }
        };
    }

    private void debug(String msg) {
        System.out.println("Undeclare_T:" + msg);
    }

    public Undeclare_T() {
    }

    public static Test suite() {
        return new TestSuite(Undeclare_T.class);
    }

    public String getAgentName() {
        return "undeclare_agent_t";
    }

    public String getAgentCapabilities() {
        String ret = "[addNoUser(Num1,Num2,Sum), addUser('" + userName + "',Num1,Num2,Sum), multUser('" + userName +
                "',Num1,Num2,Mult)]";
        debug(ret);
        return ret;
    }

    public IclTerm getUserAgentCapabilities() {
        String ret = "[addUser('" + userName + "',Num1,Num2,Sum), multUser('" + userName +
                "',Num1,Num2,Mult)]";
        return IclTerm.fromString(true,ret);
    }

    public boolean oaaDoEventCallback(IclTerm goal,
                                      IclList params,
                                      final IclList answers) {
        /* If the event coming in is "add", grab args and return response */
        if (goal.toIdentifyingString().equals("addNoUser")) {

            int Num1 = ToInt.getInstance().from(goal.getTerm(0));
            int Num2 = ToInt.getInstance().from(goal.getTerm(1));
            int Sum = Num1 + Num2;

            answers.add(
                    new IclStruct("addNoUser", new IclInt(Num1), new IclInt(Num2),
                            new IclInt(Sum)));
            return true;
        } else if (goal.toIdentifyingString().equals("addUser")) {

            String user = goal.getTerm(0).toString();
            int Num1 = ToInt.getInstance().from(goal.getTerm(1));
            int Num2 = ToInt.getInstance().from(goal.getTerm(2));
            int Sum = Num1 + Num2;

            answers.add(
                    new IclStruct("addUser", new IclStr(user), new IclInt(Num1), new IclInt(Num2),
                            new IclInt(Sum)));
            return true;
        } else if (goal.toIdentifyingString().equals("multUser")) {

            String user = goal.getTerm(0).toString();
            int Num1 = ToInt.getInstance().from(goal.getTerm(1));
            int Num2 = ToInt.getInstance().from(goal.getTerm(2));
            int Mult = Num1*Num2;

            answers.add(
                    new IclStruct("multUser", new IclStr(user), new IclInt(Num1), new IclInt(Num2),
                            new IclInt(Mult)));
            return true;
        }

        return false;
    }

    public void testUndeclareExternal() throws Exception {
        // Launch another agent and test that undeclare works with external calls to the fac.
        Agent callingAgent = newCallingTestAgent();
        callingAgent.facilitatorConnect(new String[] {});
        callingAgent.start();
        runUndeclareTests(callingAgent, "jdoe1", "jdoe2");
    }

    private void runUndeclareTests(Agent callingAgent, String user1, String user2) throws Exception {
        Agent testAgent = newTestAgent();
        userName = user1;
        testAgent.facilitatorConnect(new String[] {});
        testAgent.start();
        if (callingAgent == null) {
            callingAgent = testAgent;
        }
        IclList result = callingAgent.solve("addNoUser(5,6,Sum)", "[]");
        assertTrue(result != null && result.size() > 0 &&
                ToInt.getInstance().from(result.getTerm(0).getTerm(2)) == 11);
        result = callingAgent.solve("addUser(" + user1 + ",5,6,Sum)", "[]");
        assertTrue(result != null && result.size() > 0 &&
                ToInt.getInstance().from(result.getTerm(0).getTerm(3)) == 11);
        result = callingAgent.solve("multUser(" + user1 + ",5,6,Mult)", "[]");
        assertTrue(result != null && result.size() > 0 &&
                ToInt.getInstance().from(result.getTerm(0).getTerm(3)) == 30);
        testAgent.getLibOaa().oaaUndeclare(getUserAgentCapabilities(), new IclList());
        // Test add still works
        result = callingAgent.solve("addNoUser(-1,2,Sum)", "[]");
        assertTrue(result != null && result.size() > 0 &&
                ToInt.getInstance().from(result.getTerm(0).getTerm(2)) == 1);
        // test the others do not work
        result = callingAgent.solve("addUser(" + user1 + ",5,6,Sum)", "[]");
        assertTrue(result == null || result.size() == 0);
        result = callingAgent.solve("multUser(" + user1 + ",5,6,Mult)", "[]");
        assertTrue(result == null || result.size() == 0);
        // declare the solvables again with a different user name, and test that it works again
        userName = user2;
        testAgent.getLibOaa().oaaDeclare(getUserAgentCapabilities(), new IclList(), new IclList(), new IclList());
        result = callingAgent.solve("addUser(" + user2 + ",5,6,Sum)", "[]");
        assertTrue(result != null && result.size() > 0 &&
                ToInt.getInstance().from(result.getTerm(0).getTerm(3)) == 11);
        result = callingAgent.solve("multUser(" + user2 + ",9,6,Mult)", "[]");
        assertTrue(result != null && result.size() > 0 &&
                ToInt.getInstance().from(result.getTerm(0).getTerm(3)) == 54);
        callingAgent.facilitatorDisconnect();
        if (callingAgent != testAgent) testAgent.facilitatorDisconnect();
    }

    public void testUndeclareInternal() throws Exception {
        runUndeclareTests(null, "joebob", "janebob");
    }
}

⌨️ 快捷键说明

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