4#include <gmock/gmock.h>
5#include <gtest/gtest.h>
31TEST(CalldataTraceGenTest, BasicHashing)
33 TestTraceContainer
trace;
40 simulation::CalldataEvent{
42 .calldata = { 10, 20, 30 },
43 .calldata_hash = calldata_hash,
50 EXPECT_THAT(rows.at(1),
68 ROW_FIELD_EQ(calldata_hashing_output_hash, calldata_hash)));
71 EXPECT_THAT(rows.at(2),
89 ROW_FIELD_EQ(calldata_hashing_output_hash, calldata_hash)));
92TEST(CalldataTraceGenTest, BasicRetrievalAndHashing)
94 TestTraceContainer
trace;
101 const auto events = { simulation::CalldataEvent{
103 .calldata = { 1, 2 },
104 .calldata_hash = calldata_hash_1,
106 simulation::CalldataEvent{
109 .calldata_hash = calldata_hash_2,
112 builder.process_retrieval(events, trace);
113 builder.process_hashing(events, trace);
117 EXPECT_THAT(rows.at(1),
123 EXPECT_THAT(rows.at(2),
129 EXPECT_THAT(rows.at(3),
136 EXPECT_THAT(rows.at(1),
154 ROW_FIELD_EQ(calldata_hashing_output_hash, calldata_hash_1)));
156 EXPECT_THAT(rows.at(2),
174 ROW_FIELD_EQ(calldata_hashing_output_hash, calldata_hash_2)));
177TEST(CalldataTraceGenTest, BasicRetrievalAndHashingEmpty)
179 TestTraceContainer
trace;
184 const auto events = { simulation::CalldataEvent{
187 .calldata_hash = calldata_hash,
190 builder.process_retrieval(events, trace);
191 builder.process_hashing(events, trace);
200 EXPECT_THAT(rows.at(1),
218 ROW_FIELD_EQ(calldata_hashing_output_hash, calldata_hash)));
221TEST(CalldataTraceGenTest, LongerHash)
223 TestTraceContainer
trace;
233 simulation::CalldataEvent{
236 .calldata_hash = output_hash,
242 const auto calldata_rows = std::span(rows.begin() + 1, rows.end());
245 EXPECT_THAT(calldata_rows, SizeIs(34));
247 uint32_t expected_index = 0;
248 for (
auto row : calldata_rows) {
255 ROW_FIELD_EQ(calldata_hashing_output_hash, output_hash)));
260 AllOf(
ROW_FIELD_EQ(calldata_hashing_index_0_, expected_index),
261 ROW_FIELD_EQ(calldata_hashing_index_1_, expected_index + 1),
262 ROW_FIELD_EQ(calldata_hashing_index_2_, expected_index + 2),
263 ROW_FIELD_EQ(calldata_hashing_input_0_, preimage.at(expected_index)),
264 ROW_FIELD_EQ(calldata_hashing_input_1_, preimage.at(expected_index + 1)),
266 ROW_FIELD_EQ(calldata_hashing_input_2_, expected_index == 99 ? 0 : preimage.at(expected_index + 2)),
267 ROW_FIELD_EQ(calldata_hashing_rounds_rem, 34 - (expected_index / 3))));
271 AllOf(
ROW_FIELD_EQ(calldata_hashing_start, expected_index == 0 ? 1 : 0),
272 ROW_FIELD_EQ(calldata_hashing_sel_not_start, expected_index == 0 ? 0 : 1),
273 ROW_FIELD_EQ(calldata_hashing_end, expected_index == 99 ? 1 : 0),
274 ROW_FIELD_EQ(calldata_hashing_sel_end_not_empty, expected_index == 99 ? 1 : 0),
277 ROW_FIELD_EQ(calldata_hashing_sel_not_padding_2, expected_index == 99 ? 0 : 1)));
#define DOM_SEP__PUBLIC_CALLDATA
std::vector< AvmFullRowConstRef > as_rows() const
static FF hash(const std::vector< FF > &input)
Hashes a vector of field elements.
#define ROW_FIELD_EQ(field_name, expression)
std::vector< FF > random_fields(size_t n)
TEST(BoomerangMegaCircuitBuilder, BasicCircuit)
std::vector< MemoryValue > calldata