1#include <gmock/gmock.h>
2#include <gtest/gtest.h>
31using tracegen::ExecutionTraceBuilder;
32using tracegen::PublicDataTreeTraceBuilder;
33using tracegen::TestTraceContainer;
35using simulation::EventEmitter;
36using simulation::MerkleDB;
37using simulation::MockExecutionIdManager;
38using simulation::MockFieldGreaterThan;
39using simulation::MockL1ToL2MessageTreeCheck;
40using simulation::MockLowLevelMerkleDB;
41using simulation::MockMerkleCheck;
42using simulation::MockNoteHashTreeCheck;
43using simulation::MockNullifierTreeCheck;
44using simulation::MockPoseidon2;
45using simulation::MockWrittenPublicDataSlotsTreeCheck;
46using simulation::PublicDataTreeCheck;
49using testing::NiceMock;
57TEST(SLoadConstrainingTest, PositiveTest)
59 TestTraceContainer
trace({
60 { { C::execution_sel_execute_sload, 1 },
61 { C::execution_register_0_, 42 },
62 { C::execution_register_1_, 27 },
63 { C::execution_mem_tag_reg_0_,
static_cast<uint8_t
>(
MemoryTag::FF) },
64 { C::execution_mem_tag_reg_1_,
static_cast<uint8_t
>(
MemoryTag::FF) },
67 check_relation<sload>(trace);
70TEST(SLoadConstrainingTest, NegativeInvalidOutputTag)
72 TestTraceContainer
trace({
73 { { C::execution_sel_execute_sload, 1 },
74 { C::execution_register_0_, 42 },
75 { C::execution_register_1_, 27 },
76 { C::execution_mem_tag_reg_0_,
static_cast<uint8_t
>(
MemoryTag::FF) },
77 { C::execution_mem_tag_reg_1_,
static_cast<uint8_t
>(
MemoryTag::U32) },
83TEST(SLoadConstrainingTest, NegativeSloadSuccess)
85 TestTraceContainer
trace({
86 { { C::execution_sel_execute_sload, 1 },
87 { C::execution_register_0_, 42 },
88 { C::execution_register_1_, 27 },
89 { C::execution_mem_tag_reg_0_,
static_cast<uint8_t
>(
MemoryTag::FF) },
90 { C::execution_mem_tag_reg_1_,
static_cast<uint8_t
>(
MemoryTag::FF) },
92 { C::execution_sel_opcode_error, 1 } },
95 check_relation<sload>(trace);
97 "INFALLIBLE_OPCODES_SUCCESS");
100TEST(SLoadConstrainingTest, Interactions)
103 NiceMock<MockFieldGreaterThan>
field_gt;
104 NiceMock<MockMerkleCheck> merkle_check;
107 NiceMock<MockLowLevelMerkleDB> low_level_merkle_db;
108 NiceMock<MockNullifierTreeCheck> nullifier_tree_check;
109 NiceMock<MockNoteHashTreeCheck> note_hash_tree_check;
110 NiceMock<MockL1ToL2MessageTreeCheck> l1_to_l2_message_tree_check;
112 EventEmitter<PublicDataTreeCheckEvent> public_data_tree_check_event_emitter;
113 PublicDataTreeCheck public_data_tree_check(
120 public_data_tree_check,
121 nullifier_tree_check,
122 note_hash_tree_check,
123 written_public_data_slots_tree_check,
124 l1_to_l2_message_tree_check);
127 trees.public_data_tree.root = 42;
128 EXPECT_CALL(low_level_merkle_db, get_tree_roots()).WillRepeatedly(Return(trees));
132 TestTraceContainer
trace({
133 { { C::execution_sel_execute_sload, 1 },
134 { C::execution_register_0_,
slot },
135 { C::execution_register_1_,
value },
136 { C::execution_mem_tag_reg_0_,
static_cast<uint8_t
>(
MemoryTag::FF) },
137 { C::execution_mem_tag_reg_1_,
static_cast<uint8_t
>(
MemoryTag::FF) },
140 { C::execution_prev_public_data_tree_root, trees.public_data_tree.root } },
143 PublicDataTreeTraceBuilder public_data_tree_trace_builder;
144 public_data_tree_trace_builder.process(public_data_tree_check_event_emitter.dump_events(),
trace);
146 check_relation<sload>(trace);
147 check_interaction<ExecutionTraceBuilder, lookup_sload_storage_read_settings>(trace);
FieldGreaterThan field_gt
#define AVM_EXEC_OP_ID_SLOAD
StrictMock< MockHighLevelMerkleDB > merkle_db
static constexpr size_t SR_INFALLIBLE_OPCODES_SUCCESS
ExecutionIdManager execution_id_manager
AztecAddress contract_address
#define EXPECT_THROW_WITH_MESSAGE(code, expectedMessage)
TEST(TxExecutionConstrainingTest, WriteTreeValue)
std::variant< PublicDataTreeReadWriteEvent, CheckPointEventType > PublicDataTreeCheckEvent
crypto::Poseidon2< crypto::Poseidon2Bn254ScalarFieldParams > poseidon2
NiceMock< MockExecution > execution
NiceMock< MockWrittenPublicDataSlotsTreeCheck > written_public_data_slots_tree_check