Inheritance: AbstractInstruction
 public AMInstructionSet()
 {
     _instructions["allocate"] = new AllocateInstruction();
     _instructions["bcall"] = new BCallInstruction();
     _instructions["call"] = new CallInstruction();
     _instructions["cut"] = new CutInstruction();
     _instructions["deallocate"] = new DeallocateInstruction();
     _instructions["execute"] = new ExecuteInstruction();
     _instructions["fcall"] = new FCallInstruction();
     _instructions["fail"] = new FailInstruction();
     _instructions["get_constant"] = new GetConstantInstruction();
     _instructions["get_list"] = new GetListInstruction();
     _instructions["get_structure"] = new GetStructureInstruction();
     _instructions["get_value"] = new GetValueInstruction();
     _instructions["get_variable"] = new GetVariableInstruction();
     _instructions["halt"] = new HaltInstruction();
     _instructions["nop"] = new NopInstruction();
     _instructions["proceed"] = new ProceedInstruction();
     _instructions["put_constant"] = new PutConstantInstruction();
     _instructions["put_list"] = new PutListInstruction();
     _instructions["put_structure"] = new PutStructureInstruction();
     _instructions["put_unsafe_value"] = new PutUnsafeValueInstruction();
     _instructions["put_variable"] = new PutVariableInstruction();
     _instructions["put_value"] = new PutValueInstruction();
     _instructions["retry_me_else"] = new RetryMeElseInstruction();
     _instructions["set_constant"] = new SetConstantInstruction();
     _instructions["set_local_value"] = new SetLocalValueInstruction();
     _instructions["set_value"] = new SetValueInstruction();
     _instructions["set_variable"] = new SetVariableInstruction();
     _instructions["set_void"] = new SetVoidInstruction();
     _instructions["trust_me"] = new TrustMeInstruction();
     _instructions["try_me_else"] = new TryMeElseInstruction();
     _instructions["unify_constant"] = new UnifyConstantInstruction();
     _instructions["unify_local_value"] = new UnifyLocalValueInstruction();
     _instructions["unify_variable"] = new UnifyVariableInstruction();
     _instructions["unify_value"] = new UnifyValueInstruction();
     _instructions["unify_void"] = new UnifyVoidInstruction();
     _instructions["procedure"] = new ProcedureInstruction();
 }
        public void PutYVariable()
        {
            AbstractMachineState state = SetupMachine();

            state.E = new EnvironmentFrame(null, null, 10);

            PutVariableInstruction i = new PutVariableInstruction();

            object[] args = { "Y0", "X0" };

            i.Process(args);

            i.Execute(state);

            Assert.AreEqual("put_variable", i.Name());
            Assert.AreEqual(2, i.NumberOfArguments());
            Assert.IsTrue(state.E["Y0"].IsReference);
            Assert.AreSame(state.E["Y0"].Dereference(), ((AbstractTerm)state["X0"]).Dereference());
        }
        public void PutXVariable()
        {
            AbstractMachineState state = SetupMachine();

            PutVariableInstruction i = new PutVariableInstruction();

            object[] args = { "X0", "X1" };

            i.Process(args);
            i.Execute(state);

            Assert.AreSame(state["H"], ((AbstractTerm)state["X0"]).Dereference());
            Assert.AreSame(state["H"], ((AbstractTerm)state["X1"]).Dereference());
            Assert.AreEqual("put_variable", i.Name());
            Assert.AreEqual(2, i.NumberOfArguments());
        }