//! Equivalence tests: every historical golden from the pre-T2 tests is //! reproduced here at the integration level via the new public API. //! //! The in-crate tests in `src/history.rs::tests` and //! `src/time_slice.rs::tests` are the primary regression net for numerical //! behavior. This file provides Game-level goldens that stand alone and are //! more naturally expressed as integration tests. use approx::assert_ulps_eq; use trueskill_tt::{ConstantDrift, Game, GameOptions, Gaussian, Outcome, Rating}; type R = Rating; fn ts_rating(mu: f64, sigma: f64, beta: f64, gamma: f64) -> R { R::new(Gaussian::from_ms(mu, sigma), beta, ConstantDrift(gamma)) } #[test] fn game_1v1_golden_matches_historical() { let a = ts_rating(25.0, 25.0 / 3.0, 25.0 / 6.0, 25.0 / 300.0); let b = ts_rating(25.0, 25.0 / 3.0, 25.0 / 6.0, 25.0 / 300.0); let (a_post, b_post) = Game::::one_v_one(&a, &b, Outcome::winner(0, 2)).unwrap(); // Historical golden from pre-T2 test_1vs1 (team 0 wins): assert_ulps_eq!( a_post, Gaussian::from_ms(29.205220, 7.194481), epsilon = 1e-6 ); assert_ulps_eq!( b_post, Gaussian::from_ms(20.794779, 7.194481), epsilon = 1e-6 ); } #[test] fn game_1v1_draw_golden() { let a = ts_rating(25.0, 25.0 / 3.0, 25.0 / 6.0, 25.0 / 300.0); let b = ts_rating(25.0, 25.0 / 3.0, 25.0 / 6.0, 25.0 / 300.0); let g = Game::::ranked( &[&[a], &[b]], Outcome::draw(2), &GameOptions { p_draw: 0.25, convergence: Default::default(), }, ) .unwrap(); let p = g.posteriors(); // Historical golden from pre-T2 test_1vs1_draw: assert_ulps_eq!( p[0][0], Gaussian::from_ms(24.999999, 6.469480), epsilon = 1e-6 ); assert_ulps_eq!( p[1][0], Gaussian::from_ms(24.999999, 6.469480), epsilon = 1e-6 ); }