44 for (
size_t i = 0; i < 4; i++) {
45 element.binary_basis_limbs[i].element.fix_witness();
47 element.prime_basis_limb.fix_witness();
61TEST(boomerang_bigfield, test_graph_description_bigfield_constructors)
65 [[maybe_unused]]
fq_ct var = fq_ct::create_from_u512_as_witness(&
builder, 1);
67 [[maybe_unused]]
fq_ct mixed =
fq_ct(1).add_to_lower_limb(small_var, 1);
68 [[maybe_unused]]
fq_ct r;
71 auto connected_components = graph.find_connected_components();
72 EXPECT_EQ(connected_components.size(), 1);
73 auto variables_in_one_gate = graph.show_variables_in_one_gate(
builder);
74 EXPECT_EQ(variables_in_one_gate.size(), 1);
84TEST(boomerang_bigfield, test_graph_description_bigfield_addition)
87 [[maybe_unused]]
fq_ct var = fq_ct::create_from_u512_as_witness(&
builder, 1);
89 [[maybe_unused]]
fq_ct mixed =
fq_ct(1).add_to_lower_limb(small_var, 1);
90 [[maybe_unused]]
fq_ct r;
91 [[maybe_unused]]
fq_ct r1;
92 [[maybe_unused]]
fq_ct r2;
102 auto connected_components = graph.find_connected_components();
103 EXPECT_EQ(connected_components.size(), 1);
104 auto variables_in_one_gate = graph.show_variables_in_one_gate(
builder);
105 EXPECT_EQ(variables_in_one_gate.size(), 0);
115TEST(boomerang_bigfield, test_graph_description_bigfield_substraction)
119 [[maybe_unused]]
fq_ct var = fq_ct::create_from_u512_as_witness(&
builder, 1);
121 [[maybe_unused]]
fq_ct mixed =
fq_ct(1).add_to_lower_limb(small_var, 1);
122 [[maybe_unused]]
fq_ct r;
126 r = mixed - constant;
134 auto connected_components = graph.find_connected_components();
135 EXPECT_EQ(connected_components.size(), 1);
136 auto variables_in_one_gate = graph.show_variables_in_one_gate(
builder);
137 EXPECT_EQ(variables_in_one_gate.size(), 0);
138 for (
const auto& elem : variables_in_one_gate) {
139 info(
"elem == ", elem);
150TEST(boomerang_bigfield, test_graph_description_bigfield_multiplication)
154 [[maybe_unused]]
fq_ct var = fq_ct::create_from_u512_as_witness(&
builder, 1);
156 [[maybe_unused]]
fq_ct mixed =
fq_ct(1).add_to_lower_limb(small_var, 1);
157 [[maybe_unused]]
fq_ct r;
160 r = constant * constant;
162 r = mixed * constant;
165 auto connected_components = graph.find_connected_components();
166 EXPECT_EQ(connected_components.size(), 1);
167 auto variables_in_one_gate = graph.show_variables_in_one_gate(
builder);
168 EXPECT_EQ(variables_in_one_gate.size(), 0);
180TEST(boomerang_bigfield, test_graph_description_bigfield_division)
184 [[maybe_unused]]
fq_ct var = fq_ct::create_from_u512_as_witness(&
builder, 1);
186 [[maybe_unused]]
fq_ct mixed =
fq_ct(1).add_to_lower_limb(small_var, 1);
187 [[maybe_unused]]
fq_ct r;
191 r = constant / constant;
199 auto connected_components = graph.find_connected_components();
200 EXPECT_EQ(connected_components.size(), 1);
201 auto variables_in_one_gate = graph.show_variables_in_one_gate(
builder);
202 EXPECT_EQ(variables_in_one_gate.size(), 0);
212TEST(boomerang_bigfield, test_graph_description_bigfield_mix_operations)
216 fq_ct var = fq_ct::create_from_u512_as_witness(&
builder, 1);
218 fq_ct mixed =
fq_ct(1).add_to_lower_limb(small_var, 1);
227 r = mixed + constant;
231 r = mixed - constant;
240 r = constant * constant;
241 r = constant / constant;
249 r = mixed * constant;
252 auto connected_components = graph.find_connected_components();
253 EXPECT_EQ(connected_components.size(), 1);
254 auto variables_in_one_gate = graph.show_variables_in_one_gate(
builder);
255 EXPECT_EQ(variables_in_one_gate.size(), 0);
265TEST(boomerang_bigfield, test_graph_description_constructor_high_low_bits_and_operations)
280 auto connected_components = graph.find_connected_components();
281 EXPECT_EQ(connected_components.size(), 1);
282 auto variables_in_one_gate = graph.show_variables_in_one_gate(
builder);
283 EXPECT_EQ(variables_in_one_gate.size(), 0);
293TEST(boomerang_bigfield, test_graph_description_mul_function)
304 auto connected_components = graph.find_connected_components();
305 EXPECT_EQ(connected_components.size(), 1);
306 auto variables_in_one_gate = graph.show_variables_in_one_gate(
builder);
307 EXPECT_EQ(variables_in_one_gate.size(), 0);
317TEST(boomerang_bigfield, test_graph_description_sqr_function)
326 auto connected_components = graph.find_connected_components();
327 EXPECT_EQ(connected_components.size(), 1);
328 auto variables_in_one_gate = graph.show_variables_in_one_gate(
builder);
329 EXPECT_EQ(variables_in_one_gate.size(), 0);
339TEST(boomerang_bigfield, test_graph_description_madd_function)
352 auto connected_components = graph.find_connected_components();
353 EXPECT_EQ(connected_components.size(), 1);
354 auto variables_in_one_gate = graph.show_variables_in_one_gate(
builder);
355 EXPECT_EQ(variables_in_one_gate.size(), 0);
366TEST(boomerang_bigfield, test_graph_description_mult_madd_function)
369 const size_t number_of_madds = 16;
370 fq mul_left_values[number_of_madds];
371 fq mul_right_values[number_of_madds];
372 fq to_add_values[number_of_madds];
377 mul_left.reserve(number_of_madds);
378 mul_right.reserve(number_of_madds);
379 to_add.reserve(number_of_madds);
380 for (
size_t j = 0; j < number_of_madds; j++) {
388 fq_ct f = fq_ct::mult_madd(mul_left, mul_right, to_add);
390 builder.finalize_circuit(
false);
392 auto variables_in_one_gate = graph.show_variables_in_one_gate(
builder);
393 EXPECT_EQ(variables_in_one_gate.size(), 0);
403TEST(boomerang_bigfield, test_graph_description_constructor_high_low_bits)
409 [[maybe_unused]]
fq_ct mul_left =
411 [[maybe_unused]]
fq_ct mul_right =
413 fq_ct product = mul_left * mul_right;
415 builder.finalize_circuit(
false);
417 auto connected_components = graph.find_connected_components();
418 auto variables_in_one_gate = graph.show_variables_in_one_gate(
builder);
419 EXPECT_EQ(variables_in_one_gate.size(), 0);
static bool check(const Builder &circuit)
Check the witness satisifies the circuit.
TEST(boomerang_bigfield, test_graph_description_bigfield_constructors)
Test graph description for bigfield constructors.
bn254::witness_ct witness_ct
UltraCircuitBuilder Builder
void fix_bigfield_element(const fq_ct &element)
Fix a bigfield element to prevent it from being identified as a variable in one gate.
uintx< uint256_t > uint512_t
RNG & get_debug_randomness(bool reset, std::uint_fast64_t seed)
Entry point for Barretenberg command-line interface.
field< Bn254FrParams > fr
C slice(C const &container, size_t start)
UltraCircuitBuilder_< UltraExecutionTraceBlocks > UltraCircuitBuilder
StaticAnalyzer_< bb::fr > StaticAnalyzer
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...
static field random_element(numeric::RNG *engine=nullptr) noexcept
field_t< CircuitBuilder > ScalarField
Group::BaseField BaseField
public_witness_t< CircuitBuilder > public_witness_ct
witness_t< CircuitBuilder > witness_ct