More things, more tests

This commit is contained in:
2022-06-20 23:56:35 +02:00
parent 0efb0312da
commit 0a35645091
4 changed files with 195 additions and 4 deletions

View File

@@ -227,6 +227,8 @@ impl Game {
#[cfg(test)]
mod tests {
use ::approx::assert_ulps_eq;
use crate::{Gaussian, Player, GAMMA};
use super::*;
@@ -406,4 +408,97 @@ mod tests {
assert_eq!(c.mu, 28.555920328820527);
assert_eq!(c.sigma, 1.8856891308577184);
}
#[test]
fn test_1vs1_weighted() {
let w_a = vec![1.0];
let w_b = vec![2.0];
let t_a = vec![Player::new(
Gaussian::new(25.0, 25.0 / 3.0),
25.0 / 6.0,
0.0,
)];
let t_b = vec![Player::new(
Gaussian::new(25.0, 25.0 / 3.0),
25.0 / 6.0,
0.0,
)];
let g = Game::new(vec![t_a.clone(), t_b.clone()], vec![], vec![w_a, w_b], 0.0);
let p = g.posteriors();
assert_ulps_eq!(
p[0][0],
Gaussian::new(30.625173, 7.765472),
epsilon = 0.000001
);
assert_ulps_eq!(
p[1][0],
Gaussian::new(13.749653, 5.733840),
epsilon = 0.000001
);
let w_a = vec![1.0];
let w_b = vec![0.7];
let g = Game::new(vec![t_a.clone(), t_b.clone()], vec![], vec![w_a, w_b], 0.0);
let p = g.posteriors();
assert_ulps_eq!(
p[0][0],
Gaussian::new(27.630080, 7.206676),
epsilon = 0.000001
);
assert_ulps_eq!(
p[1][0],
Gaussian::new(23.158943, 7.801628),
epsilon = 0.000001
);
let w_a = vec![1.6];
let w_b = vec![0.7];
let g = Game::new(vec![t_a, t_b], vec![], vec![w_a, w_b], 0.0);
let p = g.posteriors();
assert_ulps_eq!(
p[0][0],
Gaussian::new(26.142438, 7.573088),
epsilon = 0.000001
);
assert_ulps_eq!(
p[1][0],
Gaussian::new(24.500183, 8.193278),
epsilon = 0.000001
);
let w_a = vec![1.0];
let w_b = vec![0.0];
let t_a = vec![Player::new(Gaussian::new(2.0, 6.0), 1.0, 0.0)];
let t_b = vec![Player::new(Gaussian::new(2.0, 6.0), 1.0, 0.0)];
let g = Game::new(vec![t_a, t_b], vec![], vec![w_a, w_b], 0.0);
let p = g.posteriors();
assert_ulps_eq!(
p[0][0],
Gaussian::new(5.557176746, 4.0527906913),
epsilon = 0.000001
);
assert_ulps_eq!(p[1][0], Gaussian::new(2.0, 6.0), epsilon = 0.000001);
// NOTA: trueskill original tiene probelmas en la aproximación: post[2][1].mu = 1.999644
let w_a = vec![1.0];
let w_b = vec![-1.0];
let t_a = vec![Player::new(Gaussian::new(2.0, 6.0), 1.0, 0.0)];
let t_b = vec![Player::new(Gaussian::new(2.0, 6.0), 1.0, 0.0)];
let g = Game::new(vec![t_a, t_b], vec![], vec![w_a, w_b], 0.0);
let p = g.posteriors();
assert_ulps_eq!(p[0][0], p[0][0], epsilon = 0.000001);
}
}