public void Operation2_PositionMode_MultipliesValues()
        {
            string          program  = "2,3,0,3,99";
            IntcodeComputer computer = new IntcodeComputer();

            computer.AddProgram("key", program);
            computer.RunProgram("key");

            Assert.Equal(6, computer.GetProgramAddressValue("key", 3));
        }
        public void Operation1_PositionMode_AddsValues()
        {
            string          program  = "1,0,0,0,99";
            IntcodeComputer computer = new IntcodeComputer();

            computer.AddProgram("key", program);
            computer.RunProgram("key");

            Assert.Equal(2, computer.GetProgramAddressValue("key", 0));
        }
        public void Operation2_ImmediateMode_MultipliesValues()
        {
            // First param is in immediate mode so its value is 0
            string          program  = "1002,4,3,4,33";
            IntcodeComputer computer = new IntcodeComputer();

            computer.AddProgram("key", program);
            computer.RunProgram("key");

            Assert.Equal(99, computer.GetProgramAddressValue("key", 4));
        }
        public void Operation1_ImmediateMode_AddsValues()
        {
            // First param is in immediate mode so its value is 0
            string          program  = "101,0,0,0,99";
            IntcodeComputer computer = new IntcodeComputer();

            computer.AddProgram("key", program);
            computer.RunProgram("key");

            Assert.Equal(101, computer.GetProgramAddressValue("key", 0));
        }
        public void Operation3_PositionMode_TakesInput_SetsValue()
        {
            string          program  = "3,0,99";
            IntcodeComputer computer = new IntcodeComputer();

            //StringReader reader = new StringReader("1");

            ProgramIO programIO = new ProgramIO();

            programIO.WriteLineInput("1");

            computer.AddProgram("key", program, programIO);
            computer.RunProgram("key");

            Assert.Equal(1, computer.GetProgramAddressValue("key", 0));
        }