public void ResolveTie_SplitsTheResultsApproximatelyByExpectation()
        {
            // Arrange
            var tieBreaker = new RandomisingTwoWayTieBreaker(0.3);

            // Act
            var leftResultCount  = 0;
            var rightResultCount = 0;

            for (var i = 0; i < 10000; i++)
            {
                switch (tieBreaker.ResolveTie())
                {
                case TieResult.Left:
                    leftResultCount++;
                    break;

                case TieResult.Right:
                    rightResultCount++;
                    break;

                default:
                    throw new ArgumentOutOfRangeException();
                }
            }

            // Assert
            leftResultCount.Should().BeLessThan(4000).And.BeGreaterThan(2000);
            rightResultCount.Should().BeLessThan(8000).And.BeGreaterThan(6000);
        }
        public void GivenLeftProbability_CreatesATieBreakerWithThatLeftProbability()
        {
            // Act
            const double leftProbability = 0.643;
            var          tieBreaker      = new RandomisingTwoWayTieBreaker(leftProbability);

            // Assert
            tieBreaker.LeftProbability.Should().Be(leftProbability);
            tieBreaker.RightProbability.Should().Be(1 - leftProbability);
        }