Пример #1
0
        public CurrentState <TEntry> CreateInitialState <TEntry>(
            int width, int height,
            string values,
            Func <char, TEntry> converter,
            MemoryPosition startPosition = null,
            InstructionExecutionCounter executionCounter = null)
        {
            if (width * height != values.Length)
            {
                throw new StateInitializationError($"Values don't match given {nameof(width)} and {nameof(height)}");
            }

            if (startPosition?.Row < 0 || startPosition?.Row >= height)
            {
                throw new StateInitializationError("Faulty start position");
            }

            if (startPosition?.Column < 0 || startPosition?.Column >= width)
            {
                throw new StateInitializationError("Faulty start position");
            }

            var board = CreateBoard(width, values, converter);

            return(new CurrentState <TEntry>(board, startPosition, executionCounter));
        }
Пример #2
0
        public void ExecuteStep_ExecutionLimitReached_Throws()
        {
            var sut = new ExecutionSnapshot <int>(new IInstruction <int> [0]);
            var executionCounter = new InstructionExecutionCounter(5, 5);
            var context          = CreateContext(executionCounter);

            Assert.Throws <ExecutionLimitReachedError>(
                () => sut.ExecuteStep(context));
        }
Пример #3
0
        private static CurrentState <int> CreateContext(
            InstructionExecutionCounter executionCounter, int currentExecutionPointer = 0)
        {
            var contextFactory = new ContextFactory();
            var initialState   = contextFactory.CreateInitialState(
                1, 1, ExampleInitialStateValues, Conversions.AsHex, executionCounter: executionCounter);

            initialState.ExecutionStackPointer.Value = currentExecutionPointer;
            return(initialState);
        }