More tests, more code

This commit is contained in:
2022-06-19 23:52:52 +02:00
parent c9d9d59535
commit 0efb0312da
3 changed files with 472 additions and 121 deletions

View File

@@ -37,7 +37,7 @@ struct Team {
}
#[derive(Debug)]
struct Event {
pub(crate) struct Event {
teams: Vec<Team>,
evidence: f64,
weights: Vec<Vec<f64>>,
@@ -53,7 +53,7 @@ impl Event {
}
pub(crate) struct Batch {
events: Vec<Event>,
pub(crate) events: Vec<Event>,
pub(crate) skills: HashMap<String, Skill>,
pub(crate) time: u64,
p_draw: f64,
@@ -414,9 +414,40 @@ impl Batch {
}
}
}
pub(crate) fn get_composition(&self) -> Vec<Vec<Vec<&str>>> {
self.events
.iter()
.map(|event| {
event
.teams
.iter()
.map(|team| {
team.items
.iter()
.map(|item| item.agent.as_str())
.collect::<Vec<_>>()
})
.collect::<Vec<_>>()
})
.collect::<Vec<_>>()
}
pub(crate) fn get_results(&self) -> Vec<Vec<f64>> {
self.events
.iter()
.map(|event| {
event
.teams
.iter()
.map(|team| team.output)
.collect::<Vec<_>>()
})
.collect::<Vec<_>>()
}
}
fn compute_elapsed(last_time: u64, actual_time: u64) -> u64 {
pub(crate) fn compute_elapsed(last_time: u64, actual_time: u64) -> u64 {
if last_time == u64::MIN {
0
} else if last_time == u64::MAX {
@@ -425,6 +456,7 @@ fn compute_elapsed(last_time: u64, actual_time: u64) -> u64 {
actual_time - last_time
}
}
#[cfg(test)]
mod tests {
use approx::assert_ulps_eq;
@@ -566,14 +598,23 @@ mod tests {
let post = batch.posteriors();
assert_ulps_eq!(post["a"].mu, 25.000000, epsilon = 0.000001);
assert_ulps_eq!(post["a"].sigma, 5.4192120, epsilon = 0.000001);
assert_ulps_eq!(
post["a"],
Gaussian::new(25.000000, 5.4192120),
epsilon = 0.000001
);
assert_ulps_eq!(post["b"].mu, 25.000000, epsilon = 0.000001);
assert_ulps_eq!(post["b"].sigma, 5.4192120, epsilon = 0.000001);
assert_ulps_eq!(
post["b"],
Gaussian::new(25.000000, 5.4192120),
epsilon = 0.000001
);
assert_ulps_eq!(post["c"].mu, 25.000000, epsilon = 0.000001);
assert_ulps_eq!(post["c"].sigma, 5.4192120, epsilon = 0.000001);
assert_ulps_eq!(
post["c"],
Gaussian::new(25.000000, 5.4192120),
epsilon = 0.000001
);
batch.add_events(
vec![
@@ -592,13 +633,20 @@ mod tests {
let post = batch.posteriors();
assert_ulps_eq!(post["a"].mu, 25.00000315330858, epsilon = 0.000001);
assert_ulps_eq!(post["a"].sigma, 3.880150268080797, epsilon = 0.000001);
assert_ulps_eq!(post["b"].mu, 25.00000315330858, epsilon = 0.000001);
assert_ulps_eq!(post["b"].sigma, 3.880150268080797, epsilon = 0.000001);
assert_ulps_eq!(post["c"].mu, 25.00000315330858, epsilon = 0.000001);
assert_ulps_eq!(post["c"].sigma, 3.880150268080797, epsilon = 0.000001);
assert_ulps_eq!(
post["a"],
Gaussian::new(25.00000315330858, 3.880150268080797),
epsilon = 0.000001
);
assert_ulps_eq!(
post["b"],
Gaussian::new(25.00000315330858, 3.880150268080797),
epsilon = 0.000001
);
assert_ulps_eq!(
post["c"],
Gaussian::new(25.00000315330858, 3.880150268080797),
epsilon = 0.000001
);
}
}