types: Add Nodes::random_distinct to randomly generate sets of nodes

Summary:
Add a utility function for tests to generate a vector of random nodes.  This
will be used in future tests.

Reviewed By: DurhamG

Differential Revision: D12980784

fbshipit-source-id: 73fc8643503e11a46a845671df94c912a5e49d23
This commit is contained in:
Mark Thomas 2018-12-14 06:41:07 -08:00 committed by Facebook Github Bot
parent d0c03f6aaf
commit 88ab626e9a

View File

@ -6,6 +6,9 @@ use std::io::{self, Read, Write};
#[cfg(any(test, feature = "for-tests"))]
use rand::RngCore;
#[cfg(any(test, feature = "for-tests"))]
use std::collections::HashSet;
#[derive(Debug, Fail)]
#[fail(display = "Node Error: {:?}", _0)]
struct NodeError(String);
@ -84,6 +87,20 @@ impl Node {
}
}
}
#[cfg(any(test, feature = "for-tests"))]
pub fn random_distinct(rng: &mut RngCore, count: usize) -> Vec<Self> {
let mut nodes = Vec::new();
let mut nodeset = HashSet::new();
while nodes.len() < count {
let node = Node::random(rng);
if !nodeset.contains(&node) {
nodeset.insert(node.clone());
nodes.push(node);
}
}
nodes
}
}
impl Display for Node {