8#include <gtest/gtest.h>
22 using Curve =
typename Builder::EmbeddedCurve;
29using CircuitTypes = ::testing::Types<bb::UltraCircuitBuilder, bb::MegaCircuitBuilder>;
42 using cycle_group =
typename TestFixture::cycle_group;
43 using straus_lookup_table =
typename TestFixture::straus_lookup_table;
44 using Element =
typename TestFixture::Element;
48 auto base_point_native = Element::random_element(&
engine);
49 auto offset_gen_native = Element::random_element(&
engine);
51 auto base_point = cycle_group::from_witness(&
builder, base_point_native);
52 auto offset_gen = cycle_group::from_witness(&
builder, offset_gen_native);
54 const size_t table_bits = 4;
55 straus_lookup_table table(&
builder, base_point, offset_gen, table_bits);
58 check_circuit_and_gate_count(
builder, 192);
60 check_circuit_and_gate_count(
builder, 189);
70 using cycle_group =
typename TestFixture::cycle_group;
71 using straus_lookup_table =
typename TestFixture::straus_lookup_table;
72 using field_t =
typename TestFixture::field_t;
73 using Element =
typename TestFixture::Element;
74 using AffineElement =
typename TestFixture::AffineElement;
78 auto base_point_native = Element::random_element(&
engine);
79 auto offset_gen_native = Element::random_element(&
engine);
81 auto base_point = cycle_group::from_witness(&
builder, base_point_native);
82 auto offset_gen = cycle_group::from_witness(&
builder, offset_gen_native);
84 const size_t table_bits = 4;
85 straus_lookup_table table(&
builder, base_point, offset_gen, table_bits);
88 const size_t table_size = (1ULL << table_bits);
89 for (
size_t i = 0; i < table_size; i++) {
91 auto result = table.read(
index);
94 AffineElement expected = AffineElement(offset_gen_native + (base_point_native * i));
95 EXPECT_EQ(result.get_value(), expected);
102 check_circuit_and_gate_count(
builder, 224);
104 check_circuit_and_gate_count(
builder, 221);
114 using cycle_group =
typename TestFixture::cycle_group;
115 using straus_lookup_table =
typename TestFixture::straus_lookup_table;
116 using field_t =
typename TestFixture::field_t;
117 using Element =
typename TestFixture::Element;
118 using AffineElement =
typename TestFixture::AffineElement;
122 auto base_point_native = Element::random_element(&
engine);
123 auto offset_gen_native = Element::random_element(&
engine);
125 auto base_point = cycle_group::from_witness(&
builder, base_point_native);
126 auto offset_gen = cycle_group::from_witness(&
builder, offset_gen_native);
128 const size_t table_bits = 3;
131 auto hints_elements = straus_lookup_table::compute_native_table(base_point_native, offset_gen_native, table_bits);
133 std::vector<AffineElement> hints_affine;
136 for (
size_t i = 1; i < hints_elements.size(); ++i) {
137 hints_affine.push_back(AffineElement(hints_elements[i]));
141 straus_lookup_table table(&
builder, base_point, offset_gen, table_bits, hints_affine);
146 auto result = table.read(
index);
148 AffineElement expected = AffineElement(offset_gen_native + (base_point_native * index_val));
149 EXPECT_EQ(result.get_value(), expected);
154 check_circuit_and_gate_count(
builder, 106);
156 check_circuit_and_gate_count(
builder, 104);
166 using cycle_group =
typename TestFixture::cycle_group;
167 using straus_lookup_table =
typename TestFixture::straus_lookup_table;
168 using field_t =
typename TestFixture::field_t;
169 using Element =
typename TestFixture::Element;
170 using AffineElement =
typename TestFixture::AffineElement;
171 using Group =
typename TestFixture::Group;
175 auto base_point_native = Group::point_at_infinity;
176 auto offset_gen_native = Element::random_element(&
engine);
178 auto base_point = cycle_group::from_witness(&
builder, base_point_native);
179 auto offset_gen = cycle_group::from_witness(&
builder, offset_gen_native);
181 const size_t table_bits = 2;
182 straus_lookup_table table(&
builder, base_point, offset_gen, table_bits);
185 for (
size_t i = 0; i < (1ULL << table_bits); i++) {
187 auto result = table.read(
index);
188 EXPECT_EQ(result.get_value(), AffineElement(offset_gen_native));
193 check_circuit_and_gate_count(
builder, 68);
195 check_circuit_and_gate_count(
builder, 67);
typename Curve::Group Group
typename Curve::AffineElement AffineElement
typename Curve::Element Element
typename Curve::ScalarField ScalarField
typename Builder::EmbeddedCurve Curve
typename Group::element Element
typename Group::affine_element AffineElement
cycle_group represents a group Element of the proving system's embedded curve, i.e....
static field_t from_witness(Builder *ctx, const bb::fr &input)
straus_lookup_table computes a lookup table of size 1 << table_bits
bb::curve::BN254::Element Element
RNG & get_debug_randomness(bool reset, std::uint_fast64_t seed)
void check_circuit_and_gate_count(Builder &builder, uint32_t expected_gates_without_base)
Utility function for gate count checking and circuit verification.
Entry point for Barretenberg command-line interface.
TYPED_TEST_SUITE(CommitmentKeyTest, Curves)
TYPED_TEST(CommitmentKeyTest, CommitToZeroPoly)
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
This file contains part of the logic for the Origin Tag mechanism that tracks the use of in-circuit p...
#define STANDARD_TESTING_TAGS
testing::Types< bb::MegaCircuitBuilder, bb::UltraCircuitBuilder > CircuitTypes