示例#1
0
            public void Should_advance_program_counter_if_instruction_jumped_in_previous_execution()
            {
                TestedInstruction = new TestInstruction(1)
                {
                    ExecuteInternalAction = (self, givenState) =>
                    {
                        var jmp = self.PublicGetParameterValue(1);
                        if (jmp > 0)
                        {
                            self.PublicJump(jmp);
                        }
                    },
                    ParameterModes = 1
                };

                var state = new ComputerState
                {
                    Memory = new[] { 0, 2, 1, 0 }
                };

                TestedInstruction.Execute(state);
                TestedInstruction.Execute(state);

                Assert.Equal(4, state.ProgramCounter);
            }
示例#2
0
 public GetParameterValue()
 {
     TestedInstruction = new TestInstruction(3)
     {
         ExecuteInternalAction = (self, givenState) =>
         {
             _actual = self.PublicGetParameterValue(givenState.Memory[0]);
         }
     };
 }
示例#3
0
 public Execute()
 {
     TestedInstruction = new TestInstruction(0)
     {
         ExecuteInternalAction = (self, givenState) =>
         {
             _executeInternalExecuted = true;
         }
     };
 }
示例#4
0
        public void Sequence_ExecutesAll_WhenNoErrors()
        {
            var completed1 = false;
            var completed2 = false;
            var completed3 = false;

            TestInstruction
            .Sequence(new[]
            {
                DoAndReturn("Set completed1", () => completed1 = true).BoxResult(),
                DoAndReturn("Set completed2", () => completed2 = true).BoxResult(),
                DoAndReturn("Set completed3", () => completed3 = true).BoxResult(),
            })
            .ToTask(this.Executor);

            Assert.AreEqual(
                (true, true, true),
                (completed1, completed2, completed3));
        }