trueskill/tests/TrueSkill/DrawMarginTest.php

36 lines
1.2 KiB
PHP
Raw Normal View History

2024-02-02 14:53:38 +00:00
<?php
declare(strict_types=1);
2022-07-05 13:55:47 +00:00
namespace DNW\Skills\Tests\TrueSkill;
2022-07-05 13:33:34 +00:00
use DNW\Skills\TrueSkill\DrawMargin;
2024-05-14 08:46:43 +00:00
use DNW\Skills\Numerics\BasicMath;
use DNW\Skills\Numerics\GaussianDistribution;
use PHPUnit\Framework\TestCase;
2024-05-14 08:46:43 +00:00
use PHPUnit\Framework\Attributes\CoversClass;
use PHPUnit\Framework\Attributes\UsesClass;
2016-05-24 12:06:43 +00:00
2024-05-14 08:46:43 +00:00
#[CoversClass(DrawMargin::class)]
#[UsesClass(BasicMath::class)]
#[UsesClass(GaussianDistribution::class)]
2016-05-24 12:06:43 +00:00
class DrawMarginTest extends TestCase
2016-05-24 13:12:29 +00:00
{
2023-08-04 07:22:05 +00:00
private const ERROR_TOLERANCE = 0.000001;
2016-05-24 13:12:29 +00:00
2023-08-01 11:26:38 +00:00
public function testGetDrawMarginFromDrawProbability(): void
{
$beta = 25.0 / 6.0;
// The expected values were compared against Ralf Herbrich's implementation in F#
$this->assertDrawMargin(0.10, $beta, 0.74046637542690541);
$this->assertDrawMargin(0.25, $beta, 1.87760059883033);
$this->assertDrawMargin(0.33, $beta, 2.5111010132487492);
}
2023-08-04 07:03:28 +00:00
private function assertDrawMargin(float $drawProbability, float $beta, float $expected): void
{
$actual = DrawMargin::getDrawMarginFromDrawProbability($drawProbability, $beta);
2024-05-14 08:46:43 +00:00
$this->assertEqualsWithDelta($expected, $actual, self::ERROR_TOLERANCE);
2016-05-24 13:12:29 +00:00
}
2022-07-05 13:55:47 +00:00
}