More tests, more code
This commit is contained in:
82
src/batch.rs
82
src/batch.rs
@@ -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
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user