18#include <gtest/gtest.h>
22template <
typename F>
class FieldTest :
public ::testing::Test {};
25concept HasPow = IsAnyOf<F, bb::fq, bb::fr, secp256k1::fq, secp256k1::fr, secp256r1::fq, secp256r1::fr>;
28concept HasSqrt = IsAnyOf<F, bb::fq, bb::fr>;
34 Types<bb::fq, bb::fr, secp256k1::fq, secp256k1::fr, secp256r1::fq, secp256r1::fr, bb::fq2, bb::fq6, bb::fq12>;
49 EXPECT_EQ(
a + zero,
a);
50 EXPECT_EQ(zero +
a,
a);
60 EXPECT_EQ(
a * one,
a);
61 EXPECT_EQ(one *
a,
a);
88 EXPECT_EQ(
a +
b,
b +
a);
101 EXPECT_EQ(a_plus_b + c,
a + b_plus_c);
110 using FF = TypeParam;
116 EXPECT_EQ(
a -
b,
a + neg_b);
121 using FF = TypeParam;
125 FF result =
a + neg_a;
132 using FF = TypeParam;
137 EXPECT_EQ(zero, neg_zero);
142 using FF = TypeParam;
154 using FF = TypeParam;
159 EXPECT_EQ(
a *
b,
b *
a);
164 using FF = TypeParam;
170 EXPECT_EQ((
a *
b) * c,
a * (
b * c));
175 using FF = TypeParam;
181 EXPECT_EQ(
a * (
b + c), (
a *
b) + (
a * c));
186 using FF = TypeParam;
201 using FF = TypeParam;
205 FF mul_result =
a *
a;
207 EXPECT_EQ(sqr_result, mul_result);
212 using FF = TypeParam;
218 FF lhs = (
a -
b) * (
a +
b);
230 using FF = TypeParam;
234 FF result =
a * a_inv;
241 using FF = TypeParam;
250 using FF = TypeParam;
255 EXPECT_EQ(a_inv_inv,
a);
265 using FF = TypeParam;
277 using FF = TypeParam;
280 auto [is_sqr, root] = input.
sqrt();
281 FF result = root.
sqr();
284 EXPECT_EQ(result, input);
297 using FF = TypeParam;
303 EXPECT_EQ(a_copy, -
a);
308 using FF = TypeParam;
315 EXPECT_EQ(
a, expected);
320 using FF = TypeParam;
327 EXPECT_EQ(
a, expected);
332 using FF = TypeParam;
339 EXPECT_EQ(
a, expected);
344 using FF = TypeParam;
350 EXPECT_EQ(
a, expected);
359 using FF = TypeParam;
368 FF product =
a * three;
370 EXPECT_EQ(
sum, product);
375 using FF = TypeParam;
379 FF four_a =
a +
a +
a +
a;
380 FF result = four_a -
a;
383 FF expected =
a * three;
385 EXPECT_EQ(result, expected);
390 using FF = TypeParam;
402 mul_result = t1 * t2;
406 sqr_result = t1 - t2;
408 EXPECT_EQ(mul_result, sqr_result);
417 using FF = TypeParam;
424 constexpr FF result = [&]()
constexpr {
435 to_be_compared = { result.
data[0], result.
data[1], result.
data[2], result.
data[3] };
438 to_be_compared = { result.c0.
data[0], result.c0.
data[1], result.c0.
data[2], result.c0.
data[3] };
443 to_be_compared = { result.c0.c0.
data[0], result.c0.c0.
data[1], result.c0.c0.
data[2], result.c0.c0.
data[3] };
450 result.c0.c0.c0.
data[0], result.c0.c0.c0.
data[1], result.c0.c0.c0.
data[2], result.c0.c0.c0.
data[3]
454 EXPECT_EQ(to_be_compared, expected);
459 using FF = TypeParam;
478 result_a = aRR * bRR;
479 result_b = aR * bRRR;
483 EXPECT_EQ((result_a == result_b),
true);
492 EXPECT_EQ((result_a == result_c),
true);
493 EXPECT_EQ((result_a == result_d),
true);
504 using FF = TypeParam;
510 EXPECT_EQ((result == expected),
true);
517 using FF = TypeParam;
519 std::array<uint8_t, 32>
buffer;
520 FF a{ 0x1234567876543210, 0x2345678987654321, 0x3456789a98765432, 0x006789abcba98765 };
525 EXPECT_EQ(
buffer[31], 0x10);
526 EXPECT_EQ(
buffer[30], 0x32);
527 EXPECT_EQ(
buffer[29], 0x54);
528 EXPECT_EQ(
buffer[28], 0x76);
529 EXPECT_EQ(
buffer[27], 0x78);
530 EXPECT_EQ(
buffer[26], 0x56);
531 EXPECT_EQ(
buffer[25], 0x34);
532 EXPECT_EQ(
buffer[24], 0x12);
534 EXPECT_EQ(
buffer[23], 0x21);
535 EXPECT_EQ(
buffer[22], 0x43);
536 EXPECT_EQ(
buffer[21], 0x65);
537 EXPECT_EQ(
buffer[20], 0x87);
538 EXPECT_EQ(
buffer[19], 0x89);
539 EXPECT_EQ(
buffer[18], 0x67);
540 EXPECT_EQ(
buffer[17], 0x45);
541 EXPECT_EQ(
buffer[16], 0x23);
543 EXPECT_EQ(
buffer[15], 0x32);
544 EXPECT_EQ(
buffer[14], 0x54);
545 EXPECT_EQ(
buffer[13], 0x76);
546 EXPECT_EQ(
buffer[12], 0x98);
547 EXPECT_EQ(
buffer[11], 0x9a);
548 EXPECT_EQ(
buffer[10], 0x78);
549 EXPECT_EQ(
buffer[9], 0x56);
550 EXPECT_EQ(
buffer[8], 0x34);
552 EXPECT_EQ(
buffer[7], 0x65);
553 EXPECT_EQ(
buffer[6], 0x87);
554 EXPECT_EQ(
buffer[5], 0xa9);
555 EXPECT_EQ(
buffer[4], 0xcb);
556 EXPECT_EQ(
buffer[3], 0xab);
557 EXPECT_EQ(
buffer[2], 0x89);
558 EXPECT_EQ(
buffer[1], 0x67);
559 EXPECT_EQ(
buffer[0], 0x00);
566 using FF = TypeParam;
568 std::array<uint8_t, 32>
buffer;
569 FF expected{ 0x1234567876543210, 0x2345678987654321, 0x3456789a98765432, 0x006789abcba98765 };
574 EXPECT_EQ(result, expected);
576 std::array<uint8_t, 64>
buffer;
577 fq expected_c0 = { 0x1234567876543210, 0x2345678987654321, 0x3456789a98765432, 0x006789abcba98765 };
578 fq expected_c1 = { 0x12a4e67f76b43210, 0x23e56f898a65cc21, 0x005678add98e5432, 0x1f6789a2cba98700 };
579 fq2 expected{ expected_c0, expected_c1 };
585 EXPECT_EQ(result, expected);
static constexpr field6 zero()
std::unique_ptr< uint8_t[]> buffer
::testing::Types< bb::fq, bb::fr, secp256k1::fq, secp256k1::fr, secp256r1::fq, secp256r1::fr, bb::fq2, bb::fq6, bb::fq12 > AllFieldTypes
Entry point for Barretenberg command-line interface.
TYPED_TEST_SUITE(CommitmentKeyTest, Curves)
Inner sum(Cont< Inner, Args... > const &in)
TYPED_TEST(CommitmentKeyTest, CommitToZeroPoly)
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
static field2 serialize_from_buffer(uint8_t *buffer)
static constexpr field2 zero()
static void serialize_to_buffer(const field2 &value, uint8_t *buffer)
BB_INLINE constexpr field from_montgomery_form_reduced() const noexcept
static constexpr field one()
BB_INLINE constexpr field to_montgomery_form() const noexcept
BB_INLINE constexpr field pow(const uint256_t &exponent) const noexcept
BB_INLINE constexpr void self_sqr() &noexcept
constexpr field invert() const noexcept
BB_INLINE constexpr void self_neg() &noexcept
static field random_element(numeric::RNG *engine=nullptr) noexcept
BB_INLINE constexpr field sqr() const noexcept
static field serialize_from_buffer(const uint8_t *buffer)
static void serialize_to_buffer(const field &value, uint8_t *buffer)
constexpr std::pair< bool, field > sqrt() const noexcept
Compute square root of the field element.
static BB_INLINE void __copy(const field &a, field &r) noexcept
BB_INLINE constexpr void self_from_montgomery_form() &noexcept
BB_INLINE constexpr bool is_zero() const noexcept
BB_INLINE constexpr void self_to_montgomery_form() &noexcept
BB_INLINE constexpr field from_montgomery_form() const noexcept
static constexpr field zero()