1#include <gtest/gtest.h>
6#pragma GCC diagnostic ignored "-Wunused-local-typedefs"
24 size_t num_bytes = arr.
size();
27 for (
size_t i = 0; i < num_bytes; ++i) {
29 reconstructed +=
byte *
fr(
uint256_t(1) << ((num_bytes - 1 - i) * 8));
31 EXPECT_TRUE(original_val.
get_value() == reconstructed);
38 return fr(val & mask);
45 std::vector<uint8_t> expected = { 0x04, 0x03, 0x02, 0x01 };
49 for (
const auto&
byte : arr.bytes()) {
54 arr.bytes()[0].set_origin_tag(submitted_value_origin_tag);
56 auto reversed_arr = arr.reverse();
58 EXPECT_EQ(arr.size(), 4UL);
59 EXPECT_EQ(reversed_arr.get_value(), expected);
61 EXPECT_EQ(reversed_arr.bytes()[3].get_origin_tag(), submitted_value_origin_tag);
63 EXPECT_EQ(reversed_arr.get_origin_tag(), submitted_value_origin_tag);
65 EXPECT_EQ(reversed_arr.bytes()[0].get_origin_tag(), clear_tag);
66 EXPECT_EQ(reversed_arr.bytes()[1].get_origin_tag(), clear_tag);
67 EXPECT_EQ(reversed_arr.bytes()[2].get_origin_tag(), clear_tag);
72 for (
size_t num_bytes = 1; num_bytes < 32; num_bytes++) {
79 field.set_origin_tag(submitted_value_origin_tag);
82 EXPECT_EQ(byte_arr.
size(), num_bytes);
87 field_ct reconstructed_field(byte_arr);
88 EXPECT_EQ(reconstructed_field.
get_value(), expected_val);
89 EXPECT_EQ(reconstructed_field.
get_origin_tag(), submitted_value_origin_tag);
97 for (
size_t num_bytes = 1; num_bytes < 32; num_bytes++) {
99 size_t num_gates_start =
builder.get_num_finalized_gates_inefficient();
105 field.set_origin_tag(submitted_value_origin_tag);
108 EXPECT_EQ(byte_arr.
size(), num_bytes);
113 field_ct reconstructed_field(byte_arr);
114 EXPECT_EQ(reconstructed_field.
get_value(), expected_val);
115 EXPECT_EQ(reconstructed_field.
get_origin_tag(), submitted_value_origin_tag);
118 EXPECT_TRUE(
builder.get_num_finalized_gates_inefficient() - num_gates_start == 0);
145 EXPECT_TRUE(
builder.err() ==
"byte_array: y_hi doesn't fit in 128 bits.");
151 uint256_t random_overflowing_value(
"0xcf9bb18d1ece5fd647afba497e7ea7a3d3bdb158855487614a97cd3d2a1954b2");
158 EXPECT_TRUE(
builder.err() ==
"byte_array: y_hi doesn't fit in 128 bits.");
166 size_t gates_start =
builder.get_num_finalized_gates_inefficient();
179 "byte_array: y_hi doesn't fit in 128 bits");
184 uint256_t random_overflowing_value(
"0xcf9bb18d1ece5fd647afba497e7ea7a3d3bdb158855487614a97cd3d2a1954b2");
187 "byte_array: y_hi doesn't fit in 128 bits");
190 EXPECT_TRUE(gates_start ==
builder.get_num_finalized_gates_inefficient());
201 a.set_origin_tag(submitted_value_origin_tag);
203 b.set_origin_tag(challenge_origin_tag);
214 EXPECT_EQ(arr.
size(), 62UL);
226 EXPECT_EQ(verified,
true);
231 for (
size_t arr_length = 1; arr_length < 32; arr_length++) {
236 std::vector<uint8_t> native_bytes(arr_length);
237 for (
size_t idx = 0; idx < arr_length; idx++) {
249 for (
size_t i = 0; i < arr_length; ++i) {
250 expected_value = (expected_value << 8) + native_bytes[i];
254 EXPECT_EQ(represented_field_elt.
get_value(),
fr(expected_value));
266 std::string
a =
"\1\2\3a";
268 std::ostringstream os;
270 EXPECT_EQ(os.str(),
"[ 01 02 03 61 ]");
280 TestFixture::test_reverse();
285 TestFixture::test_into_bytes_decomposition_less_than_32_bytes();
290 TestFixture::test_into_bytes_decomposition_less_than_32_bytes_const();
295 TestFixture::test_into_bytes_decomposition_32_bytes();
300 TestFixture::test_into_bytes_decomposition_32_bytes_const();
305 TestFixture::test_byte_array_input_output_consistency();
310 TestFixture::test_conversion_to_field();
315 TestFixture::test_ostream_operator();
#define EXPECT_THROW_OR_ABORT(statement, matcher)
stdlib::witness_t< Builder > witness_ct
void test_into_bytes_decomposition_32_bytes_const()
stdlib::field_t< Builder > field_ct
void test_into_bytes_decomposition_32_bytes()
fr slice_to_n_bytes(const fr &value, const uint64_t n)
void test_into_bytes_decomposition_less_than_32_bytes_const()
void test_ostream_operator()
void test_byte_array_input_output_consistency()
void check_byte_decomposition(const byte_array_ct &arr, const field_ct &original_val)
void test_conversion_to_field()
void test_into_bytes_decomposition_less_than_32_bytes()
static bool check(const Builder &circuit)
Check the witness satisifies the circuit.
virtual uint8_t get_random_uint8()=0
virtual uint256_t get_random_uint256()=0
Implements boolean logic in-circuit.
Represents a dynamic array of bytes in-circuit.
byte_array slice(size_t offset) const
Slice bytes from the byte array starting at offset. Does not add any constraints.
byte_array & write(byte_array const &other)
Appends the contents of another byte_array (other) to the end of this one.
void unset_free_witness_tag()
Unset the free witness flag for the byte array.
std::vector< uint8_t > get_value() const
A helper converting a byte_array into the vector of its uint8_t values.
OriginTag get_origin_tag() const
bb::fr get_value() const
Given a := *this, compute its value given by a.v * a.mul + a.add.
ECCVMCircuitBuilder Builder
RNG & get_debug_randomness(bool reset, std::uint_fast64_t seed)
Entry point for Barretenberg command-line interface.
TYPED_TEST_SUITE(ShpleminiTest, TestSettings)
field< Bn254FrParams > fr
TYPED_TEST(ShpleminiTest, CorrectnessOfMultivariateClaimBatching)
#define STANDARD_TESTING_TAGS
testing::Types< bb::MegaCircuitBuilder, bb::UltraCircuitBuilder > CircuitTypes
static constexpr uint256_t modulus
static field random_element(numeric::RNG *engine=nullptr) noexcept