1
1
#include " barretenberg/stdlib_circuit_builders/ultra_flavor.hpp"
2
2
#include " barretenberg/sumcheck/sumcheck.hpp"
3
3
4
+ #include < cstddef>
4
5
#include < gtest/gtest.h>
5
6
6
7
using namespace bb ;
@@ -43,6 +44,7 @@ TYPED_TEST(PartialEvaluationTests, TwoRoundsSpecial)
43
44
{
44
45
using Flavor = TypeParam;
45
46
using FF = typename Flavor::FF;
47
+ using Polynomial = typename Flavor::Polynomial;
46
48
using Transcript = typename Flavor::Transcript;
47
49
48
50
// values here are chosen to check another test
@@ -54,9 +56,10 @@ TYPED_TEST(PartialEvaluationTests, TwoRoundsSpecial)
54
56
FF v01 = 0 ;
55
57
FF v11 = 0 ;
56
58
57
- std::array<FF, 4 > f0 = { v00, v10, v01, v11 };
59
+ Polynomial f0 (4 );
60
+ f0.template copy_vector <FF>({ v00, v10, v01, v11 });
58
61
59
- auto full_polynomials = std::array<std::span<FF> , 1 >({ f0 });
62
+ auto full_polynomials = std::array<Polynomial , 1 >({ f0 });
60
63
auto transcript = Transcript::prover_init_empty ();
61
64
auto sumcheck = SumcheckProver<Flavor>(multivariate_n, transcript);
62
65
@@ -66,7 +69,7 @@ TYPED_TEST(PartialEvaluationTests, TwoRoundsSpecial)
66
69
FF expected_hi = v01 * (FF (1 ) - round_challenge_0) + v11 * round_challenge_0;
67
70
68
71
sumcheck.partially_evaluated_polynomials = typename Flavor::PartiallyEvaluatedMultivariates (multivariate_n);
69
- sumcheck.partially_evaluate (full_polynomials, multivariate_n , round_challenge_0);
72
+ sumcheck.partially_evaluate (full_polynomials, 0 , round_challenge_0);
70
73
71
74
auto & first_polynomial = sumcheck.partially_evaluated_polynomials .get_all ()[0 ];
72
75
EXPECT_EQ (first_polynomial[0 ], round_challenge_0);
@@ -75,14 +78,15 @@ TYPED_TEST(PartialEvaluationTests, TwoRoundsSpecial)
75
78
FF round_challenge_1 = 2 ;
76
79
FF expected_val = expected_lo * (FF (1 ) - round_challenge_1) + expected_hi * round_challenge_1;
77
80
78
- sumcheck.partially_evaluate (sumcheck.partially_evaluated_polynomials , multivariate_n >> 1 , round_challenge_1);
81
+ sumcheck.partially_evaluate (sumcheck.partially_evaluated_polynomials , 1 , round_challenge_1);
79
82
EXPECT_EQ (first_polynomial[0 ], expected_val);
80
83
}
81
84
82
85
TYPED_TEST (PartialEvaluationTests, TwoRoundsGeneric)
83
86
{
84
87
using Flavor = TypeParam;
85
88
using FF = typename Flavor::FF;
89
+ using Polynomial = typename Flavor::Polynomial;
86
90
using Transcript = typename Flavor::Transcript;
87
91
88
92
const size_t multivariate_d (2 );
@@ -93,9 +97,10 @@ TYPED_TEST(PartialEvaluationTests, TwoRoundsGeneric)
93
97
FF v01 = FF::random_element ();
94
98
FF v11 = FF::random_element ();
95
99
96
- std::array<FF, 4 > f0 = { v00, v10, v01, v11 };
100
+ Polynomial f0 (4 );
101
+ f0.template copy_vector <FF>({ v00, v10, v01, v11 });
97
102
98
- auto full_polynomials = std::array<std::span<FF> , 1 >({ f0 });
103
+ auto full_polynomials = std::array<Polynomial , 1 >({ f0 });
99
104
auto transcript = Transcript::prover_init_empty ();
100
105
auto sumcheck = SumcheckProver<Flavor>(multivariate_n, transcript);
101
106
@@ -104,15 +109,15 @@ TYPED_TEST(PartialEvaluationTests, TwoRoundsGeneric)
104
109
FF expected_hi = v01 * (FF (1 ) - round_challenge_0) + v11 * round_challenge_0;
105
110
106
111
sumcheck.partially_evaluated_polynomials = typename Flavor::PartiallyEvaluatedMultivariates (multivariate_n);
107
- sumcheck.partially_evaluate (full_polynomials, multivariate_n , round_challenge_0);
112
+ sumcheck.partially_evaluate (full_polynomials, 0 , round_challenge_0);
108
113
auto & first_polynomial = sumcheck.partially_evaluated_polynomials .get_all ()[0 ];
109
114
110
115
EXPECT_EQ (first_polynomial[0 ], expected_lo);
111
116
EXPECT_EQ (first_polynomial[1 ], expected_hi);
112
117
113
118
FF round_challenge_1 = FF::random_element ();
114
119
FF expected_val = expected_lo * (FF (1 ) - round_challenge_1) + expected_hi * round_challenge_1;
115
- sumcheck.partially_evaluate (sumcheck.partially_evaluated_polynomials , multivariate_n >> 1 , round_challenge_1);
120
+ sumcheck.partially_evaluate (sumcheck.partially_evaluated_polynomials , 1 , round_challenge_1);
116
121
EXPECT_EQ (first_polynomial[0 ], expected_val);
117
122
}
118
123
@@ -142,6 +147,7 @@ TYPED_TEST(PartialEvaluationTests, ThreeRoundsSpecial)
142
147
{
143
148
using Flavor = TypeParam;
144
149
using FF = typename Flavor::FF;
150
+ using Polynomial = typename Flavor::Polynomial;
145
151
using Transcript = typename Flavor::Transcript;
146
152
147
153
const size_t multivariate_d (3 );
@@ -156,9 +162,10 @@ TYPED_TEST(PartialEvaluationTests, ThreeRoundsSpecial)
156
162
FF v011 = 7 ;
157
163
FF v111 = 8 ;
158
164
159
- std::array<FF, 8 > f0 = { v000, v100, v010, v110, v001, v101, v011, v111 };
165
+ Polynomial f0 (8 );
166
+ f0.template copy_vector <FF>({ v000, v100, v010, v110, v001, v101, v011, v111 });
160
167
161
- auto full_polynomials = std::array<std::span<FF> , 1 >({ f0 });
168
+ auto full_polynomials = std::array<Polynomial , 1 >({ f0 });
162
169
auto transcript = Transcript::prover_init_empty ();
163
170
auto sumcheck = SumcheckProver<Flavor>(multivariate_n, transcript);
164
171
@@ -169,7 +176,7 @@ TYPED_TEST(PartialEvaluationTests, ThreeRoundsSpecial)
169
176
FF expected_q4 = v011 * (FF (1 ) - round_challenge_0) + v111 * round_challenge_0; // 8
170
177
171
178
sumcheck.partially_evaluated_polynomials = typename Flavor::PartiallyEvaluatedMultivariates (multivariate_n);
172
- sumcheck.partially_evaluate (full_polynomials, multivariate_n , round_challenge_0);
179
+ sumcheck.partially_evaluate (full_polynomials, 0 , round_challenge_0);
173
180
174
181
auto & first_polynomial = sumcheck.partially_evaluated_polynomials .get_all ()[0 ];
175
182
EXPECT_EQ (first_polynomial[0 ], expected_q1);
@@ -181,20 +188,21 @@ TYPED_TEST(PartialEvaluationTests, ThreeRoundsSpecial)
181
188
FF expected_lo = expected_q1 * (FF (1 ) - round_challenge_1) + expected_q2 * round_challenge_1; // 6
182
189
FF expected_hi = expected_q3 * (FF (1 ) - round_challenge_1) + expected_q4 * round_challenge_1; // 10
183
190
184
- sumcheck.partially_evaluate (sumcheck.partially_evaluated_polynomials , multivariate_n >> 1 , round_challenge_1);
191
+ sumcheck.partially_evaluate (sumcheck.partially_evaluated_polynomials , 0 , round_challenge_1);
185
192
EXPECT_EQ (first_polynomial[0 ], expected_lo);
186
193
EXPECT_EQ (first_polynomial[1 ], expected_hi);
187
194
188
195
FF round_challenge_2 = 3 ;
189
196
FF expected_val = expected_lo * (FF (1 ) - round_challenge_2) + expected_hi * round_challenge_2; // 18
190
- sumcheck.partially_evaluate (sumcheck.partially_evaluated_polynomials , multivariate_n >> 2 , round_challenge_2);
197
+ sumcheck.partially_evaluate (sumcheck.partially_evaluated_polynomials , 1 , round_challenge_2);
191
198
EXPECT_EQ (first_polynomial[0 ], expected_val);
192
199
}
193
200
194
201
TYPED_TEST (PartialEvaluationTests, ThreeRoundsGeneric)
195
202
{
196
203
using Flavor = TypeParam;
197
204
using FF = typename Flavor::FF;
205
+ using Polynomial = typename Flavor::Polynomial;
198
206
using Transcript = typename Flavor::Transcript;
199
207
200
208
const size_t multivariate_d (3 );
@@ -209,9 +217,10 @@ TYPED_TEST(PartialEvaluationTests, ThreeRoundsGeneric)
209
217
FF v011 = FF::random_element ();
210
218
FF v111 = FF::random_element ();
211
219
212
- std::array<FF, 8 > f0 = { v000, v100, v010, v110, v001, v101, v011, v111 };
220
+ Polynomial f0 (8 );
221
+ f0.template copy_vector <FF>({ v000, v100, v010, v110, v001, v101, v011, v111 });
213
222
214
- auto full_polynomials = std::array<std::span<FF> , 1 >({ f0 });
223
+ auto full_polynomials = std::array<Polynomial , 1 >({ f0 });
215
224
auto transcript = Transcript::prover_init_empty ();
216
225
auto sumcheck = SumcheckProver<Flavor>(multivariate_n, transcript);
217
226
@@ -223,7 +232,7 @@ TYPED_TEST(PartialEvaluationTests, ThreeRoundsGeneric)
223
232
224
233
sumcheck.partially_evaluated_polynomials = typename Flavor::PartiallyEvaluatedMultivariates (multivariate_n);
225
234
auto & first_polynomial = sumcheck.partially_evaluated_polynomials .get_all ()[0 ];
226
- sumcheck.partially_evaluate (full_polynomials, multivariate_n , round_challenge_0);
235
+ sumcheck.partially_evaluate (full_polynomials, 0 , round_challenge_0);
227
236
228
237
EXPECT_EQ (first_polynomial[0 ], expected_q1);
229
238
EXPECT_EQ (first_polynomial[1 ], expected_q2);
@@ -234,20 +243,21 @@ TYPED_TEST(PartialEvaluationTests, ThreeRoundsGeneric)
234
243
FF expected_lo = expected_q1 * (FF (1 ) - round_challenge_1) + expected_q2 * round_challenge_1;
235
244
FF expected_hi = expected_q3 * (FF (1 ) - round_challenge_1) + expected_q4 * round_challenge_1;
236
245
237
- sumcheck.partially_evaluate (sumcheck.partially_evaluated_polynomials , multivariate_n >> 1 , round_challenge_1);
246
+ sumcheck.partially_evaluate (sumcheck.partially_evaluated_polynomials , 0 , round_challenge_1);
238
247
EXPECT_EQ (first_polynomial[0 ], expected_lo);
239
248
EXPECT_EQ (first_polynomial[1 ], expected_hi);
240
249
241
250
FF round_challenge_2 = FF::random_element ();
242
251
FF expected_val = expected_lo * (FF (1 ) - round_challenge_2) + expected_hi * round_challenge_2;
243
- sumcheck.partially_evaluate (sumcheck.partially_evaluated_polynomials , multivariate_n >> 2 , round_challenge_2);
252
+ sumcheck.partially_evaluate (sumcheck.partially_evaluated_polynomials , 1 , round_challenge_2);
244
253
EXPECT_EQ (first_polynomial[0 ], expected_val);
245
254
}
246
255
247
256
TYPED_TEST (PartialEvaluationTests, ThreeRoundsGenericMultiplePolys)
248
257
{
249
258
using Flavor = TypeParam;
250
259
using FF = typename Flavor::FF;
260
+ using Polynomial = typename Flavor::Polynomial;
251
261
using Transcript = typename Flavor::Transcript;
252
262
253
263
const size_t multivariate_d (3 );
@@ -271,11 +281,12 @@ TYPED_TEST(PartialEvaluationTests, ThreeRoundsGenericMultiplePolys)
271
281
v011[i] = FF::random_element ();
272
282
v111[i] = FF::random_element ();
273
283
}
274
- std::array<FF, 8 > f0 = { v000[0 ], v100[0 ], v010[0 ], v110[0 ], v001[0 ], v101[0 ], v011[0 ], v111[0 ] };
275
- std::array<FF, 8 > f1 = { v000[1 ], v100[1 ], v010[1 ], v110[1 ], v001[1 ], v101[1 ], v011[1 ], v111[1 ] };
276
- std::array<FF, 8 > f2 = { v000[2 ], v100[2 ], v010[2 ], v110[2 ], v001[2 ], v101[2 ], v011[2 ], v111[2 ] };
284
+ Polynomial f0 (8 ), f1 (8 ), f2 (8 );
285
+ f0.template copy_vector <FF>({ v000[0 ], v100[0 ], v010[0 ], v110[0 ], v001[0 ], v101[0 ], v011[0 ], v111[0 ] });
286
+ f1.template copy_vector <FF>({ v000[1 ], v100[1 ], v010[1 ], v110[1 ], v001[1 ], v101[1 ], v011[1 ], v111[1 ] });
287
+ f2.template copy_vector <FF>({ v000[2 ], v100[2 ], v010[2 ], v110[2 ], v001[2 ], v101[2 ], v011[2 ], v111[2 ] });
277
288
278
- auto full_polynomials = std::array<std::span<FF> , 3 >{ f0, f1, f2 };
289
+ auto full_polynomials = std::array<Polynomial , 3 >{ f0, f1, f2 };
279
290
auto transcript = Transcript::prover_init_empty ();
280
291
auto sumcheck = SumcheckProver<Flavor>(multivariate_n, transcript);
281
292
@@ -292,7 +303,7 @@ TYPED_TEST(PartialEvaluationTests, ThreeRoundsGenericMultiplePolys)
292
303
}
293
304
294
305
sumcheck.partially_evaluated_polynomials = typename Flavor::PartiallyEvaluatedMultivariates (multivariate_n);
295
- sumcheck.partially_evaluate (full_polynomials, multivariate_n , round_challenge_0);
306
+ sumcheck.partially_evaluate (full_polynomials, 0 , round_challenge_0);
296
307
auto polynomial_get_all = sumcheck.partially_evaluated_polynomials .get_all ();
297
308
for (size_t i = 0 ; i < 3 ; i++) {
298
309
EXPECT_EQ ((polynomial_get_all[i])[0 ], expected_q1[i]);
@@ -308,7 +319,7 @@ TYPED_TEST(PartialEvaluationTests, ThreeRoundsGenericMultiplePolys)
308
319
expected_lo[i] = expected_q1[i] * (FF (1 ) - round_challenge_1) + expected_q2[i] * round_challenge_1;
309
320
expected_hi[i] = expected_q3[i] * (FF (1 ) - round_challenge_1) + expected_q4[i] * round_challenge_1;
310
321
}
311
- sumcheck.partially_evaluate (sumcheck.partially_evaluated_polynomials , multivariate_n >> 1 , round_challenge_1);
322
+ sumcheck.partially_evaluate (sumcheck.partially_evaluated_polynomials , 0 , round_challenge_1);
312
323
for (size_t i = 0 ; i < 3 ; i++) {
313
324
EXPECT_EQ ((polynomial_get_all[i])[0 ], expected_lo[i]);
314
325
EXPECT_EQ ((polynomial_get_all[i])[1 ], expected_hi[i]);
@@ -318,7 +329,7 @@ TYPED_TEST(PartialEvaluationTests, ThreeRoundsGenericMultiplePolys)
318
329
for (size_t i = 0 ; i < 3 ; i++) {
319
330
expected_val[i] = expected_lo[i] * (FF (1 ) - round_challenge_2) + expected_hi[i] * round_challenge_2;
320
331
}
321
- sumcheck.partially_evaluate (sumcheck.partially_evaluated_polynomials , multivariate_n >> 2 , round_challenge_2);
332
+ sumcheck.partially_evaluate (sumcheck.partially_evaluated_polynomials , 1 , round_challenge_2);
322
333
for (size_t i = 0 ; i < 3 ; i++) {
323
334
EXPECT_EQ ((polynomial_get_all[i])[0 ], expected_val[i]);
324
335
}
0 commit comments