private async Task TestIntcodeProgramAsync(long[] memory, int input, int expectedOutput) { // Arrange var program = new IntcodeProgram(NullLogger <IntcodeProgram> .Instance); program.Init(memory); var output = Channel.CreateUnbounded <long>(); // Act await program.RunAsync(await input.ToChannelAsync(), output); // Assert var result = await output.Reader.ReadAsync(); Assert.Equal(expectedOutput, result); }
public async Task Part1_Example3_ShouldOutputLong2() { // Arrange var input = new long[] { 104, 1125899906842624, 99 }; var program = new IntcodeProgram(NullLogger <IntcodeProgram> .Instance); program.Init(input); var output = Channel.CreateUnbounded <long>(); // Act await program.RunAsync(Channel.CreateUnbounded <long>(), output); // Assert var result = await output.Reader.ReadAsync(); Assert.Equal(1125899906842624, result); }
public async Task Part1_Example2_ShouldOutputLong() { // Arrange var input = new long[] { 1102, 34915192, 34915192, 7, 4, 7, 99, 0 }; var program = new IntcodeProgram(NullLogger <IntcodeProgram> .Instance); program.Init(input); var output = Channel.CreateUnbounded <long>(); // Act await program.RunAsync(Channel.CreateUnbounded <long>(), output); // Assert var result = await output.Reader.ReadAsync(); Assert.Equal(1219070632396864, result); }
public async Task Part1_Example1_ShouldOutputItself() { // Arrange var input = new long[] { 109, 1, 204, -1, 1001, 100, 1, 100, 1008, 100, 16, 101, 1006, 101, 0, 99 }; var program = new IntcodeProgram(NullLogger <IntcodeProgram> .Instance); program.Init(input); var output = Channel.CreateUnbounded <long>(); // Act await program.RunAsync(Channel.CreateUnbounded <long>(), output); // Assert var result = await output.Reader.ReadAllAsync().ToListAsync(); Assert.Equal(input, result); }
public async Task Part1_Example4_ShouldInputSupportRelativeMode() { // Arrange var input = new long[] { 9, 1, // adjust relative base int position 1 203, 4, // input relative into (1 + 4) where is -1 now 104, -1, // -1 is now the input, output it 99 }; var program = new IntcodeProgram(NullLogger <IntcodeProgram> .Instance); program.Init(input); var output = Channel.CreateUnbounded <long>(); // Act await program.RunAsync(await 1000.ToChannelAsync(), output); // Assert var result = await output.Reader.ReadAsync(); Assert.Equal(1000, result); }