public void Winners_Rating_Should_Increase(Rating winner, Rating loser)
        {
            // Arrange
            var trueSkillEngine    = new TwoPlayerTrueSkillEngine();
            var winnerInitialValue = new Rating(winner.Mean, winner.StandardDeviation);

            // Act
            trueSkillEngine.UpdateRatings(winner, loser);

            // Assert
            winner.Mean.Should().BeGreaterThan(winnerInitialValue.Mean, "The winner's mean should have increased due to winning a match");
            winner.StandardDeviation.Should().BeLessThan(winnerInitialValue.StandardDeviation, "The winner's standard deviation should have decreased due to having played more matches");
        }
        public void Losers_Rating_Should_Decrease(Rating winner, Rating loser)
        {
            // Arrange
            var trueSkillEngine   = new TwoPlayerTrueSkillEngine();
            var loserInitialValue = new Rating(loser.Mean, loser.StandardDeviation);

            // Act
            trueSkillEngine.UpdateRatings(winner, loser);

            // Assert
            loser.Mean.Should().BeLessThan(loserInitialValue.Mean, "The loser's mean should have decreased due to losing a match.");
            loser.StandardDeviation.Should().BeLessThan(loserInitialValue.StandardDeviation, "The loser's standard deviation should have decreased due to having played more matches.");
        }
        public void Should_Update_Both_Ratings(Rating winner, Rating loser)
        {
            // Arrange
            var trueSkillEngine    = new TwoPlayerTrueSkillEngine();
            var winnerInitialValue = new Rating(winner.Mean, winner.StandardDeviation);
            var loserInitialValue  = new Rating(loser.Mean, loser.StandardDeviation);

            // Act
            trueSkillEngine.UpdateRatings(winner, loser);

            // Assert
            winner.Should().NotBeEquivalentTo(winnerInitialValue, "Update ratings should update both the winner's mean and standard deviation");
            loser.Should().NotBeEquivalentTo(loserInitialValue, "Update ratings should update both the loser's mean and standard deviation");
        }