diff --git a/wotb/legacy.rs b/wotb/legacy.rs index f70da9e47aeb2567fce7f3aaa50b860f92aaa784..402288a35ed1420d851fefd76f980b3aefc4773d 100644 --- a/wotb/legacy.rs +++ b/wotb/legacy.rs @@ -398,7 +398,9 @@ impl WebOfTrust for LegacyWebOfTrust { let mut result = WotDistance { sentries: 0, success: 0, + success_at_border: 0, reached: 0, + reached_at_border: 0, outdistanced: false, }; @@ -412,17 +414,30 @@ impl WebOfTrust for LegacyWebOfTrust { sentries[node.0] = false; let mut checked: Vec<bool> = self.nodes.iter().map(|_| false).collect(); + let mut checked_without_border: Vec<bool> = checked.clone(); if step_max >= 1 { checked = self.check_matches(node, 1, step_max, checked); + if step_max >= 2 { + checked_without_border = + self.check_matches(node, 1, step_max - 1, checked_without_border); + } } - for (&sentry, &check) in sentries.iter().zip(checked.iter()) { + for ((&sentry, &check), &check_without_border) in sentries + .iter() + .zip(checked.iter()) + .zip(checked_without_border.iter()) + { if sentry { result.sentries += 1; if check { result.success += 1; result.reached += 1; + if !check_without_border { + result.success_at_border += 1; + result.reached_at_border += 1; + } } } else if check { result.reached += 1; diff --git a/wotb/lib.rs b/wotb/lib.rs index b0f9af3d5bed6afcebfcbbd2e92d02b794488c3b..fa08f9f564fb08ba89a2854c663ba623502801ec 100644 --- a/wotb/lib.rs +++ b/wotb/lib.rs @@ -151,8 +151,12 @@ pub struct WotDistance { pub sentries: u32, /// Success count pub success: u32, + /// Succes at border count + pub success_at_border: u32, /// Reached count pub reached: u32, + /// Reached at border count + pub reached_at_border: u32, /// Is the node outdistanced ? pub outdistanced: bool, } diff --git a/wotb/rusty.rs b/wotb/rusty.rs index b7ae38b6e8cfe6afa64d0b60bff84bb76446e98c..aa2d9e3de24f098dd96f5e6a73923df299e18c3f 100644 --- a/wotb/rusty.rs +++ b/wotb/rusty.rs @@ -286,8 +286,8 @@ impl WebOfTrust for RustyWebOfTrust { } let sentries: Vec<_> = self.get_sentries(sentry_requirement as usize); - let success = area.iter().filter(|n| sentries.contains(n)).count() as u32; + let success_at_border = border.iter().filter(|n| sentries.contains(n)).count() as u32; let sentries = sentries.len() as u32 - if self.is_sentry(node, sentry_requirement as usize).unwrap() { 1 @@ -298,7 +298,9 @@ impl WebOfTrust for RustyWebOfTrust { Some(WotDistance { sentries, reached: (area.len() - 1) as u32, + reached_at_border: (border.len() - 1) as u32, success, + success_at_border, outdistanced: f64::from(success) < x_percent * f64::from(sentries), }) }