Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
relation_manual.test.cpp
Go to the documentation of this file.
6#include <gtest/gtest.h>
7
8using namespace bb;
9
10using FF = fr;
11
12class RelationManual : public testing::Test {};
13
14// AllEntities-shaped input for Poseidon2 relation manual tests — generator-emitted std::array
15// storage with EntityId-keyed access. Only the fields each test sets are non-zero; everything
16// else stays default-initialised to FF(0).
19
20TEST_F(RelationManual, Poseidon2ExternalRelationZeros)
21{
22 using Accumulator = std::array<FF, 4>;
24
25 Accumulator acc{ 0, 0, 0, 0 };
26 AllPoseidonValues all_poseidon_values{};
27 all_poseidon_values[EntityId::q_poseidon2_external] = 1;
28
29 const auto parameters = RelationParameters<FF>::get_random();
30 Relation::accumulate(acc, all_poseidon_values, parameters, 1);
31 EXPECT_EQ(acc[0], 0);
32 EXPECT_EQ(acc[1], 0);
33 EXPECT_EQ(acc[2], 0);
34 EXPECT_EQ(acc[3], 0);
35}
36
37TEST_F(RelationManual, Poseidon2ExternalRelationRandom)
38{
39 using Accumulator = std::array<FF, 4>;
41
42 Accumulator acc{ 0, 0, 0, 0 };
43 /*
44 * v1 = w_1 + q_1 = 5 + 6 = 11
45 * v2 = w_2 + q_2 = 4 + 9 = 13
46 * v3 = w_3 + q_3 = 1 + 8 = 9
47 * v4 = w_4 + q_4 = 7 + 3 = 10
48 * u1 = v1^5 = 11^5 = 161051
49 * u2 = v2^5 = 13^5 = 371293
50 * u3 = v3^5 = 9^5 = 59049
51 * u4 = v4^5 = 10^5 = 100000
52 * matrix mul with calculator:
53 * 1 3763355
54 * 2 3031011
55 * 3 2270175
56 * 4 1368540
57 */
58 AllPoseidonValues all_poseidon_values{};
59 all_poseidon_values[EntityId::q_poseidon2_external] = 1;
60 all_poseidon_values[EntityId::q_l] = 6;
61 all_poseidon_values[EntityId::q_r] = 9;
62 all_poseidon_values[EntityId::q_o] = 8;
63 all_poseidon_values[EntityId::q_4] = 3;
64 all_poseidon_values[EntityId::w_l] = 5;
65 all_poseidon_values[EntityId::w_r] = 4;
66 all_poseidon_values[EntityId::w_o] = 1;
67 all_poseidon_values[EntityId::w_4] = 7;
68 all_poseidon_values[EntityId::w_l_shift] = 3763355;
69 all_poseidon_values[EntityId::w_r_shift] = 3031011;
70 all_poseidon_values[EntityId::w_o_shift] = 2270175;
71 all_poseidon_values[EntityId::w_4_shift] = 1368540;
72
73 const auto parameters = RelationParameters<FF>::get_random();
74 Relation::accumulate(acc, all_poseidon_values, parameters, 1);
75 EXPECT_EQ(acc[0], 0);
76 EXPECT_EQ(acc[1], 0);
77 EXPECT_EQ(acc[2], 0);
78 EXPECT_EQ(acc[3], 0);
79}
80
81TEST_F(RelationManual, Poseidon2InternalRelationZeros)
82{
83 using Accumulator = std::array<FF, 4>;
85
86 Accumulator acc{ 0, 0, 0, 0 };
87 AllPoseidonValues all_poseidon_values{};
88 all_poseidon_values[EntityId::q_poseidon2_internal] = 1;
89
90 const auto parameters = RelationParameters<FF>::get_random();
91 Relation::accumulate(acc, all_poseidon_values, parameters, 1);
92 EXPECT_EQ(acc[0], 0);
93 EXPECT_EQ(acc[1], 0);
94 EXPECT_EQ(acc[2], 0);
95 EXPECT_EQ(acc[3], 0);
96}
97
98TEST_F(RelationManual, Poseidon2InternalRelationRandom)
99{
100 using Accumulator = std::array<FF, 4>;
102
103 Accumulator acc{ 0, 0, 0, 0 };
104 /*
105 * u1 = (w_1 + q_1)^5 = (1 + 5)^5 = 7776
106 * sum = u1 + w_2 + w_3 + w_4 = 7776 + 2 + 3 + 4 = 7785
107 * matrix mul with calculator:
108 * 1 0x122d9ce41e83c533318954d77a4ebc40eb729f6543ebd5f2e4ecb175ced3bc74
109 * 2 0x185028b6d489be7c029367a14616776b33bf2eada9bb370950d6719f68b5067f
110 * 3 0x00fce289a96b3f4a18562d0ef0ab76ca165e613222aa0c24501377003c5622a8
111 * 4 0x27e7677799fda1694819803f459b76d2fb1c45fdf0773375c72d61e8efb92893
112 */
113 AllPoseidonValues all_poseidon_values{};
114 all_poseidon_values[EntityId::q_poseidon2_internal] = 1;
115 all_poseidon_values[EntityId::q_l] = 5;
116 all_poseidon_values[EntityId::w_l] = 1;
117 all_poseidon_values[EntityId::w_r] = 2;
118 all_poseidon_values[EntityId::w_o] = 3;
119 all_poseidon_values[EntityId::w_4] = 4;
120 all_poseidon_values[EntityId::w_l_shift] =
121 FF(std::string("0x122d9ce41e83c533318954d77a4ebc40eb729f6543ebd5f2e4ecb175ced3bc74"));
122 all_poseidon_values[EntityId::w_r_shift] =
123 FF(std::string("0x185028b6d489be7c029367a14616776b33bf2eada9bb370950d6719f68b5067f"));
124 all_poseidon_values[EntityId::w_o_shift] =
125 FF(std::string("0x00fce289a96b3f4a18562d0ef0ab76ca165e613222aa0c24501377003c5622a8"));
126 all_poseidon_values[EntityId::w_4_shift] =
127 FF(std::string("0x27e7677799fda1694819803f459b76d2fb1c45fdf0773375c72d61e8efb92893"));
128 const auto parameters = RelationParameters<FF>::get_random();
129 Relation::accumulate(acc, all_poseidon_values, parameters, 1);
130 EXPECT_EQ(acc[0], 0);
131 EXPECT_EQ(acc[1], 0);
132 EXPECT_EQ(acc[2], 0);
133 EXPECT_EQ(acc[3], 0);
134}
A wrapper for Relations to expose methods used by the Sumcheck prover or verifier to add the contribu...
Base class templates shared across Honk flavors.
Entry point for Barretenberg command-line interface.
Definition api.hpp:5
TEST_F(IPATest, ChallengesAreZero)
Definition ipa.test.cpp:160
field< Bn254FrParams > fr
Definition fr.hpp:155
static RelationParameters get_random()