Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
flavor.test.cpp
Go to the documentation of this file.
3#include <cstddef>
4#include <gtest/gtest.h>
5
6using namespace bb;
7
8namespace {
9// Allocate all polynomials in a ProverPolynomials to a uniform size (test-only helper).
10template <typename ProverPolynomials> void allocate_all(ProverPolynomials& polynomials, size_t circuit_size)
11{
12 using Polynomial = typename std::remove_reference_t<decltype(*polynomials.get_to_be_shifted().begin())>;
13 for (auto& poly : polynomials.get_to_be_shifted()) {
14 poly = Polynomial{ circuit_size - 1, circuit_size, /*offset=*/1 };
15 }
16 for (auto& poly : polynomials.get_unshifted()) {
17 if (poly.is_empty()) {
18 poly = Polynomial{ circuit_size, circuit_size };
19 }
20 }
21 polynomials.set_shifted();
22}
23} // namespace
24
25TEST(Flavor, Getters)
26{
28 using Flavor = UltraFlavor;
29 using FF = Flavor::FF;
31
32 const size_t circuit_size = 4;
33 ProverPolynomials polynomials;
34
35 // set
36 size_t coset_idx = 0;
37 for (auto& id_poly : polynomials.get_ids()) {
38 id_poly = typename Flavor::Polynomial(circuit_size);
39 for (size_t i = 0; i < circuit_size; ++i) {
40 id_poly.at(i) = coset_idx * circuit_size + i;
41 }
42 ++coset_idx;
43 }
44
45 // Polynomials in the proving key can be set through loops over subsets produced by the getters
46 EXPECT_EQ(polynomials.id_1[0], FF(0));
47 EXPECT_EQ(polynomials.id_2[0], FF(4));
48 EXPECT_EQ(polynomials.id_3[0], FF(8));
49
50 Flavor::CommitmentLabels commitment_labels;
51
52 // Globals are also available through STL container sizes
53 EXPECT_EQ(polynomials.get_all().size(), Flavor::NUM_ALL_ENTITIES);
54 // Shited polynomials have the righ tsize
55 EXPECT_EQ(polynomials.get_all().size(), polynomials.get_shifted().size() + polynomials.get_unshifted().size());
56 // Commitment lables are stored in the flavor.
57 EXPECT_EQ(commitment_labels.w_r, "W_R");
58}
59
60TEST(Flavor, AllEntitiesSpecialMemberFunctions)
61{
62 using Flavor = UltraFlavor;
63 using FF = Flavor::FF;
64 using PartiallyEvaluatedMultivariates = Flavor::PartiallyEvaluatedMultivariates;
66
67 constexpr size_t circuit_size = 16;
68 Flavor::ProverPolynomials full_polynomials;
69 allocate_all(full_polynomials, circuit_size);
70 PartiallyEvaluatedMultivariates polynomials_A(full_polynomials, circuit_size);
71
72 Polynomial random_poly{ 10 };
73 for (auto& coeff : random_poly.coeffs()) {
74 coeff = FF::random_element();
75 }
76
77 // Test some special member functions.
78
79 polynomials_A.w_l = random_poly.share();
80
81 ASSERT_EQ(random_poly, polynomials_A.w_l);
82
83 PartiallyEvaluatedMultivariates polynomials_B(polynomials_A);
84 ASSERT_EQ(random_poly, polynomials_B.w_l);
85
86 PartiallyEvaluatedMultivariates polynomials_C(std::move(polynomials_B));
87 ASSERT_EQ(random_poly, polynomials_C.w_l);
88}
89
90TEST(Flavor, GetRow)
91{
92 using Flavor = UltraFlavor;
93 using FF = typename Flavor::FF;
95 std::generate(
96 data.begin(), data.end(), []() { return std::vector<FF>({ FF::random_element(), FF::random_element() }); });
97 Flavor::ProverPolynomials prover_polynomials;
98 for (auto [poly, entry] : zip_view(prover_polynomials.get_all(), data)) {
99 poly = Flavor::Polynomial(entry);
100 }
101 auto row0 = prover_polynomials.get_row(0);
102 auto row1 = prover_polynomials.get_row(1);
103 EXPECT_EQ(row0.q_elliptic, prover_polynomials.q_elliptic[0]);
104 EXPECT_EQ(row1.w_4_shift, prover_polynomials.w_4_shift[1]);
105}
A container for commitment labels.
A container for the prover polynomials.
AllValues get_row(const size_t row_idx) const
Returns the evaluations of all prover polynomials at one point on the boolean hypercube,...
typename Curve::ScalarField FF
static constexpr size_t NUM_ALL_ENTITIES
bb::Polynomial< FF > Polynomial
PartiallyEvaluatedMultivariatesBase< AllEntities< Polynomial >, ProverPolynomials, Polynomial > PartiallyEvaluatedMultivariates
A container for storing the partially evaluated multivariates produced by sumcheck.
Structured polynomial class that represents the coefficients 'a' of a_0 + a_1 x .....
const std::vector< MemoryValue > data
typename ECCVMFlavor::ProverPolynomials ProverPolynomials
std::filesystem::path bb_crs_path()
void init_file_crs_factory(const std::filesystem::path &path)
Entry point for Barretenberg command-line interface.
Definition api.hpp:5
TEST(BoomerangMegaCircuitBuilder, BasicCircuit)
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
Definition tuple.hpp:13
static field random_element(numeric::RNG *engine=nullptr) noexcept