public static IInstruction Create(char instruction, TapeMemory tapeMemory, BrainmessProgram program)
 {
     IInstruction iInstruction = null;
     switch (instruction)
     {
         case '>':
             iInstruction = new ForwardInstruction(tapeMemory, program);
             break;
         case '<':
             iInstruction = new BackwardInstruction(tapeMemory, program);
             break;
         case '+':
             iInstruction = new IncreamentInstruction(tapeMemory, program);
             break;
         case '-':
             iInstruction = new DecreamentInstruction(tapeMemory, program);
             break;
         case '.':
             iInstruction = new OutputInstruction(tapeMemory, program);
             break;
         case ',':
             iInstruction = new InputInstruction(tapeMemory, program);
             break;
         case '[':
             iInstruction = new LoopForwardInstruction(tapeMemory, program);
             break;
         case ']':
             iInstruction = new LoopBackwardInstruction(tapeMemory, program);
             break;
     }
     return iInstruction;
 }
        public void TestLoopBackwardInstruction()
        {           
            var loopBackwardInstruction = new LoopBackwardInstruction
              (
                  new TapeMemory(),
                  new BrainmessProgram
                  {
                      Instructions = "--[++++]",
                      InstructionPointer = 5
                  }
              ) {TapeMemory = {CurrentCellValue = 1}};

            loopBackwardInstruction.Execute();
            Assert.AreEqual(2, loopBackwardInstruction.Program.InstructionPointer);
        }