5#include <gtest/gtest.h>
35 return in[1] ==
FF(1) || in[2] ==
FF(1);
45 return Accumulator(in[1]) + Accumulator(in[2]) - Accumulator(in[1]) * Accumulator(in[2]);
53 return std::forward_as_tuple(in[0], in[1], in[2], in[3], in[4], in[5], in[6]);
58 return std::forward_as_tuple(in[0], in[1], in[2], in[3], in[4], in[5], in[6]);
89 FF scaling_factor =
FF(1))
92 for (
const auto& row : rows) {
116 FF lookup_predicate_row1)
118 const FF beta = params.
beta;
121 auto construct_term = [&](
FF col1,
FF col2) {
return col1 * beta + col2 + gamma; };
124 const FF valid_f1 =
FF(1);
125 const FF valid_f2 =
FF(2);
126 const FF valid_lookup_term = construct_term(valid_f1, valid_f2);
129 const FF t1_row0 =
FF(3);
130 const FF t2_row0 =
FF(4);
131 const FF table_term_row0 = construct_term(t1_row0, t2_row0);
134 row0[0] = (valid_lookup_term * table_term_row0).invert();
142 const FF lookup_term_row1 = construct_term(valid_f1, valid_f2);
143 const FF table_term1 = construct_term(t1_row1, t2_row1);
146 row1[0] = (lookup_term_row1 * table_term1).invert();
147 row1[1] = lookup_predicate_row1;
156 EXPECT_EQ(acc[0],
FF(0));
159 EXPECT_EQ(acc[0],
FF(0));
160 EXPECT_EQ(acc[1], (
FF(1) + lookup_predicate_row1) / valid_lookup_term -
FF(1) / table_term1);
175 auto acc = eval_row(row, params);
176 EXPECT_EQ(acc[0],
FF(0));
177 EXPECT_EQ(acc[1],
FF(0));
191 const FF beta = params.
beta;
198 const FF t2 =
FF(11);
199 const FF lookup_term = f1 * beta + f2 + gamma;
200 const FF table_term = t1 * beta + t2 + gamma;
203 row[0] = (lookup_term * table_term).invert();
210 auto acc = eval_row(row, params);
211 EXPECT_EQ(acc[0],
FF(0));
225 const FF beta = params.
beta;
232 const FF lookup_term = f1 * beta + f2 + gamma;
233 const FF table_term = t1 * beta + t2 + gamma;
236 row[0] = (lookup_term * table_term).invert();
244 auto acc = eval_row(row, params);
245 EXPECT_EQ(acc[0],
FF(0));
257 check_two_row_sum(params,
FF(1),
FF(2),
FF(0));
268 const FF beta = params.
beta;
274 const FF t2 =
FF(11);
284 const FF lookup_term = f1 * beta + f2 + gamma;
285 const FF table_term = t1 * beta + t2 + gamma;
287 auto acc = eval_row(row, params);
291 const FF expected = lookup_term * table_term *
FF(42) -
FF(1);
292 EXPECT_EQ(acc[0], expected);
293 EXPECT_NE(acc[0],
FF(0));
303 check_two_row_sum(params,
FF(2),
FF(4),
FF(0));
306 check_two_row_sum(params,
FF(1),
FF(2),
FF(1));
static void check_two_row_sum(const RelationParameters< FF > ¶ms, FF t1_row1, FF t2_row1, FF lookup_predicate_row1)
Build and evaluate a canonical two-row (lookup + table) trace.
static Accumulator eval_row(const AllEntities &row, const RelationParameters< FF > ¶ms, FF scaling_factor=FF(1))
Accumulate a single row into a fresh accumulator.
static constexpr size_t NUM_SUBRELATIONS
static Accumulator eval_trace(const std::vector< AllEntities > &rows, const RelationParameters< FF > ¶ms, FF scaling_factor=FF(1))
Accumulate multiple rows into one accumulator.
typename Settings::AllEntities AllEntities
std::array< FF, NUM_SUBRELATIONS > Accumulator
Implementation of a generic permutation relation.
static void accumulate(ContainerOverSubrelations &accumulator, const AllEntities &in, const Parameters ¶ms, const FF &scaling_factor)
Compute generic log-derivative set permutation subrelation accumulation.
Entry point for Barretenberg command-line interface.
TEST_F(IPATest, ChallengesAreZero)
field< Bn254FrParams > fr
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
std::array< FF, NUM_POLYS > AllEntities
static auto get_nonconst_entities(AE &in)
static auto get_const_entities(const AE &in)
static constexpr size_t INVERSE_EXISTS_POLYNOMIAL_DEGREE
static Accumulator compute_inverse_exists(const AllEntities &in)
OR(lookup_pred, table_pred) via the inclusion-exclusion formula A + B - A*B.
static bool inverse_polynomial_is_computed_at_row(const AllEntities &in)
Returns true if either predicate is active, meaning inverse must be computed at this row.
static constexpr size_t COLUMNS_PER_SET
static constexpr size_t NUM_POLYS
Container for parameters used by the grand product (permutation, lookup) Honk relations.
static RelationParameters get_random()