From e8aa60fcdda1ceca9ff2afe5a1381d867c5613b7 Mon Sep 17 00:00:00 2001 From: Anders Olsson Date: Thu, 25 Oct 2018 17:55:10 +0200 Subject: [PATCH] Added test for 2 vs 2. It fails... need to figure out why. --- src/lib.rs | 33 +++++++++++++++++++++++++++++---- 1 file changed, 29 insertions(+), 4 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 194ec27..ea2cd12 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -174,19 +174,22 @@ where }) .collect::>(); - let epsilon = draw_margin(DRAW_PROBABILITY, BETA, 2.0); - let trunc_layer = team_diff_vars .iter() .enumerate() .map(|(i, variable)| { factor_id += 1; + let player_count = perf_vars + .iter() + .filter(|(_, team)| *team as usize == i || *team as usize == i + 1) + .count(); + TruncateFactor::new( &mut variable_arena, factor_id, *variable, - epsilon, + draw_margin(DRAW_PROBABILITY, BETA, player_count as f64), ranks[i] == ranks[i + 1], ) @@ -350,7 +353,7 @@ mod tests { } #[test] - fn test_rate_4vs4() { + fn test_rate_4_free_for_all() { let alice = Rating::new(MU, SIGMA); let bob = Rating::new(MU, SIGMA); let chris = Rating::new(MU, SIGMA); @@ -387,4 +390,26 @@ mod tests { } } + #[test] + fn test_rate_2vs2() { + let alice = Rating::new(MU, SIGMA); + let bob = Rating::new(MU, SIGMA); + let chris = Rating::new(MU, SIGMA); + let darren = Rating::new(MU, SIGMA); + + let expected_ratings = vec![ + Rating::new(28.108322399069035, 7.77436345109384), + Rating::new(28.108322399069035, 7.77436345109384), + Rating::new(21.891677600930958, 7.77436345109384), + Rating::new(21.891677600930958, 7.77436345109384), + ]; + + let ratings = rate(&[(alice, 0), (bob, 0), (chris, 1), (darren, 1)], &[0, 1]); + + for (rating, expected) in ratings.iter().zip(expected_ratings.iter()) { + assert_relative_eq!(rating, expected, epsilon = EPSILON); + } + } + + }