in src/tests.rs [172:226]
fn test_random_sampling(list: &[(TreeIndex, P)], tree: &SMT<P>) {
let secret = &ALL_ZEROS_SECRET;
// Test random sampling.
// When the index looked up exists.
for item in list.iter() {
assert!(Tester::<P>::random_sampling(tree, &item.0));
}
// When no node exists.
let empty_tree: SMT<P> = SMT::new(TREE_HEIGHT);
assert!(Tester::<P>::random_sampling(&empty_tree, &list[0].0));
// When the index looked up doesn't exist and left neighbour doesn't exist.
let index = list[0].0.get_left_index();
if let Some(index) = index {
assert!(Tester::<P>::random_sampling(tree, &index));
let proof = RandomSamplingProof::<P>::random_sampling(tree, &index, secret);
assert_eq!(proof.get_merkle_proof().get_indexes().len(), 1);
assert_eq!(proof.get_merkle_proof().get_indexes()[0], list[0].0);
}
// When the index looked up doesn't exist and right neighbour doesn't exist.
let index = list[list.len() - 1].0.get_right_index();
if let Some(index) = index {
assert!(Tester::<P>::random_sampling(tree, &index));
let proof = RandomSamplingProof::<P>::random_sampling(tree, &index, secret);
assert_eq!(proof.get_merkle_proof().get_indexes().len(), 1);
assert_eq!(
proof.get_merkle_proof().get_indexes()[0],
list[list.len() - 1].0
);
}
// When the index looked up doesn't exist but both neighbours exist.
for i in 1..list.len() {
let index = list[i].0.get_left_index().unwrap();
if index > list[i - 1].0 {
assert!(Tester::<P>::random_sampling(tree, &index));
let proof = RandomSamplingProof::<P>::random_sampling(tree, &index, secret);
assert_eq!(proof.get_merkle_proof().get_indexes().len(), 2);
assert_eq!(proof.get_merkle_proof().get_indexes()[0], list[i - 1].0);
assert_eq!(proof.get_merkle_proof().get_indexes()[1], list[i].0);
}
let index = list[i - 1].0.get_right_index().unwrap();
if index < list[i].0 {
assert!(Tester::<P>::random_sampling(tree, &index));
let proof = RandomSamplingProof::<P>::random_sampling(tree, &index, secret);
assert_eq!(proof.get_merkle_proof().get_indexes().len(), 2);
assert_eq!(proof.get_merkle_proof().get_indexes()[0], list[i - 1].0);
assert_eq!(proof.get_merkle_proof().get_indexes()[1], list[i].0);
}
}
}