Compare commits

...

4 Commits

Author SHA1 Message Date
853f177fa8 Small changes for new 2024 edition 2025-02-21 14:09:58 +01:00
fc0efcdc52 Update edition 2025-02-21 14:06:28 +01:00
3bbddb168f Ignore temp folder 2024-04-03 14:43:54 +02:00
2366c45f6a Basic test for quality 2024-04-03 10:25:10 +02:00
3 changed files with 19 additions and 14 deletions

1
.gitignore vendored
View File

@@ -1,5 +1,6 @@
/target /target
/Cargo.lock /Cargo.lock
/temp
.justfile .justfile
*.svg *.svg

View File

@@ -1,7 +1,7 @@
[package] [package]
name = "trueskill-tt" name = "trueskill-tt"
version = "0.1.0" version = "0.1.0"
edition = "2021" edition = "2024"
[lib] [lib]
bench = false bench = false

View File

@@ -82,7 +82,7 @@ where
pub fn key(&self, idx: Index) -> Option<&K> { pub fn key(&self, idx: Index) -> Option<&K> {
self.0 self.0
.iter() .iter()
.find(|(_, &value)| value == idx) .find(|&(_, value)| *value == idx)
.map(|(key, _)| key) .map(|(key, _)| key)
} }
@@ -115,11 +115,7 @@ fn erfc(x: f64) -> f64 {
let r = t * (-z * z - 1.26551223 + t * h).exp(); let r = t * (-z * z - 1.26551223 + t * h).exp();
if x >= 0.0 { if x >= 0.0 { r } else { 2.0 - r }
r
} else {
2.0 - r
}
} }
fn erfc_inv(mut y: f64) -> f64 { fn erfc_inv(mut y: f64) -> f64 {
@@ -147,11 +143,7 @@ fn erfc_inv(mut y: f64) -> f64 {
x += err / (FRAC_2_SQRT_PI * (-(x.powi(2))).exp() - x * err) x += err / (FRAC_2_SQRT_PI * (-(x.powi(2))).exp() - x * err)
} }
if y < 1.0 { if y < 1.0 { x } else { -x }
x
} else {
-x
}
} }
fn ppf(p: f64, mu: f64, sigma: f64) -> f64 { fn ppf(p: f64, mu: f64, sigma: f64) -> f64 {
@@ -239,9 +231,9 @@ pub(crate) fn sort_time(xs: &[i64], reverse: bool) -> Vec<usize> {
let mut x = xs.iter().enumerate().collect::<Vec<_>>(); let mut x = xs.iter().enumerate().collect::<Vec<_>>();
if reverse { if reverse {
x.sort_by_key(|(_, &x)| Reverse(x)); x.sort_by_key(|&(_, x)| Reverse(x));
} else { } else {
x.sort_by_key(|(_, &x)| x); x.sort_by_key(|&(_, x)| x);
} }
x.into_iter().map(|(i, _)| i).collect() x.into_iter().map(|(i, _)| i).collect()
@@ -320,6 +312,8 @@ pub fn quality(rating_groups: &[&[Gaussian]], beta: f64) -> f64 {
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use ::approx::assert_ulps_eq;
use super::*; use super::*;
#[test] #[test]
@@ -331,4 +325,14 @@ mod tests {
fn test_sort_time() { fn test_sort_time() {
assert_eq!(sort_time(&[0, 1, 2, 0], true), vec![2, 1, 0, 3]); assert_eq!(sort_time(&[0, 1, 2, 0], true), vec![2, 1, 0, 3]);
} }
#[test]
fn test_quality() {
let a = Gaussian::from_ms(25.0, 3.0);
let b = Gaussian::from_ms(25.0, 3.0);
let q = quality(&[&[a], &[b]], 25.0 / 3.0 / 2.0);
assert_ulps_eq!(q, 0.8115343414514944, epsilon = 1e-6)
}
} }