@@ -47,22 +47,37 @@ template <class RecursiveBuilder> class BoomerangRecursiveMergeVerifierTest : pu
4747 EXPECT_EQ (result.second .size (), 0 );
4848 }
4949
50- static void prove_and_verify_merge (const std::shared_ptr<ECCOpQueue>& op_queue,
51- const MergeSettings settings = MergeSettings::PREPEND,
52- const bool run_analyzer = false )
50+ static std::shared_ptr<ECCOpQueue> construct_final_merge_op_queue (const size_t num_subtables_up_to_tail)
51+ {
52+ auto op_queue = std::make_shared<ECCOpQueue>();
53+
54+ for (size_t idx = 0 ; idx < num_subtables_up_to_tail; ++idx) {
55+ InnerBuilder circuit{ op_queue };
56+ GoblinMockCircuits::construct_simple_circuit (circuit);
57+ op_queue->merge ();
58+ }
59+
60+ op_queue->construct_zk_columns ();
61+
62+ InnerBuilder hiding_circuit{ op_queue };
63+ GoblinMockCircuits::construct_simple_circuit (hiding_circuit);
64+ return op_queue;
65+ }
66+
67+ static void prove_and_verify_merge (const std::shared_ptr<ECCOpQueue>& op_queue, const bool run_analyzer = false )
5368
5469 {
5570 RecursiveBuilder outer_circuit;
5671
5772 auto prover_transcript = std::make_shared<NativeTranscript>();
58- MergeProver merge_prover{ op_queue, prover_transcript, settings };
73+ MergeProver merge_prover{ op_queue, prover_transcript };
5974 auto merge_proof = merge_prover.construct_proof ();
6075
6176 // Subtable values and commitments - needed for (Recursive)MergeVerifier
6277 MergeCommitments merge_commitments;
6378 RecursiveMergeCommitments recursive_merge_commitments;
6479 auto t_current = op_queue->construct_current_ultra_ops_subtable_columns ();
65- auto T_prev = op_queue->construct_previous_ultra_ops_table_columns ();
80+ auto T_prev = op_queue->construct_table_columns_up_to_tail ();
6681 for (size_t idx = 0 ; idx < InnerFlavor::NUM_WIRES; idx++) {
6782 merge_commitments.t_commitments [idx] = merge_prover.pcs_commitment_key .commit (t_current[idx]);
6883 merge_commitments.T_prev_commitments [idx] = merge_prover.pcs_commitment_key .commit (T_prev[idx]);
@@ -78,7 +93,7 @@ template <class RecursiveBuilder> class BoomerangRecursiveMergeVerifierTest : pu
7893
7994 // Create a recursive merge verification circuit for the merge proof
8095 auto merge_transcript = std::make_shared<StdlibTranscript<RecursiveBuilder>>();
81- RecursiveMergeVerifier verifier{ settings, merge_transcript };
96+ RecursiveMergeVerifier verifier{ merge_transcript };
8297 const stdlib::Proof<RecursiveBuilder> stdlib_merge_proof (outer_circuit, merge_proof);
8398 auto [pairing_points, merged_commitments, reduction_succeeded] =
8499 verifier.reduce_to_pairing_check (stdlib_merge_proof, recursive_merge_commitments);
@@ -96,53 +111,20 @@ template <class RecursiveBuilder> class BoomerangRecursiveMergeVerifierTest : pu
96111 }
97112 }
98113
99- static void test_recursive_merge_verification_prepend ()
100- {
101- auto op_queue = std::make_shared<ECCOpQueue>();
102-
103- InnerBuilder circuit{ op_queue };
104- GoblinMockCircuits::construct_simple_circuit (circuit);
105- prove_and_verify_merge (op_queue);
106-
107- InnerBuilder circuit2{ op_queue };
108- GoblinMockCircuits::construct_simple_circuit (circuit2);
109- prove_and_verify_merge (op_queue);
110-
111- InnerBuilder circuit3{ op_queue };
112- GoblinMockCircuits::construct_simple_circuit (circuit3);
113- prove_and_verify_merge (op_queue, MergeSettings::PREPEND, true );
114- }
115-
116- static void test_recursive_merge_verification_append ()
114+ static void test_recursive_merge_verification ()
117115 {
118- auto op_queue = std::make_shared<ECCOpQueue>();
119-
120- InnerBuilder circuit{ op_queue };
121- GoblinMockCircuits::construct_simple_circuit (circuit);
122- prove_and_verify_merge (op_queue);
123-
124- InnerBuilder circuit2{ op_queue };
125- GoblinMockCircuits::construct_simple_circuit (circuit2);
126- prove_and_verify_merge (op_queue);
127-
128- InnerBuilder circuit3{ op_queue };
129- GoblinMockCircuits::construct_simple_circuit (circuit3);
130- prove_and_verify_merge (op_queue, MergeSettings::APPEND, true );
116+ auto op_queue = construct_final_merge_op_queue (/* num_subtables_up_to_tail=*/ 3 );
117+ prove_and_verify_merge (op_queue, /* run_analyzer=*/ true );
131118 }
132119};
133120
134121using Builder = testing::Types<MegaCircuitBuilder>;
135122
136123TYPED_TEST_SUITE (BoomerangRecursiveMergeVerifierTest, Builder);
137124
138- TYPED_TEST (BoomerangRecursiveMergeVerifierTest, RecursiveVerificationPrepend)
139- {
140- TestFixture::test_recursive_merge_verification_prepend ();
141- };
142-
143- TYPED_TEST (BoomerangRecursiveMergeVerifierTest, RecursiveVerificationAppend)
125+ TYPED_TEST (BoomerangRecursiveMergeVerifierTest, RecursiveMergeVerification)
144126{
145- TestFixture::test_recursive_merge_verification_append ();
127+ TestFixture::test_recursive_merge_verification ();
146128};
147129
148130} // namespace bb::stdlib::recursion::goblin
0 commit comments