10#include <gtest/gtest.h>
15TEST(boomerang_ultra_circuit_constructor, test_variable_gates_count_for_decompose)
23 { a_idx, circuit_constructor.
zero_idx(), circuit_constructor.
zero_idx(), 1, 0, 0, -
fr(e) });
28 EXPECT_EQ(variables_in_on_gate.size(), 0);
31TEST(boomerang_ultra_circuit_constructor, test_variable_gates_count_for_decompose2)
39 { a_idx, circuit_constructor.
zero_idx(), circuit_constructor.
zero_idx(), 1, 0, 0, -
fr(e) });
44 EXPECT_EQ(variables_in_on_gate.size(), 0);
47TEST(boomerang_utils, test_selectors_for_decompose)
49 auto is_power_two = [&](
const uint256_t& number) {
return number > 0 && ((number & (number - 1)) == 0); };
50 const uint64_t target_range_bitnum = 14;
52 const uint64_t shifts[3]{
53 target_range_bitnum * (3 * i),
54 target_range_bitnum * (3 * i + 1),
55 target_range_bitnum * (3 * i + 2),
60 bool q_1_is_power_two = is_power_two(q_1);
61 bool q_2_is_power_two = is_power_two(q_2);
62 bool q_3_is_power_two = is_power_two(q_3);
63 EXPECT_EQ(q_2 * q_2, q_1 * q_3);
64 EXPECT_EQ(q_1_is_power_two,
true);
65 EXPECT_EQ(q_2_is_power_two,
true);
66 EXPECT_EQ(q_3_is_power_two,
true);
69TEST(boomerang_ultra_circuit_constructor, test_variable_gates_count_for_two_decomposes)
81 { a1_idx, circuit_constructor.
zero_idx(), circuit_constructor.
zero_idx(), 1, 0, 0, -
fr(e1) });
83 { a2_idx, circuit_constructor.
zero_idx(), circuit_constructor.
zero_idx(), 1, 0, 0, -
fr(e2) });
89 EXPECT_EQ(variables_in_one_gate.size(), 0);
92TEST(boomerang_ultra_circuit_constructor, test_decompose_with_boolean_gates)
106 for (
size_t i = 0; i < 20; ++i) {
114 EXPECT_EQ(variables_in_one_gate.size(), 22);
117TEST(boomerang_ultra_circuit_constructor, test_decompose_for_6_bit_number)
125 { a_idx, circuit_constructor.
zero_idx(), circuit_constructor.
zero_idx(), 1, 0, 0, -
fr(e) });
130 EXPECT_EQ(variables_in_on_gate.size(), 0);
virtual uint32_t add_variable(const FF &in)
Add a variable to variables.
uint32_t zero_idx() const
void create_add_gate(const add_triple_< FF > &in)
Create an addition gate, where in.a * in.a_scaling + in.b * in.b_scaling + in.c * in....
std::vector< uint32_t > create_limbed_range_constraint(const uint32_t variable_index, const uint64_t num_bits, const uint64_t target_range_bitnum=DEFAULT_PLOOKUP_RANGE_BITNUM, std::string const &msg="create_limbed_range_constraint")
Range-constrain a variable to [0, 2^num_bits - 1] by decomposing into smaller limbs.
void create_bool_gate(const uint32_t a)
Generate an arithmetic gate equivalent to x^2 - x = 0, which forces x to be 0 or 1.
constexpr uint256_t slice(uint64_t start, uint64_t end) const
std::unordered_set< uint32_t > get_variables_in_one_gate()
this method returns a final set of variables that were in one gate
Entry point for Barretenberg command-line interface.
field< Bn254FrParams > fr
UltraCircuitBuilder_< UltraExecutionTraceBlocks > UltraCircuitBuilder
TEST(BoomerangMegaCircuitBuilder, BasicCircuit)
UltraStaticAnalyzer StaticAnalyzer
static field random_element(numeric::RNG *engine=nullptr) noexcept
static constexpr field zero()