Basic partial play test passes

This commit is contained in:
Jeff Moser 2010-10-03 19:16:17 -04:00
parent a80159a6cb
commit 1156c839d4
2 changed files with 40 additions and 1 deletions

@ -17,7 +17,7 @@ class FactorGraphTrueSkillCalculatorTest extends PHPUnit_Framework_TestCase
TrueSkillCalculatorTests::testAllTwoPlayerScenarios($this, $calculator);
TrueSkillCalculatorTests::testAllTwoTeamScenarios($this, $calculator);
TrueSkillCalculatorTests::testAllMultipleTeamScenarios($this, $calculator);
TrueSkillCalculatorTests::testPartialPlayScenarios($this, $calculator);
}
}

@ -59,6 +59,11 @@ class TrueSkillCalculatorTests
self::twoOnFourOnTwoWinDraw($testClass, $calculator);
}
public static function testPartialPlayScenarios($testClass, SkillCalculator $calculator)
{
self::oneOnTwoBalancedPartialPlay($testClass, $calculator);
}
//------------------- Actual Tests ---------------------------
// If you see more than 3 digits of precision in the decimal point, then the expected values calculated from
// F# RalfH's implementation with the same input. It didn't support teams, so team values all came from the
@ -948,6 +953,40 @@ class TrueSkillCalculatorTests
self::assertMatchQuality($testClass, 0.367, $calculator->calculateMatchQuality($gameInfo, $teams));
}
//------------------------------------------------------------------------------
// Partial Play Tests
//------------------------------------------------------------------------------
private static function oneOnTwoBalancedPartialPlay($testClass, SkillCalculator $calculator)
{
$gameInfo = new GameInfo();
$p1 = new Player(1);
$team1 = new Team($p1, $gameInfo->getDefaultRating());
$p2 = new Player(2, 0.0);
$p3 = new Player(3, 1.00);
$team2 = new Team();
$team2->addPlayer($p2, $gameInfo->getDefaultRating());
$team2->addPlayer($p3, $gameInfo->getDefaultRating());
$teams = Teams::concat($team1, $team2);
$newRatings = $calculator->calculateNewRatings($gameInfo, $teams, array(1, 2));
$p1NewRating = $newRatings->getRating($p1);
$p2NewRating = $newRatings->getRating($p2);
$p3NewRating = $newRatings->getRating($p3);
// This should be roughly the same as a 1 v 1
self::assertRating($testClass, 29.396480404368411, 7.1713980703143205, $p1NewRating);
self::assertRating($testClass, 24.999560351959563, 8.3337499787709319, $p2NewRating);
self::assertRating($testClass, 20.603519595631585, 7.1713980703143205, $p3NewRating);
$matchQuality = $calculator->calculateMatchQuality($gameInfo, $teams);
self::assertMatchQuality($testClass, 0.44721358745011336, $matchQuality);
}
private static function assertRating($testClass, $expectedMean, $expectedStandardDeviation, $actual)
{
$testClass->assertEquals($expectedMean, $actual->getMean(), '', self::ERROR_TOLERANCE_TRUESKILL);