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.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.show_variables_in_one_gate(builder);
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.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.show_variables_in_one_gate(builder);
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 ram_table_ct table(&builder, table_size);
123
124 for (size_t i = 0; i < table_size; ++i) {
125 table.write(i, 0);
126 }
127 std::unordered_set<uint32_t> safety_variables;
128 field_ct result(0);
129 safety_variables.insert(result.witness_index);
130
131 const auto update = [&]() {
132 for (size_t i = 0; i < table_size / 2; ++i) {
133 table_values[2 * i] = fr::random_element();
134 table_values[2 * i + 1] = fr::random_element();
135
136 // init with both constant and variable values
137 field_ct value1(witness_ct(&builder, table_values[2 * i]));
138 field_ct value2(witness_ct(&builder, table_values[2 * i + 1]));
139 value1.fix_witness();
140 value2.fix_witness();
141 table.write(2 * i, value1);
142 table.write(2 * i + 1, value2);
143 }
144 };
145
146 const auto read = [&]() {
147 for (size_t i = 0; i < table_size / 2; ++i) {
148 const size_t index = table_size - 2 - (i * 2); // access in something other than basic incremental order
149 field_ct index1(witness_ct(&builder, index));
150 field_ct index2(witness_ct(&builder, index + 1));
151 index1.fix_witness();
152 index2.fix_witness();
153 result += table.read(index1);
154 safety_variables.insert(result.witness_index);
155 result += table.read(index2);
156 safety_variables.insert(result.witness_index);
157 }
158 };
159
160 update();
161 read();
162 update();
163 read();
164 update();
165
166 result.fix_witness();
168 auto connected_components = graph.find_connected_components();
169 EXPECT_EQ(connected_components.size(), 1);
170 auto variables_in_one_gate = graph.show_variables_in_one_gate(builder);
171 for (const auto& elem : variables_in_one_gate) {
172 EXPECT_EQ(safety_variables.contains(elem), true);
173 }
174}
uint32_t witness_index
Definition field.hpp:132
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::unordered_set< uint32_t > show_variables_in_one_gate(bb::UltraCircuitBuilder &ultra_circuit_builder)
this method returns a final set of variables that were in one gate
Definition graph.cpp:1190
std::vector< std::vector< uint32_t > > find_connected_components()
this methond finds all connected components in the graph described by adjacency lists
Definition graph.cpp:794
AluTraceBuilder builder
Definition alu.test.cpp:123
numeric::RNG & engine
stdlib::field_t< Builder > field_ct
stdlib::witness_t< Builder > witness_ct
TEST(boomerang_rom_ram_table, graph_description_rom_table)
Test graph description for ROM table operations.
RNG & get_debug_randomness(bool reset, std::uint_fast64_t seed)
Definition engine.cpp:190
Entry point for Barretenberg command-line interface.
void read(B &it, field2< base_field, Params > &value)
UltraCircuitBuilder_< UltraExecutionTraceBlocks > UltraCircuitBuilder
Definition graph.cpp:11
StaticAnalyzer_< bb::fr > StaticAnalyzer
Definition graph.hpp:201
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
Definition tuple.hpp:13
static field random_element(numeric::RNG *engine=nullptr) noexcept