6#include <gtest/gtest.h>
28 std::vector<uint32_t> actual_sizes,
29 bool non_zero_complement =
false)
32 const size_t ZERO_ROW_OFFSET = 1;
34 uint32_t full_size = ZERO_ROW_OFFSET;
35 for (
auto size : fixed_sizes) {
40 if ((1UL << log2_n) != (full_size)) {
43 full_size = 1 << log2_n;
46 Polynomial polynomial(full_size - 1, full_size, 1);
47 uint32_t start_idx = ZERO_ROW_OFFSET;
50 for (
auto [fixed_size, actual_size] :
zip_view(fixed_sizes, actual_sizes)) {
51 end_idx = start_idx + actual_size;
52 active_range_endpoints.emplace_back(start_idx, end_idx);
53 for (
size_t idx = start_idx; idx < end_idx; ++idx) {
56 start_idx += fixed_size;
60 if (non_zero_complement) {
61 for (
size_t i = 0; i < active_range_endpoints.size() - 1; ++i) {
62 const size_t start = active_range_endpoints[i].second;
63 const size_t end = active_range_endpoints[i + 1].first;
65 for (
size_t idx = start; idx < end; ++idx) {
66 polynomial.
at(idx) = const_val;
71 return { polynomial, active_range_endpoints };
78 const size_t num_points)
81 return CommitmentKey<curve::BN254>(num_points);
87 CommitmentKey<curve::Grumpkin>>(
const size_t num_points)
90 return CommitmentKey<curve::Grumpkin>(num_points);
93using Curves = ::testing::Types<curve::BN254, curve::Grumpkin>;
100 using Curve = TypeParam;
106 const size_t num_points = 1 << 5;
107 const size_t start_index = 13;
108 const size_t num_nonzero = 13;
111 Polynomial poly{ num_nonzero, num_points, start_index };
112 for (
size_t i = start_index; i < start_index + num_nonzero; ++i) {
117 auto key = TestFixture::template create_commitment_key<CK>(num_points);
118 G1 commit_result =
key.commit(poly);
119 auto full_poly = poly.full();
120 G1 full_commit_result =
key.commit(full_poly);
122 EXPECT_EQ(commit_result, full_commit_result);
128 using Curve = TypeParam;
134 const size_t num_points = 4096;
135 const size_t start_index = 1402;
136 const size_t num_nonzero = 1392;
139 Polynomial poly{ num_nonzero, num_points, start_index };
140 for (
size_t i = start_index; i < start_index + num_nonzero; ++i) {
145 auto key = TestFixture::template create_commitment_key<CK>(num_points);
146 G1 commit_result =
key.commit(poly);
147 auto full_poly = poly.full();
148 G1 full_commit_result =
key.commit(full_poly);
150 EXPECT_EQ(commit_result, full_commit_result);
156 using Curve = TypeParam;
162 const size_t num_points = 32;
163 const size_t start_index = 15;
164 const size_t num_nonzero = 17;
167 Polynomial poly{ num_nonzero, num_points, start_index };
168 for (
size_t i = start_index; i < start_index + num_nonzero; ++i) {
173 auto key = TestFixture::template create_commitment_key<CK>(num_points);
174 G1 commit_result =
key.commit(poly);
175 auto full_poly = poly.full();
176 G1 full_commit_result =
key.commit(full_poly);
178 EXPECT_EQ(commit_result, full_commit_result);
187 using Curve = TypeParam;
192 GTEST_SKIP() <<
"Skipping test for Grumpkin as it has too small a CRS.";
196 std::vector<uint32_t> fixed_sizes = { 1000, 4000, 180000, 90000, 9000, 137000, 72000, 4000, 2500, 11500 };
197 std::vector<uint32_t> actual_sizes = { 10, 16, 48873, 18209, 4132, 23556, 35443, 3, 2, 2 };
200 const bool non_zero_complement =
false;
201 auto [polynomial, active_range_endpoints] =
202 TestFixture::create_structured_test_polynomial(fixed_sizes, actual_sizes, non_zero_complement);
205 auto key = TestFixture::template create_commitment_key<CK>(polynomial.virtual_size());
207 auto full_poly = polynomial.full();
208 G1 actual_expected_result =
key.commit(full_poly);
210 G1 result =
key.commit_structured(polynomial, active_range_endpoints);
221 using Curve = TypeParam;
225 const uint32_t circuit_size = 8192;
227 const uint32_t actual_size = circuit_size / 8;
231 std::vector<uint32_t> fixed_sizes = { circuit_size - 1 - NUM_DISABLED_ROWS_IN_SUMCHECK,
232 NUM_DISABLED_ROWS_IN_SUMCHECK };
233 std::vector<uint32_t> actual_sizes = { actual_size, NUM_DISABLED_ROWS_IN_SUMCHECK };
236 const bool non_zero_complement =
false;
237 auto [polynomial, active_range_endpoints] =
238 TestFixture::create_structured_test_polynomial(fixed_sizes, actual_sizes, non_zero_complement);
241 auto key = TestFixture::template create_commitment_key<CK>(polynomial.virtual_size());
243 auto full_poly = polynomial.full();
244 G1 actual_expected_result =
key.commit(full_poly);
246 G1 result =
key.commit_structured(polynomial, active_range_endpoints);
258 using Curve = TypeParam;
263 GTEST_SKIP() <<
"Skipping test for Grumpkin as it has too small a CRS.";
267 std::vector<uint32_t> fixed_sizes = { 1000, 4000, 180000, 90000, 9000, 137000, 72000, 4000, 2500, 11500 };
268 std::vector<uint32_t> actual_sizes = { 10, 16, 48873, 18209, 4132, 23556, 35443, 3, 2, 2 };
271 const bool non_zero_complement =
true;
272 auto [polynomial, active_range_endpoints] =
273 TestFixture::create_structured_test_polynomial(fixed_sizes, actual_sizes, non_zero_complement);
276 auto key = TestFixture::template create_commitment_key<CK>(polynomial.virtual_size());
279 G1 result =
key.commit_structured_with_nonzero_complement(polynomial, active_range_endpoints);
CommitmentKey object over a pairing group 𝔾₁.
typename Curve::AffineElement Commitment
CK create_commitment_key(size_t num_points)
StructuredPolyData create_structured_test_polynomial(std::vector< uint32_t > fixed_sizes, std::vector< uint32_t > actual_sizes, bool non_zero_complement=false)
typename Curve::ScalarField Fr
Structured polynomial class that represents the coefficients 'a' of a_0 + a_1 x .....
Fr & at(size_t index)
Our mutable accessor, unlike operator[]. We abuse precedent a bit to differentiate at() and operator[...
typename Group::affine_element AffineElement
constexpr T get_msb(const T in)
std::filesystem::path bb_crs_path()
void init_file_crs_factory(const std::filesystem::path &path)
Entry point for Barretenberg command-line interface.
TYPED_TEST_SUITE(ShpleminiTest, TestSettings)
TYPED_TEST(ShpleminiTest, CorrectnessOfMultivariateClaimBatching)
::testing::Types< curve::BN254, curve::Grumpkin > Curves
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
std::vector< std::pair< size_t, size_t > > active_range_endpoints
static field random_element(numeric::RNG *engine=nullptr) noexcept