1#include <gmock/gmock.h>
2#include <gtest/gtest.h>
28using simulation::EventEmitter;
29using simulation::FakePoseidon2;
30using simulation::L1ToL2MessageTreeCheck;
31using simulation::MerkleCheck;
32using simulation::MerkleCheckEvent;
35using tracegen::L1ToL2MessageTreeCheckTraceBuilder;
36using tracegen::MerkleCheckTraceBuilder;
37using tracegen::TestTraceContainer;
44TEST(L1ToL2MessageTreeCheckConstrainingTests, PositiveExists)
46 FakePoseidon2
poseidon2 = FakePoseidon2();
48 EventEmitter<MerkleCheckEvent> merkle_event_emitter;
49 MerkleCheck merkle_check(
poseidon2, merkle_event_emitter);
51 EventEmitter<simulation::L1ToL2MessageTreeCheckEvent> l1_to_l2_message_tree_check_event_emitter;
52 L1ToL2MessageTreeCheck l1_to_l2_message_tree_check(merkle_check, l1_to_l2_message_tree_check_event_emitter);
54 TestTraceContainer
trace({ { { C::precomputed_first_row, 1 } } });
55 MerkleCheckTraceBuilder merkle_check_builder;
56 L1ToL2MessageTreeCheckTraceBuilder l1_to_l2_message_tree_check_builder;
60 uint64_t leaf_index = 30;
61 std::vector<FF> sibling_path;
64 sibling_path.emplace_back(i);
69 l1_to_l2_message_tree_check.exists(msg_hash,
73 AppendOnlyTreeSnapshot{ .root = root, .nextAvailableLeafIndex = 128 }));
75 l1_to_l2_message_tree_check_builder.process(l1_to_l2_message_tree_check_event_emitter.dump_events(),
trace);
76 merkle_check_builder.process(merkle_event_emitter.dump_events(),
trace);
78 check_relation<l1_to_l2_message_tree_check_relations>(
trace);
79 check_all_interactions<L1ToL2MessageTreeCheckTraceBuilder>(
trace);
82TEST(L1ToL2MessageTreeCheckConstrainingTests, PositiveNotExists)
84 FakePoseidon2
poseidon2 = FakePoseidon2();
86 EventEmitter<MerkleCheckEvent> merkle_event_emitter;
87 MerkleCheck merkle_check(
poseidon2, merkle_event_emitter);
89 EventEmitter<simulation::L1ToL2MessageTreeCheckEvent> l1_to_l2_message_tree_check_event_emitter;
90 L1ToL2MessageTreeCheck l1_to_l2_message_tree_check(merkle_check, l1_to_l2_message_tree_check_event_emitter);
92 TestTraceContainer
trace({ { { C::precomputed_first_row, 1 } } });
93 MerkleCheckTraceBuilder merkle_check_builder;
94 L1ToL2MessageTreeCheckTraceBuilder l1_to_l2_message_tree_check_builder;
96 FF requested_msg_hash = 42;
97 FF actual_leaf_value = 43;
99 uint64_t leaf_index = 30;
100 std::vector<FF> sibling_path;
103 sibling_path.emplace_back(i);
108 l1_to_l2_message_tree_check.exists(requested_msg_hash,
112 AppendOnlyTreeSnapshot{ .root = root, .nextAvailableLeafIndex = 128 }));
114 l1_to_l2_message_tree_check_builder.process(l1_to_l2_message_tree_check_event_emitter.dump_events(),
trace);
115 merkle_check_builder.process(merkle_event_emitter.dump_events(),
trace);
117 check_relation<l1_to_l2_message_tree_check_relations>(
trace);
118 check_all_interactions<L1ToL2MessageTreeCheckTraceBuilder>(
trace);
#define L1_TO_L2_MSG_TREE_HEIGHT
TEST(TxExecutionConstrainingTest, WriteTreeValue)
FF unconstrained_root_from_path(const FF &leaf_value, const uint64_t leaf_index, std::span< const FF > path)