From 2467d7e027e7efcfe536b78caf5cef13a163bc82 Mon Sep 17 00:00:00 2001 From: Anders Olsson Date: Mon, 27 Jun 2022 11:46:59 +0200 Subject: [PATCH] Update test to use assert_ulps_eq --- src/game.rs | 188 +++++++++++++--------------------------------------- src/lib.rs | 9 +++ 2 files changed, 55 insertions(+), 142 deletions(-) diff --git a/src/game.rs b/src/game.rs index 616ffcc..85d61a2 100644 --- a/src/game.rs +++ b/src/game.rs @@ -244,9 +244,8 @@ mod tests { let a = p[0][0]; let b = p[1][0]; - assert_eq!(a.mu, 20.79477925612302); - assert_eq!(b.mu, 29.205220743876975); - assert_eq!(a.sigma, 7.194481422570443); + assert_ulps_eq!(a, Gaussian::new(20.794779, 7.194481), epsilon = 1e-6); + assert_ulps_eq!(b, Gaussian::new(29.205220, 7.194481), epsilon = 1e-6); let t_a = Player::new(Gaussian::new(29.0, 1.0), 25.0 / 6.0, GAMMA); let t_b = Player::new(Gaussian::new(25.0, 25.0 / 3.0), 25.0 / 6.0, GAMMA); @@ -257,10 +256,8 @@ mod tests { let a = p[0][0]; let b = p[1][0]; - assert_eq!(a.mu, 28.896475351225412); - assert_eq!(a.sigma, 0.9966043313004235); - assert_eq!(b.mu, 32.18921172045737); - assert_eq!(b.sigma, 6.062063735879715); + assert_ulps_eq!(a, Gaussian::new(28.896475, 0.996604), epsilon = 1e-6); + assert_ulps_eq!(b, Gaussian::new(32.189211, 6.062063), epsilon = 1e-6); let t_a = Player::new(Gaussian::new(1.139, 0.531), 1.0, 0.2125); let t_b = Player::new(Gaussian::new(15.568, 0.51), 1.0, 0.2125); @@ -298,10 +295,8 @@ mod tests { let a = p[0][0]; let b = p[1][0]; - assert_eq!(a.mu, 25.00000000000592); - assert_eq!(a.sigma, 6.238469796269066); - assert_eq!(b.mu, 31.31135822129149); - assert_eq!(b.sigma, 6.69881865477675); + assert_ulps_eq!(a, Gaussian::new(25.000000, 6.238469), epsilon = 1e-6); + assert_ulps_eq!(b, Gaussian::new(31.311358, 6.698818), epsilon = 1e-6); let g = Game::new(teams.clone(), vec![], vec![], 0.0); let p = g.posteriors(); @@ -309,10 +304,8 @@ mod tests { let a = p[0][0]; let b = p[1][0]; - assert_eq!(a.mu, 31.31135822129149); - assert_eq!(a.sigma, 6.69881865477675); - assert_eq!(b.mu, 25.00000000000592); - assert_eq!(b.sigma, 6.238469796269066); + assert_ulps_eq!(a, Gaussian::new(31.311358, 6.698818), epsilon = 1e-6); + assert_ulps_eq!(b, Gaussian::new(25.000000, 6.238469), epsilon = 1e-6); let g = Game::new(teams, vec![1.0, 2.0, 0.0], vec![], 0.5); let p = g.posteriors(); @@ -321,12 +314,9 @@ mod tests { let b = p[1][0]; let c = p[2][0]; - assert_eq!(a.mu, 24.999999999511545); - assert_eq!(a.sigma, 6.092561128305945); - assert_eq!(b.mu, 33.37931495595287); - assert_eq!(b.sigma, 6.483575782278924); - assert_eq!(c.mu, 16.62068504453558); - assert_eq!(c.sigma, 6.483575782198122); + assert_ulps_eq!(a, Gaussian::new(24.999999, 6.092561), epsilon = 1e-6); + assert_ulps_eq!(b, Gaussian::new(33.379314, 6.483575), epsilon = 1e-6); + assert_ulps_eq!(c, Gaussian::new(16.620685, 6.483575), epsilon = 1e-6); } #[test] @@ -340,10 +330,8 @@ mod tests { let a = p[0][0]; let b = p[1][0]; - assert_eq!(a.mu, 24.999999999999996); - assert_eq!(a.sigma, 6.469480769842277); - assert_eq!(b.mu, 24.999999999999996); - assert_eq!(b.sigma, 6.469480769842277); + assert_ulps_eq!(a, Gaussian::new(24.999999, 6.469480), epsilon = 1e-6); + assert_ulps_eq!(b, Gaussian::new(24.999999, 6.469480), epsilon = 1e-6); let t_a = Player::new(Gaussian::new(25.0, 3.0), 25.0 / 6.0, 25.0 / 300.0); let t_b = Player::new(Gaussian::new(29.0, 2.0), 25.0 / 6.0, 25.0 / 300.0); @@ -354,10 +342,8 @@ mod tests { let a = p[0][0]; let b = p[1][0]; - assert_eq!(a.mu, 25.73600181056662); - assert_eq!(a.sigma, 2.709956162204711); - assert_eq!(b.mu, 28.67288808419261); - assert_eq!(b.sigma, 1.9164711604544398); + assert_ulps_eq!(a, Gaussian::new(25.736001, 2.709956), epsilon = 1e-6); + assert_ulps_eq!(b, Gaussian::new(28.672888, 1.916471), epsilon = 1e-6); } #[test] @@ -378,12 +364,9 @@ mod tests { let b = p[1][0]; let c = p[2][0]; - assert_eq!(a.mu, 24.999999999999996); - assert_eq!(a.sigma, 5.729068664890827); - assert_eq!(b.mu, 25.000000000000004); - assert_eq!(b.sigma, 5.707423522433266); - assert_eq!(c.mu, 24.999999999999996); - assert_eq!(c.sigma, 5.729068664890825); + assert_ulps_eq!(a, Gaussian::new(24.999999, 5.729068), epsilon = 1e-6); + assert_ulps_eq!(b, Gaussian::new(25.000000, 5.707423), epsilon = 1e-6); + assert_ulps_eq!(c, Gaussian::new(24.999999, 5.729068), epsilon = 1e-6); let t_a = Player::new(Gaussian::new(25.0, 3.0), 25.0 / 6.0, 25.0 / 300.0); let t_b = Player::new(Gaussian::new(25.0, 3.0), 25.0 / 6.0, 25.0 / 300.0); @@ -401,12 +384,9 @@ mod tests { let b = p[1][0]; let c = p[2][0]; - assert_eq!(a.mu, 25.48850755025261); - assert_eq!(a.sigma, 2.6382084442984226); - assert_eq!(b.mu, 25.510671709901217); - assert_eq!(b.sigma, 2.6287517663583633); - assert_eq!(c.mu, 28.555920328820527); - assert_eq!(c.sigma, 1.8856891308577184); + assert_ulps_eq!(a, Gaussian::new(25.488507, 2.638208), epsilon = 1e-6); + assert_ulps_eq!(b, Gaussian::new(25.510671, 2.628751), epsilon = 1e-6); + assert_ulps_eq!(c, Gaussian::new(28.555920, 1.885689), epsilon = 1e-6); } #[test] @@ -454,16 +434,8 @@ mod tests { 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 - ); + assert_ulps_eq!(p[0][0], Gaussian::new(30.625173, 7.765472), epsilon = 1e-6); + assert_ulps_eq!(p[1][0], Gaussian::new(13.749653, 5.733840), epsilon = 1e-6); let w_a = vec![1.0]; let w_b = vec![0.7]; @@ -471,16 +443,8 @@ mod tests { 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 - ); + assert_ulps_eq!(p[0][0], Gaussian::new(27.630080, 7.206676), epsilon = 1e-6); + assert_ulps_eq!(p[1][0], Gaussian::new(23.158943, 7.801628), epsilon = 1e-6); let w_a = vec![1.6]; let w_b = vec![0.7]; @@ -488,16 +452,8 @@ mod tests { 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 - ); + assert_ulps_eq!(p[0][0], Gaussian::new(26.142438, 7.573088), epsilon = 1e-6); + assert_ulps_eq!(p[1][0], Gaussian::new(24.500183, 8.193278), epsilon = 1e-6); let w_a = vec![1.0]; let w_b = vec![0.0]; @@ -508,12 +464,8 @@ mod tests { 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.55706798109105, 4.0528268357577995), - epsilon = 0.000001 - ); - assert_ulps_eq!(p[1][0], Gaussian::new(2.0, 6.0), epsilon = 0.000001); + assert_ulps_eq!(p[0][0], Gaussian::new(5.557067, 4.052826), epsilon = 1e-6); + assert_ulps_eq!(p[1][0], Gaussian::new(2.000000, 6.000000), epsilon = 1e-6); let w_a = vec![1.0]; let w_b = vec![-1.0]; @@ -524,7 +476,7 @@ mod tests { 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[1][0], epsilon = 0.000001); + assert_ulps_eq!(p[0][0], p[1][0], epsilon = 1e-6); } #[test] @@ -544,26 +496,10 @@ mod tests { 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.539023, 8.129639), - epsilon = 0.000001 - ); - assert_ulps_eq!( - p[0][1], - Gaussian::new(30.078046, 7.485372), - epsilon = 0.000001 - ); - assert_ulps_eq!( - p[1][0], - Gaussian::new(19.287197, 7.243465), - epsilon = 0.000001 - ); - assert_ulps_eq!( - p[1][1], - Gaussian::new(21.191465, 7.867608), - epsilon = 0.000001 - ); + assert_ulps_eq!(p[0][0], Gaussian::new(27.539023, 8.129639), epsilon = 1e-6); + assert_ulps_eq!(p[0][1], Gaussian::new(30.078046, 7.485372), epsilon = 1e-6); + assert_ulps_eq!(p[1][0], Gaussian::new(19.287197, 7.243465), epsilon = 1e-6); + assert_ulps_eq!(p[1][1], Gaussian::new(21.191465, 7.867608), epsilon = 1e-6); let w_a = vec![1.3, 1.5]; let w_b = vec![0.7, 0.4]; @@ -571,26 +507,10 @@ mod tests { 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(25.190190, 8.220511), - epsilon = 0.000001 - ); - assert_ulps_eq!( - p[0][1], - Gaussian::new(25.219450, 8.182783), - epsilon = 0.000001 - ); - assert_ulps_eq!( - p[1][0], - Gaussian::new(24.897589, 8.300779), - epsilon = 0.000001 - ); - assert_ulps_eq!( - p[1][1], - Gaussian::new(24.941479, 8.322717), - epsilon = 0.000001 - ); + assert_ulps_eq!(p[0][0], Gaussian::new(25.190190, 8.220511), epsilon = 1e-6); + assert_ulps_eq!(p[0][1], Gaussian::new(25.219450, 8.182783), epsilon = 1e-6); + assert_ulps_eq!(p[1][0], Gaussian::new(24.897589, 8.300779), epsilon = 1e-6); + assert_ulps_eq!(p[1][1], Gaussian::new(24.941479, 8.322717), epsilon = 1e-6); let w_a = vec![1.6, 0.2]; let w_b = vec![0.7, 2.4]; @@ -598,26 +518,10 @@ mod tests { 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(31.674697, 7.501180), - epsilon = 0.000001 - ); - assert_ulps_eq!( - p[0][1], - Gaussian::new(25.834337, 8.320970), - epsilon = 0.000001 - ); - assert_ulps_eq!( - p[1][0], - Gaussian::new(22.079819, 8.180607), - epsilon = 0.000001 - ); - assert_ulps_eq!( - p[1][1], - Gaussian::new(14.987953, 6.308469), - epsilon = 0.000001 - ); + assert_ulps_eq!(p[0][0], Gaussian::new(31.674697, 7.501180), epsilon = 1e-6); + assert_ulps_eq!(p[0][1], Gaussian::new(25.834337, 8.320970), epsilon = 1e-6); + assert_ulps_eq!(p[1][0], Gaussian::new(22.079819, 8.180607), epsilon = 1e-6); + assert_ulps_eq!(p[1][1], Gaussian::new(14.987953, 6.308469), epsilon = 1e-6); let g = Game::new( vec![ @@ -640,9 +544,9 @@ mod tests { let g = Game::new(vec![t_a, t_b.clone()], vec![], vec![w_a, w_b], 0.0); let p = g.posteriors(); - assert_ulps_eq!(p[0][0], post_2vs1[0][0], epsilon = 0.000001); - assert_ulps_eq!(p[0][1], post_2vs1[0][1], epsilon = 0.000001); - assert_ulps_eq!(p[1][0], post_2vs1[1][0], epsilon = 0.000001); - assert_ulps_eq!(p[1][1], t_b[1].prior, epsilon = 0.000001); + assert_ulps_eq!(p[0][0], post_2vs1[0][0], epsilon = 1e-6); + assert_ulps_eq!(p[0][1], post_2vs1[0][1], epsilon = 1e-6); + assert_ulps_eq!(p[1][0], post_2vs1[1][0], epsilon = 1e-6); + assert_ulps_eq!(p[1][1], t_b[1].prior, epsilon = 1e-6); } } diff --git a/src/lib.rs b/src/lib.rs index 1cab459..66a0762 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -79,6 +79,15 @@ where } } +impl Default for IndexMap +where + K: Eq + Hash, +{ + fn default() -> Self { + IndexMap::new() + } +} + fn erfc(x: f64) -> f64 { let z = x.abs(); let t = 1.0 / (1.0 + z / 2.0);