1#include <gmock/gmock.h>
2#include <gtest/gtest.h>
25using ::testing::StrictMock;
27using tracegen::BytecodeTraceBuilder;
28using tracegen::ClassIdDerivationTraceBuilder;
29using tracegen::Poseidon2TraceBuilder;
30using tracegen::TestTraceContainer;
32using simulation::ClassIdDerivation;
33using simulation::ClassIdDerivationEvent;
35using simulation::EventEmitter;
36using simulation::MockExecutionIdManager;
37using simulation::MockGreaterThan;
38using simulation::NoopEventEmitter;
39using simulation::Poseidon2;
40using simulation::Poseidon2HashEvent;
41using simulation::Poseidon2PermutationEvent;
42using simulation::Poseidon2PermutationMemoryEvent;
43using simulation::PurePoseidon2;
49ContractClass generate_contract_class()
51 return ContractClass{ .artifact_hash = FF::random_element(),
52 .private_function_root = FF::random_element(),
53 .public_bytecode_commitment = FF::random_element(),
54 .packed_bytecode = {} };
57TEST(ClassIdDerivationConstrainingTest, EmptyRow)
62TEST(ClassIdDerivationConstrainingTest, Basic)
64 TestTraceContainer
trace;
65 ClassIdDerivationTraceBuilder
builder;
67 auto klass = generate_contract_class();
74 check_relation<class_id_derivation_relation>(
trace);
77TEST(ClassIdDerivationPoseidonTest, WithHashInteraction)
83 StrictMock<MockGreaterThan>
mock_gt;
90 auto klass = generate_contract_class();
94 TestTraceContainer
trace({
95 { { C::precomputed_first_row, 1 } },
98 ClassIdDerivationTraceBuilder
builder;
101 class_id_derivation.assert_derivation(
class_id, klass);
112TEST(ClassIdDerivationPoseidonTest, WithRetrievalInteraction)
114 PurePoseidon2
poseidon2 = PurePoseidon2();
119 auto klass = generate_contract_class();
123 TestTraceContainer
trace({
124 { { C::precomputed_first_row, 1 } },
127 ClassIdDerivationTraceBuilder
builder;
128 BytecodeTraceBuilder bc_trace_builder;
130 class_id_derivation.assert_derivation(
class_id, klass);
133 bc_trace_builder.process_retrieval({ { .bytecode_id = klass.public_bytecode_commitment,
136 .contract_class = klass,
137 .nullifier_root = 3 } },
140 check_interaction<BytecodeTraceBuilder, lookup_bc_retrieval_class_id_derivation_settings>(
trace);
StrictMock< MockGreaterThan > mock_gt
EventEmitter< Poseidon2PermutationMemoryEvent > perm_mem_event_emitter
EventEmitter< Poseidon2PermutationEvent > perm_event_emitter
EventEmitter< Poseidon2HashEvent > hash_event_emitter
Poseidon2TraceBuilder poseidon2_builder
void process(const simulation::EventEmitterInterface< simulation::AluEvent >::Container &events, TraceContainer &trace)
void process_hash(const simulation::EventEmitterInterface< simulation::Poseidon2HashEvent >::Container &hash_events, TraceContainer &trace)
Implements a parallelized batch insertion indexed tree Accepts template argument of the type of store...
ExecutionIdManager execution_id_manager
EventEmitter< DataCopyEvent > event_emitter
void check_interaction(tracegen::TestTraceContainer &trace)
TEST(TxExecutionConstrainingTest, WriteTreeValue)
FF compute_contract_class_id(const FF &artifact_hash, const FF &private_fn_root, const FF &public_bytecode_commitment)
TestTraceContainer empty_trace()
lookup_settings< lookup_class_id_derivation_class_id_poseidon2_1_settings_ > lookup_class_id_derivation_class_id_poseidon2_1_settings
lookup_settings< lookup_class_id_derivation_class_id_poseidon2_0_settings_ > lookup_class_id_derivation_class_id_poseidon2_0_settings