@@ -548,6 +548,7 @@ impl MainPodVerifyCircuit {
548548
549549#[ cfg( test) ]
550550mod tests {
551+ use merkletree:: MerkleTree ;
551552 use plonky2:: hash:: merkle_proofs;
552553 use plonky2:: plonk:: { circuit_builder:: CircuitBuilder , circuit_data:: CircuitConfig } ;
553554
@@ -626,6 +627,8 @@ mod tests {
626627
627628 #[ test]
628629 fn test_operation_verify ( ) -> Result < ( ) > {
630+ let params = Params :: default ( ) ;
631+
629632 // None
630633 let st: mainpod:: Statement = Statement :: None . into ( ) ;
631634 let op = mainpod:: Operation (
@@ -711,6 +714,39 @@ mod tests {
711714 let prev_statements = vec ! [ st1. clone( ) , st2] ;
712715 operation_verify ( st, op, prev_statements, merkle_proofs. clone ( ) ) ?;
713716
717+ // NotContainsFromEntries
718+ let kvs = [
719+ ( 1 . into ( ) , 55 . into ( ) ) ,
720+ ( 2 . into ( ) , 88 . into ( ) ) ,
721+ ( 175 . into ( ) , 0 . into ( ) ) ,
722+ ]
723+ . into_iter ( )
724+ . collect ( ) ;
725+ let mt = MerkleTree :: new ( params. max_depth_mt_gadget , & kvs) ?;
726+
727+ let root = mt. root ( ) . into ( ) ;
728+ let root_ak = AnchoredKey ( PodId ( Value :: from ( 88 ) . into ( ) ) , "merkle root" . into ( ) ) ;
729+
730+ let key = 5 . into ( ) ;
731+ let key_ak = AnchoredKey ( PodId ( Value :: from ( 88 ) . into ( ) ) , "key" . into ( ) ) ;
732+
733+ let no_key_pf = mt. prove_nonexistence ( & key) ?;
734+
735+ let root_st: mainpod:: Statement = Statement :: ValueOf ( root_ak, root) . into ( ) ;
736+ let key_st: mainpod:: Statement = Statement :: ValueOf ( key_ak, key) . into ( ) ;
737+ let st: mainpod:: Statement = Statement :: NotContains ( root_ak, key_ak) . into ( ) ;
738+ let op = mainpod:: Operation (
739+ OperationType :: Native ( NativeOperation :: NotContainsFromEntries ) ,
740+ vec ! [ OperationArg :: Index ( 0 ) , OperationArg :: Index ( 1 ) ] ,
741+ OperationAux :: MerkleProofIndex ( 0 ) ,
742+ ) ;
743+
744+ let merkle_proofs = vec ! [ mainpod:: MerkleProof :: try_from_middleware(
745+ & params, & root, & key, None , & no_key_pf,
746+ ) ?] ;
747+ let prev_statements = vec ! [ root_st, key_st] ;
748+ operation_verify ( st, op, prev_statements, merkle_proofs. clone ( ) ) ?;
749+
714750 Ok ( ( ) )
715751 }
716752}
0 commit comments