Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
graph_description_ram_rom.test.cpp
Go to the documentation of this file.
6
7using namespace bb;
8using namespace cdg;
9namespace {
11}
12
18
26TEST(boomerang_rom_ram_table, graph_description_rom_table)
27{
29
30 std::vector<field_ct> table_values;
31 const size_t table_size = 10;
32 for (size_t i = 0; i < table_size; ++i) {
33 table_values.emplace_back(witness_ct(&builder, bb::fr::random_element()));
34 }
35 for (auto& elem : table_values) {
36 elem.fix_witness();
37 }
38
39 rom_table_ct table(table_values);
40 std::unordered_set<uint32_t> safety_variables;
41
42 field_ct result = field_ct(witness_ct(&builder, (uint64_t)0));
43
44 for (size_t i = 0; i < 10; ++i) {
45 safety_variables.insert(result.get_witness_index());
46 field_ct index(witness_ct(&builder, (uint64_t)i));
47 index.fix_witness();
48 result += table[index];
49 }
50
51 result.fix_witness();
53 auto connected_components = graph.find_connected_components();
54 EXPECT_EQ(connected_components.size(), 1);
55 auto variables_in_one_gate = graph.get_variables_in_one_gate();
56 for (const auto& elem : variables_in_one_gate) {
57 EXPECT_EQ(variables_in_one_gate.contains(elem), true);
58 }
59}
60
68TEST(boomerang_rom_ram_table, graph_description_ram_table_read)
69{
71
72 std::vector<field_ct> table_values;
73 const size_t table_size = 10;
74 for (size_t i = 0; i < table_size; ++i) {
75 table_values.emplace_back(witness_ct(&builder, bb::fr::random_element()));
76 }
77
78 for (auto& elem : table_values) {
79 elem.fix_witness();
80 }
81
82 ram_table_ct table(table_values);
83 field_ct result = field_ct(witness_ct(&builder, (uint64_t)0));
84 std::unordered_set<uint32_t> safety_variables;
85
86 for (size_t i = 0; i < 10; ++i) {
87 safety_variables.insert(result.get_witness_index());
88 field_ct index(witness_ct(&builder, (uint64_t)i));
89 index.fix_witness();
90 result += table.read(index);
91 }
92
93 result.fix_witness();
95 auto connected_components = graph.find_connected_components();
96 EXPECT_EQ(connected_components.size(), 1);
97 auto variables_in_one_gate = graph.get_variables_in_one_gate();
98 for (const auto& elem : variables_in_one_gate) {
99 EXPECT_EQ(safety_variables.contains(elem), true);
100 }
101}
102
116TEST(boomerang_rom_ram_table, graph_description_ram_table_write)
117{
119 const size_t table_size = 10;
120
121 std::vector<fr> table_values(table_size);
122 std::vector<field_ct> zeros(table_size, field_ct(0));
123 ram_table_ct table(&builder, zeros);
124
125 for (size_t i = 0; i < table_size; ++i) {
126 table.write(i, 0);
127 }
128
129 std::unordered_set<uint32_t> safety_variables;
130 field_ct result(0);
131 safety_variables.insert(result.get_witness_index());
132
133 const auto update = [&]() {
134 for (size_t i = 0; i < table_size / 2; ++i) {
135 table_values[2 * i] = fr::random_element();
136 table_values[2 * i + 1] = fr::random_element();
137
138 // init with both constant and variable values
139 field_ct value1(witness_ct(&builder, table_values[2 * i]));
140 field_ct value2(witness_ct(&builder, table_values[2 * i + 1]));
141 value1.fix_witness();
142 value2.fix_witness();
143 table.write(2 * i, value1);
144 table.write(2 * i + 1, value2);
145 }
146 };
147
148 const auto read = [&]() {
149 for (size_t i = 0; i < table_size / 2; ++i) {
150 const size_t index = table_size - 2 - (i * 2); // access in something other than basic incremental order
151 field_ct index1(witness_ct(&builder, index));
152 field_ct index2(witness_ct(&builder, index + 1));
153 index1.fix_witness();
154 index2.fix_witness();
155 result += table.read(index1);
156 safety_variables.insert(result.get_witness_index());
157 result += table.read(index2);
158 safety_variables.insert(result.get_witness_index());
159 }
160 };
161
162 update();
163 read();
164 update();
165 read();
166 update();
167
168 result.fix_witness();
170 auto connected_components = graph.find_connected_components();
171 EXPECT_EQ(connected_components.size(), 1);
172 auto variables_in_one_gate = graph.get_variables_in_one_gate();
173 for (const auto& elem : variables_in_one_gate) {
174 EXPECT_EQ(safety_variables.contains(elem), true);
175 }
176}
uint32_t get_witness_index() const
Get the witness index of the current field element.
Definition field.hpp:506
field_pt read(const field_pt &index) const
Read a field element from the RAM table at an index value.
void write(const field_pt &index, const field_pt &value)
Write a field element from the RAM table at an index value.
std::vector< ConnectedComponent > find_connected_components()
this methond finds all connected components in the graph described by adjacency lists and marks some ...
Definition graph.cpp:897
std::unordered_set< uint32_t > get_variables_in_one_gate()
this method returns a final set of variables that were in one gate
Definition graph.cpp:1396
AluTraceBuilder builder
Definition alu.test.cpp:124
numeric::RNG & engine
stdlib::field_t< Builder > field_ct
stdlib::witness_t< Builder > witness_ct
RNG & get_debug_randomness(bool reset, std::uint_fast64_t seed)
Definition engine.cpp:190
Entry point for Barretenberg command-line interface.
Definition api.hpp:5
void read(uint8_t const *&it, Chonk::VerificationKey &vk)
Definition chonk.hpp:350
UltraCircuitBuilder_< UltraExecutionTraceBlocks > UltraCircuitBuilder
TEST(BoomerangMegaCircuitBuilder, BasicCircuit)
Definition graph.cpp:14
UltraStaticAnalyzer StaticAnalyzer
Definition graph.hpp:187
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
Definition tuple.hpp:13
static field random_element(numeric::RNG *engine=nullptr) noexcept