Skip to content

Commit 4a81720

Browse files
curiecryptiquerejeta
authored andcommitted
prop compose for batch test
1 parent 3586773 commit 4a81720

File tree

1 file changed

+72
-25
lines changed

1 file changed

+72
-25
lines changed

mithril-stm/src/merkle_tree.rs

Lines changed: 72 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -684,16 +684,16 @@ mod tests {
684684
assert_eq!(tree.nodes, decoded.nodes);
685685
}
686686

687-
#[test]
688-
fn test_create_batch_proof((t, values) in arb_tree(30)) {
689-
let mut mt_index_list :Vec<usize> = Vec::new();
690-
for (i, _v) in values.iter().enumerate() {
691-
mt_index_list.push(i);
692-
}
693-
mt_index_list.sort_unstable();
694-
let batch_proof = t.get_batched_path(mt_index_list);
695-
assert!(t.to_commitment_batch_compat().check(&values, &batch_proof).is_ok());
696-
}
687+
// #[test]
688+
// fn test_create_batch_proof((t, values) in arb_tree(30)) {
689+
// let mut mt_index_list :Vec<usize> = Vec::new();
690+
// for (i, _v) in values.iter().enumerate() {
691+
// mt_index_list.push(i);
692+
// }
693+
// mt_index_list.sort_unstable();
694+
// let batch_proof = t.get_batched_path(mt_index_list);
695+
// assert!(t.to_commitment_batch_compat().check(&values, &batch_proof).is_ok());
696+
// }
697697

698698
#[test]
699699
fn test_bytes_batch_path((t, values) in arb_tree(30)) {
@@ -780,19 +780,66 @@ mod tests {
780780
}
781781
}
782782

783-
// prop_compose! {
784-
// fn arb_tree_arb_index_list(max_size: u32)
785-
// (v in vec(any::<u64>(), 2..max_size as usize)) -> (MerkleTree<Blake2b<U32>>, Vec<MTLeaf>, Vec<&'static usize>) {
786-
// let mut rng = thread_rng();
787-
// let size = v.len();
788-
// let pks = vec![VerificationKey::default(); size];
789-
// let leaves = pks.into_iter().zip(v.into_iter()).map(|(key, stake)| MTLeaf(key, stake)).collect::<Vec<MTLeaf>>();
790-
// let mut indices :Vec<usize> = Vec::with_capacity(size);
791-
// for (i, _v) in leaves.iter().enumerate() {
792-
// indices.push(i);
793-
// }
794-
// let mt_index_list: Vec<&usize> = indices.iter().choose_multiple(&mut rng, (size/10)*7);
795-
// (MerkleTree::<Blake2b<U32>>::create(&leaves), leaves, mt_index_list)
796-
// }
797-
// }
783+
prop_compose! {
784+
fn arb_tree_arb_index_list(max_size: u32)
785+
(v in vec(any::<u64>(), 2..max_size as usize)) -> (MerkleTree<Blake2b<U32>>, Vec<MTLeaf>, Vec<usize>) {
786+
let mut rng = thread_rng();
787+
let size = v.len();
788+
let pks = vec![VerificationKey::default(); size];
789+
let leaves = pks.into_iter().zip(v.into_iter()).map(|(key, stake)| MTLeaf(key, stake)).collect::<Vec<MTLeaf>>();
790+
let mut indices :Vec<usize> = Vec::with_capacity(size);
791+
for (i, _v) in leaves.iter().enumerate() {
792+
indices.push(i);
793+
}
794+
indices.iter().choose_multiple(&mut rng, size / 10 * 7);
795+
(MerkleTree::<Blake2b<U32>>::create(&leaves), leaves, indices)
796+
}
797+
}
798+
799+
proptest! {
800+
// Test the relation that t.get_path(i) is a valid
801+
// proof for i
802+
#![proptest_config(ProptestConfig::with_cases(100))]
803+
#[test]
804+
fn test_create_batch_proof((t, values, indices) in arb_tree_arb_index_list(60)) {
805+
806+
indices.clone().sort_unstable();
807+
print!("Indices: {}\n", indices.len());
808+
let batch_proof = t.get_batched_path(indices);
809+
print!("Path: {}\n", batch_proof.values.len());
810+
print!("tree: {}\n", t.nodes.len());
811+
812+
assert!(t.to_commitment_batch_compat().check(&values, &batch_proof).is_ok());
813+
}
814+
815+
// #[test]
816+
// fn test_bytes_batch_path((t, values) in arb_tree(30)) {
817+
// let mut mt_index_list :Vec<usize> = Vec::new();
818+
// for (i, _v) in values.iter().enumerate() {
819+
// mt_index_list.push(i);
820+
// }
821+
// mt_index_list.sort_unstable();
822+
//
823+
// let bp = t.get_batched_path(mt_index_list);
824+
//
825+
// let bytes = &bp.to_bytes();
826+
// let deserialized = BatchPath::from_bytes(bytes).unwrap();
827+
// assert!(t.to_commitment_batch_compat().check(&values, &deserialized).is_ok());
828+
//
829+
// let encoded = bincode::serialize(&bp).unwrap();
830+
// let decoded: BatchPath<Blake2b<U32>> = bincode::deserialize(&encoded).unwrap();
831+
// assert!(t.to_commitment_batch_compat().check(&values, &decoded).is_ok());
832+
// }
833+
//
834+
// #[test]
835+
// fn test_bytes_tree_commitment_batch_compat((t, values) in arb_tree(5)) {
836+
// let encoded = bincode::serialize(&t.to_commitment_batch_compat()).unwrap();
837+
// let decoded: MerkleTreeCommitmentBatchCompat::<Blake2b<U32>> = bincode::deserialize(&encoded).unwrap();
838+
// let tree_commitment = MerkleTree::<Blake2b<U32>>::create(&values).to_commitment_batch_compat();
839+
// assert_eq!(tree_commitment.root, decoded.root);
840+
// assert_eq!(tree_commitment.nr_leaves, decoded.nr_leaves);
841+
//
842+
// }
843+
844+
}
798845
}

0 commit comments

Comments
 (0)