58TEST(boomerang_bigfield, test_graph_description_bigfield_constructors)
62 [[maybe_unused]]
fq_ct var = fq_ct::create_from_u512_as_witness(&
builder, 1);
64 [[maybe_unused]]
fq_ct mixed =
fq_ct(1).add_to_lower_limb(small_var, 1);
65 [[maybe_unused]]
fq_ct r;
68 auto connected_components = graph.find_connected_components();
69 EXPECT_EQ(connected_components.size(), 1);
70 auto variables_in_one_gate = graph.get_variables_in_one_gate();
71 EXPECT_EQ(variables_in_one_gate.size(), 1);
81TEST(boomerang_bigfield, test_graph_description_bigfield_addition)
84 [[maybe_unused]]
fq_ct var = fq_ct::create_from_u512_as_witness(&
builder, 1);
86 [[maybe_unused]]
fq_ct mixed =
fq_ct(1).add_to_lower_limb(small_var, 1);
87 [[maybe_unused]]
fq_ct r;
88 [[maybe_unused]]
fq_ct r1;
89 [[maybe_unused]]
fq_ct r2;
99 auto connected_components = graph.find_connected_components();
100 EXPECT_EQ(connected_components.size(), 1);
101 auto variables_in_one_gate = graph.get_variables_in_one_gate();
102 EXPECT_EQ(variables_in_one_gate.size(), 0);
112TEST(boomerang_bigfield, test_graph_description_bigfield_substraction)
116 [[maybe_unused]]
fq_ct var = fq_ct::create_from_u512_as_witness(&
builder, 1);
118 [[maybe_unused]]
fq_ct mixed =
fq_ct(1).add_to_lower_limb(small_var, 1);
119 [[maybe_unused]]
fq_ct r;
123 r = mixed - constant;
131 auto connected_components = graph.find_connected_components();
132 EXPECT_EQ(connected_components.size(), 1);
133 auto variables_in_one_gate = graph.get_variables_in_one_gate();
134 EXPECT_EQ(variables_in_one_gate.size(), 0);
135 for (
const auto& elem : variables_in_one_gate) {
136 info(
"elem == ", elem);
147TEST(boomerang_bigfield, test_graph_description_bigfield_multiplication)
151 [[maybe_unused]]
fq_ct var = fq_ct::create_from_u512_as_witness(&
builder, 1);
153 [[maybe_unused]]
fq_ct mixed =
fq_ct(1).add_to_lower_limb(small_var, 1);
154 [[maybe_unused]]
fq_ct r;
157 r = constant * constant;
159 r = mixed * constant;
162 auto connected_components = graph.find_connected_components();
163 EXPECT_EQ(connected_components.size(), 1);
164 auto variables_in_one_gate = graph.get_variables_in_one_gate();
165 EXPECT_EQ(variables_in_one_gate.size(), 0);
177TEST(boomerang_bigfield, test_graph_description_bigfield_division)
181 [[maybe_unused]]
fq_ct var = fq_ct::create_from_u512_as_witness(&
builder, 1);
183 [[maybe_unused]]
fq_ct mixed =
fq_ct(1).add_to_lower_limb(small_var, 1);
184 [[maybe_unused]]
fq_ct r;
188 r = constant / constant;
196 auto connected_components = graph.find_connected_components();
197 EXPECT_EQ(connected_components.size(), 1);
198 auto variables_in_one_gate = graph.get_variables_in_one_gate();
199 EXPECT_EQ(variables_in_one_gate.size(), 0);
209TEST(boomerang_bigfield, test_graph_description_bigfield_mix_operations)
213 fq_ct var = fq_ct::create_from_u512_as_witness(&
builder, 1);
215 fq_ct mixed =
fq_ct(1).add_to_lower_limb(small_var, 1);
224 r = mixed + constant;
228 r = mixed - constant;
237 r = constant * constant;
238 r = constant / constant;
246 r = mixed * constant;
249 auto connected_components = graph.find_connected_components();
250 EXPECT_EQ(connected_components.size(), 1);
251 auto variables_in_one_gate = graph.get_variables_in_one_gate();
252 EXPECT_EQ(variables_in_one_gate.size(), 0);
262TEST(boomerang_bigfield, test_graph_description_constructor_high_low_bits_and_operations)
277 auto connected_components = graph.find_connected_components();
278 EXPECT_EQ(connected_components.size(), 1);
279 auto variables_in_one_gate = graph.get_variables_in_one_gate();
280 EXPECT_EQ(variables_in_one_gate.size(), 0);
290TEST(boomerang_bigfield, test_graph_description_mul_function)
301 auto connected_components = graph.find_connected_components();
302 EXPECT_EQ(connected_components.size(), 1);
303 auto variables_in_one_gate = graph.get_variables_in_one_gate();
304 EXPECT_EQ(variables_in_one_gate.size(), 0);
314TEST(boomerang_bigfield, test_graph_description_sqr_function)
323 auto connected_components = graph.find_connected_components();
324 EXPECT_EQ(connected_components.size(), 1);
325 auto variables_in_one_gate = graph.get_variables_in_one_gate();
326 EXPECT_EQ(variables_in_one_gate.size(), 0);
336TEST(boomerang_bigfield, test_graph_description_madd_function)
349 auto connected_components = graph.find_connected_components();
350 EXPECT_EQ(connected_components.size(), 1);
351 auto variables_in_one_gate = graph.get_variables_in_one_gate();
352 EXPECT_EQ(variables_in_one_gate.size(), 0);
363TEST(boomerang_bigfield, test_graph_description_mult_madd_function)
366 const size_t number_of_madds = 16;
367 fq mul_left_values[number_of_madds];
368 fq mul_right_values[number_of_madds];
369 fq to_add_values[number_of_madds];
374 mul_left.reserve(number_of_madds);
375 mul_right.reserve(number_of_madds);
376 to_add.reserve(number_of_madds);
377 for (
size_t j = 0; j < number_of_madds; j++) {
385 fq_ct f = fq_ct::mult_madd(mul_left, mul_right, to_add);
389 auto variables_in_one_gate = graph.get_variables_in_one_gate();
390 EXPECT_EQ(variables_in_one_gate.size(), 0);
400TEST(boomerang_bigfield, test_graph_description_constructor_high_low_bits)
406 [[maybe_unused]]
fq_ct mul_left =
408 [[maybe_unused]]
fq_ct mul_right =
410 fq_ct product = mul_left * mul_right;
414 auto connected_components = graph.find_connected_components();
415 auto variables_in_one_gate = graph.get_variables_in_one_gate();
416 EXPECT_EQ(variables_in_one_gate.size(), 0);
static bool check(const Builder &circuit)
Check the witness satisifies the circuit.
static void fix_witness_in_place(const bigfield &bf)
TEST(boomerang_bigfield, test_graph_description_bigfield_constructors)
Test graph description for bigfield constructors.
stdlib::witness_t< Builder > 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
UltraStaticAnalyzer 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
BB_INLINE constexpr field sqr() const noexcept
field_t< CircuitBuilder > ScalarField
Group::BaseField BaseField