25#include <gtest/gtest.h>
40 while (res >= F::modulus) {
48using PrimeFieldTypes = ::testing::Types<bb::fq, bb::fr, secp256k1::fq, secp256k1::fr, secp256r1::fq, secp256r1::fr>;
51using SqrtFieldTypes = ::testing::Types<bb::fq, bb::fr, secp256k1::fq, secp256r1::fq>;
72 constexpr F
a{ 0x01, 0x02, 0x03, 0x04 };
73 constexpr F
b{ 0x01, 0x02, 0x03, 0x04 };
75 constexpr F c{ 0x01, 0x02, 0x03, 0x05 };
76 constexpr F d{ 0x01, 0x02, 0x04, 0x04 };
77 constexpr F e{ 0x01, 0x03, 0x03, 0x04 };
78 constexpr F f{ 0x02, 0x02, 0x03, 0x04 };
79 static_assert(
a ==
b);
80 static_assert(!(
a == c));
81 static_assert(!(
a == d));
82 static_assert(!(
a == e));
83 static_assert(!(
a == f));
90 constexpr F
a{ 0x01, 0x02, 0x03, 0x04 };
91 constexpr F
b{ 0x05, 0x06, 0x07, 0x08 };
94 constexpr F
sum =
a +
b;
95 constexpr F diff =
a -
b;
96 constexpr F prod =
a *
b;
97 constexpr F sq =
a.
sqr();
100 EXPECT_EQ(
sum,
a +
b);
101 EXPECT_EQ(diff,
a -
b);
102 EXPECT_EQ(prod,
a *
b);
103 EXPECT_EQ(sq,
a.
sqr());
110 constexpr uint256_t a{ 0x1111, 0x2222, 0x3333, 0x4444 };
114 static_assert(
a == c);
125 uint256_t a_raw = TestFixture::get_random_element_raw();
126 uint256_t b_raw = TestFixture::get_random_element_raw();
142 uint256_t a_raw = TestFixture::get_random_element_raw();
143 uint256_t b_raw = TestFixture::get_random_element_raw();
159 uint256_t a_raw = TestFixture::get_random_element_raw();
160 uint256_t b_raw = TestFixture::get_random_element_raw();
176 uint256_t a_raw = TestFixture::get_random_element_raw();
191 uint256_t original = TestFixture::get_random_element_raw();
192 F field_element(original);
195 EXPECT_EQ(original, recovered);
206 F
a = F::random_element();
220 auto [is_sqr, root] = one.sqrt();
223 EXPECT_EQ(root.sqr(), one);
230 F
a = F::random_element();
232 auto [is_sqr, root] = a_sqr.
sqrt();
235 EXPECT_EQ(root.sqr(), a_sqr);
236 EXPECT_TRUE((root ==
a) || (root == -
a));
248 F x = F::random_element();
249 F lambda = F::cube_root_of_unity();
250 F lambda_x = x * lambda;
252 F x_cubed = x * x * x;
253 F lambda_x_cubed = lambda_x * lambda_x * lambda_x;
255 EXPECT_EQ(x_cubed, lambda_x_cubed);
268 F g = F::multiplicative_generator();
269 uint256_t p_minus_one_over_two = (F::modulus - 1) >> 1;
270 EXPECT_EQ(g.pow(p_minus_one_over_two), -F::one());
282 F
a = F::random_element();
290 F
a = F::random_element();
298 F
a = F::random_element();
306 F
a = F::random_element();
317 constexpr size_t batch_size = 10;
322 for (
size_t i = 0; i < batch_size; ++i) {
323 elements[i] = F::random_element();
324 inverses[i] = elements[i];
327 F::batch_invert(&inverses[0], batch_size);
329 for (
size_t i = 0; i < batch_size; ++i) {
330 F product = elements[i] * inverses[i];
331 product = product.reduce_once().reduce_once();
332 EXPECT_EQ(product, F::one());
344 F
a = F::random_element();
350 EXPECT_EQ(
a, a_before + F(1));
357 F
a = F::random_element();
363 EXPECT_EQ(
a, a_old + F(1));
374 F
a = F::random_element();
376 EXPECT_EQ(actual, expected);
static uint256_t get_random_element_raw()
virtual uint256_t get_random_uint256()=0
uintx< uint256_t > uint512_t
RNG & get_debug_randomness(bool reset, std::uint_fast64_t seed)
Entry point for Barretenberg command-line interface.
TYPED_TEST_SUITE(ShpleminiTest, TestSettings)
Inner sum(Cont< Inner, Args... > const &in)
TYPED_TEST(ShpleminiTest, CorrectnessOfMultivariateClaimBatching)
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
::testing::Types< bb::fq, bb::fr, secp256k1::fq, secp256r1::fq > SqrtFieldTypes
::testing::Types< bb::fq, bb::fr, secp256k1::fq, secp256k1::fr, secp256r1::fq, secp256r1::fr > PrimeFieldTypes
::testing::Types< bb::fq, bb::fr, secp256k1::fq, secp256k1::fr > CubeRootFieldTypes
BB_INLINE constexpr field to_montgomery_form() const noexcept
BB_INLINE constexpr field pow(const uint256_t &exponent) const noexcept
BB_INLINE constexpr field sqr() const noexcept
constexpr std::pair< bool, field > sqrt() const noexcept
Compute square root of the field element.
BB_INLINE constexpr field from_montgomery_form() const noexcept
std::pair< T, T > msgpack_roundtrip(const T &object)