2#include "../witness/witness.hpp"
14template <
typename Curve_,
typename Builder_>
struct PaddingTestParams {
19template <
typename Param>
class PaddingIndicatorArrayTest :
public testing::Test {
21 using Curve =
typename Param::Curve;
23 using Builder =
typename Param::Builder;
25 static constexpr size_t domain_size = 25;
27 void test_value_in_range()
29 for (
size_t idx = 1; idx <= domain_size; idx++) {
33 auto result = compute_padding_indicator_array<Curve, domain_size>(x);
34 EXPECT_TRUE(result[idx - 1].
get_value() == 1);
36 info(
"num gates = ",
builder.get_estimated_num_finalized_gates());
38 Fr sum_of_indicators = std::accumulate(result.begin(), result.end(),
Fr{ 0 });
39 EXPECT_TRUE((sum_of_indicators == x).
get_value());
46 void test_edge_cases()
55 compute_padding_indicator_array<Curve, domain_size>(zero);
56 info(
"num gates = ",
builder.get_estimated_num_finalized_gates());
65 Fr N = Fr::from_witness(&
builder, domain_size);
67 compute_padding_indicator_array<Curve, domain_size>(N);
68 info(
"num gates = ",
builder.get_estimated_num_finalized_gates());
74 void test_value_not_in_range()
76 for (
size_t idx = 1; idx < domain_size; idx++) {
80 Fr x = Fr::from_witness(&
builder, scalar_raw);
82 compute_padding_indicator_array<Curve, domain_size>(x);
83 info(
"num gates = ",
builder.get_estimated_num_finalized_gates());
89 void test_gate_count_independence()
91 auto get_gate_count = [](
const uint32_t& scalar_raw) ->
size_t {
93 Fr x = Fr::from_witness(&
builder, scalar_raw);
94 auto result = compute_padding_indicator_array<Curve, domain_size>(x);
96 return builder.get_estimated_num_finalized_gates();
100 uint32_t x_in_range = (domain_size - 1) / 2;
101 size_t gates_in_range = get_gate_count(x_in_range);
105 size_t gates_random = get_gate_count(random_scalar);
107 EXPECT_EQ(gates_in_range, gates_random);
112 PaddingTestParams<bb::stdlib::bn254<bb::MegaCircuitBuilder_<bb::field<bb::Bn254FrParams>>>,
bb::MegaCircuitBuilder>,
117TYPED_TEST(PaddingIndicatorArrayTest, TestValueInRange)
119 TestFixture::test_value_in_range();
122TYPED_TEST(PaddingIndicatorArrayTest, TestEdgeCases)
124 TestFixture::test_edge_cases();
126TYPED_TEST(PaddingIndicatorArrayTest, TestValueNotInrange)
128 TestFixture::test_value_not_in_range();
130TYPED_TEST(PaddingIndicatorArrayTest, TestGateCountIndependence)
132 TestFixture::test_gate_count_independence();
testing::Types< TestType< stdlib::bn254< bb::UltraCircuitBuilder >, UseBigfield::Yes >, TestType< stdlib::bn254< bb::MegaCircuitBuilder >, UseBigfield::No > > TestTypes
static bool check(const Builder &circuit)
Check the witness satisifies the circuit.
virtual uint32_t get_random_uint32()=0
virtual uint256_t get_random_uint256()=0
Value get_value(int64_t keyCount, int64_t valueCount)
RNG & get_debug_randomness(bool reset, std::uint_fast64_t seed)
Entry point for Barretenberg command-line interface.
TYPED_TEST_SUITE(ShpleminiTest, TestSettings)
TYPED_TEST(ShpleminiTest, CorrectnessOfMultivariateClaimBatching)
For a small integer N = virtual_log_n and a given witness x = log_n, compute in-circuit an indicator_...