Ejemplo n.º 1
0
        public void TrustMe()
        {
            AbstractMachineState state = SetupMachine();

            TrustMeInstruction i = new TrustMeInstruction();

            i.Process(null);

            AMProgram program = (AMProgram)state.Program;
            AMTrail   trail   = (AMTrail)state.Trail;


            Choicepoint b = new Choicepoint();

            b.CE = new EnvironmentFrame();
            Choicepoint old = new Choicepoint();

            b.B          = old;
            b.CP         = new ProgramNode();
            b.TR         = 1;
            b.NextClause = new ProgramClause();
            state.B      = b;


            i.Execute(state);

            Assert.AreEqual("trust_me", i.Name());
            Assert.AreEqual(0, i.NumberOfArguments());
            Assert.AreSame(state.E, b.CE);
            Assert.AreSame(program.CP, b.CP);
            Assert.AreEqual(b.TR, trail.TR);
            Assert.AreSame(state.B, old);
        }
Ejemplo n.º 2
0
        public void TryMeElse()
        {
            AbstractMachineState state = SetupMachine();

            AMProgram program = (AMProgram)state.Program;
            AMTrail   trail   = (AMTrail)state.Trail;

            program.AddLabel("foobar/2", new ProgramClause());

            TryMeElseInstruction i = new TryMeElseInstruction();

            object[] args = { "foobar/2" };

            i.Process(args);

            program.NumberOfArguments = 2;

            i.Execute(state);



            Assert.AreEqual("try_me_else", i.Name());
            Assert.AreEqual(1, i.NumberOfArguments());
            Assert.AreEqual(2, state.B.Arity);
            Assert.IsNull(state.B.B);
            Assert.AreSame(state.B.CE, state.E);
            Assert.AreSame(state.B.CP, program.CP);
            Assert.AreSame(state.B.NextClause, program["foobar/2"]);
            Assert.AreEqual(state.B.TR, trail.TR);
        }
Ejemplo n.º 3
0
        public void RetryMeElse()
        {
            AbstractMachineState state = SetupMachine();

            RetryMeElseInstruction i = new RetryMeElseInstruction();

            AMProgram program = (AMProgram)state.Program;
            AMTrail   trail   = (AMTrail)state.Trail;


            Choicepoint b = new Choicepoint();

            b.CE         = new EnvironmentFrame();
            b.B          = new Choicepoint();
            b.CP         = new ProgramNode();
            b.TR         = 1;
            b.NextClause = new ProgramClause();
            state.B      = b;

            program.AddLabel("foobar/2", new ProgramClause());

            object[] args = { "foobar/2" };

            i.Process(args);

            i.Execute(state);

            Assert.AreEqual("retry_me_else", i.Name());
            Assert.AreEqual(1, i.NumberOfArguments());
            Assert.AreSame(state.E, b.CE);
            Assert.AreEqual(b.TR, trail.TR);
            Assert.AreEqual(state.B.NextClause, program["foobar/2"]);
        }
        public override void Execute(AbstractMachineState state)
        {
            AMProgram program = (AMProgram)state.Program;

            AbstractTerm Ai = ((AbstractTerm)state[_ai]).Dereference();

            if (Ai.IsReference)
            {
                Ai.Assign(new ConstantTerm(_constant));
                AMTrail trail = (AMTrail)state.Trail;
                trail.Trail(Ai);
            }
            else if (Ai.IsConstant)
            {
                state.Fail = ((string)Ai.Data() != _constant);
            }
            else
            {
                state.Fail = true;
            }

            if (state.Fail)
            {
                state.Backtrack();
            }
            else
            {
                program.Next();
            }
        }
Ejemplo n.º 5
0
        public void Initialize()
        {
            AMTrail trail = AMTrail.Instance;

            trail.Initialize();

            Assert.AreEqual(0, trail.TR);
        }
Ejemplo n.º 6
0
        public void Trail()
        {
            AMTrail trail = AMTrail.Instance;

            AbstractTerm term = new AbstractTerm();

            trail.Initialize();
            trail.Trail(term);

            Assert.AreEqual(1, trail.TR);
        }
Ejemplo n.º 7
0
        public override void Execute(AbstractMachineState state)
        {
            AMProgram program = (AMProgram)state.Program;
            AMHeap    heap    = (AMHeap)state.DataArea;
            AMTrail   trail   = (AMTrail)state.Trail;

            state.B = state.E.B0;

            // tidy trail here?

            program.Next();
        }
        public override void Execute(AbstractMachineState state)
        {
            AMProgram program = (AMProgram)state.Program;
            AMTrail   trail   = (AMTrail)state.Trail;
            AMHeap    heap    = (AMHeap)state.DataArea;

            ProgramClause nextClause = program[_label];
            Choicepoint   B          = new Choicepoint(program.NumberOfArguments, state.E, program.CP, state.B, nextClause, trail.TR, heap.H);

            B.SaveRegisters(state, program.NumberOfArguments);
            state.B = B;

            program.Next();
        }
Ejemplo n.º 9
0
        public override void Execute(AbstractMachineState state)
        {
            AMProgram program = (AMProgram)state.Program;
            AMHeap    heap    = (AMHeap)state.DataArea;
            AMTrail   trail   = (AMTrail)state.Trail;

            state.B.UnsaveRegisters(state, state.B.Arity);

            state.E    = state.B.CE;
            program.CP = state.B.CP;

            trail.Unwind(state.B.TR);

            trail.TR = state.B.TR;

            heap.H = state.B.H;

            state.B = state.B.B;

            program.Next();
        }
Ejemplo n.º 10
0
        public override void Execute(AbstractMachineState state)
        {
            AMProgram program = (AMProgram)state.Program;
            AMHeap    heap    = (AMHeap)state.DataArea;
            AMTrail   trail   = (AMTrail)state.Trail;

            if (state.IsReadMode)
            {
                AbstractTerm addr = ((AbstractTerm)state.S).Dereference();
                state.S = state.S.Next;
                if (addr.IsReference)
                {
                    addr.Assign(new ConstantTerm(_constant));
                    trail.Trail(addr);
                }
                else if (addr.IsConstant)
                {
                    state.Fail = !_constant.Equals(addr.Data());
                }
                else
                {
                    state.Fail = true;
                }
            }
            else
            {
                heap.Push(new ConstantTerm(_constant));
            }

            if (state.Fail)
            {
                state.Backtrack();
            }
            else
            {
                program.Next();
            }
        }
Ejemplo n.º 11
0
        public override void Execute(AbstractMachineState state)
        {
            AMProgram program = (AMProgram)state.Program;
            AMTrail   trail   = (AMTrail)state.Trail;
            AMHeap    heap    = (AMHeap)state.DataArea;

            int n = state.B.Arity;

            state.B.UnsaveRegisters(state, n);

            state.E            = state.B.CE;
            program.CP         = state.B.CP;
            state.B.NextClause = program[_label];

            trail.Unwind(state.B.TR);

            trail.TR = state.B.TR;

            heap.H = state.B.H;

            // TODO: what about HB ?

            program.Next();
        }
Ejemplo n.º 12
0
        public void Stop()
        {
            AMTrail trail = AMTrail.Instance;

            Assert.IsTrue(trail.Stop());
        }