1#include <gmock/gmock.h>
2#include <gtest/gtest.h>
30using simulation::EventEmitter;
31using simulation::L1ToL2MessageTreeCheck;
32using simulation::MerkleCheck;
33using simulation::MerkleCheckEvent;
34using simulation::PurePoseidon2;
37using tracegen::L1ToL2MessageTreeCheckTraceBuilder;
38using tracegen::MerkleCheckTraceBuilder;
39using tracegen::TestTraceContainer;
46TEST(L1ToL2MessageTreeCheckConstrainingTests, PositiveExists)
48 PurePoseidon2
poseidon2 = PurePoseidon2();
50 EventEmitter<MerkleCheckEvent> merkle_event_emitter;
53 EventEmitter<simulation::L1ToL2MessageTreeCheckEvent> l1_to_l2_message_tree_check_event_emitter;
54 L1ToL2MessageTreeCheck l1_to_l2_message_tree_check(merkle_check, l1_to_l2_message_tree_check_event_emitter);
56 TestTraceContainer
trace({ { { C::precomputed_first_row, 1 } } });
57 MerkleCheckTraceBuilder merkle_check_builder;
58 L1ToL2MessageTreeCheckTraceBuilder l1_to_l2_message_tree_check_builder;
62 uint64_t leaf_index = 30;
63 std::vector<FF> sibling_path;
66 sibling_path.emplace_back(i);
71 l1_to_l2_message_tree_check.exists(msg_hash,
75 AppendOnlyTreeSnapshot{ .root = root, .next_available_leaf_index = 128 }));
77 l1_to_l2_message_tree_check_builder.process(l1_to_l2_message_tree_check_event_emitter.dump_events(), trace);
78 merkle_check_builder.process(merkle_event_emitter.dump_events(), trace);
80 check_relation<l1_to_l2_message_tree_check_relations>(trace);
81 check_all_interactions<L1ToL2MessageTreeCheckTraceBuilder>(trace);
84TEST(L1ToL2MessageTreeCheckConstrainingTests, PositiveNotExists)
86 PurePoseidon2
poseidon2 = PurePoseidon2();
88 EventEmitter<MerkleCheckEvent> merkle_event_emitter;
91 EventEmitter<simulation::L1ToL2MessageTreeCheckEvent> l1_to_l2_message_tree_check_event_emitter;
92 L1ToL2MessageTreeCheck l1_to_l2_message_tree_check(merkle_check, l1_to_l2_message_tree_check_event_emitter);
94 TestTraceContainer
trace({ { { C::precomputed_first_row, 1 } } });
95 MerkleCheckTraceBuilder merkle_check_builder;
96 L1ToL2MessageTreeCheckTraceBuilder l1_to_l2_message_tree_check_builder;
98 FF requested_msg_hash = 42;
99 FF actual_leaf_value = 43;
101 uint64_t leaf_index = 30;
102 std::vector<FF> sibling_path;
105 sibling_path.emplace_back(i);
110 l1_to_l2_message_tree_check.exists(requested_msg_hash,
114 AppendOnlyTreeSnapshot{ .root = root, .next_available_leaf_index = 128 }));
116 l1_to_l2_message_tree_check_builder.process(l1_to_l2_message_tree_check_event_emitter.dump_events(), trace);
117 merkle_check_builder.process(merkle_event_emitter.dump_events(), trace);
119 check_relation<l1_to_l2_message_tree_check_relations>(trace);
120 check_all_interactions<L1ToL2MessageTreeCheckTraceBuilder>(trace);
123TEST(L1ToL2MessageTreeCheckConstrainingTests, NegativeWrongMerkleHashSeparator)
125 TestTraceContainer
trace({ {
126 { C::l1_to_l2_message_tree_check_sel, 1 },
130 check_relation<l1_to_l2_message_tree_check_relations>(
131 trace, l1_to_l2_message_tree_check_relations::SR_MERKLE_HASH_SEPARATOR_CONSTANT);
137 trace, l1_to_l2_message_tree_check_relations::SR_MERKLE_HASH_SEPARATOR_CONSTANT),
138 "MERKLE_HASH_SEPARATOR_CONSTANT");
#define EXPECT_THROW_WITH_MESSAGE(code, expectedMessageRegex)
#define DOM_SEP__MERKLE_HASH
#define L1_TO_L2_MSG_TREE_HEIGHT
#define DOM_SEP__NULLIFIER_MERKLE
void set(Column col, uint32_t row, const FF &value)
TEST(AvmFixedVKTests, FixedVKCommitments)
Test that the fixed VK commitments agree with the ones computed from precomputed columns.
FF unconstrained_root_from_path(uint64_t domain_separator, const FF &leaf_value, const uint64_t leaf_index, std::span< const FF > path)