private static string GetParamValue(IntCodeProgram program, long instruction, long value, int param) { var mode = IntCodeProgram.OcodeParameterMode(instruction, param); switch (mode) { case ParameterMode.Position: return($"[{value}]"); case ParameterMode.Immediate: return($"{value}"); case ParameterMode.Relative: return($"[{value} + {program.RelativeBaseOffset}]"); default: return(""); } }
public void ParameterMode_ParameterC_InRelative2() => Assert.AreEqual(ParameterMode.Relative, IntCodeProgram.OcodeParameterMode(20104, 2));
public void ParameterMode_ParameterC_InPosition2() => Assert.AreEqual(ParameterMode.Position, IntCodeProgram.OcodeParameterMode(02104, 2));
public void ParameterMode_ParameterC_InImmediate2() => Assert.AreEqual(ParameterMode.Immediate, IntCodeProgram.OcodeParameterMode(11204, 2));
public void ParameterMode_ParameterB_InRelative() => Assert.AreEqual(ParameterMode.Relative, IntCodeProgram.OcodeParameterMode(2001, 1));
public void ParameterMode_ParameterB_InImmediate() => Assert.AreEqual(ParameterMode.Immediate, IntCodeProgram.OcodeParameterMode(1101, 1));
public void ParameterMode_ParameterB_InPosition2() => Assert.AreEqual(ParameterMode.Position, IntCodeProgram.OcodeParameterMode(120104, 1));
public void ParameterMode_ParameterA_InRelative2() => Assert.AreEqual(ParameterMode.Relative, IntCodeProgram.OcodeParameterMode(120204, 0));
public void ParameterMode_ParameterA_InPosition() => Assert.AreEqual(ParameterMode.Position, IntCodeProgram.OcodeParameterMode(001, 0));