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); }
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); }
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(); } }
public void Initialize() { AMTrail trail = AMTrail.Instance; trail.Initialize(); Assert.AreEqual(0, trail.TR); }
public void Trail() { AMTrail trail = AMTrail.Instance; AbstractTerm term = new AbstractTerm(); trail.Initialize(); trail.Trail(term); Assert.AreEqual(1, trail.TR); }
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(); }
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(); }
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(); } }
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(); }
public void Stop() { AMTrail trail = AMTrail.Instance; Assert.IsTrue(trail.Stop()); }