45 for (
const auto& elem : input_vector) {
46 if (elem.get_witness_index() == real_var_index) {
65 for (
size_t i = 0; i < num_inputs; ++i) {
70 for (
auto& elem :
inputs) {
75 auto connected_components = graph.find_connected_components();
76 EXPECT_EQ(connected_components.size(), 1);
77 auto variables_in_one_gate = graph.get_variables_in_one_gate();
78 std::unordered_set<uint32_t> outputs{ result.get_witness_index(),
79 result.get_witness_index() + 1,
80 result.get_witness_index() + 2,
81 result.get_witness_index() + 3 };
82 for (
const auto& elem : variables_in_one_gate) {
83 EXPECT_EQ(outputs.contains(elem),
true);
107 for (
size_t i = 0; i < num_inputs - 1; ++i) {
116 auto connected_components = graph.find_connected_components();
117 EXPECT_EQ(connected_components.size(), 1);
118 auto variables_in_one_gate = graph.get_variables_in_one_gate();
119 for (
const auto& elem : variables_in_one_gate) {
120 EXPECT_EQ(outputs.contains(elem),
true);
130TEST(boomerang_poseidon2s, test_graph_for_poseidon2s_one_permutation)
141 [[maybe_unused]]
auto new_state = poseidon2permutation.permutation(&
builder,
inputs);
142 for (
auto& elem : new_state) {
147 auto connected_components = graph.find_connected_components();
148 EXPECT_EQ(connected_components.size(), 1);
149 auto variables_in_one_gate = graph.get_variables_in_one_gate();
150 EXPECT_EQ(variables_in_one_gate.size(), 0);
159TEST(boomerang_poseidon2s, test_graph_for_poseidon2s_two_permutations)
174 [[maybe_unused]]
auto state1 = poseidon2permutation.permutation(&
builder, input1);
175 [[maybe_unused]]
auto state2 = poseidon2permutation.permutation(&
builder, input2);
176 for (
auto& elem : state1) {
179 for (
auto& elem : state2) {
183 auto connected_components = graph.find_connected_components();
184 EXPECT_EQ(connected_components.size(), 2);
185 auto variables_in_one_gate = graph.get_variables_in_one_gate();
186 EXPECT_EQ(variables_in_one_gate.size(), 0);
192TEST(boomerang_poseidon2s, test_graph_for_poseidon2s)
194 for (
size_t num_inputs = 6; num_inputs < 100; num_inputs++) {
202TEST(boomerang_poseidon2s, test_graph_for_poseidon2s_for_one_input_size)
210TEST(boomerang_poseidon2s, test_graph_for_poseidon2s_hash_repeated_pairs)
static FF hash(const std::vector< FF > &input)
Hashes a vector of field elements.
Circuit form of Poseidon2 permutation from https://eprint.iacr.org/2023/323.
Represents a dynamic array of bytes in-circuit.
uint32_t get_witness_index() const
Get the witness index of the current field element.
stdlib::witness_t< Builder > witness_t
void test_poseidon2s_hash_repeated_pairs(size_t num_inputs=5)
Test graph description for repeated poseidon2 hash operations.
bool check_in_input_vector(const std::vector< field_t > &input_vector, const uint32_t &real_var_index)
Check if a variable index is present in the input vector.
stdlib::field_t< Builder > field_t
UltraCircuitBuilder Builder
stdlib::Poseidon2Permutation< Builder > Permutation
void test_poseidon2s_circuit(size_t num_inputs=5)
Test graph description for poseidon2 hash with random inputs.
typename _curve::witness_ct witness_ct
RNG & get_debug_randomness(bool reset, std::uint_fast64_t seed)
Entry point for Barretenberg command-line interface.
UltraCircuitBuilder_< UltraExecutionTraceBlocks > UltraCircuitBuilder
TEST(BoomerangMegaCircuitBuilder, BasicCircuit)
UltraStaticAnalyzer StaticAnalyzer
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
static constexpr size_t t
static field random_element(numeric::RNG *engine=nullptr) noexcept
field_t< CircuitBuilder > ScalarField
byte_array< CircuitBuilder > byte_array_ct
witness_t< CircuitBuilder > witness_ct