public void SimulationGetsExpectedResult(int doorNr, bool changeDoor, bool expected)
        {
            var simulator = new Simulator();

            var orderedDoors = new List <Door> {
                new(DoorContent.Car), new(DoorContent.Goat), new(DoorContent.Goat)
            };

            simulator.AddSimulation(new Simulation(doorNr, changeDoor)
            {
                Doors = orderedDoors
            });

            var(_, result) = simulator.Run().Single();
            result.Should().Be(expected, $"Door {doorNr} + Choice {changeDoor} should be {expected}");
        }
        public void SimulatorCanRunMultipleSimulations()
        {
            var timer = Stopwatch.StartNew();

            var simulator = new Simulator();

            var orderedDoors = new List <Door> {
                new(DoorContent.Car), new(DoorContent.Goat), new(DoorContent.Goat)
            };

            const int simCount = 1000000;

            var door   = 1;
            var choice = true;

            for (var i = 1; i <= simCount; i++)
            {
                simulator.AddSimulation(new Simulation(door, choice)
                {
                    Doors = orderedDoors
                });

                if (door == 3)
                {
                    door = 1;
                }
                else
                {
                    door++;
                }
                choice = !choice;
            }

            foreach (var(sim, result) in simulator.Run())
            {
                var expected = ResultByChoices(sim);
                result.Should().Be(expected, $"Door {sim.ChosenDoorNr} + Choice {sim.ChosenDoorNr} should be {expected}");
            }

            timer.Stop();

            _helper.WriteLine($"Ran {simCount} simulations in {timer.ElapsedMilliseconds}ms");