45 for (
const auto& elem : input_vector) {
46 if (elem.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.show_variables_in_one_gate(
builder);
78 std::unordered_set<uint32_t> outputs{
79 result.witness_index, result.witness_index + 1, result.witness_index + 2, result.witness_index + 3
81 for (
const auto& elem : variables_in_one_gate) {
82 EXPECT_EQ(outputs.contains(elem),
true);
106 for (
size_t i = 0; i < num_inputs - 1; ++i) {
115 auto connected_components = graph.find_connected_components();
116 EXPECT_EQ(connected_components.size(), 1);
117 auto variables_in_one_gate = graph.show_variables_in_one_gate(
builder);
118 for (
const auto& elem : variables_in_one_gate) {
119 EXPECT_EQ(outputs.contains(elem),
true);
129TEST(boomerang_poseidon2s, test_graph_for_poseidon2s_one_permutation)
140 [[maybe_unused]]
auto new_state = poseidon2permutation.permutation(&
builder, inputs);
141 for (
auto& elem : new_state) {
146 auto connected_components = graph.find_connected_components();
147 EXPECT_EQ(connected_components.size(), 1);
148 auto variables_in_one_gate = graph.show_variables_in_one_gate(
builder);
149 EXPECT_EQ(variables_in_one_gate.size(), 0);
158TEST(boomerang_poseidon2s, test_graph_for_poseidon2s_two_permutations)
173 [[maybe_unused]]
auto state1 = poseidon2permutation.permutation(&
builder, input1);
174 [[maybe_unused]]
auto state2 = poseidon2permutation.permutation(&
builder, input2);
175 for (
auto& elem : state1) {
178 for (
auto& elem : state2) {
182 auto connected_components = graph.find_connected_components();
183 EXPECT_EQ(connected_components.size(), 2);
184 auto variables_in_one_gate = graph.show_variables_in_one_gate(
builder);
185 EXPECT_EQ(variables_in_one_gate.size(), 0);
191TEST(boomerang_poseidon2s, test_graph_for_poseidon2s)
193 for (
size_t num_inputs = 6; num_inputs < 100; num_inputs++) {
201TEST(boomerang_poseidon2s, test_graph_for_poseidon2s_for_one_input_size)
209TEST(boomerang_poseidon2s, test_graph_for_poseidon2s_hash_repeated_pairs)
static FF hash(const std::vector< FF > &input)
Hashes a vector of field elements.
Represents a dynamic array of bytes in-circuit.
TEST(boomerang_poseidon2s, test_graph_for_poseidon2s_one_permutation)
Test graph description for a single poseidon2 permutation.
stdlib::witness_t< Builder > witness_t
stdlib::Poseidon2Permutation< Params, Builder > Permutation
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
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
StaticAnalyzer_< bb::fr > 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