@@ -684,36 +684,6 @@ mod tests {
684
684
assert_eq!( tree. nodes, decoded. nodes) ;
685
685
}
686
686
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
- // }
697
-
698
- #[ test]
699
- fn test_bytes_batch_path( ( t, values) in arb_tree( 30 ) ) {
700
- let mut mt_index_list : Vec <usize > = Vec :: new( ) ;
701
- for ( i, _v) in values. iter( ) . enumerate( ) {
702
- mt_index_list. push( i) ;
703
- }
704
- mt_index_list. sort_unstable( ) ;
705
-
706
- let bp = t. get_batched_path( mt_index_list) ;
707
-
708
- let bytes = & bp. to_bytes( ) ;
709
- let deserialized = BatchPath :: from_bytes( bytes) . unwrap( ) ;
710
- assert!( t. to_commitment_batch_compat( ) . check( & values, & deserialized) . is_ok( ) ) ;
711
-
712
- let encoded = bincode:: serialize( & bp) . unwrap( ) ;
713
- let decoded: BatchPath <Blake2b <U32 >> = bincode:: deserialize( & encoded) . unwrap( ) ;
714
- assert!( t. to_commitment_batch_compat( ) . check( & values, & decoded) . is_ok( ) ) ;
715
- }
716
-
717
687
#[ test]
718
688
fn test_bytes_tree_commitment_batch_compat( ( t, values) in arb_tree( 5 ) ) {
719
689
let encoded = bincode:: serialize( & t. to_commitment_batch_compat( ) ) . unwrap( ) ;
@@ -781,65 +751,45 @@ mod tests {
781
751
}
782
752
783
753
prop_compose ! {
784
- fn arb_tree_arb_index_list ( max_size: u32 )
754
+ fn arb_tree_arb_batch ( max_size: u32 )
785
755
( v in vec( any:: <u64 >( ) , 2 ..max_size as usize ) ) -> ( MerkleTree <Blake2b <U32 >>, Vec <MTLeaf >, Vec <usize >) {
786
756
let mut rng = thread_rng( ) ;
787
757
let size = v. len( ) ;
788
758
let pks = vec![ VerificationKey :: default ( ) ; size] ;
789
759
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) ;
760
+
761
+ let indices: Vec <usize > = ( 0 ..size) . collect( ) ;
762
+ let mut mt_list: Vec <usize > = indices. into_iter( ) . choose_multiple( & mut rng, size * 2 / 10 + 1 ) ;
763
+ mt_list. sort_unstable( ) ;
764
+
765
+ let mut batch_values: Vec <MTLeaf > = Vec :: with_capacity( mt_list. len( ) ) ;
766
+ for i in mt_list. iter( ) {
767
+ batch_values. push( leaves[ * i] ) ;
793
768
}
794
- indices . iter ( ) . choose_multiple ( & mut rng , size / 10 * 7 ) ;
795
- ( MerkleTree :: <Blake2b <U32 >>:: create( & leaves) , leaves , indices )
769
+
770
+ ( MerkleTree :: <Blake2b <U32 >>:: create( & leaves) , batch_values , mt_list )
796
771
}
797
772
}
798
773
799
774
proptest ! {
800
- // Test the relation that t.get_path(i) is a valid
801
- // proof for i
802
775
#![ proptest_config( ProptestConfig :: with_cases( 100 ) ) ]
803
776
#[ 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( ) ) ;
777
+ fn test_create_batch_proof( ( t, batch_values, indices) in arb_tree_arb_batch( 30 ) ) {
808
778
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
- // }
779
+ assert!( t. to_commitment_batch_compat( ) . check( & batch_values, & batch_proof) . is_ok( ) ) ;
780
+ }
781
+
782
+ #[ test]
783
+ fn test_bytes_batch_path( ( t, batch_values, indices) in arb_tree_arb_batch( 30 ) ) {
784
+ let bp = t. get_batched_path( indices) ;
843
785
786
+ let bytes = & bp. to_bytes( ) ;
787
+ let deserialized = BatchPath :: from_bytes( bytes) . unwrap( ) ;
788
+ assert!( t. to_commitment_batch_compat( ) . check( & batch_values, & deserialized) . is_ok( ) ) ;
789
+
790
+ let encoded = bincode:: serialize( & bp) . unwrap( ) ;
791
+ let decoded: BatchPath <Blake2b <U32 >> = bincode:: deserialize( & encoded) . unwrap( ) ;
792
+ assert!( t. to_commitment_batch_compat( ) . check( & batch_values, & decoded) . is_ok( ) ) ;
793
+ }
844
794
}
845
795
}
0 commit comments