public void Part1Test()
        {
            // Given
            var program     = HandheldProgram.Parse(Input.Get(8));
            var computer    = new HandheldComputer(program);
            var accumulator = computer.Accumulator;

            var visited = new HashSet <int>();

            // When
            while (!visited.Contains(computer.ProgramCounter))
            {
                accumulator = computer.Accumulator;
                visited.Add(computer.ProgramCounter);
                computer.Step();
            }

            // Then
            Assert.Equal(5, accumulator);
        }
        public void Part2Test()
        {
            // Given
            var program = HandheldProgram.Parse(Input.Get(8));

            for (var i = 0; i < program.Instructions.Count(); i++)
            {
                // When
                var modified = Day08.ModifyProgram(program, i);
                if (modified is null)
                {
                    continue;
                }
                var computer    = new HandheldComputer(modified);
                var accumulator = computer.Accumulator;

                var visited = new HashSet <int>();

                while (!computer.IsHalted && !visited.Contains(computer.ProgramCounter))
                {
                    accumulator = computer.Accumulator;
                    visited.Add(computer.ProgramCounter);
                    computer.Step();
                }

                // Then
                if (i == 7)
                {
                    Assert.True(computer.IsHalted);
                    Assert.Equal(8, accumulator);
                }
                else
                {
                    Assert.False(computer.IsHalted);
                }
            }
        }